PluginProbe
HurryTimer – An Scarcity and Urgency Countdown Timer for WordPress & WooCommerce / 2.7.2
HurryTimer – An Scarcity and Urgency Countdown Timer for WordPress & WooCommerce v2.7.2
2.15.0 trunk 1.0.0 1.0.1 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.1.2 2.1.3 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 All 62 releases
hurrytimer / includes / Admin.php

Admin.php in HurryTimer – An Scarcity and Urgency Countdown Timer for WordPress & WooCommerce 2.7.2, at includes/Admin.php

797 lines 28.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Hurrytimer;
4
5 use DateTime;
6
7 class Admin {
8 /**
9 * The ID of this plugin.
10 *
11 * @since 1.0.0
12 * @access private
13 * @var string $pluginName The ID of this plugin.
14 */
15 private $pluginName;
16
17 /**
18 * The version of this plugin.
19 *
20 * @since 1.0.0
21 * @access private
22 * @var string $version The current version of this plugin.
23 */
24 private $version;
25
26 /**
27 * Initialize the class and set its properties.
28 *
29 * @param string $pluginName The name of this plugin.
30 * @param string $version The version of this plugin.
31 *
32 * @since 1.0.0
33 *
34 */
35 public function __construct($pluginName, $version) {
36 $this->pluginName = $pluginName;
37 $this->version = $version;
38 add_action('wp_insert_post', [$this, 'regenerate_css'], 10, 3);
39 add_action('wp_ajax_wcSearchProducts', [$this, 'ajaxWcSearchProducts']);
40 add_action('wp_ajax_hurrytimer/search_wc_coupon', [$this, 'search_wc_coupon']);
41 add_action('wp_ajax_add_wc_condition_group', [$this, 'ajaxAddWcConditionGroup']);
42 add_action('wp_ajax_add_wc_condition', [$this, 'ajaxAddWcCondition']);
43 add_action('wp_ajax_load_wc_condition', [$this, 'ajaxLoadWcCondition']);
44 add_action('wp_ajax_hurryt_dismiss_leave_review_notice', [$this, 'dismiss_leave_review_ajax']);
45 add_action('wp_ajax_hurryt_remind_leave_review_notice', [$this, 'remind_leave_review_ajax']);
46 add_action('admin_init', [$this, 'activateCampaign']);
47 add_action('admin_init', [$this, 'deactivateCampaign']);
48 add_action('admin_init', [$this, 'resetEvergreenCampaign']);
49 add_action('admin_init', [$this, 'resetAllEvergreenCampaigns']);
50 add_action('admin_init', [$this, 'pluginSettings']);
51 add_filter('post_row_actions', [$this, 'campaignsListRowActions']);
52 add_action('admin_menu', [$this, 'menu']);
53 add_filter(
54 'bulk_actions-edit-' . HURRYT_POST_TYPE,
55 [$this, 'campaignsListBulkActions',]
56 );
57
58 add_filter(
59 'manage_' . HURRYT_POST_TYPE . '_posts_columns',
60 [$this, 'campaignsListColumns',]
61 );
62
63
64 add_action(
65 'manage_' . HURRYT_POST_TYPE . '_posts_custom_column',
66 [$this, 'countdownListColumnsContent'],
67 10,
68 2
69 );
70
71 add_filter(
72 'bulk_post_updated_messages',
73 [$this, 'customBulkPostUpdatedMessages'],
74 10,
75 2
76 );
77
78 add_action('admin_menu', [$this, 'helpTabs']);
79 add_action('admin_notices', [$this, 'resetEvergreenCampaignNotice']);
80 add_action('admin_notices', [$this, 'resetAllEvergreenCampaignNotice']);
81
82 add_action('admin_notices', [$this, 'countdown_activation_notice']);
83 add_filter('admin_footer_text', [$this, 'admin_footer_text']);
84 add_filter('wp_insert_post_data', [$this, 'mark_post_being_saved']);
85
86 add_filter('plugin_action_links_' . HURRYT_BASENAME, [$this, 'set_plugin_action_links']);
87
88 //removeIf(pro)
89 add_action('admin_notices', [$this, 'leave_review_notice']);
90 //endRemoveIf(pro)
91
92 add_action('wp_ajax_hurryt_dismiss_headline_moved_notice', [$this, 'dismiss_headline_moved_notice']);
93
94 add_action('admin_enqueue_scripts', [$this, 'enqueue_review_scripts']);
95 }
96
97 function enqueue_review_scripts(){
98 wp_enqueue_script(
99 'hurryt-review',
100 HURRYT_URL . 'assets/js/review.js',
101 ['jquery'],
102 HURRYT_VERSION,
103 true
104 );
105
106 wp_localize_script(
107 'hurryt-review',
108 'hurrytimer_ajax_review',
109 [
110 'url' => admin_url('admin-ajax.php'),
111 'nonce' => wp_create_nonce('hurryt-review-nonce'),
112 ]
113 );
114
115 }
116 public function search_wc_coupon() {
117 check_ajax_referer('hurryt-admin', 'nonce');
118 $search = isset($_GET['search']) ? sanitize_text_field($_GET['search']) : '';
119 $exclude = isset($_GET['exclude']) ? array_map('intval', (array)$_GET['exclude']) : [];
120
121 $items = get_posts([
122 'post_type' => 'shop_coupon',
123 's' => $search,
124 'post__not_in' => $exclude,
125 'post_status' => 'any',
126 'numberposts' => 30
127 ]);
128
129 $results = array_map(function ($item) {
130 return [
131 "id" => $item->post_title,
132 "text" => $item->post_title,
133 ];
134 }, $items);
135 exit(json_encode(["results" => $results, "pagination" => true]));
136 }
137 public function dismiss_leave_review_ajax() {
138 check_ajax_referer('hurryt-review-nonce', 'nonce');
139 add_option('hurryt_leave_review_dismissed', '1');
140 }
141 public function remind_leave_review_ajax() {
142 check_ajax_referer('hurryt-review-nonce', 'nonce');
143 set_transient('hurryt_remind_review_notice', '1', 86400);
144 }
145
146 public function dismiss_headline_moved_notice() {
147 check_ajax_referer('hurryt-admin', 'nonce');
148 add_option('hurryt_headline_moved_notice_dismissed', '1');
149 }
150
151 private function should_ask_for_review() {
152
153 if (!apply_filters('hurryt_show_plugin_review_notice', true)) {
154 return false;
155 }
156
157 if (get_transient('hurryt_remind_review_notice')) {
158 return false;
159 }
160 if (get_option('hurryt_leave_review_dismissed')) {
161 return false;
162 }
163 if (isset($_COOKIE['hurryt_leave_review_remind'])) {
164 return false;
165 }
166 if (isset($_COOKIE['hurryt_leave_review_dismissed'])) {
167 return false;
168 }
169
170 $campaigns = get_posts([
171 'post_type' => HURRYT_POST_TYPE,
172 'post_status' => 'publish',
173 'posts_per_page' => 1,
174 'orderby' => 'post_date',
175 'order' => 'ASC'
176 ]);
177
178 if (is_wp_error($campaigns) || empty($campaigns) || !is_array($campaigns)) {
179 return false;
180 }
181
182 $post_date = new DateTime($campaigns[0]->post_date);
183
184 $now = new DateTime(current_time('mysql'));
185
186 $diff = $post_date->diff($now);
187
188 if (!$diff) {
189 return false;
190 }
191
192 return $diff->d >= 1;
193 }
194
195 public function leave_review_notice() {
196 if(! $this->should_ask_for_review()){
197 return;
198 }
199 ?>
200 <div class="notice notice-info is-dismissible">
201 <h3>Support the development of HurryTimer plugin!</h3>
202 <p>Thank you for choosing <b>HurryTimer</b>. If you liked the plugin, kindly leave us a 5-star review on <a href="https://wordpress.org/support/plugin/hurrytimer/reviews/?filter=5" target="_blank">WordPress.org</a>. We really appreciate your support!</p>
203
204 <p>
205 <a href="https://wordpress.org/support/plugin/hurrytimer/reviews/?filter=5" class="button-primary">Leave a review</a>
206 &nbsp;<button type="button" class="button button-default" id="hurryt-remind-review-notice">Remind me later</button>
207 &nbsp;<button type="button" class="button-link" id="hurryt-dismiss-review-notice" style="margin-left:10px">Already done!</button>
208 </p>
209 </div>
210 <?php
211 }
212
213 function mark_post_being_saved($data) {
214
215 global $hurryt_saving_post;
216
217 $hurryt_saving_post = 1;
218
219 return $data;
220 }
221
222 /**
223 * Generate published campaigns CSS file.
224 *
225 * @param $post_id
226 * @param $post
227 * @param $update
228 */
229 function regenerate_css($post_id, $post, $update) {
230 if (wp_is_post_revision($post_id)) {
231 return;
232 }
233
234 if ($post->post_type !== HURRYT_POST_TYPE) {
235 return;
236 }
237
238 if ($update) {
239 CSS_Builder::get_instance()->generate_css();
240 }
241 }
242
243 public function admin_footer_text() {
244 $screen = get_current_screen();
245 if ($screen->post_type === HURRYT_POST_TYPE) {
246 include HURRYT_DIR . 'admin/templates/footer-rate-plugin.php';
247 }
248 }
249
250 public function set_plugin_action_links($links) {
251 $settings_url = admin_url('admin.php?page=hurrytimer_settings');
252 $settings_anchor = '<a href="' . $settings_url . '">' . __('Settings') . '</a>';
253 $manage_url = admin_url('edit.php?post_type=' . HURRYT_POST_TYPE);
254 $manage_anchor = '<a href="' . $manage_url . '">' . __('Campaigns', 'hurrytimer') . '</a>';
255 $links[] = $manage_anchor;
256 $links[] = $settings_anchor;
257
258 //removeIf(pro)
259 $links[]
260 = '<a href="https://hurrytimer.com/?utm_source=plugin&utm_medium=installed_plugins&utm_campaign=go_pro" target="_blank" style="font-weight:bold;color:#F37335">Go Pro</a>';
261
262 //endRemoveIf(pro)
263
264 return $links;
265 }
266
267
268 public function countdown_activation_notice() {
269 $post_id = filter_input(INPUT_GET, 'post', FILTER_VALIDATE_INT);
270 $status = filter_input(INPUT_GET, 'hurrytimer_action');
271
272 if (!$post_id || !$status || !($post = get_post($post_id))) {
273 return;
274 }
275 if (
276 $status === "activate-compaign"
277 &&
278 !Utils\Helpers::isPostActive($post_id)
279 ) { ?>
280 <div class="notice notice-success is-dismissible">
281 <p><?php _e(
282 'Countdown timer deactivated.',
283 "hurrytimer"
284 ); ?></p>
285 </div>
286 <?php } else { ?>
287 <div class="notice notice-success is-dismissible">
288 <p><?php _e('Countdown timer activated.', "hurrytimer"); ?></p>
289 </div>
290 <?php }
291 }
292
293 public function helpTabs() {
294 add_action('load-edit.php', [$this, 'editHelpTabs']);
295 add_action('load-post-new.php', [$this, 'editHelpTabs']);
296 add_action('load-post.php', [$this, 'editHelpTabs']);
297 }
298
299 public function editHelpTabs() {
300 $screen = get_current_screen();
301 if (strpos($screen->id, 'hurrytimer_countdown') === false) {
302 return;
303 }
304 $screen->remove_help_tabs();
305 }
306
307 public function customBulkPostUpdatedMessages($bulk_messages, $bulk_counts) {
308 $bulk_messages[HURRYT_POST_TYPE] = [
309 'updated' => _n(
310 '%s countdown timer updated.',
311 '%s countdown timers updated.',
312 $bulk_counts['updated']
313 ),
314 'locked' => _n(
315 '%s countdown timer not updated, somebody is editing it.',
316 '%s countdown timers not updated, somebody is editing them.',
317 $bulk_counts['locked']
318 ),
319 'deleted' => _n(
320 '%s countdown timer permanently deleted.',
321 '%s countdown timers permanently deleted.',
322 $bulk_counts['deleted']
323 ),
324 'trashed' => _n(
325 '%s countdown timer deleted.',
326 '%s countdown timers deleted.',
327 $bulk_counts['trashed']
328 ),
329 'untrashed' => _n(
330 '%s countdown timer restored from the Trash.',
331 '%s countdown timers restored from the Trash.',
332 $bulk_counts['untrashed']
333 ),
334 ];
335
336 return $bulk_messages;
337 }
338
339 public function countdownListColumnsContent($column, $post_id) {
340 $campaign = new Campaign($post_id);
341 switch ($column) {
342 case 'status':
343 echo $campaign->is_published()
344 ? __('Active', "hurrytimer")
345 : __('Inactive', "hurrytimer");
346 break;
347 case 'mode':
348 if ($campaign->is_evergreen()) {
349 echo __('Evergreen', "hurrytimer");
350 }
351 if ($campaign->is_one_time()) {
352 echo __('One-Time', "hurrytimer");
353 }
354 if ($campaign->is_recurring()) {
355 echo __('Recurring', "hurrytimer");
356 }
357 break;
358 case 'shortcode':
359 ?>
360 <input style="min-width:100%" type="text" readonly onfocus="this.select()" value="[hurrytimer id=&quot;<?php echo $post_id ?>&quot;]">
361 <?php
362
363 break;
364 }
365 }
366
367 public function campaignsListBulkActions($actions) {
368 unset($actions['edit']);
369 return $actions;
370 }
371
372 public function campaignsListColumns($columns) {
373 $allowed_columns = [];
374 foreach ($columns as $column_name => $value) {
375 if (in_array($column_name, ['cb', 'title', 'date'])) {
376 $allowed_columns[$column_name] = $value;
377 }
378 }
379
380 $columns = $allowed_columns;
381 $date = $columns['date'];
382 unset($columns['date']);
383 $columns = array_merge($columns, [
384 'status' => __('Status', "hurrytimer"),
385 'mode' => __('Mode', "hurrytimer"),
386 'shortcode' => __('Shortcode', "hurrytimer"),
387 ]);
388 $columns['date'] = $date;
389
390 return $columns;
391 }
392
393 /**
394 * Register the stylesheets for the admin area.
395 *
396 * @since 1.0.0
397 */
398
399 public function enqueueStyles() {
400
401 if (!$this->should_enqueue_scripts()) {
402 return;
403 }
404
405 $version = defined('WP_DEBUG') && WP_DEBUG ? time() : $this->version;
406
407 wp_enqueue_style('wp-color-picker');
408 wp_dequeue_style('select2');
409
410 wp_enqueue_style(
411 "codemirror",
412 HURRYT_URL . 'assets/css/codemirror.css',
413 [],
414 "5.42.2",
415 'all'
416 );
417 wp_enqueue_style(
418 'hurryt-select2',
419 HURRYT_URL . 'assets/css/select2.css',
420 array(),
421 '4.0.5',
422 'all'
423 );
424
425 wp_enqueue_style(
426 'hurryt-base-css',
427 HURRYT_URL . 'assets/css/main.css',
428 array(),
429 $version,
430 'all'
431 );
432
433 wp_enqueue_style(
434 $this->pluginName,
435 HURRYT_URL . 'assets/css/admin.css',
436 ['wp-color-picker', 'hurryt-base-css', 'hurryt-select2'],
437 $version,
438 'all'
439 );
440 }
441
442 public function campaignsListRowActions($actions) {
443 global $post;
444 if ($post->post_type === HURRYT_POST_TYPE) {
445 unset($actions['inline hide-if-no-js']);
446 }
447
448 return $actions;
449 }
450
451 /**
452 * Register the JavaScript for the admin area.
453 *
454 * @since 1.0.0
455 */
456
457 private function should_enqueue_scripts() {
458 $screen = get_current_screen();
459 $screen_id = $screen ? $screen->id : '';
460
461 $screens = [
462 'edit-hurrytimer_countdown',
463 'hurrytimer_countdown',
464 'hurrytimer_page_hurrytimer_settings',
465 'hurrytimer_page_hurrytimer_license'
466 ];
467
468 return apply_filters('hurrytimer/enqueue_scripts', in_array($screen_id, $screens, true));
469 }
470 public function enqueueScripts() {
471 if (!$this->should_enqueue_scripts()) {
472 return;
473 }
474
475 wp_enqueue_script('jquery-ui-core');
476 wp_enqueue_script('jquery-ui-tooltip');
477 wp_enqueue_script('wp-color-picker');
478 wp_enqueue_script('jquery-ui-slider');
479 wp_dequeue_script('select2');
480
481 wp_enqueue_script(
482 'hurryt-cookie',
483 HURRYT_URL . 'assets/js/cookie.min.js',
484 [],
485 '2.2.0',
486 true
487 );
488
489 wp_enqueue_script(
490 'jq-date-picker-addon',
491 HURRYT_URL . 'assets/js/timepicker-addon.js',
492 ['jquery-ui-datepicker'],
493 '1.6.3',
494 true
495 );
496
497 wp_enqueue_script(
498 'hurryt-select2',
499 HURRYT_URL . 'assets/js/select2.min.js',
500 ['jquery'],
501 '4.0.5',
502 true
503 );
504
505 $deps = ['wp-color-picker', 'hurryt-cookie', 'jq-date-picker-addon', 'hurryt-select2'];
506
507 $version = defined('WP_DEBUG') && WP_DEBUG ? time() : $this->version;
508
509 wp_enqueue_script(
510 $this->pluginName,
511 HURRYT_URL . 'assets/js/admin.js',
512 $deps,
513 $version,
514 true
515 );
516
517 wp_localize_script($this->pluginName, 'hurrytimer_ajax_object', array(
518 'ajax_nonce' => wp_create_nonce('hurryt-admin'),
519 'ajax_url' => admin_url('admin-ajax.php'),
520 'headline_pos' => [
521 'above_timer' => C::HEADLINE_POSITION_ABOVE_TIMER,
522 'below_timer' => C::HEADLINE_POSITION_BELOW_TIMER,
523 ],
524 'mode' => [
525 'evergreen' => C::MODE_EVERGREEN,
526 'regular' => C::MODE_REGULAR,
527 'recurring' => C::MODE_RECURRING,
528 ],
529 'COOKIEPATH' => defined('COOKIEPATH') ? COOKIEPATH : '',
530 'COOKIE_DOMAIN' => defined('COOKIE_DOMAIN') ? COOKIE_DOMAIN : '',
531 ));
532 }
533
534 public function menu() {
535
536 add_menu_page(
537 'HurryTimer',
538 'HurryTimer',
539 apply_filters('hurryt_admin_capability', 'edit_posts', 'campaigns_list'),
540 'hurrytimer',
541 null,
542 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNjkuNTYgNzAuNjIiPiAgPGRlZnM+ICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iYzNiZGI3MTYtYmI3Ny00MzUxLTllOGYtYTUwY2Y3ODEzNDNlIiB5MT0iMzUuMzEiIHgyPSI2NS4wNyIgeTI9IjM1LjMxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+ICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjZjg1MzdmIi8+ICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNjNjIi8+ICAgIDwvbGluZWFyR3JhZGllbnQ+ICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iYzk5ODViMWMtYjg3Zi00M2Y1LWFiMzItNWE4ZWZiMzQ1ZDA1IiB4MT0iMTUuODgiIHkxPSIyOS4zIiB4Mj0iNjkuNTYiIHkyPSIyOS4zIiB4bGluazpocmVmPSIjYzNiZGI3MTYtYmI3Ny00MzUxLTllOGYtYTUwY2Y3ODEzNDNlIi8+ICA8L2RlZnM+ICA8dGl0bGU+QXNzZXQgMzwvdGl0bGU+ICA8ZyBpZD0iMGIwNjBiYzEtNGVlNS00YjUwLTkxMjctYTFjZWRmNGYxZDljIiBkYXRhLW5hbWU9IkxheWVyIDIiPiAgICA8ZyBpZD0iNmRiZGQyZWItOWY5My00YWMwLWE3YTQtYjE0ODY1MDQyYzNiIiBkYXRhLW5hbWU9IkxheWVyIDEiPiAgICAgIDxnPiAgICAgICAgPHBhdGggZD0iTTYzLjU5LDI4LjMzYTIuODUsMi44NSwwLDAsMC0zLjg0LTEuNzRsLS4wNSwwYTIuODgsMi44OCwwLDAsMC0xLjYsMy41M2MuMjYuODQuNDgsMS42OS42NSwyLjU1YTI3LDI3LDAsMCwxLDAsMTAuNzksMjYuNTksMjYuNTksMCwwLDEtNCw5LjU2LDI2Ljg0LDI2Ljg0LDAsMCwxLTExLjc3LDkuNywyNi42LDI2LjYsMCwwLDEtNSwxLjU2LDI3LjE3LDI3LjE3LDAsMCwxLTEwLjc5LDAsMjYuNTksMjYuNTksMCwwLDEtOS41Ni00LDI2Ljg0LDI2Ljg0LDAsMCwxLTkuNy0xMS43NywyNi42LDI2LjYsMCwwLDEtMS41Ni01LDI3LDI3LDAsMCwxLDAtMTAuNzksMjYuNTksMjYuNTksMCwwLDEsNC05LjU2LDI2Ljg0LDI2Ljg0LDAsMCwxLDExLjc3LTkuNywyNi42LDI2LjYsMCwwLDEsNS0xLjU2LDI3LjE3LDI3LjE3LDAsMCwxLDEwLjc5LDAsMjYuNiwyNi42LDAsMCwxLDUsMS41NnExLjE5LjUsMi4zMywxLjEyQTIuODMsMi44MywwLDAsMCw0OSwxMy42OGwuMDYtLjA5YTIuODUsMi44NSwwLDAsMC0xLTQuMVE0Ni42OCw4LjczLDQ1LjIsOC4xYTMyLjM5LDMyLjM5LDAsMCwwLTQuNjktMS41N1YyLjQxQTIuNDEsMi40MSwwLDAsMCwzOC4xLDBIMjguNDJBMi40MSwyLjQxLDAsMCwwLDI2LDIuNDFWNi4yaDBhMzIuMzcsMzIuMzcsMCwwLDAtMTEuNjQsNC45Yy0uMzUuMjQtLjY5LjQ5LTEsLjc0TDExLjQ4LDEwYTIuNDEsMi40MSwwLDAsMC0zLjQxLDBMNC44MiwxMy4yNWEyLjQxLDIuNDEsMCwwLDAsMCwzLjQxTDYuNiwxOC40NGMtLjM2LjQ3LS43MSwxLTEsMS40NWEzMi41MywzMi41MywwLDEsMCw1OCw4LjQ0WiIgc3R5bGU9ImZpbGw6IHVybCgjYzNiZGI3MTYtYmI3Ny00MzUxLTllOGYtYTUwY2Y3ODEzNDNlKSIvPiAgICAgICAgPHBhdGggZD0iTTU3LjY3LDEyLjk1bDEsMEwzOS45NCwzNC4yOSwzNSwzMC40YTIuNDEsMi40MSwwLDAsMC0zLjI0LjI0TDE2LjU0LDQ2LjcyYTIuNDEsMi40MSwwLDAsMCwuMDksMy40MWgwQTIuNDEsMi40MSwwLDAsMCwyMCw1MGwxMy43LTE0LjQ5LDUsMy45NGEyLjQxLDIuNDEsMCwwLDAsMy4zLS4zMUw2OS41Niw3LjgxbC0xMiwuMzJhMi40MSwyLjQxLDAsMCwwLC4xMyw0LjgyWiIgc3R5bGU9ImZpbGw6IHVybCgjYzk5ODViMWMtYjg3Zi00M2Y1LWFiMzItNWE4ZWZiMzQ1ZDA1KSIvPiAgICAgIDwvZz4gICAgPC9nPiAgPC9nPjwvc3ZnPg=='
543 );
544 add_submenu_page(
545 'hurrytimer',
546 __('Add Campaign', 'hurrytimer'),
547 __('Add Campaign', 'hurrytimer'),
548 apply_filters('hurryt_admin_capability', 'edit_posts', 'add_campaign'),
549 'post-new.php?post_type=hurrytimer_countdown'
550 );
551
552 add_submenu_page(
553 'hurrytimer',
554 __('Settings', 'hurrytimer'),
555 __('Settings', 'hurrytimer'),
556 apply_filters('hurryt_admin_capability', 'manage_options', 'settings'),
557 'hurrytimer_settings',
558 [$this, 'settings']
559 );
560
561 }
562
563 public function settings() {
564 include_once HURRYT_DIR . 'admin/templates/settings.php';
565 }
566
567 public function activateCampaign() {
568 if (
569 isset($_GET['hurrytimer_action'])
570 && $_GET['hurrytimer_action'] === "activate-compaign"
571 && isset($_GET['_wpnonce'])
572 && wp_verify_nonce($_GET['_wpnonce'], 'activate-compaign')
573 ) {
574 $postId = intval($_GET['post']);
575 wp_update_post(['ID' => $postId, 'post_status' => 'publish']);
576 }
577 }
578
579 function resetEvergreenCampaignNotice() {
580 if (
581 isset($_GET['hurryt-action'])
582 && isset($_GET['hurryt-scope'])
583 && isset($_GET['post'])
584 && $_GET['hurryt-action'] === "reset-evergreen-compaign"
585 && isset($_GET['_wpnonce'])
586 && wp_verify_nonce($_GET['_wpnonce'], 'reset-evergreen-compaign')
587 ) {
588 $scopeText
589 = $_GET['hurryt-scope'] === 'admin'
590 ? ' you '
591 : ' all visitors '; ?>
592 <div class="notice notice-success is-dismissible">
593 <p><?php _e(
594 "Campaign has been reset for $scopeText successfully.",
595 'hurrytimer'
596 ); ?></p>
597 </div>
598 <?php
599 }
600 }
601
602 function resetAllEvergreenCampaignNotice() {
603 if (
604 isset($_GET['hurryt-page'])
605 && isset($_GET['hurryt-scope'])
606 && isset($_GET['hurryt-action'])
607 && $_GET['hurryt-page'] === "hurrytimer_settings"
608 && $_GET['hurryt-action'] === "reset-all-evergreen-compaigns"
609 && isset($_GET['_wpnonce'])
610 && wp_verify_nonce($_GET['_wpnonce'], 'reset-all-evergreen-compaigns')
611 ) {
612 $scopeText
613 = $_GET['hurryt-scope'] === 'admin'
614 ? ' you '
615 : ' all visitors '; ?>
616 <div class="notice notice-success is-dismissible">
617 <p><?php _e(
618 "All evergreen campaigns have been reset for $scopeText successfully.",
619 'hurrytimer'
620 ); ?></p>
621 </div>
622 <?php
623 }
624 }
625
626 public function resetEvergreenCampaign() {
627 if (
628 isset($_GET['hurryt-action'])
629 && isset($_GET['hurryt-scope'])
630 && isset($_GET['post'])
631 && $_GET['hurryt-action'] === "reset-evergreen-compaign"
632 && isset($_GET['_wpnonce'])
633 && wp_verify_nonce($_GET['_wpnonce'], 'reset-evergreen-compaign')
634 ) {
635 $postId = intval($_GET['post']);
636
637 $campaign = new EvergreenCampaign($postId);
638 $campaign->reset(sanitize_text_field($_GET['hurryt-scope']));
639 }
640 }
641
642 public function resetAllEvergreenCampaigns() {
643
644 if (
645 isset($_GET['hurryt-scope'])
646 && isset($_GET['hurryt-action'])
647 && $_GET['hurryt-action'] === "reset-all-evergreen-compaigns"
648 && isset($_GET['_wpnonce'])
649 && wp_verify_nonce($_GET['_wpnonce'], 'reset-all-evergreen-compaigns')
650 ) {
651 $evergreenCampaign = new EvergreenCampaign();
652 $evergreenCampaign->resetAll(sanitize_text_field($_GET['hurryt-scope']));
653 }
654 }
655
656 public function deactivateCampaign() {
657 if (
658 isset($_GET['hurrytimer_action'])
659 && $_GET['hurrytimer_action'] === "deactivate-compaign"
660 && isset($_GET['_wpnonce'])
661 && wp_verify_nonce($_GET['_wpnonce'], 'deactivate-compaign')
662 ) {
663 $postId = intval($_GET['post']);
664 wp_update_post(['ID' => $postId, 'post_status' => 'draft']);
665 }
666 }
667
668 public function settingsBox() {
669 require plugin_dir_path(dirname(__FILE__)) .
670 'admin/CampaignSettings.php';
671 new CampaignSettings();
672 }
673
674 //removeIf(pro)
675 public function upgradeBanner() {
676 add_meta_box(
677 'hurrytimer-upgrade-banner',
678 __('Get the Most of HurryTimer', 'hurrytimer'),
679 function () {
680 include HURRYT_DIR . 'admin/templates/upgrade-banner.php';
681 },
682 HURRYT_POST_TYPE,
683 'side',
684 'low'
685 );
686 }
687 //endRemoveIf(pro)
688
689 /**
690 * Search products
691 *
692 * @return void
693 */
694 public function ajaxWcSearchProducts() {
695 $search = isset($_GET['search']) ? sanitize_text_field($_GET['search']) : '';
696 $selection = isset($_GET['productsSelection']) ? sanitize_text_field($_GET['productsSelection']) : -1;
697 $exclude = isset($_GET['exclude']) ? array_map('intval', (array)$_GET['exclude']) : [];
698
699 if (
700 in_array($selection, [
701 C::WC_PS_TYPE_INCLUDE_CATEGORIES,
702 C::WC_PS_TYPE_EXCLUDE_CATEGORIES,
703 ])
704 ) {
705 $args = [
706 "hide_empty" => false,
707 "taxonomy" => "product_cat",
708 "name__like" => $search,
709 'exclude' => $exclude,
710 ];
711
712 $items = get_terms($args);
713 $results = array_map(function ($item) {
714 return [
715 "id" => $item->term_id,
716 "text" => $item->name,
717 ];
718 }, $items);
719 } else {
720 $args = [
721 's' => $search,
722 'post_type' => 'product',
723 'post__not_in' => $exclude,
724 'post_status' => 'any',
725 'numberposts' => 50 // TODO: apply paginating in select2
726 ];
727 $items = get_posts($args);
728 $results = array_map(function ($item) {
729 return [
730 "id" => $item->ID,
731 "text" => $item->post_title,
732 ];
733 }, $items);
734 }
735 exit(json_encode(["results" => $results, "pagination" => true]));
736 }
737
738 public function pluginSettings() {
739 register_setting('hurrytimer_settings', 'hurryt_settings');
740 add_settings_section(
741 'hurryt_settings_general',
742 __('General', 'hurrytimer'),
743 null,
744 'hurrytimer_settings'
745 );
746 add_settings_field(
747 'hurryt_disable_actions_edit_mode',
748 'Disable actions in the admin area',
749 function ($args) {
750 $options = get_option('hurryt_settings'); ?>
751 <label for="">
752 <input type="checkbox" name="hurryt_settings[disable_actions]" <?php checked(
753 isset($options['disable_actions'])
754 && $options['disable_actions'],
755 1
756 ); ?> id="hurryt-disable-actions" value="1" />
757 </label>
758 <p class="description">
759 Don't run actions when editing or previewing a page in the admin area.
760 </p>
761 <?php
762 },
763 'hurrytimer_settings',
764 'hurryt_settings_general'
765 );
766 }
767
768 function ajaxAddWcConditionGroup() {
769 check_ajax_referer('hurryt-admin', 'nonce');
770
771 ob_start();
772 include HURRYT_DIR . 'admin/templates/wc-condition-group.php';
773 echo ob_get_clean();
774 wp_die();
775 }
776
777 function ajaxAddWcCondition() {
778 check_ajax_referer('hurryt-admin', 'nonce');
779
780 ob_start();
781 $groupId = sanitize_key($_GET['group_id']);
782 include HURRYT_DIR . 'admin/templates/wc-condition.php';
783 echo ob_get_clean();
784 wp_die();
785 }
786
787 function ajaxLoadWcCondition() {
788 check_ajax_referer('hurryt-admin', 'nonce');
789 ob_start();
790 $groupId = sanitize_key($_GET['group_id']);
791 $selected = hurryt_wc_conditions()[sanitize_key($_GET['condition_key'])];
792 include HURRYT_DIR . 'admin/templates/wc-condition.php';
793 echo ob_get_clean();
794 wp_die();
795 }
796 }
797