PluginProbe
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder / 51.1.83
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder v51.1.83
51.1.83 51.1.82 51.1.81 51.1.79 51.1.78 51.1.77 51.1.76 51.1.74 51.1.75 51.1.65 51.1.64 51.1.63 trunk 51.1.14 51.1.2 51.1.35 51.1.36 51.1.37 51.1.38 51.1.39 51.1.44 51.1.45 51.1.46 51.1.47 51.1.49 All 37 releases
king-addons / includes / extensions / Maintenance_Mode / templates / view-schedule.php

view-schedule.php in King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder 51.1.83, at includes/extensions/Maintenance_Mode/templates/view-schedule.php

324 lines 19.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Maintenance Mode schedule view.
4 *
5 * @package King_Addons
6 */
7
8 if (!defined('ABSPATH')) {
9 exit;
10 }
11
12 $schedule_start = $settings['schedule_start'] ? get_date_from_gmt($settings['schedule_start'], 'Y-m-d\\TH:i') : '';
13 $schedule_end = $settings['schedule_end'] ? get_date_from_gmt($settings['schedule_end'], 'Y-m-d\\TH:i') : '';
14
15 $schedule_windows = $settings['schedule_windows'] ?? [];
16 if (!is_array($schedule_windows)) {
17 $schedule_windows = [];
18 }
19
20 if ($schedule_windows === [] && ($schedule_start !== '' || $schedule_end !== '')) {
21 $schedule_windows[] = [
22 'start' => $settings['schedule_start'] ?? '',
23 'end' => $settings['schedule_end'] ?? '',
24 'timezone' => 'site',
25 ];
26 }
27
28 $recurring_enabled = !empty($settings['recurring_enabled']);
29 $recurring_rules = $settings['recurring_rules'] ?? [];
30 if (!is_array($recurring_rules)) {
31 $recurring_rules = [];
32 }
33
34 $site_timezone = function_exists('wp_timezone_string') ? wp_timezone_string() : 'UTC';
35 $timezone_list = function_exists('timezone_identifiers_list') ? timezone_identifiers_list() : [];
36
37 function kng_mm_dt_local($gmt)
38 {
39 if (!$gmt) {
40 return '';
41 }
42
43 return get_date_from_gmt($gmt, 'Y-m-d\\TH:i');
44 }
45 ?>
46
47 <form method="post" action="options.php">
48 <?php settings_fields('kng_maintenance_settings_group'); ?>
49
50 <div class="ka-card">
51 <div class="ka-card-header">
52 <span class="dashicons dashicons-clock purple"></span>
53 <h2><?php esc_html_e('Schedule', 'king-addons'); ?></h2>
54 </div>
55 <div class="ka-card-body">
56 <input type="hidden" name="kng_maintenance_settings[schedule_enabled]" value="0">
57 <label class="ka-toggle">
58 <input type="checkbox" name="kng_maintenance_settings[schedule_enabled]" value="1" <?php checked(!empty($settings['schedule_enabled'])); ?> />
59 <span class="ka-toggle-slider"></span>
60 <span class="ka-toggle-label"><?php esc_html_e('Enable schedule window', 'king-addons'); ?></span>
61 </label>
62
63 <div class="kng-maintenance-schedule-grid">
64 <div class="kng-field">
65 <label><?php esc_html_e('Start', 'king-addons'); ?></label>
66 <input type="datetime-local" name="kng_maintenance_settings[schedule_start]" value="<?php echo esc_attr($schedule_start); ?>">
67 </div>
68 <div class="kng-field">
69 <label><?php esc_html_e('End', 'king-addons'); ?></label>
70 <input type="datetime-local" name="kng_maintenance_settings[schedule_end]" value="<?php echo esc_attr($schedule_end); ?>">
71 </div>
72 </div>
73 <p class="kng-maintenance-note"><?php esc_html_e('Scheduling uses your site timezone. Leave empty to ignore start or end.', 'king-addons'); ?></p>
74 </div>
75 </div>
76
77 <div class="ka-card">
78 <div class="ka-card-header">
79 <span class="dashicons dashicons-lock pink"></span>
80 <h2><?php esc_html_e('Multiple Schedule Windows', 'king-addons'); ?></h2>
81 </div>
82 <div class="ka-card-body">
83 <p class="kng-maintenance-note">
84 <?php
85 echo esc_html(sprintf(
86 /* translators: %s: timezone string */
87 __('Each window can override timezone (default: site timezone %s). Windows are evaluated in UTC internally.', 'king-addons'),
88 $site_timezone
89 ));
90 ?>
91 </p>
92
93 <div id="kng-maintenance-windows" class="kng-maintenance-repeat">
94 <?php foreach ($schedule_windows as $index => $window) :
95 $tz = isset($window['timezone']) ? (string) $window['timezone'] : 'site';
96 $startLocal = kng_mm_dt_local($window['start'] ?? '');
97 $endLocal = kng_mm_dt_local($window['end'] ?? '');
98 ?>
99 <div class="kng-repeat-row" data-index="<?php echo esc_attr($index); ?>">
100 <div class="kng-maintenance-schedule-grid">
101 <div class="kng-field">
102 <label><?php esc_html_e('Start', 'king-addons'); ?></label>
103 <input type="datetime-local" name="kng_maintenance_settings[schedule_windows][<?php echo esc_attr($index); ?>][start]" value="<?php echo esc_attr($startLocal); ?>">
104 </div>
105 <div class="kng-field">
106 <label><?php esc_html_e('End', 'king-addons'); ?></label>
107 <input type="datetime-local" name="kng_maintenance_settings[schedule_windows][<?php echo esc_attr($index); ?>][end]" value="<?php echo esc_attr($endLocal); ?>">
108 </div>
109 <div class="kng-field">
110 <label><?php esc_html_e('Timezone', 'king-addons'); ?></label>
111 <select name="kng_maintenance_settings[schedule_windows][<?php echo esc_attr($index); ?>][timezone]">
112 <option value="site" <?php selected($tz, 'site'); ?>><?php echo esc_html(sprintf(__('Site (%s)', 'king-addons'), $site_timezone)); ?></option>
113 <?php foreach ($timezone_list as $tzItem) : ?>
114 <option value="<?php echo esc_attr($tzItem); ?>" <?php selected($tz, $tzItem); ?>><?php echo esc_html($tzItem); ?></option>
115 <?php endforeach; ?>
116 </select>
117 </div>
118 </div>
119 <div class="kng-repeat-actions">
120 <button type="button" class="ka-btn ka-btn-secondary ka-btn-sm kng-remove-row"><?php esc_html_e('Remove', 'king-addons'); ?></button>
121 </div>
122 </div>
123 <?php endforeach; ?>
124 </div>
125
126 <div class="kng-maintenance-actions">
127 <button type="button" class="ka-btn ka-btn-secondary" id="kng-add-window"><?php esc_html_e('Add window', 'king-addons'); ?></button>
128 </div>
129 </div>
130 </div>
131
132 <div class="ka-card">
133 <div class="ka-card-header">
134 <span class="dashicons dashicons-update purple"></span>
135 <h2><?php esc_html_e('Recurring Rules', 'king-addons'); ?></h2>
136 </div>
137 <div class="ka-card-body">
138 <input type="hidden" name="kng_maintenance_settings[recurring_enabled]" value="0">
139 <label class="ka-toggle">
140 <input type="checkbox" name="kng_maintenance_settings[recurring_enabled]" value="1" <?php checked($recurring_enabled); ?> />
141 <span class="ka-toggle-slider"></span>
142 <span class="ka-toggle-label"><?php esc_html_e('Enable recurring rules', 'king-addons'); ?></span>
143 </label>
144
145 <div id="kng-maintenance-recurring" class="kng-maintenance-repeat" style="margin-top: 16px;">
146 <?php foreach ($recurring_rules as $index => $rule) :
147 $freq = isset($rule['frequency']) ? (string) $rule['frequency'] : 'daily';
148 $tz = isset($rule['timezone']) ? (string) $rule['timezone'] : 'site';
149 $startTime = isset($rule['start_time']) ? (string) $rule['start_time'] : '01:00';
150 $endTime = isset($rule['end_time']) ? (string) $rule['end_time'] : '02:00';
151 $dow = isset($rule['days_of_week']) && is_array($rule['days_of_week']) ? array_map('intval', $rule['days_of_week']) : [];
152 $dom = isset($rule['days_of_month']) && is_array($rule['days_of_month']) ? implode(',', array_map('intval', $rule['days_of_month'])) : '';
153 ?>
154 <div class="kng-repeat-row" data-index="<?php echo esc_attr($index); ?>">
155 <div class="kng-maintenance-content-grid kng-maintenance-content-grid-sm">
156 <div class="kng-field">
157 <label><?php esc_html_e('Frequency', 'king-addons'); ?></label>
158 <select class="kng-recurring-frequency" name="kng_maintenance_settings[recurring_rules][<?php echo esc_attr($index); ?>][frequency]">
159 <option value="daily" <?php selected($freq, 'daily'); ?>><?php esc_html_e('Daily', 'king-addons'); ?></option>
160 <option value="weekly" <?php selected($freq, 'weekly'); ?>><?php esc_html_e('Weekly', 'king-addons'); ?></option>
161 <option value="monthly" <?php selected($freq, 'monthly'); ?>><?php esc_html_e('Monthly', 'king-addons'); ?></option>
162 </select>
163 </div>
164 <div class="kng-field">
165 <label><?php esc_html_e('Timezone', 'king-addons'); ?></label>
166 <select name="kng_maintenance_settings[recurring_rules][<?php echo esc_attr($index); ?>][timezone]">
167 <option value="site" <?php selected($tz, 'site'); ?>><?php echo esc_html(sprintf(__('Site (%s)', 'king-addons'), $site_timezone)); ?></option>
168 <?php foreach ($timezone_list as $tzItem) : ?>
169 <option value="<?php echo esc_attr($tzItem); ?>" <?php selected($tz, $tzItem); ?>><?php echo esc_html($tzItem); ?></option>
170 <?php endforeach; ?>
171 </select>
172 </div>
173 <div class="kng-field">
174 <label><?php esc_html_e('Start time', 'king-addons'); ?></label>
175 <input type="time" name="kng_maintenance_settings[recurring_rules][<?php echo esc_attr($index); ?>][start_time]" value="<?php echo esc_attr($startTime); ?>">
176 </div>
177 <div class="kng-field">
178 <label><?php esc_html_e('End time', 'king-addons'); ?></label>
179 <input type="time" name="kng_maintenance_settings[recurring_rules][<?php echo esc_attr($index); ?>][end_time]" value="<?php echo esc_attr($endTime); ?>">
180 </div>
181 </div>
182
183 <div class="kng-recurring-weekly" <?php echo $freq === 'weekly' ? '' : 'style="display:none;"'; ?>>
184 <div class="kng-field">
185 <label><?php esc_html_e('Days of week', 'king-addons'); ?></label>
186 <div class="kng-weekdays">
187 <?php
188 $labels = [
189 1 => __('Mon', 'king-addons'),
190 2 => __('Tue', 'king-addons'),
191 3 => __('Wed', 'king-addons'),
192 4 => __('Thu', 'king-addons'),
193 5 => __('Fri', 'king-addons'),
194 6 => __('Sat', 'king-addons'),
195 7 => __('Sun', 'king-addons'),
196 ];
197 foreach ($labels as $dayNum => $label) :
198 ?>
199 <label style="margin-right:10px; display:inline-flex; align-items:center; gap:6px;">
200 <input type="checkbox" name="kng_maintenance_settings[recurring_rules][<?php echo esc_attr($index); ?>][days_of_week][]" value="<?php echo esc_attr($dayNum); ?>" <?php checked(in_array($dayNum, $dow, true)); ?>>
201 <span><?php echo esc_html($label); ?></span>
202 </label>
203 <?php endforeach; ?>
204 </div>
205 <p class="kng-maintenance-note"><?php esc_html_e('Weekly rules run only on the selected days.', 'king-addons'); ?></p>
206 </div>
207 </div>
208
209 <div class="kng-recurring-monthly" <?php echo $freq === 'monthly' ? '' : 'style="display:none;"'; ?>>
210 <div class="kng-field">
211 <label><?php esc_html_e('Days of month', 'king-addons'); ?></label>
212 <input type="text" placeholder="1,15,28" name="kng_maintenance_settings[recurring_rules][<?php echo esc_attr($index); ?>][days_of_month]" value="<?php echo esc_attr($dom); ?>">
213 <p class="kng-maintenance-note"><?php esc_html_e('Comma-separated list (1..31).', 'king-addons'); ?></p>
214 </div>
215 </div>
216
217 <div class="kng-repeat-actions">
218 <button type="button" class="ka-btn ka-btn-secondary ka-btn-sm kng-remove-row"><?php esc_html_e('Remove', 'king-addons'); ?></button>
219 </div>
220 </div>
221 <?php endforeach; ?>
222 </div>
223
224 <div class="kng-maintenance-actions">
225 <button type="button" class="ka-btn ka-btn-secondary" id="kng-add-recurring"><?php esc_html_e('Add recurring rule', 'king-addons'); ?></button>
226 </div>
227 </div>
228 </div>
229
230 <template id="kng-maintenance-window-template">
231 <div class="kng-repeat-row" data-index="__INDEX__">
232 <div class="kng-maintenance-schedule-grid">
233 <div class="kng-field">
234 <label><?php esc_html_e('Start', 'king-addons'); ?></label>
235 <input type="datetime-local" name="kng_maintenance_settings[schedule_windows][__INDEX__][start]" value="">
236 </div>
237 <div class="kng-field">
238 <label><?php esc_html_e('End', 'king-addons'); ?></label>
239 <input type="datetime-local" name="kng_maintenance_settings[schedule_windows][__INDEX__][end]" value="">
240 </div>
241 <div class="kng-field">
242 <label><?php esc_html_e('Timezone', 'king-addons'); ?></label>
243 <select name="kng_maintenance_settings[schedule_windows][__INDEX__][timezone]">
244 <option value="site"><?php echo esc_html(sprintf(__('Site (%s)', 'king-addons'), $site_timezone)); ?></option>
245 <?php foreach ($timezone_list as $tzItem) : ?>
246 <option value="<?php echo esc_attr($tzItem); ?>"><?php echo esc_html($tzItem); ?></option>
247 <?php endforeach; ?>
248 </select>
249 </div>
250 </div>
251 <div class="kng-repeat-actions">
252 <button type="button" class="ka-btn ka-btn-secondary ka-btn-sm kng-remove-row"><?php esc_html_e('Remove', 'king-addons'); ?></button>
253 </div>
254 </div>
255 </template>
256
257 <template id="kng-maintenance-recurring-template">
258 <div class="kng-repeat-row" data-index="__INDEX__">
259 <div class="kng-maintenance-content-grid kng-maintenance-content-grid-sm">
260 <div class="kng-field">
261 <label><?php esc_html_e('Frequency', 'king-addons'); ?></label>
262 <select class="kng-recurring-frequency" name="kng_maintenance_settings[recurring_rules][__INDEX__][frequency]">
263 <option value="daily"><?php esc_html_e('Daily', 'king-addons'); ?></option>
264 <option value="weekly"><?php esc_html_e('Weekly', 'king-addons'); ?></option>
265 <option value="monthly"><?php esc_html_e('Monthly', 'king-addons'); ?></option>
266 </select>
267 </div>
268 <div class="kng-field">
269 <label><?php esc_html_e('Timezone', 'king-addons'); ?></label>
270 <select name="kng_maintenance_settings[recurring_rules][__INDEX__][timezone]">
271 <option value="site"><?php echo esc_html(sprintf(__('Site (%s)', 'king-addons'), $site_timezone)); ?></option>
272 <?php foreach ($timezone_list as $tzItem) : ?>
273 <option value="<?php echo esc_attr($tzItem); ?>"><?php echo esc_html($tzItem); ?></option>
274 <?php endforeach; ?>
275 </select>
276 </div>
277 <div class="kng-field">
278 <label><?php esc_html_e('Start time', 'king-addons'); ?></label>
279 <input type="time" name="kng_maintenance_settings[recurring_rules][__INDEX__][start_time]" value="01:00">
280 </div>
281 <div class="kng-field">
282 <label><?php esc_html_e('End time', 'king-addons'); ?></label>
283 <input type="time" name="kng_maintenance_settings[recurring_rules][__INDEX__][end_time]" value="02:00">
284 </div>
285 </div>
286
287 <div class="kng-recurring-weekly" style="display:none;">
288 <div class="kng-field">
289 <label><?php esc_html_e('Days of week', 'king-addons'); ?></label>
290 <div class="kng-weekdays">
291 <?php foreach ([1 => __('Mon', 'king-addons'), 2 => __('Tue', 'king-addons'), 3 => __('Wed', 'king-addons'), 4 => __('Thu', 'king-addons'), 5 => __('Fri', 'king-addons'), 6 => __('Sat', 'king-addons'), 7 => __('Sun', 'king-addons')] as $dayNum => $label) : ?>
292 <label style="margin-right:10px; display:inline-flex; align-items:center; gap:6px;">
293 <input type="checkbox" name="kng_maintenance_settings[recurring_rules][__INDEX__][days_of_week][]" value="<?php echo esc_attr($dayNum); ?>">
294 <span><?php echo esc_html($label); ?></span>
295 </label>
296 <?php endforeach; ?>
297 </div>
298 <p class="kng-maintenance-note"><?php esc_html_e('Weekly rules run only on the selected days.', 'king-addons'); ?></p>
299 </div>
300 </div>
301
302 <div class="kng-recurring-monthly" style="display:none;">
303 <div class="kng-field">
304 <label><?php esc_html_e('Days of month', 'king-addons'); ?></label>
305 <input type="text" placeholder="1,15,28" name="kng_maintenance_settings[recurring_rules][__INDEX__][days_of_month]" value="">
306 <p class="kng-maintenance-note"><?php esc_html_e('Comma-separated list (1..31).', 'king-addons'); ?></p>
307 </div>
308 </div>
309
310 <div class="kng-repeat-actions">
311 <button type="button" class="ka-btn ka-btn-secondary ka-btn-sm kng-remove-row"><?php esc_html_e('Remove', 'king-addons'); ?></button>
312 </div>
313 </div>
314 </template>
315
316 <div class="ka-card">
317 <div class="ka-submit">
318 <button type="submit" class="ka-btn ka-btn-primary">
319 <?php esc_html_e('Save Schedule', 'king-addons'); ?>
320 </button>
321 </div>
322 </div>
323 </form>
324