You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
197 lines
5.0 KiB
PHP
197 lines
5.0 KiB
PHP
<?php
|
|
/**
|
|
* Plugin activation and deactivation functionality.
|
|
*
|
|
* This class defines all code necessary to run during the plugin's activation.
|
|
*
|
|
* @since 2.0.0
|
|
* @package RankMathPro
|
|
* @subpackage RankMathPro
|
|
* @author Rank Math <support@rankmath.com>
|
|
*/
|
|
|
|
namespace RankMathPro;
|
|
|
|
use RankMath\Helper;
|
|
use RankMath\Analytics\Workflow\Workflow;
|
|
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
/**
|
|
* Installer class.
|
|
*/
|
|
class Installer {
|
|
|
|
/**
|
|
* Bind all events.
|
|
*/
|
|
public function __construct() {
|
|
register_activation_hook( RANK_MATH_PRO_FILE, [ $this, 'activation' ] );
|
|
register_deactivation_hook( RANK_MATH_PRO_FILE, [ $this, 'deactivation' ] );
|
|
|
|
add_action( 'wpmu_new_blog', [ $this, 'activate_blog' ] );
|
|
add_action( 'activate_blog', [ $this, 'activate_blog' ] );
|
|
add_filter( 'wpmu_drop_tables', [ $this, 'on_delete_blog' ] );
|
|
}
|
|
|
|
/**
|
|
* Do things when activating Rank Math.
|
|
*
|
|
* @param bool $network_wide Whether the plugin is being activated network-wide.
|
|
*/
|
|
public function activation( $network_wide = false ) {
|
|
if ( ! is_multisite() || ! $network_wide ) {
|
|
$this->activate();
|
|
return;
|
|
}
|
|
|
|
$this->network_activate_deactivate( true );
|
|
}
|
|
|
|
/**
|
|
* Do things when deactivating Rank Math.
|
|
*
|
|
* @param bool $network_wide Whether the plugin is being activated network-wide.
|
|
*/
|
|
public function deactivation( $network_wide = false ) {
|
|
if ( ! is_multisite() || ! $network_wide ) {
|
|
$this->deactivate();
|
|
return;
|
|
}
|
|
|
|
$this->network_activate_deactivate( false );
|
|
}
|
|
|
|
/**
|
|
* Fired when a new site is activated with a WPMU environment.
|
|
*
|
|
* @param int $blog_id ID of the new blog.
|
|
*/
|
|
public function activate_blog( $blog_id ) {
|
|
if ( 1 !== did_action( 'wpmu_new_blog' ) ) {
|
|
return;
|
|
}
|
|
|
|
switch_to_blog( $blog_id );
|
|
$this->activate();
|
|
restore_current_blog();
|
|
}
|
|
|
|
/**
|
|
* Uninstall tables when MU blog is deleted.
|
|
*
|
|
* @param array $tables List of tables that will be deleted by WP.
|
|
* @return array
|
|
*/
|
|
public function on_delete_blog( $tables ) {
|
|
global $wpdb;
|
|
|
|
$tables[] = $wpdb->prefix . 'rank_math_analytics_ga';
|
|
$tables[] = $wpdb->prefix . 'rank_math_analytics_adsense';
|
|
$tables[] = $wpdb->prefix . 'rank_math_analytics_keyword_manager';
|
|
|
|
return $tables;
|
|
}
|
|
|
|
/**
|
|
* Run network-wide activation/deactivation of the plugin.
|
|
*
|
|
* @param bool $activate True for plugin activation, false for de-activation.
|
|
*
|
|
* Forked from Yoast (https://github.com/Yoast/wordpress-seo/)
|
|
*/
|
|
private function network_activate_deactivate( $activate ) {
|
|
global $wpdb;
|
|
|
|
$blog_ids = $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs WHERE archived = '0' AND spam = '0' AND deleted = '0'" );
|
|
if ( empty( $blog_ids ) ) {
|
|
return;
|
|
}
|
|
|
|
foreach ( $blog_ids as $blog_id ) {
|
|
$func = true === $activate ? 'activate' : 'deactivate';
|
|
|
|
switch_to_blog( $blog_id );
|
|
$this->$func();
|
|
restore_current_blog();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Runs on activation of the plugin.
|
|
*/
|
|
private function activate() {
|
|
\RankMathPro\Admin\Api::get()->get_settings();
|
|
$this->create_options();
|
|
|
|
// Add Analytics Installer.
|
|
Workflow::do_workflow( 'analytics', 90, null, null );
|
|
Workflow::do_workflow( 'adsense', 90, null, null );
|
|
|
|
// Add action for scheduler.
|
|
if ( function_exists( 'as_unschedule_all_actions' ) ) {
|
|
$task_name = 'rank_math/analytics/data_fetch';
|
|
|
|
if ( false === as_next_scheduled_action( $task_name ) ) {
|
|
$fetch_gap = 3;
|
|
$schedule_in_minute = wp_rand( 3, 1380 );
|
|
$time_to_schedule = ( strtotime( 'tomorrow' ) + ( $schedule_in_minute * MINUTE_IN_SECONDS ) );
|
|
|
|
as_schedule_recurring_action(
|
|
$time_to_schedule,
|
|
DAY_IN_SECONDS * $fetch_gap,
|
|
$task_name,
|
|
[],
|
|
'rank-math'
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Runs on deactivation of the plugin.
|
|
*/
|
|
private function deactivate() {}
|
|
|
|
/**
|
|
* Add default values.
|
|
*/
|
|
private function create_options() {
|
|
$all_opts = rank_math()->settings->all_raw();
|
|
$general = $all_opts['general'];
|
|
$sitemap = $all_opts['sitemap'];
|
|
if ( empty( $sitemap['video_sitemap_post_type'] ) ) {
|
|
$sitemap['video_sitemap_post_type'] = array_values( Helper::get_accessible_post_types() );
|
|
}
|
|
|
|
if ( empty( $general['google_updates'] ) ) {
|
|
$general['google_updates'] = 'on';
|
|
}
|
|
|
|
if ( empty( $general['auto_add_focus_keywords'] ) ) {
|
|
$general['auto_add_focus_keywords'] = [
|
|
'enable_auto_import' => 1,
|
|
'post_types' => [ 'post', 'page' ],
|
|
];
|
|
}
|
|
|
|
if ( empty( $general['noindex_hidden_products'] ) ) {
|
|
$general['noindex_hidden_products'] = 'on';
|
|
}
|
|
|
|
$podcast_options = [
|
|
'podcast_title' => '%sitename%',
|
|
'podcast_description' => '%sitedesc%',
|
|
'podcast_explicit' => 'off',
|
|
];
|
|
|
|
foreach ( $podcast_options as $key => $value ) {
|
|
if ( empty( $general[ $key ] ) ) {
|
|
$general[ $key ] = $value;
|
|
}
|
|
}
|
|
|
|
Helper::update_all_settings( $general, null, $sitemap );
|
|
}
|
|
}
|