array(
'interval' => 3600,
'display' => apply_filters('updraftplus_cron_schedule_description', __('Every hour', 'updraftplus'), 'everyhour'),
),
'every2hours' => array(
'interval' => 7200,
'display' => apply_filters('updraftplus_cron_schedule_description', sprintf($every_particular_hour_label, '2'), 'every2hours'),
),
'every4hours' => array(
'interval' => 14400,
'display' => apply_filters('updraftplus_cron_schedule_description', sprintf($every_particular_hour_label, '4'), 'every4hours'),
),
'every8hours' => array(
'interval' => 28800,
'display' => apply_filters('updraftplus_cron_schedule_description', sprintf($every_particular_hour_label, '8'), 'every8hours'),
),
'twicedaily' => array(
'interval' => 43200,
'display' => apply_filters('updraftplus_cron_schedule_description', sprintf($every_particular_hour_label, '12'), 'twicedaily'),
),
'daily' => array(
'interval' => 86400,
'display' => apply_filters('updraftplus_cron_schedule_description', __('Daily'), 'daily'),
),
'weekly' => array(
'interval' => 604800,
'display' => apply_filters('updraftplus_cron_schedule_description', __('Weekly'), 'weekly'),
),
'fortnightly' => array(
'interval' => 1209600,
'display' => apply_filters('updraftplus_cron_schedule_description', __('Fortnightly'), 'fortnightly'),
),
'monthly' => array(
'interval' => 2592000,
'display' => apply_filters('updraftplus_cron_schedule_description', __('Monthly'), 'monthly'),
),
);
}
if (!function_exists('updraftplus_modify_cron_schedules')) :
/**
* wp-cron only has hourly, daily and twicedaily, so we need to add some of our own
*
* @param array $schedules an array of schedule types
* @return array cron schedules which contains schedules of our own
*/
function updraftplus_modify_cron_schedules($schedules) {
return array_merge($schedules, updraftplus_list_cron_schedules());
}
endif;
// http://codex.wordpress.org/Plugin_API/Filter_Reference/cron_schedules. Raised priority because some plugins wrongly over-write all prior schedule changes (including BackupBuddy!)
add_filter('cron_schedules', 'updraftplus_modify_cron_schedules', 30);
// The checks here before loading are for performance only - unless one of those conditions is met, then none of the hooks will ever be used
if (!is_admin() && (!defined('DOING_CRON') || !DOING_CRON) && (!defined('XMLRPC_REQUEST') || !XMLRPC_REQUEST) && empty($_SERVER['SHELL']) && empty($_POST['udrpc_message']) && empty($_GET['udcentral_action']) && (defined('UPDRAFTPLUS_THIS_IS_CLONE') && '1' != UPDRAFTPLUS_THIS_IS_CLONE) && empty($_GET['uc_auto_login']) && (empty($_SERVER['REQUEST_METHOD']) || 'OPTIONS' != $_SERVER['REQUEST_METHOD']) && (!defined('WP_CLI') || !WP_CLI)) { // phpcs:ignore WordPress.Security.NonceVerification.Missing,WordPress.Security.NonceVerification.Recommended -- False positive: nonce verification not required here.
// There is no good way to work out if the cron event is likely to be called under the ALTERNATE_WP_CRON system, other than re-running the calculation
// If ALTERNATE_WP_CRON is not active (and a few other things), then we are done
if (!defined('ALTERNATE_WP_CRON') || !ALTERNATE_WP_CRON || !empty($_POST) || defined('DOING_AJAX') || isset($_GET['doing_wp_cron'])) return; // phpcs:ignore WordPress.Security.NonceVerification.Missing,WordPress.Security.NonceVerification.Recommended -- False positive: nonce verification not required here.
// The check below is the one used by spawn_cron() to decide whether cron events should be run
$gmt_time = microtime(true);
$lock = get_transient('doing_cron');
if ($lock > $gmt_time + 10 * 60) $lock = 0;
if ((defined('WP_CRON_LOCK_TIMEOUT') && $lock + WP_CRON_LOCK_TIMEOUT > $gmt_time) || (!defined('WP_CRON_LOCK_TIMEOUT') && $lock + 60 > $gmt_time)) return;
if (function_exists('_get_cron_array')) {
$crons = _get_cron_array();
} else {
$crons = get_option('cron');
}
if (!is_array($crons)) return;
$keys = array_keys($crons);
if (isset($keys[0]) && $keys[0] > $gmt_time) return;
// If we got this far, then cron is going to be fired, so we do want to load all our hooks
}
$updraftplus_have_addons = 0;
if (is_dir(UPDRAFTPLUS_DIR.'/addons') && $dir_handle = opendir(UPDRAFTPLUS_DIR.'/addons')) {
while (false !== ($e = readdir($dir_handle))) {
if (is_file(UPDRAFTPLUS_DIR.'/addons/'.$e) && preg_match('/\.php$/', $e)) {
// We used to have 1024 bytes here - but this meant that if someone's site was hacked and a lot of code added at the top, and if they were running a too-low PHP version, then they might just see the symptom rather than the cause - and raise the support request with us.
$header = file_get_contents(UPDRAFTPLUS_DIR.'/addons/'.$e, false, null, 0, 16384);
$phprequires = preg_match("/RequiresPHP: (\d[\d\.]+)/", $header, $matches) ? $matches[1] : false;
$phpinclude = preg_match("/IncludePHP: (\S+)/", $header, $matches) ? $matches[1] : false;
if (false === $phprequires || version_compare(PHP_VERSION, $phprequires, '>=')) {
$updraftplus_have_addons++;
if ($phpinclude) updraft_try_include_file(''.$phpinclude, 'include_once');
updraft_try_include_file('addons/'.$e, 'include_once');
}
unset($header);
}
}
@closedir($dir_handle);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function.
}
if (is_file(UPDRAFTPLUS_DIR.'/udaddons/updraftplus-addons.php')) updraft_try_include_file('udaddons/updraftplus-addons.php', 'require_once');
if (!file_exists(UPDRAFTPLUS_DIR.'/class-updraftplus.php') || !file_exists(UPDRAFTPLUS_DIR.'/options.php')) {
/**
* Warn if they've not got the whole plugin - can happen if WP crashes (e.g. out of disk space) when upgrading the plugin
*/
function updraftplus_incomplete_install_warning() {
echo '
'.esc_html(__('Error', 'updraftplus')).': '.esc_html(__('You do not have UpdraftPlus completely installed - please de-install and install it again.', 'updraftplus').' '.__('Most likely, WordPress malfunctioned when copying the plugin files.', 'updraftplus')).' '.esc_html__('Go here for more information.', 'updraftplus').'
';
}
add_action('all_admin_notices', 'updraftplus_incomplete_install_warning');
} else {
updraft_try_include_file('class-updraftplus.php', 'include_once');
$updraftplus = new UpdraftPlus();
$GLOBALS['updraftplus'] = $updraftplus;
$updraftplus->have_addons = $updraftplus_have_addons;
if (!$updraftplus->memory_check(192)) {
// Experience appears to show that the memory limit is only likely to be hit (unless it is very low) by single files that are larger than available memory (when compressed)
// Add sanity checks - found someone who'd set WP_MAX_MEMORY_LIMIT to 256K !
if (!$updraftplus->memory_check($updraftplus->memory_check_current(WP_MAX_MEMORY_LIMIT))) {
$new = absint($updraftplus->memory_check_current(WP_MAX_MEMORY_LIMIT));
if ($new>32 && $new<100000) {
@ini_set('memory_limit', $new.'M');// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged,Squiz.PHP.DiscouragedFunctions.Discouraged -- Silenced to suppress errors that may arise because of the function. Safely using discouraged function ini_set().
}
}
}
// Blocking updates during restore; placed here so that it still runs e.g. under WP-CLI
$updraftplus->block_updates_during_restore_progress();
}
// Ubuntu bug - https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1315888
if (!function_exists('gzopen') && function_exists('gzopen64')) {
function gzopen($filename, $mode, $use_include_path = 0) {
return gzopen64($filename, $mode, $use_include_path);
}
}
/**
* For finding mysqldump. Added to include Windows locations.
*/
function updraftplus_build_mysqldump_list() {
if ('win' == strtolower(substr(PHP_OS, 0, 3)) && function_exists('glob')) {
$drives = array('C', 'D', 'E');
if (!empty($_SERVER['DOCUMENT_ROOT'])) {
// Get the drive that this is running on
$current_drive = strtoupper(substr($_SERVER['DOCUMENT_ROOT'], 0, 1)); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Sanitization not needed as we are extracting only first letter and using it.
if (!in_array($current_drive, $drives)) array_unshift($drives, $current_drive);
}
$directories = array();
foreach ($drives as $drive_letter) {
$dir = glob("$drive_letter:\\{Program Files\\MySQL\\{,MySQL*,etc}{,\\bin,\\?},mysqldump}\\mysqldump*", GLOB_BRACE);
if (is_array($dir)) $directories = array_merge($directories, $dir);
}
$drive_string = implode(',', $directories);
return $drive_string;
} else {
return "/usr/bin/mysqldump,/bin/mysqldump,/usr/local/bin/mysqldump,/usr/sfw/bin/mysqldump,/usr/xdg4/bin/mysqldump,/opt/bin/mysqldump";
}
}
// Do this even if the missing files detection above fired, as the "missing files" detection above has a greater chance of showing the user useful info
if (!class_exists('UpdraftPlus_Options')) updraft_try_include_file('options.php', 'require_once');