Linux puskom-ProLiant-DL385-Gen10 5.4.0-150-generic #167~18.04.1-Ubuntu SMP Wed May 24 00:51:42 UTC 2023 x86_64
/
home
/
puskom
/
mastur
/
backwpup
/
inc
/
//home/puskom/mastur/backwpup/inc/class-page-editjob.php
<?php class BackWPup_Page_Editjob { public static function auth() { if (isset($_GET['tab'])) { $_GET['tab'] = sanitize_title_with_dashes($_GET['tab']); if (substr($_GET['tab'], 0, 5) != 'dest-' && substr($_GET['tab'], 0, 8) != 'jobtype-' && !in_array($_GET['tab'], ['job', 'cron'], true)) { $_GET['tab'] = 'job'; } } else { $_GET['tab'] = 'job'; } if (substr($_GET['tab'], 0, 5) == 'dest-') { $jobid = (int) $_GET['jobid']; $id = strtoupper(str_replace('dest-', '', $_GET['tab'])); $dest_class = BackWPup::get_destination($id); $dest_class->edit_auth($jobid); } } /** * Save Form data. */ public static function save_post_form($tab, $jobid) { if (!current_user_can('backwpup_jobs_edit')) { return __('Sorry, you don\'t have permissions to do that.', 'backwpup'); } $job_types = BackWPup::get_job_types(); switch ($tab) { case 'job': BackWPup_Option::update($jobid, 'jobid', $jobid); //set type of backup $backuptype = 'archive'; if (class_exists(\BackWPup_Pro::class, false) && $_POST['backuptype'] === 'sync') { $backuptype = 'sync'; } BackWPup_Option::update($jobid, 'backuptype', $backuptype); $type_post = isset($_POST['type']) ? (array) $_POST['type'] : []; //check existing type foreach ($type_post as $key => $value) { if (!isset($job_types[$value])) { unset($type_post[$key]); } } sort($type_post); BackWPup_Option::update($jobid, 'type', $type_post); //test if job type makes backup $makes_file = false; /** @var BackWPup_JobTypes $job_type */ foreach ($job_types as $type_id => $job_type) { if (in_array($type_id, $type_post, true)) { if ($job_type->creates_file()) { $makes_file = true; break; } } } if ($makes_file) { $destinations_post = isset($_POST['destinations']) ? (array) $_POST['destinations'] : []; } else { $destinations_post = []; } $destinations = BackWPup::get_registered_destinations(); foreach ($destinations_post as $key => $dest_id) { //remove all destinations that not exists if (!isset($destinations[$dest_id])) { unset($destinations_post[$key]); continue; } //if sync remove all not sync destinations if ($backuptype === 'sync') { if (!$destinations[$dest_id]['can_sync']) { unset($destinations_post[$key]); } } } sort($destinations_post); BackWPup_Option::update($jobid, 'destinations', $destinations_post); $name = sanitize_text_field(trim($_POST['name'])); if (!$name || $name === __('New Job', 'backwpup')) { $name = sprintf(__('Job with ID %d', 'backwpup'), $jobid); } BackWPup_Option::update($jobid, 'name', $name); $emails = explode(',', sanitize_text_field($_POST['mailaddresslog'])); foreach ($emails as $key => $email) { $emails[$key] = sanitize_email(trim($email)); if (!is_email($emails[$key])) { unset($emails[$key]); } } $mailaddresslog = implode(', ', $emails); BackWPup_Option::update($jobid, 'mailaddresslog', $mailaddresslog); $mailaddresssenderlog = trim($_POST['mailaddresssenderlog']); BackWPup_Option::update($jobid, 'mailaddresssenderlog', $mailaddresssenderlog); BackWPup_Option::update($jobid, 'mailerroronly', !empty($_POST['mailerroronly'])); $archiveformat = in_array($_POST['archiveformat'], [ '.zip', '.tar', '.tar.gz', ], true) ? $_POST['archiveformat'] : '.zip'; BackWPup_Option::update($jobid, 'archiveformat', $archiveformat); BackWPup_Option::update($jobid, 'archiveencryption', !empty($_POST['archiveencryption'])); BackWPup_Option::update($jobid, 'archivename', BackWPup_Job::sanitize_file_name(BackWPup_Option::normalize_archive_name($_POST['archivename'], $jobid, false))); break; case 'cron': $activetype = in_array($_POST['activetype'], [ '', 'wpcron', 'easycron', 'link', ], true) ? $_POST['activetype'] : ''; BackWPup_Option::update($jobid, 'activetype', $activetype); $cronselect = $_POST['cronselect'] === 'advanced' ? 'advanced' : 'basic'; BackWPup_Option::update($jobid, 'cronselect', $cronselect); //save advanced if ($cronselect === 'advanced') { if (empty($_POST['cronminutes']) || $_POST['cronminutes'][0] === '*') { if (!empty($_POST['cronminutes'][1])) { $_POST['cronminutes'] = ['*/' . $_POST['cronminutes'][1]]; } else { $_POST['cronminutes'] = ['*']; } } if (empty($_POST['cronhours']) || $_POST['cronhours'][0] === '*') { if (!empty($_POST['cronhours'][1])) { $_POST['cronhours'] = ['*/' . $_POST['cronhours'][1]]; } else { $_POST['cronhours'] = ['*']; } } if (empty($_POST['cronmday']) || $_POST['cronmday'][0] === '*') { if (!empty($_POST['cronmday'][1])) { $_POST['cronmday'] = ['*/' . $_POST['cronmday'][1]]; } else { $_POST['cronmday'] = ['*']; } } if (empty($_POST['cronmon']) || $_POST['cronmon'][0] === '*') { if (!empty($_POST['cronmon'][1])) { $_POST['cronmon'] = ['*/' . $_POST['cronmon'][1]]; } else { $_POST['cronmon'] = ['*']; } } if (empty($_POST['cronwday']) || $_POST['cronwday'][0] === '*') { if (!empty($_POST['cronwday'][1])) { $_POST['cronwday'] = ['*/' . $_POST['cronwday'][1]]; } else { $_POST['cronwday'] = ['*']; } } $cron = implode(',', $_POST['cronminutes']) . ' ' . implode(',', $_POST['cronhours']) . ' ' . implode(',', $_POST['cronmday']) . ' ' . implode(',', $_POST['cronmon']) . ' ' . implode(',', $_POST['cronwday']); BackWPup_Option::update($jobid, 'cron', $cron); } else { //Save basic if ($_POST['cronbtype'] === 'mon') { BackWPup_Option::update($jobid, 'cron', absint($_POST['moncronminutes']) . ' ' . absint($_POST['moncronhours']) . ' ' . absint($_POST['moncronmday']) . ' * *'); } if ($_POST['cronbtype'] === 'week') { BackWPup_Option::update($jobid, 'cron', absint($_POST['weekcronminutes']) . ' ' . absint($_POST['weekcronhours']) . ' * * ' . absint($_POST['weekcronwday'])); } if ($_POST['cronbtype'] === 'day') { BackWPup_Option::update($jobid, 'cron', absint($_POST['daycronminutes']) . ' ' . absint($_POST['daycronhours']) . ' * * *'); } if ($_POST['cronbtype'] === 'hour') { BackWPup_Option::update($jobid, 'cron', absint($_POST['hourcronminutes']) . ' * * * *'); } } //reschedule $activetype = BackWPup_Option::get($jobid, 'activetype'); wp_clear_scheduled_hook('backwpup_cron', ['arg' => $jobid]); if ($activetype === 'wpcron') { $cron_next = BackWPup_Cron::cron_next(BackWPup_Option::get($jobid, 'cron')); wp_schedule_single_event($cron_next, 'backwpup_cron', ['arg' => $jobid]); } $easy_cron_job_id = BackWPup_Option::get($jobid, 'easycronjobid'); if ($activetype === 'easycron') { BackWPup_EasyCron::update($jobid); } elseif ($easy_cron_job_id) { BackWPup_EasyCron::delete($jobid); } break; default: if (strstr($tab, 'dest-')) { $dest_class = BackWPup::get_destination(str_replace('dest-', '', $tab)); $dest_class->edit_form_post_save($jobid); } if (strstr($tab, 'jobtype-')) { $id = strtoupper(str_replace('jobtype-', '', $tab)); $job_types[$id]->edit_form_post_save($jobid); } } //saved message $messages = BackWPup_Admin::get_messages(); if (empty($messages['error'])) { $url = BackWPup_Job::get_jobrun_url('runnowlink', $jobid); BackWPup_Admin::message(sprintf(__('Changes for job <i>%s</i> saved.', 'backwpup'), BackWPup_Option::get($jobid, 'name')) . ' <a href="' . network_admin_url('admin.php') . '?page=backwpupjobs">' . __('Jobs overview', 'backwpup') . '</a> | <a href="' . $url['url'] . '">' . __('Run now', 'backwpup') . '</a>'); } } /** * Output css. */ public static function admin_print_styles() { ?> <style type="text/css" media="screen"> #cron-min, #cron-hour, #cron-day, #cron-month, #cron-weekday { overflow: auto; white-space: nowrap; height: 7em; } #cron-min-box, #cron-hour-box, #cron-day-box, #cron-month-box, #cron-weekday-box { border: 1px solid gray; margin: 10px 0 10px 10px; padding: 2px 2px; width: 100px; float: left; } #wpcronbasic { border-collapse: collapse; } #wpcronbasic th, #wpcronbasic td { width:80px; border-bottom: 1px solid gray; } </style> <?php //add css for all other tabs if (substr($_GET['tab'], 0, 5) == 'dest-') { $dest_object = BackWPup::get_destination(str_replace('dest-', '', $_GET['tab'])); $dest_object->admin_print_styles(); } elseif (substr($_GET['tab'], 0, 8) == 'jobtype-') { $job_type = BackWPup::get_job_types(); $id = strtoupper(str_replace('jobtype-', '', $_GET['tab'])); $job_type[$id]->admin_print_styles(); } } /** * Output js. */ public static function admin_print_scripts() { wp_enqueue_script('backwpupgeneral'); //add js for the first tabs if ($_GET['tab'] == 'job') { if (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG) { wp_enqueue_script('backwpuptabjob', BackWPup::get_plugin_data('URL') . '/assets/js/page_edit_tab_job.js', ['jquery'], time(), true); } else { wp_enqueue_script('backwpuptabjob', BackWPup::get_plugin_data('URL') . '/assets/js/page_edit_tab_job.min.js', ['jquery'], BackWPup::get_plugin_data('Version'), true); } } elseif ($_GET['tab'] == 'cron') { if (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG) { wp_enqueue_script('backwpuptabcron', BackWPup::get_plugin_data('URL') . '/assets/js/page_edit_tab_cron.js', ['jquery'], time(), true); } else { wp_enqueue_script('backwpuptabcron', BackWPup::get_plugin_data('URL') . '/assets/js/page_edit_tab_cron.min.js', ['jquery'], BackWPup::get_plugin_data('Version'), true); } } //add js for all other tabs elseif (strstr($_GET['tab'], 'dest-')) { $dest_object = BackWPup::get_destination(str_replace('dest-', '', $_GET['tab'])); $dest_object->admin_print_scripts(); } elseif (strstr($_GET['tab'], 'jobtype-')) { $job_type = BackWPup::get_job_types(); $id = strtoupper(str_replace('jobtype-', '', $_GET['tab'])); $job_type[$id]->admin_print_scripts(); } } public static function page() { if (!empty($_GET['jobid'])) { $jobid = (int) $_GET['jobid']; } else { //generate jobid if not exists $jobid = BackWPup_Option::next_job_id(); } $destinations = BackWPup::get_registered_destinations(); $job_types = BackWPup::get_job_types(); // Is encryption disabled? $disable_encryption = true; if ((get_site_option('backwpup_cfg_encryption') === 'symmetric' && get_site_option('backwpup_cfg_encryptionkey')) || (get_site_option('backwpup_cfg_encryption') === 'asymmetric' && get_site_option('backwpup_cfg_publickey')) ) { $disable_encryption = false; } $archive_format_option = BackWPup_Option::get($jobid, 'archiveformat'); ?> <div class="wrap" id="backwpup-page"> <?php echo '<h1>' . sprintf(esc_html__('%1$s › Job: %2$s', 'backwpup'), BackWPup::get_plugin_data('name'), '<span id="h2jobtitle">' . esc_html(BackWPup_Option::get($jobid, 'name')) . '</span>') . '</h1>'; //default tabs $tabs = ['job' => ['name' => esc_html__('General', 'backwpup'), 'display' => true], 'cron' => ['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, true)) { $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, true)) { $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-' . esc_attr($id) . '" data-nexttab="' . esc_attr($id) . '"' . $display . '>' . esc_html($tab['name']) . '</a>'; } echo '</h2>'; //display messages BackWPup_Admin::display_messages(); echo '<form name="editjob" id="editjob" method="post" action="' . esc_attr(admin_url('admin-post.php')) . '">'; echo '<input type="hidden" id="jobid" name="jobid" value="' . esc_attr($jobid) . '" />'; echo '<input type="hidden" name="tab" value="' . esc_attr($_GET['tab']) . '" />'; echo '<input type="hidden" name="nexttab" value="' . esc_attr($_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': ?> <div class="table" id="info-tab-job"> <h3><?php esc_html_e('Job Name', 'backwpup'); ?></h3> <table class="form-table"> <tr> <th scope="row"><label for="name"><?php esc_html_e('Please name this job.', 'backwpup'); ?></label></th> <td> <input name="name" type="text" id="name" placeholder="<?php esc_attr_e('Job Name', 'backwpup'); ?>" data-empty="<?php esc_attr_e('New Job', 'backwpup'); ?>" value="<?php echo esc_attr(BackWPup_Option::get($jobid, 'name')); ?>" class="regular-text" /> </td> </tr> </table> <h3><?php esc_html_e('Job Tasks', 'backwpup'); ?></h3> <table class="form-table"> <tr> <th scope="row"><?php esc_html_e('This job is a …', 'backwpup'); ?></th> <td> <fieldset> <legend class="screen-reader-text"><span><?php esc_html_e('Job tasks', 'backwpup'); ?></span> </legend><?php foreach ($job_types as $id => $typeclass) { $addclass = ''; if ($typeclass->creates_file()) { $addclass .= ' filetype'; } echo '<p><label for="jobtype-select-' . strtolower($id) . '"><input class="jobtype-select checkbox' . $addclass . '" id="jobtype-select-' . strtolower($id) . '" type="checkbox" ' . checked(true, in_array($id, BackWPup_Option::get($jobid, 'type'), true), false) . ' name="type[]" value="' . esc_attr($id) . '" /> ' . esc_attr($typeclass->info['description']) . '</label>'; if (!empty($typeclass->info['help'])) { echo '<br><span class="description">' . esc_attr($typeclass->info['help']) . '</span>'; } echo '</p>'; } ?></fieldset> </td> </tr> </table> <h3 class="title hasdests"><?php esc_html_e('Backup File Creation', 'backwpup'); ?></h3> <p class="hasdests"></p> <table class="form-table hasdests"> <?php if (class_exists(\BackWPup_Pro::class, false)) { ?> <tr> <th scope="row"><?php esc_html_e('Backup type', 'backwpup'); ?></th> <td> <fieldset> <legend class="screen-reader-text"> <span><?php esc_html_e('Backup type', 'backwpup'); ?></span></legend> <p> <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 esc_html_e('Synchronize file by file to destination', 'backwpup'); ?> </label> </p> <p> <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 esc_html_e('Create a backup archive', 'backwpup'); ?> </label> </p> </fieldset> </td> </tr> <?php } ?> <tr class="nosync"> <th scope="row"><label for="archivename"><?php esc_html_e('Archive name', 'backwpup'); ?></label></th> <td> <input name="archivename" type="text" id="archivename" placeholder="%Y-%m-%d_%H-%i-%s_%hash%" value="<?php echo esc_attr(BackWPup_Option::get($jobid, 'archivenamenohash')); ?>" class="regular-text code" /> <p><?php _e('<em>Note</em>: In order for backup file tracking to work, %hash% must be included anywhere in the archive name.', 'backwpup'); ?></p> <?php $archivename = BackWPup_Option::substitute_date_vars( BackWPup_Option::get($jobid, 'archivenamenohash') ); echo '<p>' . esc_html__('Preview: ', 'backwpup') . '<code><span id="archivefilename">' . esc_attr($archivename) . '</span><span id="archiveformat">' . esc_attr($archive_format_option) . '</span></code></p>'; echo '<p class="description">'; 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 = Two-digit representation 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 of 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 = Two-digit hour in 12-hour format, with leading zeros', 'backwpup') . '<br />'; echo esc_attr__('%H = Two-digit 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 />'; echo '</p>'; ?> </td> </tr> <tr class="nosync"> <th scope="row"><?php esc_html_e('Archive Format', 'backwpup'); ?></th> <td> <fieldset> <legend class="screen-reader-text"><span><?php esc_html_e('Archive Format', 'backwpup'); ?></span></legend> <?php if (class_exists(\ZipArchive::class)) { echo '<p><label for="idarchiveformat-zip"><input class="radio" type="radio"' . checked('.zip', $archive_format_option, false) . ' name="archiveformat" id="idarchiveformat-zip" value=".zip" /> ' . esc_html__('Zip', 'backwpup') . '</label></p>'; } else { echo '<p><label for="idarchiveformat-zip"><input class="radio" type="radio"' . checked('.zip', $archive_format_option, false) . ' name="archiveformat" id="idarchiveformat-zip" value=".zip" disabled="disabled" /> ' . esc_html__('Zip', 'backwpup') . '</label>'; echo '<br /><span class="description">' . esc_html(__('ZipArchive PHP class is missing, so BackWPUp will use PclZip instead.', 'backwpup')) . '</span></p>'; } echo '<p><label for="idarchiveformat-tar"><input class="radio" type="radio"' . checked('.tar', $archive_format_option, false) . ' name="archiveformat" id="idarchiveformat-tar" value=".tar" /> ' . esc_html__('Tar', 'backwpup') . '</label></p>'; if (function_exists('gzopen')) { echo '<p><label for="idarchiveformat-targz"><input class="radio" type="radio"' . checked('.tar.gz', $archive_format_option, false) . ' name="archiveformat" id="idarchiveformat-targz" value=".tar.gz" /> ' . esc_html__('Tar GZip', 'backwpup') . '</label></p>'; } else { echo '<p><label for="idarchiveformat-targz"><input class="radio" type="radio"' . checked('.tar.gz', $archive_format_option, false) . ' name="archiveformat" id="idarchiveformat-targz" value=".tar.gz" disabled="disabled" /> ' . esc_html__('Tar GZip', 'backwpup') . '</label>'; echo '<br /><span class="description">' . esc_html(sprintf(__('Disabled due to missing %s PHP function.', 'backwpup'), 'gzopen()')) . '</span></p>'; } ?> </fieldset> </td> </tr> <?php if (class_exists(\BackWPup_Pro::class, false)) { ?> <tr class="nosync"> <th scope="row"> <?php esc_html_e('Encrypt Archive', 'backwpup'); ?> </th> <td> <fieldset> <legend class="screen-reader-text"> <span><?php esc_html_e('Encrypt Archive', 'backwpup'); ?></span> </legend> <?php ?> <label for="archiveencryption"> <input type="checkbox" name="archiveencryption" id="archiveencryption" value="1"<?php if ($disable_encryption) { ?> disabled="disabled"<?php } else { checked(BackWPup_Option::get($jobid, 'archiveencryption')); } ?> /> <?php _e('Encrypt Archive', 'backwpup'); ?> </label> <?php if ($disable_encryption) { ?> <p class="description"> <?php _e('You must generate your encryption key in BackWPup Settings before you can enable this option.', 'backwpup'); ?> </p> <?php } ?> </fieldset> </td> </tr> <?php } ?> </table> <h3 class="title hasdests"><?php esc_html_e('Job Destination', 'backwpup'); ?></h3> <p class="hasdests"></p> <table class="form-table hasdests"> <tr> <th scope="row"><?php esc_html_e('Where should your backup file be stored?', 'backwpup'); ?></th> <td> <fieldset> <legend class="screen-reader-text"><span><?php esc_html_e('Where should your backup file be stored?', 'backwpup'); ?></span> </legend><?php foreach ($destinations as $id => $dest) { $syncclass = ''; if (!$dest['can_sync']) { $syncclass = 'nosync'; } echo '<p class="' . esc_attr($syncclass) . '"><label for="dest-select-' . strtolower($id) . '"><input class="checkbox" id="dest-select-' . strtolower(esc_attr($id)) . '" type="checkbox" ' . checked(true, in_array($id, BackWPup_Option::get($jobid, 'destinations'), true), false) . ' name="destinations[]" value="' . esc_attr($id) . '" ' . disabled(!empty($dest['error']), true, false) . ' /> ' . esc_attr($dest['info']['description']); if (!empty($dest['error'])) { echo '<br><span class="description">' . esc_attr($dest['error']) . '</span>'; } echo '</label></p>'; } ?></fieldset> </td> </tr> </table> <h3 class="title"><?php esc_html_e('Log Files', 'backwpup'); ?></h3> <p></p> <table class="form-table"> <tr> <th scope="row"><label for="mailaddresslog"><?php esc_html_e('Send log to email address', 'backwpup'); ?></label></th> <td> <input name="mailaddresslog" type="text" id="mailaddresslog" value="<?php echo esc_html(BackWPup_Option::get($jobid, 'mailaddresslog')); ?>" class="regular-text" /> <p class="description"><?php esc_attr_e('Leave empty to not have log sent. Or separate with , for more than one receiver.', 'backwpup'); ?></p> </td> </tr> <tr> <th scope="row"><label for="mailaddresssenderlog"><?php esc_html_e('Email FROM field', 'backwpup'); ?></label></th> <td> <input name="mailaddresssenderlog" type="text" id="mailaddresssenderlog" value="<?php echo esc_html(BackWPup_Option::get($jobid, 'mailaddresssenderlog')); ?>" class="regular-text" placeholder="<?php esc_attr_e('Your Name <mail@domain.tld>', 'backwpup'); ?>"/> </td> </tr> <tr> <th scope="row"><?php esc_html_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 esc_html_e('Send email with log only when errors occur during job execution.', 'backwpup'); ?> </label> </td> </tr> </table> </div> <?php break; case 'cron': ?> <div class="table" id="info-tab-cron"> <h3 class="title"><?php esc_html_e('Job Schedule', 'backwpup'); ?></h3> <p></p> <table class="form-table"> <tr> <th scope="row"><?php esc_html_e('Start job', 'backwpup'); ?></th> <td> <fieldset> <legend class="screen-reader-text"><span><?php esc_html_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 esc_html_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 esc_html_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" type="radio"<?php checked('easycron', BackWPup_Option::get($jobid, 'activetype'), true); ?> name="activetype" id="idactivetype-easycron"<?php echo $disabled; ?> value="easycron" /> <?php _e('with <a href="https://www.easycron.com?ref=36673" title="Affiliate Link!">EasyCron.com</a>', 'backwpup'); if (empty($easycron_api)) { echo ' - <span class="description">' . sprintf(__('First setup <a href="%s">API Key</a>.', 'backwpup'), network_admin_url('admin.php') . '?page=backwpupsettings#backwpup-tab-apikey') . '</span>'; } ?> </label><br/> <?php $url = BackWPup_Job::get_jobrun_url('runext', BackWPup_Option::get($jobid, 'jobid')); ?> <label for="idactivetype-link"> <input class="radio" type="radio"<?php checked('link', BackWPup_Option::get($jobid, 'activetype'), true); ?> name="activetype" id="idactivetype-link" value="link" /> <?php esc_html_e('with a link', 'backwpup'); ?> <code><a href="<?php echo $url['url']; ?>" target="_blank"><?php echo esc_html($url['url']); ?></a></code><br> <span class="description"><?php esc_attr_e('Copy the link for an external start. This option has to be activated to make the link work.', 'backwpup'); ?></span> </label> </fieldset> </td> </tr> <tr> <th scope="row"><?php esc_html_e('Start job with CLI', 'backwpup'); ?></th> <td> <?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 esc_html_e('Schedule execution time', 'backwpup'); ?></h3> <?php BackWPup_Page_Editjob::ajax_cron_text(['cronstamp' => BackWPup_Option::get($jobid, 'cron'), 'crontype' => BackWPup_Option::get($jobid, 'cronselect')]); ?> <table class="form-table wpcron"> <tr> <th scope="row"><?php esc_html_e('Scheduler type', 'backwpup'); ?></th> <td> <fieldset> <legend class="screen-reader-text"><span><?php esc_html_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 esc_html_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 esc_html_e('advanced', 'backwpup'); ?></label><br/> </fieldset> </td> </tr> <?php $cronstr = []; [$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" /> ' . esc_html__('monthly', 'backwpup'); ?></label></td> <td><select name="moncronmday"><?php for ($i = 1; $i <= 31; ++$i) { echo '<option ' . selected(in_array((string) $i, $mday, true), true, false) . ' value="' . esc_attr($i) . '" />' . esc_html__('on', 'backwpup') . ' ' . esc_html($i) . '</option>'; } ?></select></td> <td><select name="moncronhours"><?php for ($i = 0; $i < 24; ++$i) { echo '<option ' . selected(in_array((string) $i, $hours, true), true, false) . ' value="' . esc_attr($i) . '" />' . esc_html($i) . '</option>'; } ?></select></td> <td><select name="moncronminutes"><?php for ($i = 0; $i < 60; $i = $i + 5) { echo '<option ' . selected(in_array((string) $i, $minutes, true), true, false) . ' value="' . esc_attr($i) . '" />' . esc_html($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" /> ' . esc_html__('weekly', 'backwpup'); ?></label></td> <td><select name="weekcronwday"> <?php echo '<option ' . selected(in_array('0', $wday, true), true, false) . ' value="0" />' . esc_html__('Sunday', 'backwpup') . '</option>'; echo '<option ' . selected(in_array('1', $wday, true), true, false) . ' value="1" />' . esc_html__('Monday', 'backwpup') . '</option>'; echo '<option ' . selected(in_array('2', $wday, true), true, false) . ' value="2" />' . esc_html__('Tuesday', 'backwpup') . '</option>'; echo '<option ' . selected(in_array('3', $wday, true), true, false) . ' value="3" />' . esc_html__('Wednesday', 'backwpup') . '</option>'; echo '<option ' . selected(in_array('4', $wday, true), true, false) . ' value="4" />' . esc_html__('Thursday', 'backwpup') . '</option>'; echo '<option ' . selected(in_array('5', $wday, true), true, false) . ' value="5" />' . esc_html__('Friday', 'backwpup') . '</option>'; echo '<option ' . selected(in_array('6', $wday, true), true, false) . ' value="6" />' . esc_html__('Saturday', 'backwpup') . '</option>'; ?> </select></td> <td><select name="weekcronhours"><?php for ($i = 0; $i < 24; ++$i) { echo '<option ' . selected(in_array((string) $i, $hours, true), true, false) . ' value="' . esc_attr($i) . '" />' . esc_html($i) . '</option>'; } ?></select></td> <td><select name="weekcronminutes"><?php for ($i = 0; $i < 60; $i = $i + 5) { echo '<option ' . selected(in_array((string) $i, $minutes, true), true, false) . ' value="' . esc_attr($i) . '" />' . esc_html($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" /> ' . esc_html__('daily', 'backwpup'); ?></label></td> <td></td> <td><select name="daycronhours"><?php for ($i = 0; $i < 24; ++$i) { echo '<option ' . selected(in_array((string) $i, $hours, true), true, false) . ' value="' . esc_attr($i) . '" />' . esc_html($i) . '</option>'; } ?></select></td> <td><select name="daycronminutes"><?php for ($i = 0; $i < 60; $i = $i + 5) { echo '<option ' . selected(in_array((string) $i, $minutes, true), true, false) . ' value="' . esc_attr($i) . '" />' . esc_html($i) . '</option>'; } ?></select></td> </tr> <tr> <td><label for="idcronbtype-hour"><?php echo '<input class="radio" type="radio"' . checked('*', $hours[0], false) . ' name="cronbtype" id="idcronbtype-hour" value="hour" /> ' . esc_html__('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((string) $i, $minutes, true), true, false) . ' value="' . esc_attr($i) . '" />' . esc_html($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((string) $i, $minutes, true), true, false) . ' name="cronminutes[]" id="idcronminutes-' . esc_attr($i) . '" value="' . esc_attr($i) . '" /> ' . esc_attr($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[]" id="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((string) $i, $hours, true), true, false) . ' name="cronhours[]" id="idcronhours-' . esc_attr($i) . '" value="' . esc_attr($i) . '" /> ' . esc_html($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((string) $i, $mday, true), true, false) . ' name="cronmday[]" id="idcronmday-' . esc_attr($i) . '" value="' . esc_attr($i) . '" /> ' . esc_html($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="*" /> ' . esc_html__('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" /> ' . esc_html__('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" /> ' . esc_html__('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" /> ' . esc_html__('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" /> ' . esc_html__('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" /> ' . esc_html__('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" /> ' . esc_html__('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" /> ' . esc_html__('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" /> ' . esc_html__('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" /> ' . esc_html__('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" /> ' . esc_html__('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" /> ' . esc_html__('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" /> ' . esc_html__('December', 'backwpup') . '</label><br />'; ?> </div> </div> <div id="cron-weekday-box"> <b><?php esc_html_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" /> ' . esc_html__('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" /> ' . esc_html__('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" /> ' . esc_html__('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" /> ' . esc_html__('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" /> ' . esc_html__('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" /> ' . esc_html__('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" /> ' . esc_html__('Saturday', 'backwpup') . '</label><br />'; ?> </div> </div> <br class="clear"/> </td> </tr> </table> </div> <?php 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, ['tabindex' => '2', 'accesskey' => 'p']); echo '</p></form>'; ?> </div> <script type="text/javascript"> 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; } }); }); </script> <?php //add inline js if (strstr($_GET['tab'], 'dest-')) { $dest_object = BackWPup::get_destination(str_replace('dest-', '', sanitize_text_field($_GET['tab']))); $dest_object->edit_inline_js(); } if (strstr($_GET['tab'], 'jobtype-')) { $id = strtoupper(str_replace('jobtype-', '', sanitize_text_field($_GET['tab']))); $job_types[$id]->edit_inline_js(); } } /** * @static * * @param string $args * * @return mixed */ public static function ajax_cron_text($args = '') { if (is_array($args)) { extract($args); $ajax = false; } else { if (!current_user_can('backwpup_jobs_edit')) { wp_die(-1); } check_ajax_referer('backwpup_ajax_nonce'); if (empty($_POST['cronminutes']) || $_POST['cronminutes'][0] == '*') { if (!empty($_POST['cronminutes'][1])) { $_POST['cronminutes'] = ['*/' . $_POST['cronminutes'][1]]; } else { $_POST['cronminutes'] = ['*']; } } if (empty($_POST['cronhours']) || $_POST['cronhours'][0] == '*') { if (!empty($_POST['cronhours'][1])) { $_POST['cronhours'] = ['*/' . $_POST['cronhours'][1]]; } else { $_POST['cronhours'] = ['*']; } } if (empty($_POST['cronmday']) || $_POST['cronmday'][0] == '*') { if (!empty($_POST['cronmday'][1])) { $_POST['cronmday'] = ['*/' . $_POST['cronmday'][1]]; } else { $_POST['cronmday'] = ['*']; } } if (empty($_POST['cronmon']) || $_POST['cronmon'][0] == '*') { if (!empty($_POST['cronmon'][1])) { $_POST['cronmon'] = ['*/' . $_POST['cronmon'][1]]; } else { $_POST['cronmon'] = ['*']; } } if (empty($_POST['cronwday']) || $_POST['cronwday'][0] == '*') { if (!empty($_POST['cronwday'][1])) { $_POST['cronwday'] = ['*/' . $_POST['cronwday'][1]]; } else { $_POST['cronwday'] = ['*']; } } $crontype = $_POST['crontype']; $cronstamp = implode(',', $_POST['cronminutes']) . ' ' . implode(',', $_POST['cronhours']) . ' ' . implode(',', $_POST['cronmday']) . ' ' . implode(',', $_POST['cronmon']) . ' ' . implode(',', $_POST['cronwday']); $ajax = true; } echo '<p class="wpcron" id="schedulecron">'; if ($crontype == 'advanced') { echo str_replace('\"', '"', __('Working as <a href="http://wikipedia.org/wiki/Cron">Cron</a> schedule:', 'backwpup')); echo ' <i><b>' . esc_attr($cronstamp) . '</b></i><br />'; } $cronstr = []; [$cronstr['minutes'], $cronstr['hours'], $cronstr['mday'], $cronstr['mon'], $cronstr['wday']] = explode(' ', $cronstamp, 5); if (false !== strpos($cronstr['minutes'], '*/') || $cronstr['minutes'] == '*') { $repeatmins = str_replace('*/', '', $cronstr['minutes']); if ($repeatmins == '*' || empty($repeatmins)) { $repeatmins = 5; } echo '<span class="bwu-message-error">' . sprintf(__('ATTENTION: Job runs every %d minutes!', 'backwpup'), $repeatmins) . '</span><br />'; } $cron_next = BackWPup_Cron::cron_next($cronstamp) + (get_option('gmt_offset') * 3600); if (PHP_INT_MAX === $cron_next) { echo '<span class="bwu-message-error">' . __('ATTENTION: Can\'t calculate cron!', 'backwpup') . '</span><br />'; } else { _e('Next runtime:', 'backwpup'); echo ' <b>' . date_i18n('D, j M Y, H:i', $cron_next, true) . '</b>'; } echo '</p>'; if ($ajax) { exit(); } } }