Ejemplo n.º 1
0
 /**
  * Check plugin requirements.
  *
  * @return bool True is fails requirements. False otherwise.
  */
 public function maybe_self_deactivate()
 {
     require_once HMBKP_PLUGIN_PATH . 'classes/class-setup.php';
     if (false === \HMBKP_Setup::meets_requirements()) {
         add_action('admin_init', array('\\HMBKP_Setup', 'self_deactivate'));
         add_action('all_admin_notices', array('\\HMBKP_Setup', 'display_admin_notices'));
         return true;
     }
     return false;
 }
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/
// Only load if >= PHP 5.3
if (!defined('HMBKP_PLUGIN_PATH')) {
    define('HMBKP_PLUGIN_PATH', plugin_dir_path(__FILE__));
}
if (!defined('HMBKP_BASENAME')) {
    define('HMBKP_BASENAME', plugin_basename(__FILE__));
}
require_once HMBKP_PLUGIN_PATH . 'classes/class-setup.php';
register_activation_hook(__FILE__, array('HMBKP_Setup', 'activate'));
register_deactivation_hook(__FILE__, array('HMBKP_Setup', 'deactivate'));
if (HMBKP_Setup::meets_requirements()) {
    require_once HMBKP_PLUGIN_PATH . 'classes/class-plugin.php';
} else {
    add_action('admin_init', array('HMBKP_Setup', 'self_deactivate'));
    add_action('all_admin_notices', array('HMBKP_Setup', 'display_admin_notices'));
}
/**
 * Handles anything that needs to be
 * done when the plugin is updated
 */
