/** * Load Intercom and send across user information and server info. Only loaded if the user has opted in. * * @param $hook */ public function load_intercom_script() { if (!get_option('hmbkp_enable_support')) { return; } $info = array(); foreach (Requirements::get_requirement_groups() as $group) { foreach (Requirements::get_requirements($group) as $requirement) { $info[$requirement->name()] = $requirement->result(); } } foreach (Services::get_services() as $file => $service) { array_merge($info, call_user_func(array($service, 'intercom_data'))); } $current_user = wp_get_current_user(); $info['user_hash'] = hash_hmac('sha256', $current_user->user_email, 'fcUEt7Vi4ym5PXdcr2UNpGdgZTEvxX9NJl8YBTxK'); $info['email'] = $current_user->user_email; $info['created_at'] = strtotime($current_user->user_registered); $info['app_id'] = '7f1l4qyq'; $info['name'] = $current_user->display_name; $info['widget'] = array('activator' => '#intercom'); ?> <script id="IntercomSettingsScriptTag"> window.intercomSettings = <?php echo json_encode($info); ?> ; </script> <script>!function(){function e(){var a=c.createElement("script");a.type="text/javascript",a.async=!0,a.src="https://static.intercomcdn.com/intercom.v1.js";var b=c.getElementsByTagName("script")[0];b.parentNode.insertBefore(a,b)}var a=window,b=a.Intercom;if("function"==typeof b)b("reattach_activator"),b("update",intercomSettings);else{var c=document,d=function(){d.c(arguments)};d.q=[],d.c=function(a){d.q.push(a)},a.Intercom=d,a.attachEvent?a.attachEvent("onload",e):a.addEventListener("load",e,!1)}}();</script> <?php }
?> <?php $site_size = new Site_Size($schedule->get_type(), $schedule->get_excludes()); if ($site_size->is_site_size_cached()) { printf(__('This schedule will store a maximum of %s of backups.', 'backupwordpress'), '<code>' . esc_html(size_format($site_size->get_site_size() * $schedule->get_max_backups())) . '</code>'); } ?> </p> </td> </tr> <?php foreach (Services::get_services($schedule) as $service) { $service->field(); } ?> </tbody> </table> <?php submit_button(__('Done', 'backupwordpress')); ?> </form> <?php
?> <p><?php printf(__('You\'ve set it to: %s', 'backupwordpress'), '<code>' . esc_html(HMBKP_SCHEDULE_TIME) . '</code>'); ?> </p> <?php } ?> <p><?php printf(__('The time that your schedules should run. Defaults to %s.', 'backupwordpress'), '<code>23:00</code>'); ?> <?php _e('e.g.', 'backupwordpress'); ?> <code>define( 'HMBKP_SCHEDULE_TIME', '07:30' );</code></p> </td> </tr> <?php foreach (Services::get_services() as $file => $service) { echo wp_kses_post(call_user_func(array($service, 'constant'))); } ?> </table> </div> <?php
/** * Catch the schedule settings form submission * * Validate and either return errors or update the schedule */ function edit_schedule_submit() { check_admin_referer('hmbkp-edit-schedule', 'hmbkp-edit-schedule-nonce'); if (empty($_POST['hmbkp_schedule_id'])) { die; } $schedule = new Scheduled_Backup(sanitize_text_field($_POST['hmbkp_schedule_id'])); $site_size = new Site_Size($schedule->get_type(), $schedule->get_excludes()); $errors = array(); $settings = array(); if (isset($_POST['hmbkp_schedule_type'])) { $schedule_type = sanitize_text_field($_POST['hmbkp_schedule_type']); if (!trim($schedule_type)) { $errors['hmbkp_schedule_type'] = __('Backup type cannot be empty', 'backupwordpress'); } elseif (!in_array($schedule_type, array('complete', 'file', 'database'))) { $errors['hmbkp_schedule_type'] = __('Invalid backup type', 'backupwordpress'); } else { $settings['type'] = $schedule_type; } } if (isset($_POST['hmbkp_schedule_recurrence']['hmbkp_type'])) { $schedule_recurrence_type = sanitize_text_field($_POST['hmbkp_schedule_recurrence']['hmbkp_type']); if (empty($schedule_recurrence_type)) { $errors['hmbkp_schedule_recurrence']['hmbkp_type'] = __('Schedule cannot be empty', 'backupwordpress'); } elseif (!in_array($schedule_recurrence_type, array_keys(cron_schedules())) && 'manually' !== $schedule_recurrence_type) { $errors['hmbkp_schedule_recurrence']['hmbkp_type'] = __('Invalid schedule', 'backupwordpress'); } else { $settings['recurrence'] = $schedule_recurrence_type; } } if (isset($_POST['hmbkp_schedule_recurrence']['hmbkp_schedule_start_day_of_week'])) { $day_of_week = sanitize_text_field($_POST['hmbkp_schedule_recurrence']['hmbkp_schedule_start_day_of_week']); if (!in_array($day_of_week, array('monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'))) { $errors['hmbkp_schedule_start_day_of_week'] = __('Day of the week must be a valid, lowercase day name', 'backupwordpress'); } else { $settings['start_time']['day_of_week'] = $day_of_week; } } if ('monthly' === $schedule_recurrence_type && isset($_POST['hmbkp_schedule_recurrence']['hmbkp_schedule_start_day_of_month'])) { $day_of_month = absint($_POST['hmbkp_schedule_recurrence']['hmbkp_schedule_start_day_of_month']); $options = array('min_range' => 1, 'max_range' => 31); if (false === filter_var($day_of_month, FILTER_VALIDATE_INT, array('options' => $options))) { $errors['hmbkp_schedule_start_day_of_month'] = __('Day of month must be between 1 and 31', 'backupwordpress'); } else { $settings['start_time']['day_of_month'] = $day_of_month; } } if (isset($_POST['hmbkp_schedule_recurrence']['hmbkp_schedule_start_hours'])) { $hours = absint($_POST['hmbkp_schedule_recurrence']['hmbkp_schedule_start_hours']); $options = array('min_range' => 0, 'max_range' => 23); if (false === filter_var($hours, FILTER_VALIDATE_INT, array('options' => $options))) { $errors['hmbkp_schedule_start_hours'] = __('Hours must be between 0 and 23', 'backupwordpress'); } else { $settings['start_time']['hours'] = $hours; } } if (isset($_POST['hmbkp_schedule_recurrence']['hmbkp_schedule_start_minutes'])) { $minutes = absint($_POST['hmbkp_schedule_recurrence']['hmbkp_schedule_start_minutes']); $options = array('min_range' => 0, 'max_range' => 59); if (false === filter_var($minutes, FILTER_VALIDATE_INT, array('options' => $options))) { $errors['hmbkp_schedule_start_minutes'] = __('Minutes must be between 0 and 59', 'backupwordpress'); } else { $settings['start_time']['minutes'] = $minutes; } } if (isset($_POST['hmbkp_schedule_max_backups'])) { $max_backups = sanitize_text_field($_POST['hmbkp_schedule_max_backups']); if (empty($max_backups)) { $errors['hmbkp_schedule_max_backups'] = __('Max backups can\'t be empty', 'backupwordpress'); } elseif (!is_numeric($max_backups)) { $errors['hmbkp_schedule_max_backups'] = __('Max backups must be a number', 'backupwordpress'); } elseif (!($max_backups >= 1)) { $errors['hmbkp_schedule_max_backups'] = __('Max backups must be greater than 0', 'backupwordpress'); } elseif ($site_size->is_site_size_cached() && disk_space_low($site_size->get_site_size() * $max_backups)) { $errors['hmbkp_schedule_max_backups'] = sprintf(__('Storing %s backups would use %s of disk space but your server only has %s free.', 'backupwordpress'), '<code>' . number_format_i18n($max_backups) . '</code>', '<code>' . size_format($max_backups * $site_size->get_site_size()) . '</code>', '<code>' . size_format(disk_free_space(Path::get_path())) . '</code>'); } else { $settings['max_backups'] = absint($max_backups); } } // Save the service options foreach (Services::get_services($schedule) as $service) { $errors = array_merge($errors, $service->save()); } if (!empty($settings['recurrence']) && !empty($settings['start_time'])) { // Calculate the start time depending on the recurrence $start_time = determine_start_time($settings['recurrence'], $settings['start_time']); if ($start_time) { $schedule->set_schedule_start_time($start_time); } } if (!empty($settings['recurrence'])) { $schedule->set_reoccurrence($settings['recurrence']); } if (!empty($settings['type'])) { $schedule->set_type($settings['type']); } if (!empty($settings['max_backups'])) { $schedule->set_max_backups($settings['max_backups']); } // Save the new settings $schedule->save(); // Remove any old backups in-case max backups was reduced $schedule->delete_old_backups(); if ($errors) { foreach ($errors as $error) { add_settings_error($error); } } $redirect = remove_query_arg(array('hmbkp_panel', 'action'), wp_get_referer()); if ($errors) { $redirect = wp_get_referer(); } wp_safe_redirect($redirect, '303'); die; }
/** * Hook into the actions fired in the Backup class and set the status * * @param $action */ public function do_action($action, Backup $backup) { // Pass the actions to all the services // Todo should be decoupled into the service class foreach (Services::get_services($this) as $service) { if (is_wp_error($service)) { return $service; } $service->action($action, $backup); } }