You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

219 lines
7.0 KiB

8 years ago
<?php
/**
* Handles detection of new plugin version updates.
*
* Handles detection of new plugin version updates, migration of old settings,
* new WP core feature support, etc.
* AIOSEOP Updates class.
*
* @package All-in-One-SEO-Pack.
*/
class AIOSEOP_Updates {
/**
* Constructor
*
*/
function __construct() {
}
/**
* Updates version.
*
* @global $aiosp , $aioseop_options.
* @return null
*/
function version_updates() {
global $aiosp, $aioseop_options;
if ( empty( $aioseop_options ) ) {
$aioseop_options = get_option( $aioseop_options );
if ( empty( $aioseop_options ) ) {
// Something's wrong. bail.
return;
}
}
// Last known running plugin version.
$last_active_version = '0.0';
if ( isset( $aioseop_options['last_active_version'] ) ) {
$last_active_version = $aioseop_options['last_active_version'];
}
// Compares version to see which one is the newer.
if ( version_compare( $last_active_version, AIOSEOP_VERSION, '<' ) ) {
// Upgrades based on previous version.
do_action( 'before_doing_aioseop_updates' );
$this->do_version_updates( $last_active_version );
do_action( 'after_doing_aioseop_updates' );
// If we're running Pro, let the Pro updater set the version.
if ( ! AIOSEOPPRO ) {
// Save the current plugin version as the new last_active_version.
$aioseop_options['last_active_version'] = AIOSEOP_VERSION;
$aiosp->update_class_option( $aioseop_options );
}
if( ! is_network_admin() || !isset( $_GET['activate-multi'] ) ) {
// Replace this to reactivate update welcome screen.
8 years ago
//set_transient( '_aioseop_activation_redirect', true, 30 ); // Sets 30 second transient for welcome screen redirect on activation.
}
delete_transient( 'aioseop_feed' );
add_action( 'admin_init', array( $this, 'aioseop_welcome' ) );
8 years ago
}
/**
* Perform updates that are dependent on external factors, not
* just the plugin version.
*/
$this->do_feature_updates();
}
function aioseop_welcome(){
if ( get_transient( '_aioseop_activation_redirect' ) ) {
delete_transient( '_aioseop_activation_redirect' );
//$aioseop_welcome = new aioseop_welcome();
//$aioseop_welcome->init( TRUE );
8 years ago
}
}
/**
* Updates version.
*
* TODO: the compare here should be extracted into a function
*
* @global $aioseop_options .
*
* @param String $old_version
*/
function do_version_updates( $old_version ) {
global $aioseop_options;
if (
( ! AIOSEOPPRO && version_compare( $old_version, '2.3.3', '<' ) ) ||
( AIOSEOPPRO && version_compare( $old_version, '2.4.3', '<' ) )
) {
$this->bad_bots_201603();
}
if (
( ! AIOSEOPPRO && version_compare( $old_version, '2.3.4.1', '<' ) ) ||
( AIOSEOPPRO && version_compare( $old_version, '2.4.4.1', '<' ) )
) {
$this->bad_bots_remove_yandex_201604();
}
if (
( ! AIOSEOPPRO && version_compare( $old_version, '2.3.9', '<' ) ) ||
( AIOSEOPPRO && version_compare( $old_version, '2.4.9', '<' ) )
) {
$this->bad_bots_remove_seznambot_201608();
set_transient( '_aioseop_activation_redirect', true, 30 ); // Sets 30 second transient for welcome screen redirect on activation.
}
}
/**
* Removes overzealous 'DOC' entry which is causing false-positive bad
* bot blocking.
*
* @since 2.3.3
* @global $aiosp , $aioseop_options.
*/
function bad_bots_201603() {
global $aiosp, $aioseop_options;
// Remove 'DOC' from bad bots list to avoid false positives.
if ( isset( $aioseop_options['modules']['aiosp_bad_robots_options']['aiosp_bad_robots_blocklist'] ) ) {
$list = $aioseop_options['modules']['aiosp_bad_robots_options']['aiosp_bad_robots_blocklist'];
$list = str_replace( array(
"DOC\r\n",
"DOC\n",
), '', $list );
$aioseop_options['modules']['aiosp_bad_robots_options']['aiosp_bad_robots_blocklist'] = $list;
update_option( 'aioseop_options', $aioseop_options );
$aiosp->update_class_option( $aioseop_options );
}
}
/*
* Functions for specific version milestones.
*/
/**
* Remove 'yandex' entry. This is a major Russian search engine, and no longer needs to be blocked.
*
* @since 2.3.4.1
* @global $aiosp , $aioseop_options.
*/
function bad_bots_remove_yandex_201604() {
global $aiosp, $aioseop_options;
// Remove 'yandex' from bad bots list to avoid false positives.
if ( isset( $aioseop_options['modules']['aiosp_bad_robots_options']['aiosp_bad_robots_blocklist'] ) ) {
$list = $aioseop_options['modules']['aiosp_bad_robots_options']['aiosp_bad_robots_blocklist'];
$list = str_replace( array(
"yandex\r\n",
"yandex\n",
), '', $list );
$aioseop_options['modules']['aiosp_bad_robots_options']['aiosp_bad_robots_blocklist'] = $list;
update_option( 'aioseop_options', $aioseop_options );
$aiosp->update_class_option( $aioseop_options );
}
}
/**
* Remove 'SeznamBot' entry.
*
* @since 2.3.8
* @global $aiosp , $aioseop_options.
*/
function bad_bots_remove_seznambot_201608() {
global $aiosp, $aioseop_options;
// Remove 'SeznamBot' from bad bots list to avoid false positives.
if ( isset( $aioseop_options['modules']['aiosp_bad_robots_options']['aiosp_bad_robots_blocklist'] ) ) {
$list = $aioseop_options['modules']['aiosp_bad_robots_options']['aiosp_bad_robots_blocklist'];
$list = str_replace( array(
"SeznamBot\r\n",
"SeznamBot\n",
), '', $list );
$aioseop_options['modules']['aiosp_bad_robots_options']['aiosp_bad_robots_blocklist'] = $list;
update_option( 'aioseop_options', $aioseop_options );
$aiosp->update_class_option( $aioseop_options );
}
}
/**
* Updates features.
*
* @return null
*
* if ( ! ( isset( $aioseop_options['version_feature_flags']['FEATURE_NAME'] ) &&
* $aioseop_options['version_feature_flags']['FEATURE_NAME'] === 'yes' ) ) {
* $this->some_feature_update_method(); // sets flag to 'yes' on completion.
*/
public function do_feature_updates() {
global $aioseop_options;
// We don't need to check all the time. Use a transient to limit frequency.
if ( get_site_transient( 'aioseop_update_check_time' ) ) {
return;
}
// If we're running Pro, let the Pro updater set the transient.
if ( ! AIOSEOPPRO ) {
// We haven't checked recently. Reset the timestamp, timeout 6 hours.
set_site_transient(
'aioseop_update_check_time',
time(),
apply_filters( 'aioseop_update_check_time', 3600 * 6 )
);
}
}
}