/** * */ function prepare_items() { $this->items = BackWPup_Option::get_job_ids(); $this->job_object = BackWPup_Job::get_working_data(); $this->job_types = BackWPup::get_job_types(); $this->destinations = BackWPup::get_registered_destinations(); }
/** * Admin init function */ public function admin_init() { //only add action if ajax call if (defined('DOING_AJAX') && DOING_AJAX && defined('WP_ADMIN') && WP_ADMIN) { //ajax calls add_action('wp_ajax_backwpup_working', array('BackWPup_Page_Jobs', 'ajax_working')); add_action('wp_ajax_backwpup_cron_text', array('BackWPup_Page_Editjob', 'ajax_cron_text')); //ajax or view logs add_action('wp_ajax_backwpup_view_log', array('BackWPup_Page_Logs', 'ajax_view_log')); //ajax calls for job types if ($jobtypes = BackWPup::get_job_types()) { foreach ($jobtypes as $id => $jobtypeclass) { add_action('wp_ajax_backwpup_jobtype_' . strtolower($id), array($jobtypeclass, 'edit_ajax')); } } //ajax calls for destinations if ($dests = BackWPup::get_registered_destinations()) { foreach ($dests as $id => $dest) { if (!empty($dest['class'])) { add_action('wp_ajax_backwpup_dest_' . strtolower($id), array(BackWPup::get_destination($id), 'edit_ajax')); } } } } //display about page after Update if (!defined('DOING_AJAX') && !get_site_option('backwpup_about_page', FALSE) && !isset($_GET['activate-multi'])) { update_site_option('backwpup_about_page', TRUE); wp_redirect(network_admin_url('admin.php') . '?page=backwpupabout'); exit; } }
/** * * Get default option for BackWPup option * * @param string $key Option key * * @internal param int $id The job id * * @return bool|mixed */ public static function defaults_job($key = '') { $key = sanitize_key(trim($key)); //set defaults $default['type'] = array('DBDUMP', 'FILE', 'WPPLUGIN'); $default['destinations'] = array(); $default['name'] = __('New Job', 'backwpup'); $default['activetype'] = ''; $default['logfile'] = ''; $default['lastbackupdownloadurl'] = ''; $default['cronselect'] = 'basic'; $default['cron'] = '0 3 * * *'; $default['mailaddresslog'] = sanitize_email(get_bloginfo('admin_email')); $default['mailaddresssenderlog'] = 'BackWPup ' . get_bloginfo('name') . ' <' . sanitize_email(get_bloginfo('admin_email')) . '>'; $default['mailerroronly'] = true; $default['backuptype'] = 'archive'; $default['archiveformat'] = '.tar.gz'; $default['archivename'] = 'backwpup_' . BackWPup::get_plugin_data('hash') . '_%Y-%m-%d_%H-%i-%s'; //defaults vor destinations foreach (BackWPup::get_registered_destinations() as $dest_key => $dest) { if (!empty($dest['class'])) { $dest_object = BackWPup::get_destination($dest_key); $default = array_merge($default, $dest_object->option_defaults()); } } //defaults vor job types foreach (BackWPup::get_job_types() as $job_type) { $default = array_merge($default, $job_type->option_defaults()); } //return all if (empty($key)) { return $default; } //return one default setting if (isset($default[$key])) { return $default[$key]; } else { return false; } }
/** * */ public static function page() { if (!empty($_GET['jobid'])) { $jobid = (int) $_GET['jobid']; } else { //generate jobid if not exists $newjobid = BackWPup_Option::get_job_ids(); sort($newjobid); $jobid = end($newjobid) + 1; } $destinations = BackWPup::get_registered_destinations(); $job_types = BackWPup::get_job_types(); ?> <div class="wrap" id="backwpup-page"> <?php echo '<h2><span id="backwpup-page-icon"> </span>' . sprintf(__('%1$s Job: %2$s', 'backwpup'), BackWPup::get_plugin_data('name'), '<span id="h2jobtitle">' . esc_html(BackWPup_Option::get($jobid, 'name')) . '</span>') . '</h2>'; //default tabs $tabs = array('job' => array('name' => __('General', 'backwpup'), 'display' => TRUE), 'cron' => array('name' => __('Schedule', 'backwpup'), 'display' => TRUE)); //add jobtypes to tabs $job_job_types = BackWPup_Option::get($jobid, 'type'); foreach ($job_types as $typeid => $typeclass) { $tabid = 'jobtype-' . strtolower($typeid); $tabs[$tabid]['name'] = $typeclass->info['name']; $tabs[$tabid]['display'] = TRUE; if (!in_array($typeid, $job_job_types)) { $tabs[$tabid]['display'] = FALSE; } } //add destinations to tabs $jobdests = BackWPup_Option::get($jobid, 'destinations'); foreach ($destinations as $destid => $dest) { $tabid = 'dest-' . strtolower($destid); $tabs[$tabid]['name'] = sprintf(__('To: %s', 'backwpup'), $dest['info']['name']); $tabs[$tabid]['display'] = TRUE; if (!in_array($destid, $jobdests)) { $tabs[$tabid]['display'] = FALSE; } } //display tabs echo '<h2 class="nav-tab-wrapper">'; foreach ($tabs as $id => $tab) { $addclass = ''; if ($id == $_GET['tab']) { $addclass = ' nav-tab-active'; } $display = ''; if (!$tab['display']) { $display = ' style="display:none;"'; } echo '<a href="' . wp_nonce_url(network_admin_url('admin.php') . '?page=backwpupeditjob&tab=' . $id . '&jobid=' . $jobid, 'edit-job') . '" class="nav-tab' . $addclass . '" id="tab-' . $id . '" data-nexttab="' . $id . '" ' . $display . '>' . $tab['name'] . '</a>'; } echo '</h2>'; //display messages BackWPup_Admin::display_messages(); echo '<form name="editjob" id="editjob" method="post" action="' . admin_url('admin-post.php') . '">'; echo '<input type="hidden" id="jobid" name="jobid" value="' . $jobid . '" />'; echo '<input type="hidden" name="tab" value="' . $_GET['tab'] . '" />'; echo '<input type="hidden" name="nexttab" value="' . $_GET['tab'] . '" />'; echo '<input type="hidden" name="page" value="backwpupeditjob" />'; echo '<input type="hidden" name="action" value="backwpup" />'; echo '<input type="hidden" name="anchor" value="" />'; wp_nonce_field('backwpupeditjob_page'); wp_nonce_field('backwpup_ajax_nonce', 'backwpupajaxnonce', FALSE); switch ($_GET['tab']) { case 'job': echo '<div class="table" id="info-tab-job">'; ?> <h3 class="title"><?php _e('Job Name', 'backwpup'); ?> </h3> <p></p> <table class="form-table"> <tr> <th scope="row"><label for="name"><?php _e('Please name this job.', 'backwpup'); ?> </label></th> <td> <input name="name" type="text" id="name" data-empty="<?php _e('New Job', 'backwpup'); ?> " value="<?php echo BackWPup_Option::get($jobid, 'name'); ?> " class="regular-text" /> </td> </tr> </table> <h3 class="title"><?php _e('Job Tasks', 'backwpup'); ?> </h3> <p></p> <table class="form-table"> <tr> <th scope="row"><?php _e('This job is a …', 'backwpup'); ?> </th> <td> <fieldset> <legend class="screen-reader-text"><span><?php _e('Job tasks', 'backwpup'); ?> </span> </legend><?php foreach ($job_types as $id => $typeclass) { $addclass = ''; if ($typeclass->creates_file()) { $addclass .= ' filetype'; } $title = ''; if (!empty($typeclass->info['help'])) { $title = ' title="' . esc_attr($typeclass->info['help']) . '"'; $addclass .= ' help-tip'; } echo '<label for="jobtype-select-' . strtolower($id) . '"><input class="jobtype-select checkbox' . $addclass . '"' . $title . ' id="jobtype-select-' . strtolower($id) . '" type="checkbox" ' . checked(TRUE, in_array($id, BackWPup_Option::get($jobid, 'type')), FALSE) . ' name="type[]" value="' . $id . '" /> ' . $typeclass->info['description'] . '</label><br />'; } ?> </fieldset> </td> </tr> </table> <h3 class="title hasdests"><?php _e('Backup File Creation', 'backwpup'); ?> </h3> <p class="hasdests"></p> <table class="form-table hasdests"> <?php if (class_exists('BackWPup_Pro', FALSE)) { ?> <tr> <th scope="row"><?php _e('Backup type', 'backwpup'); ?> </th> <td> <fieldset> <legend class="screen-reader-text"> <span><?php _e('Backup type', 'backwpup'); ?> </span></legend> <label for="idbackuptype-sync"><input class="radio" type="radio"<?php checked('sync', BackWPup_Option::get($jobid, 'backuptype'), TRUE); ?> name="backuptype" id="idbackuptype-sync" value="sync"/> <?php _e('Synchronize file by file to destination', 'backwpup'); ?> </label><br/> <label for="idbackuptype-archive"><input class="radio" type="radio"<?php checked('archive', BackWPup_Option::get($jobid, 'backuptype'), TRUE); ?> name="backuptype" id="idbackuptype-archive" value="archive"/> <?php _e('Create a backup archive', 'backwpup'); ?> </label><br/> </fieldset> </td> </tr> <?php } ?> <tr class="nosync"> <th scope="row"><label for="archivename"><?php _e('Archive name', 'backwpup'); ?> </label></th> <td> <input name="archivename" type="text" id="archivename" value="<?php echo BackWPup_Option::get($jobid, 'archivename'); ?> " class="regular-text code help-tip" title="<?php echo "<strong>" . esc_attr__('Replacement patterns:', 'backwpup') . "</strong><br />"; echo esc_attr__('%d = Two digit day of the month, with leading zeros', 'backwpup') . '<br />'; echo esc_attr__('%j = Day of the month, without leading zeros', 'backwpup') . '<br />'; echo esc_attr__('%m = Day of the month, with leading zeros', 'backwpup') . '<br />'; echo esc_attr__('%n = Representation of the month (without leading zeros)', 'backwpup') . '<br />'; echo esc_attr__('%Y = Four digit representation for the year', 'backwpup') . '<br />'; echo esc_attr__('%y = Two digit representation of the year', 'backwpup') . '<br />'; echo esc_attr__('%a = Lowercase ante meridiem (am) and post meridiem (pm)', 'backwpup') . '<br />'; echo esc_attr__('%A = Uppercase ante meridiem (AM) and post meridiem (PM)', 'backwpup') . '<br />'; echo esc_attr__('%B = Swatch Internet Time', 'backwpup') . '<br />'; echo esc_attr__('%g = Hour in 12-hour format, without leading zeros', 'backwpup') . '<br />'; echo esc_attr__('%G = Hour in 24-hour format, without leading zeros', 'backwpup') . '<br />'; echo esc_attr__('%h = Hour in 12-hour format, with leading zeros', 'backwpup') . '<br />'; echo esc_attr__('%H = Hour in 24-hour format, with leading zeros', 'backwpup') . '<br />'; echo esc_attr__('%i = Two digit representation of the minute', 'backwpup') . '<br />'; echo esc_attr__('%s = Two digit representation of the second', 'backwpup') . '<br />'; ?> " /> <?php $current_time = current_time('timestamp'); $datevars = array('%d', '%j', '%m', '%n', '%Y', '%y', '%a', '%A', '%B', '%g', '%G', '%h', '%H', '%i', '%s'); $datevalues = array(date('d', $current_time), date('j', $current_time), date('m', $current_time), date('n', $current_time), date('Y', $current_time), date('y', $current_time), date('a', $current_time), date('A', $current_time), date('B', $current_time), date('g', $current_time), date('G', $current_time), date('h', $current_time), date('H', $current_time), date('i', $current_time), date('s', $current_time)); $archivename = str_replace($datevars, $datevalues, BackWPup_Job::sanitize_file_name(BackWPup_Option::get($jobid, 'archivename'))); echo '<p>Preview: <code><span id="archivefilename">' . $archivename . '</span><span id="archiveformat">' . BackWPup_Option::get($jobid, 'archiveformat') . '</span></code></p>'; ?> </td> </tr> <tr class="nosync"> <th scope="row"><?php _e('Archive Format', 'backwpup'); ?> </th> <td> <fieldset> <legend class="screen-reader-text"><span><?php _e('Archive Format', 'backwpup'); ?> </span></legend> <?php if (function_exists('gzopen') || class_exists('ZipArchive')) { echo '<label for="idarchiveformat-zip"><input class="radio help-tip" title="' . __('PHP Zip functions will be used if available (needs less memory). Otherwise the PCLZip class will be used.', 'backwpup') . '" type="radio"' . checked('.zip', BackWPup_Option::get($jobid, 'archiveformat'), FALSE) . ' name="archiveformat" id="idarchiveformat-zip" value=".zip" /> ' . __('Zip', 'backwpup') . '</label><br />'; } else { echo '<label for="idarchiveformat-zip"><input class="radio help-tip" title="' . __('Disabled due to missing PHP function.', 'backwpup') . '" type="radio"' . checked('.zip', BackWPup_Option::get($jobid, 'archiveformat'), FALSE) . ' name="archiveformat" id="idarchiveformat-zip" value=".zip" disabled="disabled" /> ' . __('Zip', 'backwpup') . '</label><br />'; } echo '<label for="idarchiveformat-tar"><input class="radio help-tip" title="' . __('A tarballed, not compressed archive (fast and less memory)', 'backwpup') . '" type="radio"' . checked('.tar', BackWPup_Option::get($jobid, 'archiveformat'), FALSE) . ' name="archiveformat" id="idarchiveformat-tar" value=".tar" /> ' . __('Tar', 'backwpup') . '</label><br />'; if (function_exists('gzopen')) { echo '<label for="idarchiveformat-targz"><input class="radio help-tip" title="' . __('A tarballed, GZipped archive (fast and less memory)', 'backwpup') . '" type="radio"' . checked('.tar.gz', BackWPup_Option::get($jobid, 'archiveformat'), FALSE) . ' name="archiveformat" id="idarchiveformat-targz" value=".tar.gz" /> ' . __('Tar GZip', 'backwpup') . '</label><br />'; } else { echo '<label for="idarchiveformat-targz"><input class="radio help-tip" title="' . __('Disabled due to missing PHP function.', 'backwpup') . '" type="radio"' . checked('.tar.gz', BackWPup_Option::get($jobid, 'archiveformat'), FALSE) . ' name="archiveformat" id="idarchiveformat-targz" value=".tar.gz" disabled="disabled" /> ' . __('Tar GZip', 'backwpup') . '</label><br />'; } if (function_exists('bzopen')) { echo '<label for="idarchiveformat-tarbz2"><input class="radio help-tip" title="' . __('A tarballed, BZipped archive (fast and less memory)', 'backwpup') . '" type="radio"' . checked('.tar.bz2', BackWPup_Option::get($jobid, 'archiveformat'), FALSE) . ' name="archiveformat" id="idarchiveformat-tarbz2" value=".tar.bz2" /> ' . __('Tar BZip2', 'backwpup') . '</label><br />'; } else { echo '<label for="idarchiveformat-tarbz2"><input class="radio help-tip" title="' . __('Disabled due to missing PHP function.', 'backwpup') . '" type="radio"' . checked('.tar.bz2', BackWPup_Option::get($jobid, 'archiveformat'), FALSE) . ' name="archiveformat" id="idarchiveformat-tarbz2" value=".tar.bz2" disabled="disabled" /> ' . __('Tar BZip2', 'backwpup') . '</label><br />'; } ?> </fieldset> </td> </tr> </table> <h3 class="title hasdests"><?php _e('Job Destination', 'backwpup'); ?> </h3> <p class="hasdests"></p> <table class="form-table hasdests"> <tr> <th scope="row"><?php _e('Where should your backup file be stored?', 'backwpup'); ?> </th> <td> <fieldset> <legend class="screen-reader-text"><span><?php _e('Where should your backup file be stored?', 'backwpup'); ?> </span> </legend><?php foreach ($destinations as $id => $dest) { $syncclass = ''; if (!$dest['can_sync']) { $syncclass = 'nosync'; } $title = ''; $helpclass = ''; if (!empty($dest['info']['help'])) { $title = ' title="' . esc_attr($dest['info']['help']) . '"'; $helpclass = ' help-tip'; } echo '<span class="' . $syncclass . '"><label for="dest-select-' . strtolower($id) . '"><input class="checkbox' . $helpclass . '"' . $title . ' id="dest-select-' . strtolower($id) . '" type="checkbox" ' . checked(TRUE, in_array($id, BackWPup_Option::get($jobid, 'destinations')), FALSE) . ' name="destinations[]" value="' . $id . '" ' . disabled(!empty($dest['error']), TRUE, FALSE) . ' /> ' . $dest['info']['description']; if (!empty($dest['error'])) { echo '<br /><span class="description">' . $dest['error'] . '</span>'; } echo '</label><br /></span>'; } ?> </fieldset> </td> </tr> </table> <h3 class="title"><?php _e('Log Files', 'backwpup'); ?> </h3> <p></p> <table class="form-table"> <tr> <th scope="row"><label for="mailaddresslog"><?php _e('Send log to email address', 'backwpup'); ?> </label></th> <td> <input name="mailaddresslog" type="text" id="mailaddresslog" value="<?php echo BackWPup_Option::get($jobid, 'mailaddresslog'); ?> " class="regular-text help-tip" title="<?php esc_attr_e('Leave empty to not have log sent. Or separate with , for more than one receiver.', 'backwpup'); ?> " /> </td> </tr> <tr> <th scope="row"><label for="mailaddresssenderlog"><?php _e('Email FROM field', 'backwpup'); ?> </label></th> <td> <input name="mailaddresssenderlog" type="text" id="mailaddresssenderlog" value="<?php echo BackWPup_Option::get($jobid, 'mailaddresssenderlog'); ?> " class="regular-text help-tip" title="<?php esc_attr_e('Email "From" field (Name < you@your-email-address.tld >)', 'backwpup'); ?> " /> </td> </tr> <tr> <th scope="row"><?php _e('Errors only', 'backwpup'); ?> </th> <td> <label for="idmailerroronly"> <input class="checkbox" value="1" id="idmailerroronly" type="checkbox" <?php checked(BackWPup_Option::get($jobid, 'mailerroronly'), TRUE); ?> name="mailerroronly" /> <?php _e('Send email with log only when errors occur during job execution.', 'backwpup'); ?> </label> </td> </tr> </table> <?php echo '</div>'; break; case 'cron': echo '<div class="table" id="info-tab-cron">'; ?> <h3 class="title"><?php _e('Job Schedule', 'backwpup'); ?> </h3> <p></p> <table class="form-table"> <tr> <th scope="row"><?php _e('Start job', 'backwpup'); ?> </th> <td> <fieldset> <legend class="screen-reader-text"><span><?php _e('Start job', 'backwpup'); ?> </span></legend> <label for="idactivetype"><input class="radio" type="radio"<?php checked('', BackWPup_Option::get($jobid, 'activetype'), TRUE); ?> name="activetype" id="idactivetype" value="" /> <?php _e('manually only', 'backwpup'); ?> </label><br/> <label for="idactivetype-wpcron"><input class="radio" type="radio"<?php checked('wpcron', BackWPup_Option::get($jobid, 'activetype'), TRUE); ?> name="activetype" id="idactivetype-wpcron" value="wpcron" /> <?php _e('with WordPress cron', 'backwpup'); ?> </label><br/> <?php $disabled = ''; $easycron_api = get_site_option('backwpup_cfg_easycronapikey'); if (empty($easycron_api)) { $disabled = ' disabled="disabled"'; } ?> <label for="idactivetype-easycron"><input class="radio help-tip" type="radio"<?php checked('easycron', BackWPup_Option::get($jobid, 'activetype'), TRUE); ?> name="activetype" id="idactivetype-easycron"<?php echo $disabled; ?> value="easycron" title="<?php _e('Use EasyCron.com Cron jobs.'); ?> " /> <?php _e('with <a href="https://www.easycron.com?ref=36673" class="help-tip" title="Affiliate Link!">EasyCron.com</a>', 'backwpup'); ?> <?php if (empty($easycron_api)) { echo ' <strong>' . sprintf(__('Setup <a href="https://www.easycron.com?ref=36673" class="help-tip" title="Affiliate Link!">Account</a> / <a href="%s">API Key</a> first.', 'backwpup'), network_admin_url('admin.php') . '?page=backwpupsettings#backwpup-tab-apikey') . '</strong>'; } ?> </label><br/> <?php $url = BackWPup_Job::get_jobrun_url('runext', BackWPup_Option::get($jobid, 'jobid')); ?> <label for="idactivetype-link"><input class="radio help-tip" type="radio"<?php checked('link', BackWPup_Option::get($jobid, 'activetype'), TRUE); ?> name="activetype" id="idactivetype-link" value="link" title="<?php esc_attr_e('Copy the link for an external start. This option has to be activated to make the link work.', 'backwpup'); ?> " /> <?php _e('with a link', 'backwpup'); ?> <code><a href="<?php echo $url['url']; ?> " target="_blank"><?php echo $url['url']; ?> </a></code></label> <br /> </fieldset> </td> </tr> <tr> <th scope="row"><?php _e('Start job with CLI', 'backwpup'); ?> </th> <td class="help-tip" title="<?php esc_attr_e('Use WP-CLI commands to let the job start with the server’s cron on command line interface.', 'backwpup'); ?> "> <?php _e('Use <a href="http://wp-cli.org/">WP-CLI</a> to run jobs from commandline.', 'backwpup'); ?> </td> </tr> </table> <h3 class="title wpcron"><?php _e('Schedule execution time', 'backwpup'); ?> </h3> <?php BackWPup_Page_Editjob::ajax_cron_text(array('cronstamp' => BackWPup_Option::get($jobid, 'cron'), 'crontype' => BackWPup_Option::get($jobid, 'cronselect'))); ?> <table class="form-table wpcron"> <tr> <th scope="row"><?php _e('Scheduler type', 'backwpup'); ?> </th> <td> <fieldset> <legend class="screen-reader-text"><span><?php _e('Scheduler type', 'backwpup'); ?> </span></legend> <label for="idcronselect-basic"><input class="radio" type="radio"<?php checked('basic', BackWPup_Option::get($jobid, 'cronselect'), TRUE); ?> name="cronselect" id="idcronselect-basic" value="basic" /> <?php _e('basic', 'backwpup'); ?> </label><br/> <label for="idcronselect-advanced"><input class="radio" type="radio"<?php checked('advanced', BackWPup_Option::get($jobid, 'cronselect'), TRUE); ?> name="cronselect" id="idcronselect-advanced" value="advanced" /> <?php _e('advanced', 'backwpup'); ?> </label><br/> </fieldset> </td> </tr> <?php list($cronstr['minutes'], $cronstr['hours'], $cronstr['mday'], $cronstr['mon'], $cronstr['wday']) = explode(' ', BackWPup_Option::get($jobid, 'cron'), 5); if (strstr($cronstr['minutes'], '*/')) { $minutes = explode('/', $cronstr['minutes']); } else { $minutes = explode(',', $cronstr['minutes']); } if (strstr($cronstr['hours'], '*/')) { $hours = explode('/', $cronstr['hours']); } else { $hours = explode(',', $cronstr['hours']); } if (strstr($cronstr['mday'], '*/')) { $mday = explode('/', $cronstr['mday']); } else { $mday = explode(',', $cronstr['mday']); } if (strstr($cronstr['mon'], '*/')) { $mon = explode('/', $cronstr['mon']); } else { $mon = explode(',', $cronstr['mon']); } if (strstr($cronstr['wday'], '*/')) { $wday = explode('/', $cronstr['wday']); } else { $wday = explode(',', $cronstr['wday']); } ?> <tr class="wpcronbasic"<?php if (BackWPup_Option::get($jobid, 'cronselect') != 'basic') { echo ' style="display:none;"'; } ?> > <th scope="row"><?php _e('Scheduler', 'backwpup'); ?> </th> <td> <table id="wpcronbasic"> <tr> <th> <?php _e('Type', 'backwpup'); ?> </th> <th> </th> <th> <?php _e('Hour', 'backwpup'); ?> </th> <th> <?php _e('Minute', 'backwpup'); ?> </th> </tr> <tr> <td><label for="idcronbtype-mon"><?php echo '<input class="radio" type="radio"' . checked(TRUE, is_numeric($mday[0]), FALSE) . ' name="cronbtype" id="idcronbtype-mon" value="mon" /> ' . __('monthly', 'backwpup'); ?> </label></td> <td><select name="moncronmday"><?php for ($i = 1; $i <= 31; $i++) { echo '<option ' . selected(in_array("{$i}", $mday, TRUE), TRUE, FALSE) . ' value="' . $i . '" />' . __('on', 'backwpup') . ' ' . $i . '</option>'; } ?> </select></td> <td><select name="moncronhours"><?php for ($i = 0; $i < 24; $i++) { echo '<option ' . selected(in_array("{$i}", $hours, TRUE), TRUE, FALSE) . ' value="' . $i . '" />' . $i . '</option>'; } ?> </select></td> <td><select name="moncronminutes"><?php for ($i = 0; $i < 60; $i = $i + 5) { echo '<option ' . selected(in_array("{$i}", $minutes, TRUE), TRUE, FALSE) . ' value="' . $i . '" />' . $i . '</option>'; } ?> </select></td> </tr> <tr> <td><label for="idcronbtype-week"><?php echo '<input class="radio" type="radio"' . checked(TRUE, is_numeric($wday[0]), FALSE) . ' name="cronbtype" id="idcronbtype-week" value="week" /> ' . __('weekly', 'backwpup'); ?> </label></td> <td><select name="weekcronwday"> <?php echo '<option ' . selected(in_array("0", $wday, TRUE), TRUE, FALSE) . ' value="0" />' . __('Sunday', 'backwpup') . '</option>'; echo '<option ' . selected(in_array("1", $wday, TRUE), TRUE, FALSE) . ' value="1" />' . __('Monday', 'backwpup') . '</option>'; echo '<option ' . selected(in_array("2", $wday, TRUE), TRUE, FALSE) . ' value="2" />' . __('Tuesday', 'backwpup') . '</option>'; echo '<option ' . selected(in_array("3", $wday, TRUE), TRUE, FALSE) . ' value="3" />' . __('Wednesday', 'backwpup') . '</option>'; echo '<option ' . selected(in_array("4", $wday, TRUE), TRUE, FALSE) . ' value="4" />' . __('Thursday', 'backwpup') . '</option>'; echo '<option ' . selected(in_array("5", $wday, TRUE), TRUE, FALSE) . ' value="5" />' . __('Friday', 'backwpup') . '</option>'; echo '<option ' . selected(in_array("6", $wday, TRUE), TRUE, FALSE) . ' value="6" />' . __('Saturday', 'backwpup') . '</option>'; ?> </select></td> <td><select name="weekcronhours"><?php for ($i = 0; $i < 24; $i++) { echo '<option ' . selected(in_array("{$i}", $hours, TRUE), TRUE, FALSE) . ' value="' . $i . '" />' . $i . '</option>'; } ?> </select></td> <td><select name="weekcronminutes"><?php for ($i = 0; $i < 60; $i = $i + 5) { echo '<option ' . selected(in_array("{$i}", $minutes, TRUE), TRUE, FALSE) . ' value="' . $i . '" />' . $i . '</option>'; } ?> </select></td> </tr> <tr> <td><label for="idcronbtype-day"><?php echo '<input class="radio" type="radio"' . checked("**", $mday[0] . $wday[0], FALSE) . ' name="cronbtype" id="idcronbtype-day" value="day" /> ' . __('daily', 'backwpup'); ?> </label></td> <td></td> <td><select name="daycronhours"><?php for ($i = 0; $i < 24; $i++) { echo '<option ' . selected(in_array("{$i}", $hours, TRUE), TRUE, FALSE) . ' value="' . $i . '" />' . $i . '</option>'; } ?> </select></td> <td><select name="daycronminutes"><?php for ($i = 0; $i < 60; $i = $i + 5) { echo '<option ' . selected(in_array("{$i}", $minutes, TRUE), TRUE, FALSE) . ' value="' . $i . '" />' . $i . '</option>'; } ?> </select></td> </tr> <tr> <td><label for="idcronbtype-hour"><?php echo '<input class="radio" type="radio"' . checked("*", $hours[0], FALSE, FALSE) . ' name="cronbtype" id="idcronbtype-hour" value="hour" /> ' . __('hourly', 'backwpup'); ?> </label></td> <td></td> <td></td> <td><select name="hourcronminutes"><?php for ($i = 0; $i < 60; $i = $i + 5) { echo '<option ' . selected(in_array("{$i}", $minutes, TRUE), TRUE, FALSE) . ' value="' . $i . '" />' . $i . '</option>'; } ?> </select></td> </tr> </table> </td> </tr> <tr class="wpcronadvanced"<?php if (BackWPup_Option::get($jobid, 'cronselect') != 'advanced') { echo ' style="display:none;"'; } ?> > <th scope="row"><?php _e('Scheduler', 'backwpup'); ?> </th> <td> <div id="cron-min-box"> <b><?php _e('Minutes:', 'backwpup'); ?> </b><br/> <?php echo '<label for="idcronminutes"><input class="checkbox" type="checkbox"' . checked(in_array("*", $minutes, TRUE), TRUE, FALSE) . ' name="cronminutes[]" id="idcronminutes" value="*" /> ' . __('Any (*)', 'backwpup') . '</label><br />'; ?> <div id="cron-min"><?php for ($i = 0; $i < 60; $i = $i + 5) { echo '<label for="idcronminutes-' . $i . '"><input class="checkbox" type="checkbox"' . checked(in_array("{$i}", $minutes, TRUE), TRUE, FALSE) . ' name="cronminutes[]" id="idcronminutes-' . $i . '" value="' . $i . '" /> ' . $i . '</label><br />'; } ?> </div> </div> <div id="cron-hour-box"> <b><?php _e('Hours:', 'backwpup'); ?> </b><br/> <?php echo '<label for="idcronhours"><input class="checkbox" type="checkbox"' . checked(in_array("*", $hours, TRUE), TRUE, FALSE) . ' name="cronhours[]" for="idcronhours" value="*" /> ' . __('Any (*)', 'backwpup') . '</label><br />'; ?> <div id="cron-hour"><?php for ($i = 0; $i < 24; $i++) { echo '<label for="idcronhours-' . $i . '"><input class="checkbox" type="checkbox"' . checked(in_array("{$i}", $hours, TRUE), TRUE, FALSE) . ' name="cronhours[]" id="idcronhours-' . $i . '" value="' . $i . '" /> ' . $i . '</label><br />'; } ?> </div> </div> <div id="cron-day-box"> <b><?php _e('Day of Month:', 'backwpup'); ?> </b><br/> <label for="idcronmday"><input class="checkbox" type="checkbox"<?php checked(in_array("*", $mday, TRUE), TRUE, TRUE); ?> name="cronmday[]" id="idcronmday" value="*"/> <?php _e('Any (*)', 'backwpup'); ?> </label> <br/> <div id="cron-day"> <?php for ($i = 1; $i <= 31; $i++) { echo '<label for="idcronmday-' . $i . '"><input class="checkbox" type="checkbox"' . checked(in_array("{$i}", $mday, TRUE), TRUE, FALSE) . ' name="cronmday[]" id="idcronmday-' . $i . '" value="' . $i . '" /> ' . $i . '</label><br />'; } ?> </div> </div> <div id="cron-month-box"> <b><?php _e('Month:', 'backwpup'); ?> </b><br/> <?php echo '<label for="idcronmon"><input class="checkbox" type="checkbox"' . checked(in_array("*", $mon, TRUE), TRUE, FALSE) . ' name="cronmon[]" id="idcronmon" value="*" /> ' . __('Any (*)', 'backwpup') . '</label><br />'; ?> <div id="cron-month"> <?php echo '<label for="idcronmon-1"><input class="checkbox" type="checkbox"' . checked(in_array("1", $mon, TRUE), TRUE, FALSE) . ' name="cronmon[]" id="idcronmon-1" value="1" /> ' . __('January', 'backwpup') . '</label><br />'; echo '<label for="idcronmon-2"><input class="checkbox" type="checkbox"' . checked(in_array("2", $mon, TRUE), TRUE, FALSE) . ' name="cronmon[]" id="idcronmon-2" value="2" /> ' . __('February', 'backwpup') . '</label><br />'; echo '<label for="idcronmon-3"><input class="checkbox" type="checkbox"' . checked(in_array("3", $mon, TRUE), TRUE, FALSE) . ' name="cronmon[]" id="idcronmon-3" value="3" /> ' . __('March', 'backwpup') . '</label><br />'; echo '<label for="idcronmon-4"><input class="checkbox" type="checkbox"' . checked(in_array("4", $mon, TRUE), TRUE, FALSE) . ' name="cronmon[]" id="idcronmon-4" value="4" /> ' . __('April', 'backwpup') . '</label><br />'; echo '<label for="idcronmon-5"><input class="checkbox" type="checkbox"' . checked(in_array("5", $mon, TRUE), TRUE, FALSE) . ' name="cronmon[]" id="idcronmon-5" value="5" /> ' . __('May', 'backwpup') . '</label><br />'; echo '<label for="idcronmon-6"><input class="checkbox" type="checkbox"' . checked(in_array("6", $mon, TRUE), TRUE, FALSE) . ' name="cronmon[]" id="idcronmon-6" value="6" /> ' . __('June', 'backwpup') . '</label><br />'; echo '<label for="idcronmon-7"><input class="checkbox" type="checkbox"' . checked(in_array("7", $mon, TRUE), TRUE, FALSE) . ' name="cronmon[]" id="idcronmon-7" value="7" /> ' . __('July', 'backwpup') . '</label><br />'; echo '<label for="idcronmon-8"><input class="checkbox" type="checkbox"' . checked(in_array("8", $mon, TRUE), TRUE, FALSE) . ' name="cronmon[]" id="idcronmon-8" value="8" /> ' . __('August', 'backwpup') . '</label><br />'; echo '<label for="idcronmon-9"><input class="checkbox" type="checkbox"' . checked(in_array("9", $mon, TRUE), TRUE, FALSE) . ' name="cronmon[]" id="idcronmon-9" value="9" /> ' . __('September', 'backwpup') . '</label><br />'; echo '<label for="idcronmon-10"><input class="checkbox" type="checkbox"' . checked(in_array("10", $mon, TRUE), TRUE, FALSE) . ' name="cronmon[]" id="idcronmon-10" value="10" /> ' . __('October', 'backwpup') . '</label><br />'; echo '<label for="idcronmon-11"><input class="checkbox" type="checkbox"' . checked(in_array("11", $mon, TRUE), TRUE, FALSE) . ' name="cronmon[]" id="idcronmon-11" value="11" /> ' . __('November', 'backwpup') . '</label><br />'; echo '<label for="idcronmon-12"><input class="checkbox" type="checkbox"' . checked(in_array("12", $mon, TRUE), TRUE, FALSE) . ' name="cronmon[]" id="idcronmon-12" value="12" /> ' . __('December', 'backwpup') . '</label><br />'; ?> </div> </div> <div id="cron-weekday-box"> <b><?php _e('Day of Week:', 'backwpup'); ?> </b><br/> <?php echo '<label for="idcronwday"><input class="checkbox" type="checkbox"' . checked(in_array("*", $wday, TRUE), TRUE, FALSE) . ' name="cronwday[]" id="idcronwday" value="*" /> ' . __('Any (*)', 'backwpup') . '</label><br />'; ?> <div id="cron-weekday"> <?php echo '<label for="idcronwday-0"><input class="checkbox" type="checkbox"' . checked(in_array("0", $wday, TRUE), TRUE, FALSE) . ' name="cronwday[]" id="idcronwday-0" value="0" /> ' . __('Sunday', 'backwpup') . '</label><br />'; echo '<label for="idcronwday-1"><input class="checkbox" type="checkbox"' . checked(in_array("1", $wday, TRUE), TRUE, FALSE) . ' name="cronwday[]" id="idcronwday-1" value="1" /> ' . __('Monday', 'backwpup') . '</label><br />'; echo '<label for="idcronwday-2"><input class="checkbox" type="checkbox"' . checked(in_array("2", $wday, TRUE), TRUE, FALSE) . ' name="cronwday[]" id="idcronwday-2" value="2" /> ' . __('Tuesday', 'backwpup') . '</label><br />'; echo '<label for="idcronwday-3"><input class="checkbox" type="checkbox"' . checked(in_array("3", $wday, TRUE), TRUE, FALSE) . ' name="cronwday[]" id="idcronwday-3" value="3" /> ' . __('Wednesday', 'backwpup') . '</label><br />'; echo '<label for="idcronwday-4"><input class="checkbox" type="checkbox"' . checked(in_array("4", $wday, TRUE), TRUE, FALSE) . ' name="cronwday[]" id="idcronwday-4" value="4" /> ' . __('Thursday', 'backwpup') . '</label><br />'; echo '<label for="idcronwday-5"><input class="checkbox" type="checkbox"' . checked(in_array("5", $wday, TRUE), TRUE, FALSE) . ' name="cronwday[]" id="idcronwday-5" value="5" /> ' . __('Friday', 'backwpup') . '</label><br />'; echo '<label for="idcronwday-6"><input class="checkbox" type="checkbox"' . checked(in_array("6", $wday, TRUE), TRUE, FALSE) . ' name="cronwday[]" id="idcronwday-6" value="6" /> ' . __('Saturday', 'backwpup') . '</label><br />'; ?> </div> </div> <br class="clear"/> </td> </tr> </table> <?php echo '</div>'; break; default: echo '<div class="table" id="info-tab-' . $_GET['tab'] . '">'; if (strstr($_GET['tab'], 'dest-')) { $dest_object = BackWPup::get_destination(str_replace('dest-', '', $_GET['tab'])); $dest_object->edit_tab($jobid); } if (strstr($_GET['tab'], 'jobtype-')) { $id = strtoupper(str_replace('jobtype-', '', $_GET['tab'])); $job_types[$id]->edit_tab($jobid); } echo '</div>'; } echo '<p class="submit">'; submit_button(__('Save changes', 'backwpup'), 'primary', 'save', FALSE, array('tabindex' => '2', 'accesskey' => 'p')); echo '</p></form>'; ?> </div> <script type="text/javascript"> //<![CDATA[ jQuery(document).ready(function ($) { // auto post if things changed var changed = false; $( '#editjob' ).change( function () { changed = true; }); $( '.nav-tab' ).click( function () { if ( changed ) { $( 'input[name="nexttab"]' ).val( $(this).data( "nexttab" ) ); $( '#editjob' ).submit(); return false; } }); <?php //add inline js if (strstr($_GET['tab'], 'dest-')) { $dest_object = BackWPup::get_destination(str_replace('dest-', '', $_GET['tab'])); $dest_object->edit_inline_js(); } if (strstr($_GET['tab'], 'jobtype-')) { $id = strtoupper(str_replace('jobtype-', '', $_GET['tab'])); $job_types[$id]->edit_inline_js(); } ?> }); //]]> </script> <?php }
/** * * This starts or restarts the job working * * @param string $start_type Start types are 'runnow', 'runnowalt', 'cronrun', 'runext', 'runcli' * @param array|int $job_id The id of job of a job to start */ private function create($start_type, $job_id = 0) { global $wpdb; /* @var wpdb $wpdb */ //check startype if (!in_array($start_type, array('runnow', 'runnowalt', 'cronrun', 'runext', 'runcli'), true)) { return; } if ($job_id) { $this->job = BackWPup_Option::get_job($job_id); } else { return; } $this->start_time = current_time('timestamp'); $this->lastmsg = __('Starting job', 'backwpup'); //set Logfile $log_folder = get_site_option('backwpup_cfg_logfolder'); $log_folder = BackWPup_File::get_absolute_path($log_folder); $this->logfile = $log_folder . 'backwpup_log_' . BackWPup::get_plugin_data('hash') . '_' . date('Y-m-d_H-i-s', current_time('timestamp')) . '.html'; //write settings to job BackWPup_Option::update($this->job['jobid'], 'lastrun', $this->start_time); BackWPup_Option::update($this->job['jobid'], 'logfile', $this->logfile); //Set current logfile BackWPup_Option::update($this->job['jobid'], 'lastbackupdownloadurl', ''); //Set needed job values $this->timestamp_last_update = microtime(true); $this->exclude_from_backup = explode(',', trim($this->job['fileexclude'])); $this->exclude_from_backup = array_unique($this->exclude_from_backup); //setup job steps $this->steps_data['CREATE']['CALLBACK'] = ''; $this->steps_data['CREATE']['NAME'] = __('Job Start', 'backwpup'); $this->steps_data['CREATE']['STEP_TRY'] = 0; //ADD Job types file /* @var $job_type_class BackWPup_JobTypes */ $job_need_dest = false; if ($job_types = BackWPup::get_job_types()) { foreach ($job_types as $id => $job_type_class) { if (in_array($id, $this->job['type'], true) && $job_type_class->creates_file()) { $this->steps_todo[] = 'JOB_' . $id; $this->steps_data['JOB_' . $id]['NAME'] = $job_type_class->info['description']; $this->steps_data['JOB_' . $id]['STEP_TRY'] = 0; $this->steps_data['JOB_' . $id]['SAVE_STEP_TRY'] = 0; $job_need_dest = true; } } } //add destinations and create archive if a job where files to backup if ($job_need_dest) { //Create manifest file $this->steps_todo[] = 'CREATE_MANIFEST'; $this->steps_data['CREATE_MANIFEST']['NAME'] = __('Creates manifest file', 'backwpup'); $this->steps_data['CREATE_MANIFEST']['STEP_TRY'] = 0; $this->steps_data['CREATE_MANIFEST']['SAVE_STEP_TRY'] = 0; //Add archive creation and backup filename on backup type archive if ($this->job['backuptype'] == 'archive') { //get Backup folder if destination folder set if (in_array('FOLDER', $this->job['destinations'], true)) { $this->backup_folder = $this->job['backupdir']; //check backup folder if (!empty($this->backup_folder)) { $this->backup_folder = BackWPup_File::get_absolute_path($this->backup_folder); $this->job['backupdir'] = $this->backup_folder; } } //set temp folder to backup folder if not set because we need one if (!$this->backup_folder || $this->backup_folder == '/') { $this->backup_folder = BackWPup::get_plugin_data('TEMP'); } //Create backup archive full file name $this->backup_file = $this->generate_filename($this->job['archivename'], $this->job['archiveformat']); //add archive create $this->steps_todo[] = 'CREATE_ARCHIVE'; $this->steps_data['CREATE_ARCHIVE']['NAME'] = __('Creates archive', 'backwpup'); $this->steps_data['CREATE_ARCHIVE']['STEP_TRY'] = 0; $this->steps_data['CREATE_ARCHIVE']['SAVE_STEP_TRY'] = 0; } //ADD Destinations /* @var BackWPup_Destinations $dest_class */ foreach (BackWPup::get_registered_destinations() as $id => $dest) { if (!in_array($id, $this->job['destinations'], true) || empty($dest['class'])) { continue; } $dest_class = BackWPup::get_destination($id); if ($dest_class->can_run($this->job)) { if ($this->job['backuptype'] == 'sync') { if ($dest['can_sync']) { $this->steps_todo[] = 'DEST_SYNC_' . $id; $this->steps_data['DEST_SYNC_' . $id]['NAME'] = $dest['info']['description']; $this->steps_data['DEST_SYNC_' . $id]['STEP_TRY'] = 0; $this->steps_data['DEST_SYNC_' . $id]['SAVE_STEP_TRY'] = 0; } } else { $this->steps_todo[] = 'DEST_' . $id; $this->steps_data['DEST_' . $id]['NAME'] = $dest['info']['description']; $this->steps_data['DEST_' . $id]['STEP_TRY'] = 0; $this->steps_data['DEST_' . $id]['SAVE_STEP_TRY'] = 0; } } } } //ADD Job type no file if ($job_types = BackWPup::get_job_types()) { foreach ($job_types as $id => $job_type_class) { if (in_array($id, $this->job['type'], true) && !$job_type_class->creates_file()) { $this->steps_todo[] = 'JOB_' . $id; $this->steps_data['JOB_' . $id]['NAME'] = $job_type_class->info['description']; $this->steps_data['JOB_' . $id]['STEP_TRY'] = 0; $this->steps_data['JOB_' . $id]['SAVE_STEP_TRY'] = 0; } } } $this->steps_todo[] = 'END'; $this->steps_data['END']['NAME'] = __('End of Job', 'backwpup'); $this->steps_data['END']['STEP_TRY'] = 1; //must write working data $this->write_running_file(); //set log level $this->log_level = get_site_option('backwpup_cfg_loglevel', 'normal_translated'); if (!in_array($this->log_level, array('normal_translated', 'normal', 'debug_translated', 'debug'), true)) { $this->log_level = 'normal_translated'; } //create log file $head = ''; $info = ''; $head .= "<!DOCTYPE html>" . PHP_EOL; $head .= "<html lang=\"" . str_replace('_', '-', get_locale()) . "\">" . PHP_EOL; $head .= "<head>" . PHP_EOL; $head .= "<meta charset=\"" . get_bloginfo('charset') . "\" />" . PHP_EOL; $head .= "<title>" . sprintf(__('BackWPup log for %1$s from %2$s at %3$s', 'backwpup'), $this->job['name'], date_i18n(get_option('date_format')), date_i18n(get_option('time_format'))) . "</title>" . PHP_EOL; $head .= "<meta name=\"robots\" content=\"noindex, nofollow\" />" . PHP_EOL; $head .= "<meta name=\"copyright\" content=\"Copyright © 2012 - " . date('Y') . " Inpsyde GmbH\" />" . PHP_EOL; $head .= "<meta name=\"author\" content=\"Inpsyde GmbH\" />" . PHP_EOL; $head .= "<meta name=\"generator\" content=\"BackWPup " . BackWPup::get_plugin_data('Version') . "\" />" . PHP_EOL; $head .= "<meta http-equiv=\"cache-control\" content=\"no-cache\" />" . PHP_EOL; $head .= "<meta http-equiv=\"pragma\" content=\"no-cache\" />" . PHP_EOL; $head .= "<meta name=\"date\" content=\"" . date('c') . "\" />" . PHP_EOL; $head .= str_pad('<meta name="backwpup_errors" content="0" />', 100) . PHP_EOL; $head .= str_pad('<meta name="backwpup_warnings" content="0" />', 100) . PHP_EOL; $head .= "<meta name=\"backwpup_jobid\" content=\"" . $this->job['jobid'] . "\" />" . PHP_EOL; $head .= "<meta name=\"backwpup_jobname\" content=\"" . esc_attr($this->job['name']) . "\" />" . PHP_EOL; $head .= "<meta name=\"backwpup_jobtype\" content=\"" . implode('+', $this->job['type']) . "\" />" . PHP_EOL; $head .= str_pad('<meta name="backwpup_backupfilesize" content="0" />', 100) . PHP_EOL; $head .= str_pad('<meta name="backwpup_jobruntime" content="0" />', 100) . PHP_EOL; $head .= '</head>' . PHP_EOL; $head .= '<body style="margin:0;padding:3px;font-family:monospace;font-size:12px;line-height:15px;background-color:black;color:#c0c0c0;white-space:nowrap;">' . PHP_EOL; $info .= sprintf(_x('[INFO] %1$s %2$s; A project of Inpsyde GmbH', 'Plugin name; Plugin Version; plugin url', 'backwpup'), BackWPup::get_plugin_data('name'), BackWPup::get_plugin_data('Version'), __('http://backwpup.com', 'backwpup')) . '<br />' . PHP_EOL; $info .= sprintf(_x('[INFO] WordPress %1$s on %2$s', 'WordPress Version; Blog url', 'backwpup'), BackWPup::get_plugin_data('wp_version'), esc_attr(site_url('/'))) . '<br />' . PHP_EOL; $level = __('Normal', 'backwpup'); $translated = ''; if ($this->is_debug()) { $level = __('Debug', 'backwpup'); } if (is_textdomain_loaded('backwpup')) { $translated = __('(translated)', 'backwpup'); } $info .= sprintf(__('[INFO] Log Level: %1$s %2$s', 'backwpup'), $level, $translated) . '<br />' . PHP_EOL; $job_name = esc_attr($this->job['name']); if ($this->is_debug()) { $job_name .= '; ' . implode('+', $this->job['type']); } $info .= sprintf(__('[INFO] BackWPup job: %1$s', 'backwpup'), $job_name) . '<br />' . PHP_EOL; if ($this->is_debug()) { $current_user = wp_get_current_user(); $info .= sprintf(__('[INFO] Runs with user: %1$s (%2$d) ', 'backwpup'), $current_user->user_login, $current_user->ID) . '<br />' . PHP_EOL; } if ($this->job['activetype'] === 'wpcron') { //check next run $cron_next = wp_next_scheduled('backwpup_cron', array('id' => $this->job['jobid'])); if (!$cron_next || $cron_next < time()) { wp_unschedule_event($cron_next, 'backwpup_cron', array('id' => $this->job['jobid'])); $cron_next = BackWPup_Cron::cron_next($this->job['cron']); wp_schedule_single_event($cron_next, 'backwpup_cron', array('id' => $this->job['jobid'])); $cron_next = wp_next_scheduled('backwpup_cron', array('id' => $this->job['jobid'])); } //output scheduling if ($this->is_debug()) { if (!$cron_next) { $cron_next = __('Not scheduled!', 'backwpup'); } else { $cron_next = date_i18n('D, j M Y @ H:i', $cron_next + get_option('gmt_offset') * 3600, true); } $info .= sprintf(__('[INFO] Cron: %s; Next: %s ', 'backwpup'), $this->job['cron'], $cron_next) . '<br />' . PHP_EOL; } } elseif ($this->job['activetype'] == 'link' && $this->is_debug()) { $info .= __('[INFO] BackWPup job start with link is active', 'backwpup') . '<br />' . PHP_EOL; } elseif ($this->job['activetype'] == 'easycron' && $this->is_debug()) { $info .= __('[INFO] BackWPup job start with EasyCron.com', 'backwpup') . '<br />' . PHP_EOL; //output scheduling if ($this->is_debug()) { $cron_next = BackWPup_Cron::cron_next($this->job['cron']); $cron_next = date_i18n('D, j M Y @ H:i', $cron_next + get_option('gmt_offset') * 3600, true); $info .= sprintf(__('[INFO] Cron: %s; Next: %s ', 'backwpup'), $this->job['cron'], $cron_next) . '<br />' . PHP_EOL; } } elseif ($this->is_debug()) { $info .= __('[INFO] BackWPup no automatic job start configured', 'backwpup') . '<br />' . PHP_EOL; } if ($this->is_debug()) { if ($start_type == 'cronrun') { $info .= __('[INFO] BackWPup job started from wp-cron', 'backwpup') . '<br />' . PHP_EOL; } elseif ($start_type == 'runnow' || $start_type == 'runnowalt') { $info .= __('[INFO] BackWPup job started manually', 'backwpup') . '<br />' . PHP_EOL; } elseif ($start_type == 'runext') { $info .= __('[INFO] BackWPup job started from external url', 'backwpup') . '<br />' . PHP_EOL; } elseif ($start_type == 'runcli') { $info .= __('[INFO] BackWPup job started form commandline interface', 'backwpup') . '<br />' . PHP_EOL; } $bit = ''; if (PHP_INT_SIZE === 4) { $bit = ' (32bit)'; } if (PHP_INT_SIZE === 8) { $bit = ' (64bit)'; } $info .= __('[INFO] PHP ver.:', 'backwpup') . ' ' . PHP_VERSION . $bit . '; ' . PHP_SAPI . '; ' . PHP_OS . '<br />' . PHP_EOL; $info .= sprintf(__('[INFO] Maximum PHP script execution time is %1$d seconds', 'backwpup'), ini_get('max_execution_time')) . '<br />' . PHP_EOL; if (php_sapi_name() != 'cli') { $job_max_execution_time = get_site_option('backwpup_cfg_jobmaxexecutiontime'); if (!empty($job_max_execution_time)) { $info .= sprintf(__('[INFO] Script restart time is configured to %1$d seconds', 'backwpup'), $job_max_execution_time) . '<br />' . PHP_EOL; } } $info .= sprintf(__('[INFO] MySQL ver.: %s', 'backwpup'), $wpdb->get_var("SELECT VERSION() AS version")) . '<br />' . PHP_EOL; if (isset($_SERVER['SERVER_SOFTWARE'])) { $info .= sprintf(__('[INFO] Web Server: %s', 'backwpup'), $_SERVER['SERVER_SOFTWARE']) . '<br />' . PHP_EOL; } if (function_exists('curl_init')) { $curlversion = curl_version(); $info .= sprintf(__('[INFO] curl ver.: %1$s; %2$s', 'backwpup'), $curlversion['version'], $curlversion['ssl_version']) . '<br />' . PHP_EOL; } $info .= sprintf(__('[INFO] Temp folder is: %s', 'backwpup'), BackWPup::get_plugin_data('TEMP')) . '<br />' . PHP_EOL; } if ($this->is_debug()) { $logfile = $this->logfile; } else { $logfile = basename($this->logfile); } $info .= sprintf(__('[INFO] Logfile is: %s', 'backwpup'), $logfile) . '<br />' . PHP_EOL; if (!empty($this->backup_file) && $this->job['backuptype'] === 'archive') { if ($this->is_debug()) { $backupfile = $this->backup_folder . $this->backup_file; } else { $backupfile = $this->backup_file; } $info .= sprintf(__('[INFO] Backup file is: %s', 'backwpup'), $backupfile) . '<br />' . PHP_EOL; } else { $info .= sprintf(__('[INFO] Backup type is: %s', 'backwpup'), $this->job['backuptype']) . '<br />' . PHP_EOL; } //output info on cli if (php_sapi_name() == 'cli' && defined('STDOUT')) { fwrite(STDOUT, strip_tags($info)); } if (!file_put_contents($this->logfile, $head . $info, FILE_APPEND)) { $this->logfile = ''; $this->log(__('Could not write log file', 'backwpup'), E_USER_ERROR); } //test for destinations if ($job_need_dest) { $desttest = false; foreach ($this->steps_todo as $deststeptest) { if (substr($deststeptest, 0, 5) == 'DEST_') { $desttest = true; break; } } if (!$desttest) { $this->log(__('No destination correctly defined for backup! Please correct job settings.', 'backwpup'), E_USER_ERROR); $this->steps_todo = array('END'); } } //test backup folder if (!empty($this->backup_folder)) { $folder_message = BackWPup_File::check_folder($this->backup_folder, true); if (!empty($folder_message)) { $this->log($folder_message, E_USER_ERROR); $this->steps_todo = array('END'); } } //Set start as done $this->steps_done[] = 'CREATE'; }
/** * */ public static function load() { //Create Table self::$listtable = new self(); switch (self::$listtable->current_action()) { case 'delete': //Delete Job if (!current_user_can('backwpup_jobs_edit')) { break; } if (is_array($_GET['jobs'])) { check_admin_referer('bulk-jobs'); foreach ($_GET['jobs'] as $jobid) { wp_clear_scheduled_hook('backwpup_cron', array('id' => absint($jobid))); BackWPup_Option::delete_job(absint($jobid)); } } break; case 'copy': //Copy Job if (!current_user_can('backwpup_jobs_edit')) { break; } $old_job_id = absint($_GET['jobid']); check_admin_referer('copy-job_' . $old_job_id); //create new $newjobid = BackWPup_Option::get_job_ids(); sort($newjobid); $newjobid = end($newjobid) + 1; $old_options = BackWPup_Option::get_job($old_job_id); foreach ($old_options as $key => $option) { if ($key === "jobid") { $option = $newjobid; } if ($key === "name") { $option = __('Copy of', 'backwpup') . ' ' . $option; } if ($key === "activetype") { $option = ''; } if ($key === "archivename") { $option = str_replace($old_job_id, $newjobid, $option); } if ($key === "logfile" || $key === "lastbackupdownloadurl" || $key === "lastruntime" || $key === "lastrun") { continue; } BackWPup_Option::update($newjobid, $key, $option); } break; case 'runnow': $jobid = absint($_GET['jobid']); if ($jobid) { if (!current_user_can('backwpup_jobs_start')) { wp_die(__('Sorry, you don\'t have permissions to do that.', 'backwpup')); } check_admin_referer('backwpup_job_run-runnowlink'); //check temp folder $temp_folder_message = BackWPup_File::check_folder(BackWPup::get_plugin_data('TEMP'), TRUE); BackWPup_Admin::message($temp_folder_message, TRUE); //check log folder $log_folder = get_site_option('backwpup_cfg_logfolder'); $log_folder = BackWPup_File::get_absolute_path($log_folder); $log_folder_message = BackWPup_File::check_folder($log_folder); BackWPup_Admin::message($log_folder_message, TRUE); //check backup destinations $job_types = BackWPup::get_job_types(); $job_conf_types = BackWPup_Option::get($jobid, 'type'); $creates_file = FALSE; foreach ($job_types as $id => $job_type_class) { if (in_array($id, $job_conf_types, true) && $job_type_class->creates_file()) { $creates_file = TRUE; break; } } if ($creates_file) { $job_conf_dests = BackWPup_Option::get($jobid, 'destinations'); $destinations = 0; /* @var BackWPup_Destinations $dest_class */ foreach (BackWPup::get_registered_destinations() as $id => $dest) { if (!in_array($id, $job_conf_dests, true) || empty($dest['class'])) { continue; } $dest_class = BackWPup::get_destination($id); $job_settings = BackWPup_Option::get_job($jobid); if (!$dest_class->can_run($job_settings)) { BackWPup_Admin::message(sprintf(__('The job "%s" destination "%s" is not configured properly', 'backwpup'), esc_attr(BackWPup_Option::get($jobid, 'name')), $id), TRUE); } $destinations++; } if ($destinations < 1) { BackWPup_Admin::message(sprintf(__('The job "%s" needs properly configured destinations to run!', 'backwpup'), esc_attr(BackWPup_Option::get($jobid, 'name'))), TRUE); } } //only start job if messages empty $log_messages = BackWPup_Admin::get_messages(); if (empty($log_messages)) { $old_log_file = BackWPup_Option::get($jobid, 'logfile'); BackWPup_Job::get_jobrun_url('runnow', $jobid); usleep(250000); //wait a quarter second $new_log_file = BackWPup_Option::get($jobid, 'logfile', null, false); //sleep as long as job not started $i = 0; while ($old_log_file === $new_log_file) { usleep(250000); //wait a quarter second for next try $new_log_file = BackWPup_Option::get($jobid, 'logfile', null, false); //wait maximal 10 sec. if ($i >= 40) { BackWPup_Admin::message(sprintf(__('Job "%s" has started, but not responded for 10 seconds. Please check <a href="%s">information</a>.', 'backwpup'), esc_attr(BackWPup_Option::get($jobid, 'name')), network_admin_url('admin.php') . '?page=backwpupsettings#backwpup-tab-information'), true); break 2; } $i++; } BackWPup_Admin::message(sprintf(__('Job "%s" started.', 'backwpup'), esc_attr(BackWPup_Option::get($jobid, 'name')))); } } break; case 'abort': //Abort Job if (!current_user_can('backwpup_jobs_start')) { break; } check_admin_referer('abort-job'); if (!file_exists(BackWPup::get_plugin_data('running_file'))) { break; } //abort BackWPup_Job::user_abort(); BackWPup_Admin::message(__('Job will be terminated.', 'backwpup')); break; default: do_action('backwpup_page_jobs_load', self::$listtable->current_action()); break; } self::$listtable->prepare_items(); }
/** * */ public static function load() { //Create Table self::$listtable = new self(); switch (self::$listtable->current_action()) { case 'delete': //Delete Job if (!current_user_can('backwpup_jobs_edit')) { break; } if (is_array($_GET['jobs'])) { check_admin_referer('bulk-jobs'); foreach ($_GET['jobs'] as $jobid) { wp_clear_scheduled_hook('backwpup_cron', array('id' => $jobid)); BackWPup_Option::delete_job($jobid); } } break; case 'copy': //Copy Job if (!current_user_can('backwpup_jobs_edit')) { break; } $old_job_id = (int) $_GET['jobid']; check_admin_referer('copy-job_' . $_GET['jobid']); //create new $newjobid = BackWPup_Option::get_job_ids(); sort($newjobid); $newjobid = end($newjobid) + 1; $old_options = BackWPup_Option::get_job($old_job_id); foreach ($old_options as $key => $option) { if ($key == "jobid") { $option = $newjobid; } if ($key == "name") { $option = __('Copy of', 'backwpup') . ' ' . $option; } if ($key == "activetype") { $option = ''; } if ($key == "archivename") { $option = str_replace($_GET['jobid'], $newjobid, $option); } if ($key == "logfile" || $key == "lastbackupdownloadurl" || $key == "lastruntime" || $key == "lastrun") { continue; } BackWPup_Option::update($newjobid, $key, $option); } break; case 'runnow': $_GET['jobid'] = (int) $_GET['jobid']; if (!empty($_GET['jobid'])) { if (!current_user_can('backwpup_jobs_start')) { wp_die(__('Sorry, you don\'t have permissions to do that.', 'backwpup')); } check_admin_referer('backwpup_job_run-runnowlink'); //check temp folder $temp_folder_message = BackWPup_File::check_folder(BackWPup::get_plugin_data('TEMP'), TRUE); BackWPup_Admin::message($temp_folder_message, TRUE); //check log folder $log_folder = get_site_option('backwpup_cfg_logfolder'); $log_folder = BackWPup_File::get_absolute_path($log_folder); $log_folder_message = BackWPup_File::check_folder($log_folder); BackWPup_Admin::message($log_folder_message, TRUE); //check backup destinations $job_types = BackWPup::get_job_types(); $job_conf_types = BackWPup_Option::get($_GET['jobid'], 'type'); $creates_file = FALSE; foreach ($job_types as $id => $job_type_class) { if (in_array($id, $job_conf_types) && $job_type_class->creates_file()) { $creates_file = TRUE; break; } } if ($creates_file) { $job_conf_dests = BackWPup_Option::get($_GET['jobid'], 'destinations'); $destinations = 0; /* @var BackWPup_Destinations $dest_class */ foreach (BackWPup::get_registered_destinations() as $id => $dest) { if (!in_array($id, $job_conf_dests) || empty($dest['class'])) { continue; } $dest_class = BackWPup::get_destination($id); $job_settings = BackWPup_Option::get_job($_GET['jobid']); if (!$dest_class->can_run($job_settings)) { BackWPup_Admin::message(sprintf(__('The job "%s" destination "%s" is not configured properly', 'backwpup'), esc_attr(BackWPup_Option::get($_GET['jobid'], 'name')), $id), TRUE); } $destinations++; } if ($destinations < 1) { BackWPup_Admin::message(sprintf(__('The job "%s" needs properly configured destinations to run!', 'backwpup'), esc_attr(BackWPup_Option::get($_GET['jobid'], 'name'))), TRUE); } } //check server callback $raw_response = BackWPup_Job::get_jobrun_url('test'); $test_result = ''; if (is_wp_error($raw_response)) { $test_result .= sprintf(__('The HTTP response test get an error "%s"', 'backwpup'), $raw_response->get_error_message()); } $response_code = wp_remote_retrieve_response_code($raw_response); if ($response_code < 200 && $response_code > 204) { $test_result .= sprintf(__('The HTTP response test get a false http status (%s)', 'backwpup'), wp_remote_retrieve_response_code($raw_response)); } else { $response_body = wp_remote_retrieve_body($raw_response); if (FALSE === strstr($response_body, 'BackWPup Test')) { $test_result .= sprintf(__('Not expected HTTP response body: %s', 'backwpup'), esc_attr(strip_tags($response_body))); } } if (!empty($test_result)) { BackWPup_Admin::message($test_result, TRUE); } //only start job if messages empty $log_messages = BackWPup_Admin::get_messages(); if (empty($log_messages)) { $old_log_file = BackWPup_Option::get($_GET['jobid'], 'logfile'); BackWPup_Job::get_jobrun_url('runnow', $_GET['jobid']); usleep(250000); //wait a quarter second $new_log_file = BackWPup_Option::get($_GET['jobid'], 'logfile', NULL, FALSE); //sleep as long as job not started $i = 0; while ($old_log_file == $new_log_file) { usleep(250000); //wait a quarter second for next try $new_log_file = BackWPup_Option::get($_GET['jobid'], 'logfile', NULL, FALSE); //wait maximal 10 sec. if ($i >= 40) { BackWPup_Admin::message(sprintf(__('Job “%s” has started, but not responded for 10 seconds.', 'backwpup'), esc_attr(BackWPup_Option::get($_GET['jobid'], 'name'))), TRUE); break 2; } $i++; } BackWPup_Admin::message(sprintf(__('Job "%s" started.', 'backwpup'), esc_attr(BackWPup_Option::get($_GET['jobid'], 'name')))); } } break; case 'abort': //Abort Job if (!current_user_can('backwpup_jobs_start')) { break; } check_admin_referer('abort-job'); if (!file_exists(BackWPup::get_plugin_data('running_file'))) { break; } //abort BackWPup_Job::user_abort(); BackWPup_Admin::message(__('Job will be terminated.', 'backwpup')); break; default: do_action('backwpup_page_jobs_load', self::$listtable->current_action()); break; } self::$listtable->prepare_items(); }
/** * */ function __construct() { parent::__construct(array('plural' => 'backups', 'singular' => 'backup', 'ajax' => TRUE)); $this->destinations = BackWPup::get_registered_destinations(); }
/** * * This starts or restarts the job working * * @param string $start_type Start types are 'runnow', 'runnowalt', 'cronrun', 'runext', 'runcli' * @param array|int $job_settings The id of job or the settings of a job to start */ private function create($start_type, $job_settings = 0) { global $wpdb; /* @var wpdb $wpdb */ //check startype if (!in_array($start_type, array('runnow', 'runnowalt', 'cronrun', 'runext', 'runcli'))) { return; } if (is_int($job_settings)) { $this->job = BackWPup_Option::get_job($job_settings); } elseif (is_array($job_settings)) { $this->job = $job_settings; } else { return; } $this->start_time = current_time('timestamp'); $this->lastmsg = '<samp>' . __('Starting job', 'backwpup') . '</samp>'; //set Logfile $this->logfile = get_site_option('backwpup_cfg_logfolder') . 'backwpup_log_' . BackWPup::get_plugin_data('hash') . '_' . date_i18n('Y-m-d_H-i-s') . '.html'; //write settings to job if (!empty($this->job['jobid'])) { BackWPup_Option::update($this->job['jobid'], 'lastrun', $this->start_time); BackWPup_Option::update($this->job['jobid'], 'logfile', $this->logfile); //Set current logfile BackWPup_Option::update($this->job['jobid'], 'lastbackupdownloadurl', ''); } //Set needed job values $this->timestamp_last_update = microtime(TRUE); $this->exclude_from_backup = explode(',', trim($this->job['fileexclude'])); $this->exclude_from_backup = array_unique($this->exclude_from_backup); //create path to remove $this->remove_path = trailingslashit(str_replace('\\', '/', realpath(ABSPATH))); if ($this->remove_path == '/') { $this->remove_path = ''; } //setup job steps $this->steps_data['CREATE']['CALLBACK'] = ''; $this->steps_data['CREATE']['NAME'] = __('Job Start', 'backwpup'); $this->steps_data['CREATE']['STEP_TRY'] = 0; //ADD Job types file /* @var $job_type_class BackWPup_JobTypes */ $job_need_dest = FALSE; if ($job_types = BackWPup::get_job_types()) { foreach ($job_types as $id => $job_type_class) { if (in_array($id, $this->job['type']) && $job_type_class->creates_file()) { $this->steps_todo[] = 'JOB_' . $id; $this->steps_data['JOB_' . $id]['NAME'] = $job_type_class->info['description']; $this->steps_data['JOB_' . $id]['STEP_TRY'] = 0; $this->steps_data['JOB_' . $id]['SAVE_STEP_TRY'] = 0; $job_need_dest = TRUE; } } } //add destinations and create archive if a job where files to backup if ($job_need_dest) { //Create manifest file $this->steps_todo[] = 'CREATE_MANIFEST'; $this->steps_data['CREATE_MANIFEST']['NAME'] = __('Creates manifest file', 'backwpup'); $this->steps_data['CREATE_MANIFEST']['STEP_TRY'] = 0; $this->steps_data['CREATE_MANIFEST']['SAVE_STEP_TRY'] = 0; //Add archive creation and backup filename on backup type archive if ($this->job['backuptype'] == 'archive') { //get Backup folder if destination folder set if (in_array('FOLDER', $this->job['destinations'])) { $this->backup_folder = $this->job['backupdir']; //check backup folder if (!empty($this->backup_folder)) { self::check_folder($this->backup_folder, TRUE); } } //set temp folder to backup folder if not set because we need one if (!$this->backup_folder || $this->backup_folder == '/') { $this->backup_folder = BackWPup::get_plugin_data('TEMP'); } //Create backup archive full file name $this->backup_file = $this->generate_filename($this->job['archivename'], $this->job['archiveformat']); //add archive create $this->steps_todo[] = 'CREATE_ARCHIVE'; $this->steps_data['CREATE_ARCHIVE']['NAME'] = __('Creates archive', 'backwpup'); $this->steps_data['CREATE_ARCHIVE']['STEP_TRY'] = 0; $this->steps_data['CREATE_ARCHIVE']['SAVE_STEP_TRY'] = 0; } //ADD Destinations /* @var BackWPup_Destinations $dest_class */ foreach (BackWPup::get_registered_destinations() as $id => $dest) { if (!in_array($id, $this->job['destinations']) || empty($dest['class'])) { continue; } $dest_class = BackWPup::get_destination($id); if ($dest_class->can_run($this)) { if ($this->job['backuptype'] == 'sync') { if ($dest['can_sync']) { $this->steps_todo[] = 'DEST_SYNC_' . $id; $this->steps_data['DEST_SYNC_' . $id]['NAME'] = $dest['info']['description']; $this->steps_data['DEST_SYNC_' . $id]['STEP_TRY'] = 0; $this->steps_data['DEST_SYNC_' . $id]['SAVE_STEP_TRY'] = 0; } } else { $this->steps_todo[] = 'DEST_' . $id; $this->steps_data['DEST_' . $id]['NAME'] = $dest['info']['description']; $this->steps_data['DEST_' . $id]['STEP_TRY'] = 0; $this->steps_data['DEST_' . $id]['SAVE_STEP_TRY'] = 0; } } } } //ADD Job type no file if ($job_types = BackWPup::get_job_types()) { foreach ($job_types as $id => $job_type_class) { if (in_array($id, $this->job['type']) && !$job_type_class->creates_file()) { $this->steps_todo[] = 'JOB_' . $id; $this->steps_data['JOB_' . $id]['NAME'] = $job_type_class->info['description']; $this->steps_data['JOB_' . $id]['STEP_TRY'] = 0; $this->steps_data['JOB_' . $id]['SAVE_STEP_TRY'] = 0; } } } $this->steps_todo[] = 'END'; $this->steps_data['END']['NAME'] = __('End of Job', 'backwpup'); $this->steps_data['END']['STEP_TRY'] = 0; //create log file $head = ''; $head .= "<!DOCTYPE html>" . PHP_EOL; $head .= "<html lang=\"" . str_replace('_', '-', get_locale()) . "\">" . PHP_EOL; $head .= "<head>" . PHP_EOL; $head .= "<meta charset=\"" . get_bloginfo('charset') . "\" />" . PHP_EOL; $head .= "<title>" . sprintf(__('BackWPup log for %1$s from %2$s at %3$s', 'backwpup'), $this->job['name'], date_i18n(get_option('date_format')), date_i18n(get_option('time_format'))) . "</title>" . PHP_EOL; $head .= "<meta name=\"robots\" content=\"noindex, nofollow\" />" . PHP_EOL; $head .= "<meta name=\"copyright\" content=\"Copyright © 2012 - " . date_i18n('Y') . " Inpsyde GmbH\" />" . PHP_EOL; $head .= "<meta name=\"author\" content=\"Inpsyde GmbH\" />" . PHP_EOL; $head .= "<meta name=\"generator\" content=\"BackWPup " . BackWPup::get_plugin_data('Version') . "\" />" . PHP_EOL; $head .= "<meta http-equiv=\"cache-control\" content=\"no-cache\" />" . PHP_EOL; $head .= "<meta http-equiv=\"pragma\" content=\"no-cache\" />" . PHP_EOL; $head .= "<meta name=\"date\" content=\"" . date('c') . "\" />" . PHP_EOL; $head .= str_pad('<meta name="backwpup_errors" content="0" />', 100) . PHP_EOL; $head .= str_pad('<meta name="backwpup_warnings" content="0" />', 100) . PHP_EOL; if (!empty($this->job['jobid'])) { $head .= "<meta name=\"backwpup_jobid\" content=\"" . $this->job['jobid'] . "\" />" . PHP_EOL; } $head .= "<meta name=\"backwpup_jobname\" content=\"" . esc_attr($this->job['name']) . "\" />" . PHP_EOL; $head .= "<meta name=\"backwpup_jobtype\" content=\"" . implode('+', $this->job['type']) . "\" />" . PHP_EOL; $head .= str_pad('<meta name="backwpup_backupfilesize" content="0" />', 100) . PHP_EOL; $head .= str_pad('<meta name="backwpup_jobruntime" content="0" />', 100) . PHP_EOL; $head .= "</head>" . PHP_EOL; $head .= "<body style=\"margin:0;padding:3px;font-family:Fixedsys,Courier,monospace;font-size:12px;line-height:15px;background-color:#000;color:#fff;white-space:pre;\">" . PHP_EOL; $head .= sprintf(_x('[INFO] %1$s version %2$s; A project of Inpsyde GmbH', 'Plugin name; Plugin Version', 'backwpup'), BackWPup::get_plugin_data('name'), BackWPup::get_plugin_data('Version')) . PHP_EOL; $head .= sprintf(_x('[INFO] WordPress version %s', 'WordPress Version', 'backwpup'), BackWPup::get_plugin_data('wp_version')) . PHP_EOL; $head .= sprintf(__('[INFO] Blog url: %s', 'backwpup'), esc_attr(site_url('/'))) . PHP_EOL; $head .= sprintf(__('[INFO] BackWPup job: %1$s; %2$s', 'backwpup'), esc_attr($this->job['name']), implode('+', $this->job['type'])) . PHP_EOL; if ($this->job['activetype'] == 'wpcron') { //check next run $cron_next = wp_next_scheduled('backwpup_cron', array('id' => $this->job['jobid'])); if (!$cron_next || $cron_next < time()) { wp_unschedule_event($cron_next, 'backwpup_cron', array('id' => $this->job['jobid'])); $cron_next = BackWPup_Cron::cron_next($this->job['cron']); wp_schedule_single_event($cron_next, 'backwpup_cron', array('id' => $this->job['jobid'])); $cron_next = wp_next_scheduled('backwpup_cron', array('id' => $this->job['jobid'])); } //output scheduling if (!$cron_next) { $cron_next = __('Not scheduled!', 'backwpup'); } else { $cron_next = date_i18n('D, j M Y @ H:i', $cron_next + get_option('gmt_offset') * 3600, TRUE); } $head .= sprintf(__('[INFO] BackWPup cron: %s; Next: %s ', 'backwpup'), $this->job['cron'], $cron_next) . PHP_EOL; } elseif ($this->job['activetype'] == 'link') { $head .= __('[INFO] BackWPup job start with link is active', 'backwpup') . PHP_EOL; } else { $head .= __('[INFO] BackWPup no automatic job start configured', 'backwpup') . PHP_EOL; } if ($start_type == 'cronrun') { $head .= __('[INFO] BackWPup job started from wp-cron', 'backwpup') . PHP_EOL; } elseif ($start_type == 'runnow' or $start_type == 'runnowalt') { $head .= __('[INFO] BackWPup job started manually', 'backwpup') . PHP_EOL; } elseif ($start_type == 'runext') { $head .= __('[INFO] BackWPup job started from external url', 'backwpup') . PHP_EOL; } elseif ($start_type == 'runcli') { $head .= __('[INFO] BackWPup job started form commandline interface', 'backwpup') . PHP_EOL; } $head .= __('[INFO] PHP ver.:', 'backwpup') . ' ' . PHP_VERSION . '; ' . PHP_SAPI . '; ' . PHP_OS . PHP_EOL; $head .= sprintf(__('[INFO] Maximum PHP script execution time is %1$d seconds', 'backwpup'), ini_get('max_execution_time')) . PHP_EOL; $job_max_execution_time = get_site_option('backwpup_cfg_jobmaxexecutiontime'); if (!empty($job_max_execution_time)) { $head .= sprintf(__('[INFO] Script restart time is configured to %1$d seconds', 'backwpup'), $job_max_execution_time) . PHP_EOL; } if (get_site_option('backwpup_cfg_jobsteprestart')) { $head .= __('[INFO] Script restarts on every main step is activated', 'backwpup') . PHP_EOL; } $head .= sprintf(__('[INFO] MySQL ver.: %s', 'backwpup'), $wpdb->get_var("SELECT VERSION() AS version")) . PHP_EOL; if (function_exists('curl_init')) { $curlversion = curl_version(); $head .= sprintf(__('[INFO] curl ver.: %1$s; %2$s', 'backwpup'), $curlversion['version'], $curlversion['ssl_version']) . PHP_EOL; } $head .= sprintf(__('[INFO] Temp folder is: %s', 'backwpup'), BackWPup::get_plugin_data('TEMP')) . PHP_EOL; $head .= sprintf(__('[INFO] Logfile is: %s', 'backwpup'), $this->logfile) . PHP_EOL; $head .= sprintf(__('[INFO] Backup type is: %s', 'backwpup'), $this->job['backuptype']) . PHP_EOL; if (!empty($this->backup_file) && $this->job['backuptype'] == 'archive') { $head .= sprintf(__('[INFO] Backup file is: %s', 'backwpup'), $this->backup_folder . $this->backup_file) . PHP_EOL; } file_put_contents($this->logfile, $head, FILE_APPEND); //output info on cli if (defined('STDIN') && defined('STDOUT')) { fwrite(STDOUT, strip_tags($head)); } //test for destinations if ($job_need_dest) { $desttest = FALSE; foreach ($this->steps_todo as $deststeptest) { if (substr($deststeptest, 0, 5) == 'DEST_') { $desttest = TRUE; break; } } if (!$desttest) { $this->log(__('No destination correctly defined for backup! Please correct job settings.', 'backwpup'), E_USER_ERROR); } } //Set start as done $this->steps_done[] = 'CREATE'; //must write working data file_put_contents(BackWPup::get_plugin_data('running_file'), '<?php return ' . var_export($this, true) . ';'); }