Download all files FTP
This commit is contained in:
@@ -0,0 +1,640 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Duplicator
|
||||
*/
|
||||
|
||||
defined("ABSPATH") or die("");
|
||||
|
||||
use Duplicator\Addons\ProBase\License\License;
|
||||
use Duplicator\Controllers\SchedulePageController;
|
||||
use Duplicator\Controllers\StoragePageController;
|
||||
use Duplicator\Controllers\ToolsPageController;
|
||||
use Duplicator\Core\Controllers\ControllersManager;
|
||||
use Duplicator\Libs\Snap\SnapJson;
|
||||
use Duplicator\Models\Storages\AbstractStorageEntity;
|
||||
use Duplicator\Models\Storages\StoragesUtil;
|
||||
use Duplicator\Views\ViewHelper;
|
||||
|
||||
/**
|
||||
* Variables
|
||||
*
|
||||
* @var Duplicator\Core\Controllers\ControllersManager $ctrlMng
|
||||
* @var Duplicator\Core\Views\TplMng $tplMng
|
||||
* @var array<string, mixed> $tplData
|
||||
* @var DUP_PRO_Schedule_Entity $schedule
|
||||
* @var bool $blur
|
||||
*/
|
||||
|
||||
$blur = $tplData['blur'];
|
||||
$schedule = $tplData['schedule'];
|
||||
$copyScheduleList = DUP_PRO_Schedule_Entity::getAll(
|
||||
0,
|
||||
0,
|
||||
null,
|
||||
function (DUP_PRO_Schedule_Entity $s) use ($schedule) {
|
||||
return $s->getId() != $schedule->getId();
|
||||
}
|
||||
);
|
||||
$templatesPageUrl = ToolsPageController::getInstance()->getMenuLink(ToolsPageController::L2_SLUG_TEMPLATE);
|
||||
|
||||
$schedulesListURL = ControllersManager::getMenuLink(
|
||||
ControllersManager::SCHEDULES_SUBMENU_SLUG
|
||||
);
|
||||
$scheduleCopyBaseURL = SchedulePageController::getInstance()->getCopyActionUrl($schedule->getId());
|
||||
|
||||
$frequency_note = __(
|
||||
'If you have a large site, it\'s recommended you schedule backups during lower traffic periods.
|
||||
If you\'re on a shared host then be aware that running multiple schedules too close together
|
||||
(i.e. every 10 minutes) may alert your host to a spike in system resource usage.
|
||||
Be sure that your schedules do not overlap and give them plenty of time to run.',
|
||||
'duplicator-pro'
|
||||
);
|
||||
|
||||
$editTemplateUrl = ControllersManager::getMenuLink(
|
||||
ControllersManager::TOOLS_SUBMENU_SLUG,
|
||||
ToolsPageController::L2_SLUG_TEMPLATE,
|
||||
null,
|
||||
array(ControllersManager::QUERY_STRING_INNER_PAGE => 'edit')
|
||||
);
|
||||
|
||||
$min_frequency = 0;
|
||||
$max_frequency = (
|
||||
License::can(License::CAPABILITY_SHEDULE_HOURLY) ?
|
||||
DUP_PRO_Schedule_Entity::REPEAT_HOURLY :
|
||||
DUP_PRO_Schedule_Entity::REPEAT_MONTHLY
|
||||
);
|
||||
$frequencyUpgradMsg = sprintf(
|
||||
__(
|
||||
'Hourly frequency isn\'t available at the <b>%1$s</b> license level.',
|
||||
'duplicator-pro'
|
||||
),
|
||||
License::getLicenseToString()
|
||||
) .
|
||||
' <b>' .
|
||||
sprintf(
|
||||
_x(
|
||||
'To enable this option %1$supgrade%2$s the License.',
|
||||
'%1$s and %2$s represents the opening and closing HTML tags for an anchor or link',
|
||||
'duplicator-pro'
|
||||
),
|
||||
'<a href="' . esc_url(License::getUpsellURL()) . '" target="_blank">',
|
||||
'</a>'
|
||||
) .
|
||||
'</b>';
|
||||
|
||||
$langLocalDefaultMsg = __('Recovery Point Capable', 'duplicator-pro');
|
||||
?>
|
||||
<form
|
||||
id="dup-schedule-form"
|
||||
class="dup-monitored-form <?php echo ($blur ? 'dup-mock-blur' : ''); ?>"
|
||||
action="<?php echo esc_url(ControllersManager::getCurrentLink()); ?>"
|
||||
method="post"
|
||||
data-parsley-ui-enabled="true"
|
||||
>
|
||||
<?php $tplData['actions'][SchedulePageController::ACTION_EDIT_SAVE]->getActionNonceFileds(); ?>
|
||||
<input type="hidden" name="schedule_id" value="<?php echo esc_attr($schedule->getId()); ?>">
|
||||
|
||||
<!-- ====================
|
||||
TOOL-BAR -->
|
||||
<table class="dpro-edit-toolbar dup-schedule-edit-toolbar">
|
||||
<tr>
|
||||
<td>
|
||||
<select id="dup-schedule-copy-select" name="duppro-source-schedule-id">
|
||||
<option value="-1" selected="selected">
|
||||
<?php esc_html_e('Copy From', 'duplicator-pro'); ?>
|
||||
</option>
|
||||
<?php foreach ($copyScheduleList as $copy_schedule) { ?>
|
||||
<option value="<?php echo (int) $copy_schedule->getId(); ?>">
|
||||
<?php echo esc_html($copy_schedule->name); ?>
|
||||
</option>
|
||||
<?php } ?>
|
||||
</select>
|
||||
<input
|
||||
id="dup-schedule-copy-btn"
|
||||
type="button"
|
||||
class="button action"
|
||||
value="<?php esc_html_e("Apply", 'duplicator-pro') ?>"
|
||||
disabled
|
||||
>
|
||||
</td>
|
||||
<td>
|
||||
<div class="btnnav">
|
||||
<a href="<?php echo esc_url($schedulesListURL); ?>" class="button dup-schedule-schedules">
|
||||
<i class="far fa-clock fa-sm"></i> <?php esc_html_e('Schedules', 'duplicator-pro'); ?>
|
||||
</a>
|
||||
<?php if ($schedule->getId() != -1) : ?>
|
||||
<a
|
||||
href="<?php echo esc_url(SchedulePageController::getInstance()->getEditUrl()); ?>"
|
||||
class="button"
|
||||
>
|
||||
<?php esc_html_e("Add New", 'duplicator-pro'); ?>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<hr class="dpro-edit-toolbar-divider" />
|
||||
|
||||
<!-- ===============================
|
||||
SETTINGS -->
|
||||
<table class="form-table">
|
||||
<tr valign="top">
|
||||
<th scope="row"><label><?php esc_html_e('Schedule Name', 'duplicator-pro'); ?></label></th>
|
||||
<td>
|
||||
<input
|
||||
type="text"
|
||||
id="schedule-name"
|
||||
name="name"
|
||||
value="<?php echo esc_attr($schedule->name); ?>"
|
||||
required data-parsley-group="standard"
|
||||
autocomplete="off"
|
||||
>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<th scope="row"><label><?php esc_html_e('Package Template', 'duplicator-pro'); ?></label></th>
|
||||
<td>
|
||||
<table class="schedule-template">
|
||||
<tr>
|
||||
<td>
|
||||
<select id="schedule-template-selector" name="template_id" required>
|
||||
<?php
|
||||
$templates = DUP_PRO_Package_Template_Entity::getAllWithoutManualMode();
|
||||
if (count($templates) == 0) {
|
||||
$no_templates = __('No Templates Found', 'duplicator-pro');
|
||||
printf('<option value="">%1$s</option>', esc_html($no_templates));
|
||||
} else {
|
||||
echo "<option value='' selected='true'>" . esc_html__("<Choose A Template>", 'duplicator-pro') . "</option>";
|
||||
foreach ($templates as $template) {
|
||||
?>
|
||||
<option
|
||||
<?php selected($schedule->template_id, $template->getId()); ?>
|
||||
value="<?php echo (int) $template->getId(); ?>"
|
||||
>
|
||||
<?php echo esc_html($template->name); ?>
|
||||
</option>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
<br />
|
||||
<small>
|
||||
<a href="<?php echo esc_url($templatesPageUrl); ?>" target="edit-template">
|
||||
[<?php esc_attr_e("Show All Templates", 'duplicator-pro') ?>]
|
||||
</a>
|
||||
</small>
|
||||
</td>
|
||||
<td>
|
||||
<a
|
||||
id="schedule-template-edit-btn"
|
||||
href="javascript:void(0)"
|
||||
onclick="DupPro.Schedule.EditTemplate()"
|
||||
style="display:none"
|
||||
class="pack-temp-btns button button-small"
|
||||
title="<?php esc_attr_e("Edit Selected Template", 'duplicator-pro') ?>"
|
||||
>
|
||||
<i class="far fa-edit"></i>
|
||||
</a>
|
||||
<a
|
||||
id="schedule-template-add-btn"
|
||||
href="<?php echo esc_url($editTemplateUrl); ?>"
|
||||
class="pack-temp-btns button button-small"
|
||||
title="<?php esc_attr_e("Add New Template", 'duplicator-pro') ?>"
|
||||
target="edit-template"
|
||||
>
|
||||
<i class="far fa-plus-square"></i>
|
||||
</a>
|
||||
<a
|
||||
id="schedule-template-sync-btn"
|
||||
href="javascript:window.location.reload()"
|
||||
class="pack-temp-btns button button-small"
|
||||
title="<?php esc_attr_e("Refresh Template List", 'duplicator-pro') ?>"
|
||||
>
|
||||
<i class="fas fa-sync-alt"></i>
|
||||
</a>
|
||||
|
||||
<i
|
||||
class="fas fa-question-circle fa-sm"
|
||||
data-tooltip-title="<?php esc_attr_e("Template Details", 'duplicator-pro'); ?>"
|
||||
data-tooltip="<?php
|
||||
esc_attr_e(
|
||||
'The template specifies which files and database tables should be included in the archive.<br/><br/>
|
||||
Choose from an existing template or create a new one by clicking the "Add New Template" button.
|
||||
To edit a template, select it and then click the "Edit Selected Template" button.',
|
||||
'duplicator-pro'
|
||||
);
|
||||
?>">
|
||||
</i>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><label><?php esc_html_e('Storage', 'duplicator-pro'); ?></label></th>
|
||||
<td>
|
||||
<!-- ===============================
|
||||
STORAGE -->
|
||||
<table class="widefat package-tbl schedule-package-tbl">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width:125px;padding-left:45px"><?php esc_html_e('Type', 'duplicator-pro') ?></th>
|
||||
<th style="width:275px;"><?php esc_html_e('Name', 'duplicator-pro') ?></th>
|
||||
<th><?php esc_html_e('Location', 'duplicator-pro') ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
$i = 0;
|
||||
$storages = AbstractStorageEntity::getAll(0, 0, [StoragesUtil::class, 'sortByPriority']);
|
||||
foreach ($storages as $storage) :
|
||||
//Sometime storage is authorized
|
||||
// then server downgrade to lower php version
|
||||
// For ex. When storage is added PHP CURL extension enabled
|
||||
// But now It is disabled, It cause to fatal error
|
||||
// in the Package creation step 1
|
||||
if (!$storage->isSupported()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$i++;
|
||||
$is_valid = $storage->isValid();
|
||||
$is_checked = in_array($storage->getId(), $schedule->storage_ids);
|
||||
$mincheck = ($i == 1) ? 'data-parsley-mincheck="1" data-parsley-required="true"' : '';
|
||||
$lbl_id = "storage_chk_{$storage->getId()}";
|
||||
|
||||
$storageEditUrl = StoragePageController::getEditUrl($storage);
|
||||
?>
|
||||
<tr class="package-row <?php echo ($i % 2) ? 'alternate' : ''; ?>">
|
||||
<td>
|
||||
<input data-parsley-errors-container="#schedule_storage_error_container" <?php echo $mincheck ?>
|
||||
id="<?php echo esc_attr($lbl_id); ?>" name="_storage_ids[]"
|
||||
type="checkbox" value="<?php echo (int) $storage->getId(); ?>"
|
||||
<?php checked($is_checked); ?> class="delete-chk" />
|
||||
|
||||
<label for="<?php echo esc_attr($lbl_id); ?>">
|
||||
<?php
|
||||
echo $storage->getStypeIcon() . ' ' . esc_html($storage->getStypeName());
|
||||
echo ($storage->isLocal())
|
||||
? "<sup title='" . esc_attr($langLocalDefaultMsg) . "'>" . ViewHelper::disasterIcon(false, ['fa-fw', 'fa-sm'])
|
||||
. "</sup>"
|
||||
: '';
|
||||
?>
|
||||
</label>
|
||||
</td>
|
||||
<td>
|
||||
<a href="<?php echo esc_url($storageEditUrl); ?>" target="_blank">
|
||||
<?php
|
||||
echo ($is_valid == false) ? '<i class="fa fa-exclamation-triangle fa-sm"></i> ' : '';
|
||||
echo esc_html($storage->getName());
|
||||
?>
|
||||
</a>
|
||||
</td>
|
||||
<td><?php echo $storage->getHtmlLocationLink(); ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
<div id="schedule_storage_error_container" class="duplicator-error-container"></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<th scope="row"><label><?php esc_html_e("Repeats", 'duplicator-pro'); ?></label></th>
|
||||
<td>
|
||||
<select
|
||||
id="change-mode"
|
||||
name="repeat_type"
|
||||
onchange="DupPro.Schedule.ChangeMode()"
|
||||
data-parsley-range='<?php printf('[%1$s, %2$s]', (int) $min_frequency, (int) $max_frequency); ?>'
|
||||
data-parsley-error-message="<?php echo esc_attr($frequencyUpgradMsg); ?>"
|
||||
>
|
||||
<option
|
||||
value="<?php echo (int) DUP_PRO_Schedule_Entity::REPEAT_HOURLY; ?>"
|
||||
<?php selected($schedule->repeat_type, DUP_PRO_Schedule_Entity::REPEAT_HOURLY) ?>
|
||||
>
|
||||
<?php esc_html_e("Hourly", 'duplicator-pro'); ?>
|
||||
</option>
|
||||
<option
|
||||
value="<?php echo (int) DUP_PRO_Schedule_Entity::REPEAT_DAILY; ?>"
|
||||
<?php selected($schedule->repeat_type, DUP_PRO_Schedule_Entity::REPEAT_DAILY) ?>
|
||||
>
|
||||
<?php esc_html_e("Daily", 'duplicator-pro'); ?>
|
||||
</option>
|
||||
<option
|
||||
value="<?php echo (int) DUP_PRO_Schedule_Entity::REPEAT_WEEKLY; ?>"
|
||||
<?php selected($schedule->repeat_type, DUP_PRO_Schedule_Entity::REPEAT_WEEKLY) ?>
|
||||
>
|
||||
<?php esc_html_e("Weekly", 'duplicator-pro'); ?>
|
||||
</option>
|
||||
<option
|
||||
value="<?php echo (int) DUP_PRO_Schedule_Entity::REPEAT_MONTHLY; ?>"
|
||||
<?php selected($schedule->repeat_type, DUP_PRO_Schedule_Entity::REPEAT_MONTHLY) ?>
|
||||
>
|
||||
<?php esc_html_e("Monthly", 'duplicator-pro'); ?>
|
||||
</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th></th>
|
||||
<td style="padding-top:0px; padding-bottom:10px;">
|
||||
<!-- ===============================
|
||||
DAILY -->
|
||||
<div id="repeat-hourly-area" class="repeater-area">
|
||||
<?php
|
||||
esc_html_e('Every', 'duplicator-pro');
|
||||
$hour_intervals = array(
|
||||
1,
|
||||
2,
|
||||
4,
|
||||
6,
|
||||
12,
|
||||
);
|
||||
?>
|
||||
|
||||
<select name="_run_every_hours" data-parsley-ui-enabled="false">
|
||||
<?php foreach ($hour_intervals as $hour_interval) { ?>
|
||||
<option <?php selected($hour_interval, (int) $schedule->run_every); ?> value="<?php echo (int) $hour_interval; ?>">
|
||||
<?php echo (int) $hour_interval; ?>
|
||||
</option>
|
||||
<?php } ?>
|
||||
</select>
|
||||
<?php
|
||||
esc_html_e('hours', 'duplicator-pro');
|
||||
$tipContent = __('Package will build every x hours starting at 00:00.', 'duplicator-pro') . '<br/><br/>' . $frequency_note;
|
||||
?>
|
||||
<i
|
||||
class="fas fa-question-circle fa-sm"
|
||||
data-tooltip-title="<?php esc_attr_e("Frequency Note", 'duplicator-pro'); ?>"
|
||||
data-tooltip="<?php echo esc_attr($tipContent); ?>"
|
||||
>
|
||||
</i>
|
||||
<br />
|
||||
</div>
|
||||
|
||||
<!-- ===============================
|
||||
DAILY -->
|
||||
<div id="repeat-daily-area" class="repeater-area">
|
||||
<?php esc_html_e('Every', 'duplicator-pro'); ?>
|
||||
<select name="_run_every_days" data-parsley-ui-enabled="false">
|
||||
<?php for ($i = 1; $i < 30; $i++) { ?>
|
||||
<option <?php selected($i, (int) $schedule->run_every); ?> value="<?php echo (int) $i; ?>">
|
||||
<?php echo (int) $i; ?>
|
||||
</option>
|
||||
<?php } ?>
|
||||
</select>
|
||||
<?php esc_html_e('days', 'duplicator-pro'); ?>
|
||||
<i
|
||||
class="fas fa-question-circle fa-sm"
|
||||
data-tooltip-title="<?php esc_attr_e("Frequency Note", 'duplicator-pro'); ?>"
|
||||
data-tooltip="<?php echo esc_attr($frequency_note) ?>"
|
||||
>
|
||||
</i>
|
||||
<br />
|
||||
</div>
|
||||
|
||||
<!-- ===============================
|
||||
WEEKLY -->
|
||||
<div id="repeat-weekly-area" class="repeater-area">
|
||||
<!-- RSR Cron does not support counting by week - just days and months so removing (for now?)-->
|
||||
<div class="weekday-div">
|
||||
<input
|
||||
<?php checked($schedule->is_day_set('mon')); ?>
|
||||
value="mon" name="weekday[]"
|
||||
type="checkbox"
|
||||
id="repeat-weekly-mon"
|
||||
data-parsley-group="weekly" required data-parsley-class-handler="#repeat-weekly-area"
|
||||
data-parsley-error-message="<?php esc_attr_e('At least one day must be checked.', 'duplicator-pro'); ?>"
|
||||
data-parsley-no-focus data-parsley-errors-container="#weekday-errors"
|
||||
>
|
||||
<label for="repeat-weekly-mon"><?php esc_html_e('Monday', 'duplicator-pro'); ?></label>
|
||||
</div>
|
||||
<div class="weekday-div">
|
||||
<input <?php checked($schedule->is_day_set('tue')); ?> value="tue" name="weekday[]" type="checkbox" id="repeat-weekly-tue" />
|
||||
<label for="repeat-weekly-tue"><?php esc_html_e('Tuesday', 'duplicator-pro'); ?></label>
|
||||
</div>
|
||||
<div class="weekday-div">
|
||||
<input <?php checked($schedule->is_day_set('wed')); ?> value="wed" name="weekday[]" type="checkbox" id="repeat-weekly-wed" />
|
||||
<label for="repeat-weekly-wed"><?php esc_html_e('Wednesday', 'duplicator-pro'); ?></label>
|
||||
</div>
|
||||
<div class="weekday-div">
|
||||
<input <?php checked($schedule->is_day_set('thu')); ?> value="thu" name="weekday[]" type="checkbox" id="repeat-weekly-thu" />
|
||||
<label for="repeat-weekly-thu"><?php esc_html_e('Thursday', 'duplicator-pro'); ?></label>
|
||||
</div>
|
||||
<div class="weekday-div" style="clear:both">
|
||||
<input <?php checked($schedule->is_day_set('fri')); ?> value="fri" name="weekday[]" type="checkbox" id="repeat-weekly-fri" />
|
||||
<label for="repeat-weekly-fri"><?php esc_html_e('Friday', 'duplicator-pro'); ?></label>
|
||||
</div>
|
||||
<div class="weekday-div">
|
||||
<input <?php checked($schedule->is_day_set('sat')); ?> value="sat" name="weekday[]" type="checkbox" id="repeat-weekly-sat" />
|
||||
<label for="repeat-weekly-sat"><?php esc_html_e('Saturday', 'duplicator-pro'); ?></label>
|
||||
</div>
|
||||
<div class="weekday-div">
|
||||
<input <?php checked($schedule->is_day_set('sun')); ?> value="sun" name="weekday[]" type="checkbox" id="repeat-weekly-sun" />
|
||||
<label for="repeat-weekly-sun"><?php esc_html_e('Sunday', 'duplicator-pro'); ?></label>
|
||||
</div>
|
||||
</div>
|
||||
<div style="padding-top:3px; clear:both;" id="weekday-errors"></div>
|
||||
|
||||
<!-- ===============================
|
||||
MONTHLY -->
|
||||
<div id="repeat-monthly-area" class="repeater-area">
|
||||
|
||||
<div style="float:left; margin-right:5px;"><?php esc_html_e('Day', 'duplicator-pro'); ?>
|
||||
<select name="day_of_month">
|
||||
<?php for ($i = 1; $i <= 31; $i++) { ?>
|
||||
<option <?php selected($i, $schedule->day_of_month); ?> value="<?php echo (int) $i; ?>">
|
||||
<?php echo (int) $i; ?>
|
||||
</option>
|
||||
<?php } ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div style="display:inline-block">
|
||||
<?php esc_html_e('of every', 'duplicator-pro'); ?>
|
||||
<select name="_run_every_months" data-parsley-ui-enabled="false">
|
||||
<?php for ($i = 1; $i <= 12; $i++) { ?>
|
||||
<option <?php selected($i, $schedule->run_every); ?> value="<?php echo (int) $i; ?>">
|
||||
<?php echo (int) $i; ?>
|
||||
</option>
|
||||
<?php } ?>
|
||||
</select>
|
||||
<?php esc_html_e('month(s)', 'duplicator-pro'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr valign="top" id="start-time-row">
|
||||
<th scope="row"><label><?php esc_html_e('Start Time', 'duplicator-pro'); ?></label></th>
|
||||
<td>
|
||||
<select name="_start_time" style="margin-top:-2px; height:27px">
|
||||
<?php
|
||||
$start_hour = $schedule->get_start_time_piece(0);
|
||||
$start_min = $schedule->get_start_time_piece(1);
|
||||
$mins = 0;
|
||||
|
||||
// Add setting to use 24 hour vs AM/PM
|
||||
// the interval for hours is '1'
|
||||
for ($hours = 0; $hours < 24; $hours++) {
|
||||
?>
|
||||
<option <?php selected($hours, $start_hour); ?> value="<?php echo (int) $hours; ?>">
|
||||
<?php printf('%02d:%02d', (int) $hours, (int) $mins); ?>
|
||||
</option>
|
||||
<?php } ?>
|
||||
</select>
|
||||
|
||||
<i class="dpro-edit-info">
|
||||
<?php esc_html_e("Current Server Time Stamp is", 'duplicator-pro'); ?>
|
||||
<?php echo esc_html(date_i18n('Y-m-d H:i:s')); ?>
|
||||
</i>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
<p class="description" style="width:800px">
|
||||
<?php
|
||||
printf(
|
||||
esc_html_x(
|
||||
'%1$sNote:%2$s Schedules require web site traffic in order to start a build.
|
||||
If you set a start time of 06:00 daily but do not get any traffic till 10:00 then the build will not start until 10:00.
|
||||
If you have low traffic consider setting up a cron job to periodically hit your site or
|
||||
check out the free web monitoring tools found on our %3$spartners page%4$s.',
|
||||
'%1$s and %2$s represent opening and closing bold tags, %3$s and %4$s represent opening and closing anchor tags',
|
||||
'duplicator-pro'
|
||||
),
|
||||
'<b>',
|
||||
'</b>',
|
||||
'<a href="' . esc_url(DUPLICATOR_PRO_DUPLICATOR_DOCS_URL . 'what-services-and-products-complement-the-duplicator/')
|
||||
. '" target="_blank">',
|
||||
'</a>'
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<th scope="row"><label><?php esc_html_e('Recovery Status', 'duplicator-pro'); ?></label></th>
|
||||
<td class="dup-recovery-template">
|
||||
<?php
|
||||
if (($template = $schedule->getTemplate()) !== false) {
|
||||
$schedule->recoveableHtmlInfo();
|
||||
} else {
|
||||
esc_html_e('Unavailable', 'duplicator-pro');
|
||||
?>
|
||||
<i class="fas fa-question-circle fa-sm"
|
||||
data-tooltip-title="<?php esc_attr_e("Recovery Status", 'duplicator-pro'); ?>"
|
||||
data-tooltip="<?php esc_attr_e('Status is unavailable. Please save the schedule to view recovery status', 'duplicator-pro');
|
||||
?>"></i>
|
||||
<?php } ?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<th scope="row"><label for="schedule-active"><?php esc_html_e('Activated', 'duplicator-pro'); ?></label></th>
|
||||
<td>
|
||||
<input name="_active" id="schedule-active" type="checkbox" <?php checked($schedule->active); ?>>
|
||||
<label for="schedule-active"><?php esc_html_e('Enable This Schedule', 'duplicator-pro'); ?></label><br />
|
||||
<i class="dpro-edit-info"> <?php esc_html_e('When checked this schedule will run', 'duplicator-pro'); ?></i>
|
||||
</td>
|
||||
</tr>
|
||||
</table><br />
|
||||
<button
|
||||
id="dup-pro-save-schedule"
|
||||
class="button button-primary"
|
||||
type="submit"
|
||||
>
|
||||
<?php esc_html_e('Save Schedule', 'duplicator-pro'); ?>
|
||||
</button>
|
||||
|
||||
</form>
|
||||
|
||||
<script>
|
||||
jQuery(document).ready(function ($) {
|
||||
DupPro.Schedule.ChangeMode = function () {
|
||||
var mode = $("#change-mode option:selected").val();
|
||||
var animate = 400;
|
||||
$('#repeat-hourly-area, #repeat-daily-area, #repeat-weekly-area, #repeat-monthly-area').hide();
|
||||
n = $("#repeat-weekly-area input:checked").length;
|
||||
|
||||
if (n == 0) {
|
||||
// Hack so parsely will ignore weekly if it isnt selected
|
||||
$('#repeat-weekly-mon').prop("checked", true);
|
||||
}
|
||||
|
||||
switch (mode) {
|
||||
case "0":
|
||||
$('#repeat-daily-area').show(animate);
|
||||
$('#start-time-row').show(animate);
|
||||
break;
|
||||
case "1":
|
||||
$('#repeat-weekly-area').show(animate);
|
||||
$('#start-time-row').show(animate);
|
||||
break;
|
||||
case "2":
|
||||
$('#repeat-monthly-area').show(animate);
|
||||
$('#start-time-row').show(animate);
|
||||
break;
|
||||
case "3":
|
||||
$('#repeat-hourly-area').show(animate);
|
||||
$('#start-time-row').hide(animate);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
$('#dup-schedule-copy-select').on('change', function (e) {
|
||||
let copyId = parseInt($(this).val());
|
||||
$('#dup-schedule-copy-btn').prop('disabled', (copyId <= 0));
|
||||
});
|
||||
|
||||
/*$('#dup-schedule-copy-select').change(function (evente) {
|
||||
event.preventDefault();
|
||||
alert('changed val ' + $(this).val());
|
||||
$('#dup-schedule-copy-btn').prop('disabled', ($(this).val() > 0));
|
||||
});*/
|
||||
|
||||
$('#dup-schedule-copy-btn').click(function (event) {
|
||||
event.preventDefault();
|
||||
let copyId = $('#dup-schedule-copy-select').val();
|
||||
document.location.href = <?php echo json_encode($scheduleCopyBaseURL); ?> + '&duppro-source-schedule-id=' + copyId;
|
||||
});
|
||||
|
||||
DupPro.Schedule.EditTemplate = function () {
|
||||
var templateID = $('#schedule-template-selector').val();
|
||||
var url = <?php echo SnapJson::jsonEncode($editTemplateUrl); ?> + '&package_template_id=' + templateID;
|
||||
window.open(url, 'edit-template');
|
||||
};
|
||||
|
||||
DupPro.Schedule.ToggleTemplateEditBtn = function () {
|
||||
$('#schedule-template-edit-btn, #schedule-template-add-btn, #schedule-template-sync-btn').hide();
|
||||
if ($("#schedule-template-selector").val() > 0) {
|
||||
$('#schedule-template-edit-btn').show();
|
||||
} else {
|
||||
$('#schedule-template-add-btn, #schedule-template-sync-btn').show();
|
||||
}
|
||||
}
|
||||
|
||||
//INIT
|
||||
$('#dup-schedule-form').parsley({
|
||||
excluded: ':disabled'
|
||||
});
|
||||
|
||||
$("#repeat-daily-date, #repeat-daily-on-date").datepicker({
|
||||
showOn: "both",
|
||||
buttonText: "<i class='fa fa-calendar'></i>"
|
||||
});
|
||||
DupPro.Schedule.ChangeMode();
|
||||
jQuery('#schedule-name').focus().select();
|
||||
DupPro.Schedule.ToggleTemplateEditBtn();
|
||||
$("#schedule-template-selector").change(function () {
|
||||
DupPro.Schedule.ToggleTemplateEditBtn()
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,617 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Duplicator
|
||||
*/
|
||||
|
||||
defined("ABSPATH") or die("");
|
||||
|
||||
use Duplicator\Ajax\ServicesSchedule;
|
||||
use Duplicator\Controllers\PackagesPageController;
|
||||
use Duplicator\Controllers\SchedulePageController;
|
||||
use Duplicator\Controllers\SettingsPageController;
|
||||
use Duplicator\Controllers\ToolsPageController;
|
||||
use Duplicator\Core\CapMng;
|
||||
use Duplicator\Core\Controllers\ControllersManager;
|
||||
use Duplicator\Libs\Snap\SnapJson;
|
||||
use Duplicator\Models\Storages\AbstractStorageEntity;
|
||||
|
||||
/**
|
||||
* Variables
|
||||
*
|
||||
* @var Duplicator\Core\Controllers\ControllersManager $ctrlMng
|
||||
* @var Duplicator\Core\Views\TplMng $tplMng
|
||||
* @var array<string, mixed> $tplData
|
||||
* @var bool $blur
|
||||
*/
|
||||
|
||||
$blur = $tplData['blur'];
|
||||
|
||||
$active_schedules = DUP_PRO_Schedule_Entity::get_active();
|
||||
$active_count = count($active_schedules);
|
||||
$schedules = DUP_PRO_Schedule_Entity::getAll();
|
||||
$schedule_count = DUP_PRO_Schedule_Entity::count();
|
||||
|
||||
$active_package = DUP_PRO_Package::get_next_active_package();
|
||||
$active_schedule_id = -1;
|
||||
|
||||
if ($active_package != null) {
|
||||
$active_schedule_id = $active_package->schedule_id;
|
||||
}
|
||||
|
||||
$packagesPageUrl = PackagesPageController::getInstance()->getMenuLink();
|
||||
|
||||
$scheduleEditBaseURL = SchedulePageController::getInstance()->getEditBaseUrl();
|
||||
$scheduleCopyBaseURL = SchedulePageController::getInstance()->getCopyActionUrl();
|
||||
$settingsScheudleUrl = ControllersManager::getMenuLink(
|
||||
ControllersManager::SETTINGS_SUBMENU_SLUG,
|
||||
SettingsPageController::L2_SLUG_SCHEDULE
|
||||
);
|
||||
$templatesPageUrl = ToolsPageController::getInstance()->getMenuLink(ToolsPageController::L2_SLUG_TEMPLATE);
|
||||
|
||||
|
||||
?>
|
||||
|
||||
<!-- ====================
|
||||
TOOL-BAR -->
|
||||
<table class="dpro-edit-toolbar <?php echo ($blur ? 'dup-mock-blur' : ''); ?>">
|
||||
<tr>
|
||||
<td>
|
||||
<select id="bulk_action">
|
||||
<option value="-1" selected="selected">
|
||||
<?php esc_html_e("Bulk Actions", 'duplicator-pro'); ?>
|
||||
</option>
|
||||
<option value="<?php echo (int) ServicesSchedule::SCHEDULE_BULK_ACTIVATE; ?>" title="Activate selected schedules(s)">
|
||||
<?php esc_html_e("Activate", 'duplicator-pro'); ?>
|
||||
</option>
|
||||
<option value="<?php echo (int) ServicesSchedule::SCHEDULE_BULK_DEACTIVATE; ?>" title="Deactivate selected schedules(s)">
|
||||
<?php esc_html_e("Deactivate", 'duplicator-pro'); ?>
|
||||
</option>
|
||||
<option value="<?php echo (int) ServicesSchedule::SCHEDULE_BULK_DELETE; ?>" title="Delete selected schedules(s)">
|
||||
<?php esc_html_e("Delete", 'duplicator-pro'); ?>
|
||||
</option>
|
||||
</select>
|
||||
<input
|
||||
type="button"
|
||||
id="dup-schedule-bulk-apply"
|
||||
class="button action"
|
||||
value="<?php esc_attr_e("Apply", 'duplicator-pro') ?>"
|
||||
onclick="DupPro.Schedule.BulkAction()"
|
||||
>
|
||||
<span class="btn-separator"></span>
|
||||
<?php if (CapMng::can(CapMng::CAP_SETTINGS, false)) { ?>
|
||||
<a
|
||||
href="<?php echo esc_url($settingsScheudleUrl); ?>"
|
||||
class="button grey-icon dup-schedule-settings"
|
||||
title="<?php esc_attr_e("Settings", 'duplicator-pro') ?>"
|
||||
>
|
||||
<i class="fas fa-sliders-h fa-fw"></i>
|
||||
</a>
|
||||
<?php } ?>
|
||||
<a
|
||||
href="<?php echo esc_url($templatesPageUrl); ?>"
|
||||
id="btn-logs-dialog"
|
||||
class="button dup-schedule-templates"
|
||||
title="<?php esc_attr_e("Templates", 'duplicator-pro') ?>"
|
||||
>
|
||||
<i class="far fa-clone"></i>
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<div class="btnnav">
|
||||
<a href="<?php echo esc_url($scheduleEditBaseURL); ?>" class="button dup-schedule-add-new">
|
||||
<?php esc_attr_e("Add New", 'duplicator-pro'); ?>
|
||||
</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<form
|
||||
id="dup-schedule-form"
|
||||
class="<?php echo ($blur ? 'dup-mock-blur' : ''); ?>"
|
||||
action="<?php echo esc_url(ControllersManager::getCurrentLink()); ?>"
|
||||
method="post"
|
||||
>
|
||||
<input type="hidden" id="dup-schedule-form-action" name="action" value="" />
|
||||
<input type="hidden" id="dup-schedule-selected-schedule" name="schedule_id" value="-1" />
|
||||
|
||||
<!-- ====================
|
||||
LIST ALL SCHEDULES -->
|
||||
<table class="widefat schedule-tbl">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style='width:10px;'><input type="checkbox" id="dpro-chk-all" title="Select all packages" onclick="DupPro.Schedule.SetDeleteAll(this)"></th>
|
||||
<th style='width:255px;'><?php esc_html_e('Name', 'duplicator-pro'); ?></th>
|
||||
<th><?php esc_html_e('Storage', 'duplicator-pro'); ?></th>
|
||||
<th><?php esc_html_e('Runs Next', 'duplicator-pro'); ?></th>
|
||||
<th><?php esc_html_e('Last Ran', 'duplicator-pro'); ?></th>
|
||||
<th><?php esc_html_e('Active', 'duplicator-pro'); ?></th>
|
||||
<th class="dup-col-recovery" ><?php esc_html_e('Recovery', 'duplicator-pro'); ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php if ($schedule_count <= 0) : ?>
|
||||
<tr>
|
||||
<td colspan="7" class="dup-schedules-no-schedule">
|
||||
<h2>
|
||||
<i class="far fa-clock fa-sm"></i> <?php esc_html_e('No Schedules Found', 'duplicator-pro') ?> <br />
|
||||
<a href="<?php echo esc_url($scheduleEditBaseURL); ?>">
|
||||
[<?php esc_html_e('Create New Schedule', 'duplicator-pro') ?>]
|
||||
</a>
|
||||
</h2>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php
|
||||
$i = 0;
|
||||
foreach ($schedules as $schedule) :
|
||||
$i++;
|
||||
$icon_display = (($schedule->getId() == $active_schedule_id) ? 'inline' : 'none');
|
||||
?>
|
||||
<tr class="schedule-row <?php echo ($i % 2) ? 'alternate' : ''; ?>">
|
||||
<td>
|
||||
<input name="selected_id[]" type="checkbox" value="<?php echo (int) $schedule->getId() ?>" class="item-chk" />
|
||||
</td>
|
||||
<td>
|
||||
<i
|
||||
id="<?php echo "icon-{" . (int) $schedule->getId() . "}-status"; ?>"
|
||||
class="fas fa-cog fa-spin schedule-status-icon"
|
||||
style="display:<?php echo esc_attr($icon_display); ?>; margin-right:4px;">
|
||||
</i>
|
||||
<a
|
||||
id="<?php echo "text-{" . (int) $schedule->getId() . "}"; ?>"
|
||||
href="javascript:void(0);"
|
||||
onclick="DupPro.Schedule.Edit('<?php echo (int) $schedule->getId() ?>');"
|
||||
class="name"
|
||||
>
|
||||
<?php echo esc_html($schedule->name); ?>
|
||||
</a>
|
||||
<div class="sub-menu">
|
||||
<span class="link-style dup-schedule-quick-view" onclick="DupPro.Schedule.QuickView('<?php echo (int) $schedule->getId() ?>');">
|
||||
<?php esc_html_e('Quick View', 'duplicator-pro'); ?>
|
||||
</span> |
|
||||
<span class="link-style dup-schedule-edit" onclick="DupPro.Schedule.Edit('<?php echo (int) $schedule->getId() ?>');">
|
||||
<?php esc_html_e('Edit', 'duplicator-pro'); ?>
|
||||
</span> |
|
||||
<span class="link-style dup-schedule-copy" onclick="DupPro.Schedule.Copy('<?php echo (int) $schedule->getId(); ?>');">
|
||||
<?php esc_html_e('Copy', 'duplicator-pro'); ?>
|
||||
</span> |
|
||||
<span class="link-style dup-schedule-delete" onclick="DupPro.Schedule.Delete('<?php echo (int) $schedule->getId(); ?>');">
|
||||
<?php esc_html_e('Delete', 'duplicator-pro'); ?>
|
||||
</span> |
|
||||
<span class="link-style dup-schedule-run-now" onclick="DupPro.Schedule.RunNow('<?php echo (int) $schedule->getId(); ?>');">
|
||||
<?php esc_html_e('Run Now', 'duplicator-pro'); ?>
|
||||
</span>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<?php
|
||||
if (count($schedule->storage_ids) > 0 && strlen(implode('', $schedule->storage_ids)) != 0) {
|
||||
foreach ($schedule->storage_ids as $storage_id) {
|
||||
if (($storage = AbstractStorageEntity::getById($storage_id)) === false) {
|
||||
continue;
|
||||
}
|
||||
echo esc_html($storage->getName());
|
||||
echo '<br/>';
|
||||
}
|
||||
} else {
|
||||
$txt_DeleteStorage = __('No Storage', 'duplicator-pro');
|
||||
echo "<a href='javascript:void(0)' onclick='DupPro.Schedule.showDeleteStorageMessage()'>"
|
||||
. "<i class='fa fa-info-circle fa-fw fa-sm'></i>"
|
||||
. "<u>" . esc_html($txt_DeleteStorage) . "</u></a>";
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<td>
|
||||
<?php echo esc_html($schedule->get_next_run_time_string()); ?>
|
||||
</td>
|
||||
<td id="schedule-<?php echo (int) $schedule->getId() ?>-last-ran-string">
|
||||
<?php echo esc_html($schedule->get_last_ran_string()); ?>
|
||||
</td>
|
||||
<td>
|
||||
<b>
|
||||
<?php if ($schedule->active) { ?>
|
||||
<span class="green" ><?php esc_html_e('Yes', 'duplicator-pro'); ?></span>
|
||||
<?php } else { ?>
|
||||
<span class="maroon" ><?php esc_html_e('No', 'duplicator-pro'); ?></span>
|
||||
<?php } ?>
|
||||
</b>
|
||||
</td>
|
||||
<td class="dup-col-recovery" >
|
||||
<?php $schedule->recoveableHtmlInfo(true); ?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id='detail-<?php echo (int) $schedule->getId() ?>' class='<?php echo ($i % 2) ? 'alternate' : ''; ?> schedule-detail'>
|
||||
<td colspan="5">
|
||||
<?php
|
||||
$template = DUP_PRO_Package_Template_Entity::getById($schedule->template_id);
|
||||
?>
|
||||
<table style="line-height: 15px">
|
||||
<tr>
|
||||
<td><b><?php esc_html_e('Package Template:', 'duplicator-pro'); ?></b></td>
|
||||
<td colspan="3"><?php echo esc_html($template->name); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b><?php esc_html_e('Summary:', 'duplicator-pro'); ?></b></td>
|
||||
<td colspan="3"><?php echo sprintf(esc_html__('Runs %1$s', 'duplicator-pro'), esc_html($schedule->get_repeat_text())); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b><?php esc_html_e('Last Ran:', 'duplicator-pro') ?></b></td>
|
||||
<td><?php echo esc_html($schedule->get_last_ran_string()); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b><?php esc_html_e('Times Run:', 'duplicator-pro') ?></b></td>
|
||||
<td><?php echo (int) $schedule->times_run; ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th colspan="7" style="text-align:right; white-space: nowrap; font-size:12px">
|
||||
<?php
|
||||
printf(
|
||||
esc_html_x(
|
||||
'Total: %1$s | Active: %2$s | Time: %3$s',
|
||||
'%1$s represents total schedules, %2$s represents active schedules, %3$s represents current time',
|
||||
'duplicator-pro'
|
||||
),
|
||||
(int) $schedule_count,
|
||||
(int) $active_count,
|
||||
'<span id="dpro-clock-container"></span>'
|
||||
);
|
||||
?>
|
||||
</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</form>
|
||||
<?php
|
||||
$alert1 = new DUP_PRO_UI_Dialog();
|
||||
$alert1->title = __('Bulk Action Required', 'duplicator-pro');
|
||||
$alert1->message = __('Please select an action from the "Bulk Actions" drop down menu!', 'duplicator-pro');
|
||||
$alert1->initAlert();
|
||||
|
||||
$alert2 = new DUP_PRO_UI_Dialog();
|
||||
$alert2->title = __('Selection Required', 'duplicator-pro');
|
||||
$alert2->wrapperClassButtons = 'dpro-dlg-noschedule-sel-bulk-action-btns';
|
||||
$alert2->message = __('Please select at least one schedule to perform the action on!', 'duplicator-pro');
|
||||
$alert2->initAlert();
|
||||
|
||||
$alert3 = new DUP_PRO_UI_Dialog();
|
||||
$alert3->title = __('No Storage', 'duplicator-pro');
|
||||
$alert3->message = __('All storage types associated with this schedule have been deleted. ', 'duplicator-pro');
|
||||
$alert3->message .= __('To enable this schedule please assign a valid storage type.', 'duplicator-pro');
|
||||
$alert3->message .= '<br/><br/>';
|
||||
$alert3->initAlert();
|
||||
|
||||
$confirm1 = new DUP_PRO_UI_Dialog();
|
||||
$confirm1->title = __('Delete Schedule?', 'duplicator-pro');
|
||||
$confirm1->wrapperClassButtons = 'dpro-dlg-delete-schedules-btns';
|
||||
$confirm1->message = __('Are you sure you want to delete the selected schedule(s)?', 'duplicator-pro');
|
||||
$confirm1->message .= '<br/>';
|
||||
$confirm1->message .= '<small><i>' . __('Note: This action removes all schedules.', 'duplicator-pro') . '</i></small>';
|
||||
$confirm1->progressText = __('Removing Schedules, Please Wait...', 'duplicator-pro');
|
||||
$confirm1->jsCallback = 'DupPro.Schedule.BulkDelete()';
|
||||
$confirm1->initConfirm();
|
||||
|
||||
$confirm4 = new DUP_PRO_UI_Dialog();
|
||||
$confirm4->title = __('Activate Schedule?', 'duplicator-pro');
|
||||
$confirm4->wrapperClassButtons = 'dpro-dlg-activate-schedules-btns';
|
||||
$confirm4->message = __('Are you sure you want to activate the selected schedule(s)?', 'duplicator-pro');
|
||||
$confirm4->message .= '<br/>';
|
||||
$confirm4->message .= '<small><i>' . __('Note: This action activates all schedules.', 'duplicator-pro') . '</i></small>';
|
||||
$confirm4->progressText = __('Activating Schedules, Please Wait...', 'duplicator-pro');
|
||||
$confirm4->jsCallback = 'DupPro.Schedule.BulkActivate()';
|
||||
$confirm4->initConfirm();
|
||||
|
||||
$confirm5 = new DUP_PRO_UI_Dialog();
|
||||
$confirm5->title = __('Deactivate Schedule?', 'duplicator-pro');
|
||||
$confirm5->wrapperClassButtons = 'dpro-dlg-deactivate-schedules-btns';
|
||||
$confirm5->message = __('Are you sure you want to deactivate the selected schedule(s)?', 'duplicator-pro');
|
||||
$confirm5->message .= '<br/>';
|
||||
$confirm5->message .= '<small><i>' . __('Note: This action deactivates all schedules.', 'duplicator-pro') . '</i></small>';
|
||||
$confirm5->progressText = __('Deactivating Schedules, Please Wait...', 'duplicator-pro');
|
||||
$confirm5->jsCallback = 'DupPro.Schedule.BulkDeactivate()';
|
||||
$confirm5->initConfirm();
|
||||
|
||||
$confirm2 = new DUP_PRO_UI_Dialog();
|
||||
$confirm2->title = __('RUN SCHEDULE?', 'duplicator-pro');
|
||||
$confirm2->message = __('Are you sure you want to run schedule now?', 'duplicator-pro');
|
||||
$confirm2->progressText = __('Running Schedule, Please Wait...', 'duplicator-pro');
|
||||
$confirm2->jsCallback = 'DupPro.Schedule.Run(this)';
|
||||
$confirm2->initConfirm();
|
||||
|
||||
$confirm3 = new DUP_PRO_UI_Dialog();
|
||||
$confirm3->title = $confirm1->title;
|
||||
$confirm3->message = __('Are you sure you want to delete this schedule?', 'duplicator-pro');
|
||||
$confirm3->progressText = $confirm1->progressText;
|
||||
$confirm3->jsCallback = 'DupPro.Schedule.DeleteThis(this)';
|
||||
$confirm3->initConfirm();
|
||||
|
||||
$schedule_bulk_action_nonce = wp_create_nonce('duplicator_pro_schedule_bulk_action');
|
||||
?>
|
||||
<script>
|
||||
jQuery(document).ready(function ($) {
|
||||
|
||||
/*METHOD: Shows quick view summary */
|
||||
DupPro.Schedule.QuickView = function (id) {
|
||||
$('#detail-' + id).toggle();
|
||||
};
|
||||
|
||||
/*METHOD: Run the schedule now and redirect to packages page */
|
||||
DupPro.Schedule.RunNow = function (schedule_id) {
|
||||
<?php $confirm2->showConfirm(); ?>
|
||||
$("#<?php echo esc_js($confirm2->getID()); ?>-confirm").attr('data-id', schedule_id);
|
||||
};
|
||||
|
||||
DupPro.Schedule.Run = function (e) {
|
||||
var schedule_id = $(e).attr('data-id');
|
||||
|
||||
$('#icon-' + schedule_id + '-status').show();
|
||||
$('#text-' + schedule_id).html("<?php esc_html_e('Queueing Now - Please Wait...', 'duplicator-pro') ?>");
|
||||
var data = {
|
||||
action: 'duplicator_pro_run_schedule_now',
|
||||
schedule_id: schedule_id,
|
||||
nonce: '<?php echo esc_js(wp_create_nonce('duplicator_pro_run_schedule_now')); ?>'
|
||||
}
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: ajaxurl,
|
||||
timeout: 10000000,
|
||||
data: data
|
||||
}).done(function (respData) {
|
||||
try {
|
||||
var data = DupPro.parseJSON(respData);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
console.error('JSON parse failed for response data: ' + respData);
|
||||
return false;
|
||||
}
|
||||
|
||||
window.location.href = <?php echo SnapJson::jsonEncode($packagesPageUrl); ?>;
|
||||
});
|
||||
};
|
||||
|
||||
/*METHOD: Deletes a single schedule */
|
||||
DupPro.Schedule.Delete = function (id) {
|
||||
<?php $confirm3->showConfirm(); ?>
|
||||
$("#<?php echo esc_js($confirm3->getID()); ?>-confirm").attr('data-id', id);
|
||||
};
|
||||
|
||||
DupPro.Schedule.DeleteThis = function (e) {
|
||||
var id = $(e).attr('data-id');
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: ajaxurl,
|
||||
dataType: "json",
|
||||
data: {
|
||||
action: 'duplicator_pro_schedule_bulk_action',
|
||||
perform: <?php echo (int) ServicesSchedule::SCHEDULE_BULK_DELETE; ?>,
|
||||
schedule_ids: [id],
|
||||
nonce: '<?php echo esc_js($schedule_bulk_action_nonce); ?>'
|
||||
},
|
||||
}).done(function (data) {
|
||||
$('#dup-schedule-form').submit();
|
||||
});
|
||||
};
|
||||
|
||||
// Creats a comma seperate list of all selected package ids
|
||||
DupPro.Schedule.SelectedList = function () {
|
||||
var arr = [];
|
||||
|
||||
$("input[name^='selected_id[]']").each(function () {
|
||||
if ($(this).is(':checked')) {
|
||||
arr.push($(this).val());
|
||||
}
|
||||
});
|
||||
|
||||
return arr;
|
||||
};
|
||||
|
||||
// Bulk delete
|
||||
DupPro.Schedule.BulkDelete = function () {
|
||||
var list = DupPro.Schedule.SelectedList();
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: ajaxurl,
|
||||
dataType: "json",
|
||||
data: {
|
||||
action: 'duplicator_pro_schedule_bulk_action',
|
||||
perform: <?php echo (int) ServicesSchedule::SCHEDULE_BULK_DELETE; ?>,
|
||||
schedule_ids: list,
|
||||
nonce: '<?php echo esc_js($schedule_bulk_action_nonce); ?>'
|
||||
},
|
||||
}).done(function (data) {
|
||||
$('#dup-schedule-form').submit();
|
||||
});
|
||||
};
|
||||
|
||||
// Bulk activate
|
||||
DupPro.Schedule.BulkActivate = function () {
|
||||
var list = DupPro.Schedule.SelectedList();
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: ajaxurl,
|
||||
dataType: "json",
|
||||
data: {
|
||||
action: 'duplicator_pro_schedule_bulk_action',
|
||||
perform: <?php echo (int) ServicesSchedule::SCHEDULE_BULK_ACTIVATE; ?>,
|
||||
schedule_ids: list,
|
||||
nonce: '<?php echo esc_js($schedule_bulk_action_nonce); ?>'
|
||||
},
|
||||
}).done(function (data) {
|
||||
if (data.success) {
|
||||
$('#dup-schedule-form').submit();
|
||||
} else {
|
||||
if (data.message.length > 0) {
|
||||
$('#<?php echo esc_js($confirm4->getID()); ?>-progress').hide();
|
||||
$('#<?php echo esc_js($confirm4->getMessageID()); ?>').html(data.message);
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// Bulk deactivate
|
||||
DupPro.Schedule.BulkDeactivate = function () {
|
||||
var list = DupPro.Schedule.SelectedList();
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: ajaxurl,
|
||||
dataType: "json",
|
||||
data: {
|
||||
action: 'duplicator_pro_schedule_bulk_action',
|
||||
perform: <?php echo (int) ServicesSchedule::SCHEDULE_BULK_DEACTIVATE; ?>,
|
||||
schedule_ids: list,
|
||||
nonce: '<?php echo esc_js($schedule_bulk_action_nonce); ?>'
|
||||
},
|
||||
}).done(function (data) {
|
||||
$('#dup-schedule-form').submit();
|
||||
});
|
||||
};
|
||||
|
||||
/*METHOD: Bulk action response */
|
||||
DupPro.Schedule.BulkAction = function () {
|
||||
var list = DupPro.Schedule.SelectedList();
|
||||
|
||||
if (list.length == 0) {
|
||||
<?php $alert2->showAlert(); ?>
|
||||
return;
|
||||
}
|
||||
|
||||
var action = $('#bulk_action').val(),
|
||||
checked = ($('.item-chk:checked').length > 0);
|
||||
|
||||
if (action == -1 ) {
|
||||
<?php $alert1->showAlert(); ?>
|
||||
return;
|
||||
}
|
||||
|
||||
if (checked) {
|
||||
switch (action) {
|
||||
case '<?php echo (int) ServicesSchedule::SCHEDULE_BULK_DELETE; ?>':
|
||||
<?php $confirm1->showConfirm(); ?>
|
||||
break;
|
||||
case '<?php echo (int) ServicesSchedule::SCHEDULE_BULK_ACTIVATE; ?>':
|
||||
<?php $confirm4->showConfirm(); ?>
|
||||
break;
|
||||
case '<?php echo (int) ServicesSchedule::SCHEDULE_BULK_DEACTIVATE; ?>':
|
||||
<?php $confirm5->showConfirm(); ?>
|
||||
break;
|
||||
default:
|
||||
<?php $alert2->showAlert(); ?>
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/*METHOD: Edit a single schedule */
|
||||
DupPro.Schedule.Edit = function (id) {
|
||||
document.location.href = <?php echo json_encode($scheduleEditBaseURL); ?> + '&schedule_id=' + id;
|
||||
};
|
||||
|
||||
/*METHOD: Copy a schedule */
|
||||
DupPro.Schedule.Copy = function (id) {
|
||||
document.location.href = <?php echo json_encode($scheduleCopyBaseURL); ?> + '&duppro-source-schedule-id=' + id;
|
||||
};
|
||||
|
||||
/*METHOD: Set delete all */
|
||||
DupPro.Schedule.SetDeleteAll = function (chkbox) {
|
||||
$('.item-chk').each(function () {
|
||||
this.checked = chkbox.checked;
|
||||
});
|
||||
};
|
||||
|
||||
/*METHOD: Shows the delete storage message*/
|
||||
DupPro.Schedule.showDeleteStorageMessage = function() {
|
||||
<?php $alert3->showAlert(); ?>
|
||||
};
|
||||
|
||||
/*METHOD: Enableds the update flag to track proccessing */
|
||||
DupPro.Schedule.SetUpdateInterval = function (period) {
|
||||
console.log('setting interval to ' + period);
|
||||
if (DupPro.Schedule.setIntervalID != -1) {
|
||||
clearInterval(DupPro.Schedule.setIntervalID);
|
||||
DupPro.Schedule.setIntervalID = -1
|
||||
}
|
||||
DupPro.Schedule.setIntervalID = setInterval(DupPro.Schedule.UpdateSchedules, period * 1000);
|
||||
};
|
||||
|
||||
/*METHOD: Checks the schedule status */
|
||||
DupPro.Schedule.UpdateSchedules = function () {
|
||||
|
||||
var data = {
|
||||
action: 'duplicator_pro_get_schedule_infos',
|
||||
nonce: '<?php echo esc_js(wp_create_nonce('duplicator_pro_get_schedule_infos')); ?>'
|
||||
};
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: ajaxurl,
|
||||
data: data,
|
||||
success: function (respData) {
|
||||
try {
|
||||
var schedule_infos = DupPro.parseJSON(respData);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
console.error('JSON parse failed for response data: ' + respData);
|
||||
console.log("error");
|
||||
console.log(data);
|
||||
$(".schedule-status-icon").css('display', 'none');
|
||||
DupPro.Schedule.SetUpdateInterval(60);
|
||||
return false;
|
||||
}
|
||||
|
||||
activeSchedulePresent = false;
|
||||
for (schedule_info_key in schedule_infos) {
|
||||
var schedule_info = schedule_infos[schedule_info_key];
|
||||
var is_running_selector = "#icon-" + schedule_info.schedule_id + "-status";
|
||||
var last_ran_selector = "#schedule-" + schedule_info.schedule_id + "-last-ran-string";
|
||||
if (schedule_info.is_running) {
|
||||
$(is_running_selector).show();
|
||||
activeSchedulePresent = true;
|
||||
} else {
|
||||
$(is_running_selector).hide();
|
||||
}
|
||||
$(last_ran_selector).text(schedule_info.last_ran_string);
|
||||
}
|
||||
|
||||
if (activeSchedulePresent) {
|
||||
DupPro.Schedule.SetUpdateInterval(10);
|
||||
} else {
|
||||
|
||||
DupPro.Schedule.SetUpdateInterval(60);
|
||||
}
|
||||
},
|
||||
error: function (data) {
|
||||
console.log("error");
|
||||
console.log(data);
|
||||
$(".schedule-status-icon").css('display', 'none');
|
||||
DupPro.Schedule.SetUpdateInterval(60);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
//INIT: startup items
|
||||
$("tr.schedule-row").hover(
|
||||
function () {
|
||||
$(this).find(".sub-menu").show();
|
||||
},
|
||||
function () {
|
||||
$(this).find(".sub-menu").hide();
|
||||
}
|
||||
);
|
||||
|
||||
DupPro.UI.Clock(DupPro._WordPressInitTime);
|
||||
DupPro.Schedule.setIntervalID = -1;
|
||||
DupPro.Schedule.UpdateSchedules();
|
||||
});
|
||||
</script>
|
||||
Reference in New Issue
Block a user