function update()
{
    // Update from backUpWordPress 0.4.5
    if (get_option('bkpwp_max_backups')) {
        // Carry over the custom path
        if ($legacy_path = get_option('bkpwppath')) {
            update_option('hmbkp_path', $legacy_path);
        }
        // Options to remove
        $legacy_options = array('bkpwp_archive_types', 'bkpwp_automail_from', 'bkpwp_domain', 'bkpwp_domain_path', 'bkpwp_easy_mode', 'bkpwp_excludelists', 'bkpwp_install_user', 'bkpwp_listmax_backups', 'bkpwp_max_backups', 'bkpwp_presets', 'bkpwp_reccurrences', 'bkpwp_schedules', 'bkpwp_calculation', 'bkpwppath', 'bkpwp_status_config', 'bkpwp_status');
        foreach ($legacy_options as $option) {
            delete_option($option);
        }
        global $wp_roles;
        $wp_roles->remove_cap('administrator', 'manage_backups');
        $wp_roles->remove_cap('administrator', 'download_backups');
        wp_clear_scheduled_hook('bkpwp_schedule_bkpwp_hook');
    }
    // Version 1 to 2
    if (get_option('hmbkp_plugin_version') && version_compare('2.0', get_option('hmbkp_plugin_version'), '>')) {
        /**
         * Setup a backwards compatible schedule
         */
        $legacy_schedule = new Scheduled_Backup('backup');
        // Backup type
        if (defined('HMBKP_FILES_ONLY') && HMBKP_FILES_ONLY || get_option('hmbkp_files_only')) {
            $legacy_schedule->set_type('file');
        } elseif (defined('HMBKP_DATABASE_ONLY') && HMBKP_DATABASE_ONLY || get_option('hmbkp_database_only')) {
            $legacy_schedule->set_type('database');
        } else {
            $legacy_schedule->set_type('complete');
        }
        // Daily schedule time
        if (defined('HMBKP_DAILY_SCHEDULE_TIME') && HMBKP_DAILY_SCHEDULE_TIME) {
            $legacy_schedule->set_schedule_start_time(strtotime(HMBKP_DAILY_SCHEDULE_TIME));
        }
        // Backup schedule
        $legacy_schedule->set_reoccurrence(get_option('hmbkp_schedule_frequency', 'daily'));
        // Automatic backups disabled?
        if (defined('HMBKP_DISABLE_AUTOMATIC_BACKUP') && HMBKP_DISABLE_AUTOMATIC_BACKUP || get_option('hmbkp_disable_automatic_backup')) {
            $legacy_schedule->set_reoccurrence('manually');
        }
        // Max backups
        if (defined('HMBKP_MAX_BACKUPS') && is_numeric(HMBKP_MAX_BACKUPS)) {
            $legacy_schedule->set_max_backups((int) HMBKP_MAX_BACKUPS);
        } else {
            $legacy_schedule->set_max_backups((int) get_option('hmbkp_max_backups', 10));
        }
        // Excludes
        if (get_option('hmbkp_excludes')) {
            $legacy_schedule->set_excludes(get_option('hmbkp_excludes'));
        }
        // Backup email
        if (defined('HMBKP_EMAIL') && is_email(HMBKP_EMAIL)) {
            $legacy_schedule->set_service_options('HMBKP_Email_Service', array('email' => HMBKP_EMAIL));
        } elseif (is_email(get_option('hmbkp_email_address'))) {
            $legacy_schedule->set_service_options('HMBKP_Email_Service', array('email' => get_option('hmbkp_email_address')));
        }
        // Set the archive filename to what it used to be
        $legacy_schedule->backup_filename = implode('-', array(get_bloginfo('name'), 'backup', current_time('Y-m-d-H-i-s'))) . '.zip';
        $legacy_schedule->save();
        $legacy_path = get_option('hmbkp_path');
        if ($legacy_path) {
            // Prepend 'backup-' to the beginning of any legacy backups so they are picked up by the legacy schedule
            if ($handle = opendir($legacy_path)) {
                while (false !== ($file = readdir($handle))) {
                    if ('zip' === pathinfo($file, PATHINFO_EXTENSION)) {
                        rename(trailingslashit($legacy_path) . $file, trailingslashit($legacy_path) . 'backup-' . $file);
                    }
                }
                closedir($handle);
            }
            PATH::get_instance()->move_old_backups($legacy_path);
        }
        // Remove the legacy options
        foreach (array('hmbkp_database_only', 'hmbkp_files_only', 'hmbkp_max_backups', 'hmbkp_email_address', 'hmbkp_email', 'hmbkp_schedule_frequency', 'hmbkp_disable_automatic_backup') as $option_name) {
            delete_option($option_name);
        }
    }
    // Update from 2.x to 3.0
    if (get_option('hmbkp_plugin_version') && version_compare('2.0', get_option('hmbkp_plugin_version'), '>')) {
        // Remove the plugin data cache
        delete_transient('hmbkp_plugin_data');
    }
    // Update to 3.1
    if (get_option('hmbkp_plugin_version') && version_compare('3.0', get_option('hmbkp_plugin_version'), '>')) {
        // Remove the plugin data cache
        delete_option('hmbkp_path');
        delete_option('hmbkp_default_path');
    }
    // update to 3.1.4
    if (get_option('hmbkp_plugin_version') && version_compare('3.1.4', get_option('hmbkp_plugin_version'), '>')) {
        $old_option_names = array('HM\\BackUpWordPressDropbox\\Dropbox_Service' => 'dropbox', 'HMBKP_DX_Backup_Service' => 'dropbox', 'HM\\BackUpWordPressFTP\\FTP_Backup_Service' => 'ftp', 'HMBKP_FTP_Backup_Service' => 'ftp', 'HM\\BackUpWordPressGDrive\\Google_Drive_BackUp' => 'google-drive', 'HMBKP_GDV_Backup_Service' => 'google-drive', 'HM\\BackUpWordPressRackspace\\RackSpace_BackUp' => 'rackspace-cloud', 'HMBKP_RSC_Backup_Service' => 'rackspace-cloud', 'HM\\BackUpWordPressS3\\S3_Backup' => 's3', 'HMBKP_S3_Backup_Service' => 's3', 'HM\\BackUpWordPressWinAzure\\WinAzure_Backup' => 'azure', 'HMBKP_WAZ_Backup_Service' => 'azure', 'HM\\BackUpWordPress\\Email_Service' => 'email');
        global $wpdb;
        // Get all schedule options with a SELECT query and delete them.
        $schedules = $wpdb->get_col($wpdb->prepare("SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE %s", 'hmbkp_schedule_%'));
        if (0 < count($schedules)) {
            // Access each schedules settings to see if the addon settings names need to be be updated to the new naming convention which uses the service slug generated from the $name property.
            foreach ($schedules as $schedule_id) {
                // Load the settings for this schedule into an array
                // so we can loop through the different service settings
                $schedule_settings = get_option($schedule_id);
                // Iterate over each schedule setting for this schedule and check its name against our array.
                foreach ($schedule_settings as $key => $val) {
                    // Find the current element key in our control array and get its value. Set a new element in the settings array with the found value as its key. Aka rename the element key
                    if (array_key_exists($key, $old_option_names)) {
                        // move the value to our new key
                        $schedule_settings[$old_option_names[$key]] = $schedule_settings[$key];
                        unset($schedule_settings[$key]);
                    }
                }
                // Save back to the DB
                update_option($schedule_id, $schedule_settings);
            }
        }
    }
    // Update to 3.1.5
    if (get_option('hmbkp_plugin_version') && version_compare('3.1.5', get_option('hmbkp_plugin_version'), '>')) {
        // Delete all transients
        $transients = array('hmbkp_plugin_data', 'hmbkp_directory_filesizes', 'hmbkp_directory_filesizes_running', 'hmbkp_wp_cron_test_beacon', 'hm_backdrop');
        array_map('delete_transient', $transients);
        // Clear duplicate schedules on multisite
        if (is_multisite()) {
            // get current blogs from DB
            $blogs = wp_get_sites();
            foreach ($blogs as $blog) {
                switch_to_blog(get_current_blog_id());
                if (is_main_site(get_current_blog_id())) {
                    continue;
                }
                global $wpdb;
                // Get the schedule options
                $schedules = $wpdb->get_col($wpdb->prepare("SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE %s", 'hmbkp_schedule_%'));
                // clear schedules
                foreach (array_map(function ($item) {
                    return ltrim($item, 'hmbkp_schedule_');
                }, $schedules) as $item) {
                    wp_clear_scheduled_hook('hmbkp_schedule_hook', array('id' => $item));
                }
                // delete options
                array_map('delete_option', $schedules);
                array_map('delete_option', array('hmbkp_enable_support', 'hmbkp_plugin_version', 'hmbkp_path', 'hmbkp_default_path', 'hmbkp_upsell'));
                // Delete all transients
                array_map('delete_transient', array('hmbkp_plugin_data', 'hmbkp_directory_filesizes', 'hmbkp_directory_filesize_running', 'timeout_hmbkp_wp_cron_test_beacon', 'hmbkp_wp_cron_test_beacon'));
            }
            restore_current_blog();
        }
    }
    // Update from 3.3.0
    if (get_option('hmbkp_plugin_version') && version_compare('3.3.0', get_option('hmbkp_plugin_version'), '>')) {
        $schedules = Schedules::get_instance();
        // Loop through all schedules and re-set the reccurrence to include hmbkp_
        foreach ($schedules->get_schedules() as $schedule) {
            $reoccurrence = $schedule->get_reoccurrence();
            if ('manually' !== $reoccurrence && strpos($reoccurrence, 'hmbkp_') === 0) {
                $schedule->set_reoccurrence(substr($reoccurrence, 6));
            }
            $schedule->save();
        }
    }
    // Update from 3.3.4
    if (get_option('hmbkp_plugin_version') && version_compare('3.4.0', get_option('hmbkp_plugin_version'), '>')) {
        delete_transient('hmbkp_directory_filesizes');
    }
    // Every update
    if (get_option('hmbkp_plugin_version') && version_compare(Plugin::PLUGIN_VERSION, get_option('hmbkp_plugin_version'), '>')) {
        require_once HMBKP_PLUGIN_PATH . 'classes/class-setup.php';
        \HMBKP_Setup::deactivate();
        Path::get_instance()->protect_path('reset');
    }
    // Update the stored version
    if (get_option('hmbkp_plugin_version') !== Plugin::PLUGIN_VERSION) {
        update_option('hmbkp_plugin_version', Plugin::PLUGIN_VERSION);
    }
}