container = $container; $this->database = $this->container->get( Database::class ); register_activation_hook( BETTERDOCS_PLUGIN_FILE, [ $this, 'activate' ] ); register_deactivation_hook( BETTERDOCS_PLUGIN_FILE, [ $this, 'deactivate' ] ); //Update message for showing notice for new release add_action( 'in_plugin_update_message-betterdocs/betterdocs.php', [ $this, 'plugin_update_message' ], 10, 2 ); add_action( 'init', [ $this, 'check_db_updates' ], 1 ); add_action( 'init', [ $this, 'check_version' ], 5 ); } /** * This is for upgrade message. * * @param mixed $plugin_data * @param mixed $response * @return void */ public function plugin_update_message( $plugin_data, $response ) { if ( isset( $response->upgrade_notice ) ) { $new_version = $plugin_data['new_version']; $current_version = betterdocs()->version; $current_version_minor_part = explode( '.', $current_version )[1]; $new_version_minor_part = explode( '.', $new_version )[1]; betterdocs()->views->get( 'admin/notices/upgrade', [ 'response' => $response, 'plugin_data' => $plugin_data, 'major' => ! ( $current_version_minor_part === $new_version_minor_part ) ] ); } } /** * This method will run when version is updated. * @return void */ public function check_version() { $betterdocs_version = get_option( 'betterdocs_version', '2.3.6' ); $betterdocs_code_version = betterdocs()->version; $requires_update = version_compare( $betterdocs_version, $betterdocs_code_version, '<' ); if ( $requires_update ) { /** * This block of codes will execute * if this plugin is activated via PRO PLUGIN. */ if ( $this->database->get_transient( 'maybe_betterdocs_installed_by_pro' ) ) { $this->activate(); $this->database->delete_transient( 'maybe_betterdocs_installed_by_pro' ); } // Re-check if any setup needed. $this->check_db_updates(); if ( get_option( 'betterdocs_version' ) && str_replace( '.', '', $betterdocs_code_version ) >= 370 ) { $this->migrate_customizer(); } // Re-check if any migration is needed. $this->container->get( Migration::class )->init( str_replace( '.', '', $betterdocs_code_version ) ); // Updated current version number of plugin. $this->update_version(); } } /** * Update BetterDocs version to current. */ private function update_version() { update_option( 'betterdocs_version', betterdocs()->version ); } /** * This method will run when activation hit * @return void */ public function activate() { // Create DB Tables if not created. $this->check_db_updates(); // Set admin roles $this->container->get( Roles::class )->setup(); // Save default settings. // $this->container->get( Settings::class )->save_default_settings(); // Set redirect transient if ( current_user_can( 'delete_users' ) ) { $this->database->set_transient( 'betterdocs_maybe_redirect', true ); } $this->database->set_transient( 'betterdocs_flush_rewrite_rules', true ); } /** * This method will run when deactivation hit. * @return void */ public function deactivate() { // Flush all the existing rewrite rules flush_rewrite_rules(); // Reset admin roles $this->container->get( Roles::class )->setup( true ); } /** * This method responsible for setup db tables for the plugin * @return void */ public function check_db_updates() { $_db_version = get_option( 'betterdocs_db_version', '1.0' ); $_db_code_version = betterdocs()->db_version; $requires_update = version_compare( $_db_version, $_db_code_version, '<' ); if ( ! $requires_update ) { return; } global $wpdb; $charset_collate = $wpdb->get_charset_collate(); $search_keyword_table = $wpdb->prefix . 'betterdocs_search_keyword'; $search_keyword = "CREATE TABLE $search_keyword_table ( id bigint NOT NULL AUTO_INCREMENT, keyword text NOT NULL, PRIMARY KEY (id) ) {$charset_collate};"; $search_log_table = $wpdb->prefix . 'betterdocs_search_log'; $search_log = "CREATE TABLE $search_log_table ( id bigint NOT NULL AUTO_INCREMENT, keyword_id bigint NOT NULL, count mediumint(9) NULL, not_found_count mediumint(9) NULL, created_at date DEFAULT '0000-00-00' NOT NULL, PRIMARY KEY (id), KEY keyword_id (keyword_id), KEY created_at (created_at) ) {$charset_collate};"; $_analytics_table = $wpdb->prefix . 'betterdocs_analytics'; $analytics_table = "CREATE TABLE $_analytics_table ( id bigint NOT NULL AUTO_INCREMENT, post_id bigint DEFAULT 0 NOT NULL, impressions bigint DEFAULT 0 NOT NULL, unique_visit bigint DEFAULT 0 NOT NULL, happy bigint DEFAULT 0 NOT NULL, sad bigint DEFAULT 0 NOT NULL, normal bigint DEFAULT 0 NOT NULL, created_at date DEFAULT '0000-00-00' NOT NULL, PRIMARY KEY (id), KEY post_id (post_id), KEY impressions (impressions), KEY unique_visit (unique_visit), KEY happy (happy), KEY sad (sad), KEY normal (normal), KEY created_at (created_at) ) {$charset_collate};"; require_once ABSPATH . 'wp-admin/includes/upgrade.php'; dbDelta( $search_keyword . $search_log . $analytics_table ); // Update DB Version update_option( 'betterdocs_db_version', $_db_code_version ); } public function migrate_customizer() { $search_layout = get_theme_mod( 'betterdocs_search_layout_select' ); if ( empty( $search_layout ) ) { set_theme_mod( 'betterdocs_search_layout_select', 'layout-1' ); } $search_heading = get_theme_mod( 'betterdocs_live_search_heading_switch' ); if ( empty( $search_heading ) ) { set_theme_mod( 'betterdocs_live_search_heading_switch', false ); } $docs_layout = get_theme_mod( 'betterdocs_docs_layout_select' ); if ( empty( $docs_layout ) ) { set_theme_mod( 'betterdocs_docs_layout_select', 'layout-1' ); } $single_layout = get_theme_mod( 'betterdocs_single_layout_select' ); if ( empty( $single_layout ) ) { set_theme_mod( 'betterdocs_single_layout_select', 'layout-1' ); } $category_archive_layout = get_theme_mod( 'betterdocs_archive_layout_select' ); if ( empty( $category_archive_layout ) ) { set_theme_mod( 'betterdocs_archive_layout_select', 'layout-1' ); } $search_layout_select = get_theme_mod( 'betterdocs_search_layout_select' ); if ( empty( $search_layout_select ) ) { set_theme_mod( 'betterdocs_search_layout_select', 'layout-1' ); } $docs_faq = get_theme_mod( 'betterdocs_select_faq_template' ); if ( empty( $docs_faq ) ) { set_theme_mod( 'betterdocs_select_faq_template', 'layout-1' ); } if ( get_option( 'betterdocs_settings' ) && betterdocs()->settings->get( 'enable_estimated_reading_time' ) == false ) { betterdocs()->settings->save( 'enable_estimated_reading_time', false ); } if ( function_exists( 'betterdocs_pro' ) ) { $mkb_layout = get_theme_mod( 'betterdocs_multikb_layout_select' ); if ( empty( $mkb_layout ) ) { set_theme_mod( 'betterdocs_multikb_layout_select', 'layout-1' ); } $mkb_faq = get_theme_mod( 'betterdocs_select_faq_template_mkb' ); if ( empty( $mkb_faq ) ) { set_theme_mod( 'betterdocs_select_faq_template_mkb', 'layout-1' ); } } } }