/**
     * 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 
Exemple #4
0
/**
 * 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);
     }
 }