PluginProbe
MaxButtons – Create buttons / 6.25
MaxButtons – Create buttons v6.25
6.23 6.24 6.25 6.26 6.26.1 6.27 6.28 6.3 6.4 6.5 6.6 6.7 6.8 6.9 7.0 7.1 7.1.1 7.1.2 7.1.3 7.10 7.11 7.13 7.13.1 7.13.2 7.13.3 All 100 releases
maxbuttons / classes / maxbuttons-class.php

maxbuttons-class.php in MaxButtons – Create buttons 6.25, at classes/maxbuttons-class.php

740 lines 23.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace MaxButtons;
3 defined('ABSPATH') or die('No direct access permitted');
4
5 define('MAXBUTTONS_VERSION_KEY', 'maxbuttons_version');
6
7 class maxButtonsPlugin
8 {
9
10 protected $installed_version = 0;
11 protected $plugin_name;
12 protected $plugin_url;
13 protected $plugin_path;
14 protected $debug_mode = false;
15 protected $footer = array();
16
17 protected static $notices = array();
18
19 protected $mainClasses = array();
20
21 protected static $instance;
22
23 /* Class constructor
24 Add hooks and actions used by this plugin. Sets plugin environment information
25 */
26 function __construct()
27 {
28 maxUtils::timeInit(); // benchmark timer init.
29
30 $this->plugin_url = self::get_plugin_url(); //plugins_url() . '/' . $this->plugin_name;
31 $this->plugin_path = self::get_plugin_path(); //plugin_dir_path($rootfile);
32 $this->plugin_name = trim(basename($this->plugin_path), '/');
33
34 $this->installed_version = get_option(MAXBUTTONS_VERSION_KEY);
35
36 if ( defined('MAXBUTTONS_DEBUG') && MAXBUTTONS_DEBUG)
37 $this->debug_mode = true;
38
39 add_action('plugins_loaded', array($this, 'load_textdomain'));
40
41 add_filter('widget_text', 'do_shortcode');
42 add_shortcode('maxbutton', array($this, 'shortcode'));
43
44 add_action("mb-footer", array($this, 'do_footer'),10,3);
45 add_action("wp_footer", array($this, "footer"));
46
47 // Media buttons
48 add_action('media_buttons', array($this,'media_button'));
49
50 add_filter('plugin_action_links', array($this, "plugin_action_links"), 10, 2);
51 add_filter('plugin_row_meta', array($this, 'plugin_row_meta'), 10, 2);
52
53 if( is_admin())
54 {
55 add_action('admin_enqueue_scripts', array($this,'add_admin_styles'));
56 add_action('admin_enqueue_scripts', array($this,'add_admin_scripts'));
57 add_action('admin_enqueue_scripts', array(maxUtils::namespaceit('maxUtils'), 'fixFAConflict'),999);
58
59 add_action('admin_init', array($this,'register_settings' ));
60
61 add_action('admin_init', array($this, 'do_review_notice')); // Ask for review
62 add_action('admin_init', array(maxUtils::namespaceit('maxInstall'),'check_database'));
63
64 add_action('admin_menu', array($this, 'admin_menu'));
65 add_action('admin_footer', array($this, "footer"));
66 add_filter("admin_footer_text",array($this, "admin_footer_text"));
67
68 // errors in user space. No internal error but user output friendly issues
69 add_action("mb/editor/display_notices", array($this,"display_notices"), 99);
70 add_action("mb/collection/display_notices", array($this,"display_notices"), 99);
71 add_action('mb/header/display_notices', array($this, 'display_notices'), 99);
72
73 add_action("wp_ajax_getAjaxButtons", array(maxUtils::namespaceit('maxButtonsAdmin'), 'getAjaxButtons'));
74 add_action("wp_ajax_set_review_notice_status", array($this, "setReviewNoticeStatus"));
75
76 // Collection AJAX
77 add_action("wp_ajax_collection-edit", array(maxUtils::namespaceit("maxCollections"), "ajax_save"));
78 add_action('wp_ajax_mbpro_collection_block', array(maxUtils::namespaceit("maxCollections"), "ajax_action")); // all block level ajax stuff - for logged in users - backend
79 add_action('wp_ajax_mb_button_action', array(maxUtils::namespaceit('maxButtons'), "ajax_action"));
80
81 add_action('wp_ajax_maxajax', array(maxUtils::namespaceit('maxUtils'), 'ajax_action'));
82 }
83 // FRONT AJAX
84 add_action('wp_ajax_mbpro_collection_block_front', array(maxUtils::namespaceit("maxCollections"), "ajax_action_front")); // front end for all users
85 add_action('wp_ajax_nopriv_mbpro_collection_block_front', array(maxUtils::namespaceit("maxCollections"), "ajax_action_front"));
86
87 // front scripts
88 add_action('wp_enqueue_scripts', array($this, 'front_scripts'));
89 add_action('wp_enqueue_scripts', array(maxUtils::namespaceit('maxUtils'), 'fixFAConflict'),999);
90
91 $this->setMainClasses(); // struct for override functionality
92
93 // The second the blocks are being loaded, check dbase integrity
94 add_action("mb_blockclassesloaded", array($this, "check_database"));
95
96 // setup page hooks and shortcode
97 add_shortcode('maxcollection', array($this, 'collection_shortcode'));
98 if (! is_admin())
99 $hook_bool = maxCollections::setupHooks(); // setup the hooks to insert collections
100
101 self::$instance = $this;
102 maxIntegrations::init(); // fire the integrations.
103 }
104
105 public static function getInstance()
106 {
107 return self::$instance;
108 }
109
110 public function setMainClasses()
111 {
112 $classes = array(
113 "button" => "maxButton",
114 "buttons" => "maxButtons",
115 "block" => "maxBlock",
116 "admin" => "maxButtonsAdmin",
117 "install" => "maxInstall",
118 "groups" => "maxGroups",
119 "collections" => "maxCollections",
120 "collection" => "maxCollection",
121 "pack" => "maxPack",
122
123 );
124
125 $this->mainClasses = $classes;
126 }
127
128 // from block loader action. Checks if all parts of the table are there, or panic if not.
129 public function check_database($blocks)
130 {
131 maxUtils::addTime("Check database");
132
133 $sql = "SELECT id,name,status,cache, created ";
134 foreach ($blocks as $block => $class)
135 {
136 $sql .= ", $block";
137 }
138 $sql .= " from " . maxUtils::get_table_name() . " limit 1";
139
140 global $wpdb;
141 $wpdb->hide_errors();
142 $result = $wpdb->get_results($sql);
143
144
145 // check this query for errors. If there is an error, one or more database fields are missing. Fix that.
146 if (isset($wpdb->last_error) && $wpdb->last_error != '')
147 {
148
149 $install = $this->getClass("install");
150 $install::create_database_table();
151 $install::migrate();
152 }
153
154
155 maxUtils::addTime("End check database");
156 }
157
158 public function getClass($class)
159 {
160
161 if (isset($this->mainClasses[$class]))
162 {
163 $load_class = maxUtils::namespaceit($this->mainClasses[$class]);
164 if (method_exists($load_class,'getInstance'))
165 {
166 return $load_class::getInstance();
167 }
168 return new $load_class;
169 }
170 }
171
172 /* Load the plugin textdomain */
173 public function load_textdomain()
174 {
175 // see: http://geertdedeckere.be/article/loading-wordpress-language-files-the-right-way
176 $domain = 'maxbuttons';
177 // The "plugin_locale" filter is also used in load_plugin_textdomain()
178 $locale = apply_filters('plugin_locale', get_locale(), $domain);
179
180 load_textdomain($domain, WP_LANG_DIR.'/maxbuttons/'.$domain.'-'.$locale.'.mo');
181 $res = load_plugin_textdomain('maxbuttons', false, $this->plugin_name . '/languages/');
182
183 }
184
185
186 /** WP Settings framework. Registers settings used on maxbuttons-settings.php page */
187 public function register_settings()
188 {
189 register_setting( 'maxbuttons_settings', 'maxbuttons_user_level' );
190 register_setting( 'maxbuttons_settings', 'maxbuttons_noshowtinymce' );
191 register_setting( 'maxbuttons_settings', 'maxbuttons_minify' );
192 register_setting( 'maxbuttons_settings', 'maxbuttons_hidedescription' );
193 register_setting( 'maxbuttons_settings', 'maxbuttons_forcefa') ;
194 register_setting( 'maxbuttons_settings', 'maxbuttons_borderbox');
195 register_setting( 'maxbuttons_settings', 'maxbuttons_protocol');
196 }
197
198 protected function checkbox_option($options)
199 {
200 if (! isset($options["maxbuttons_minify"]))
201 $options["maxbuttons_minify"] = 0;
202
203 return $options;
204
205 }
206
207 /** Returns the full path of the plugin installation directory */
208 public static function get_plugin_path()
209 {
210 return plugin_dir_path(MAXBUTTONS_ROOT_FILE);
211 }
212
213 /** Returns the full URL of the plugin installation path */
214 public static function get_plugin_url()
215 {
216 $url = plugin_dir_url(MAXBUTTONS_ROOT_FILE);
217 return $url;
218 }
219
220 /** Returns the current installed version */
221 public function get_installed_version()
222 {
223 return $this->installed_version;
224 }
225
226 /** Installs and adds the main menu and the submenu items */
227 function admin_menu() {
228 $maxbuttons_capabilities = get_option('maxbuttons_user_level');
229 if(!$maxbuttons_capabilities) {
230 $maxbuttons_capabilities = 'manage_options';
231 settings_fields( 'maxbuttons_settings' );
232 update_option('maxbuttons_user_level', $maxbuttons_capabilities);
233 }
234 $admin_pages = array();
235
236 $page_title = __('MaxButtons: Buttons', 'maxbuttons');
237 $menu_title = __('MaxButtons', 'maxbuttons');
238 $capability = $maxbuttons_capabilities;
239 $admin_capability = 'manage_options';
240 $menu_slug = 'maxbuttons-controller';
241 $function = array($this, 'load_admin_page');
242 $icon_url = $this->plugin_url . 'images/mb-peach-icon.png';
243 $submenu_function = array($this, 'load_admin_page');
244
245 add_menu_page($page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, 81);
246
247 // We add this submenu page with the same slug as the parent to ensure we don't get duplicates
248 $sub_menu_title = __('Buttons', 'maxbuttons');
249 $admin_pages[] = add_submenu_page($menu_slug, $page_title, $sub_menu_title, $capability, $menu_slug, $function);
250
251 // Now add the submenu page for the Add New page
252 $submenu_page_title = __('MaxButtons: Add/Edit Button', 'maxbuttons');
253 $submenu_title = __('Add New', 'maxbuttons');
254 $submenu_slug = 'maxbuttons-controller&action=edit';
255 //$submenu_function = 'maxbuttons_button';
256 $admin_pages[] = add_submenu_page($menu_slug, $submenu_page_title, $submenu_title, $capability, $submenu_slug, $submenu_function);
257
258 // Now add the submenu page for the Export page
259 $submenu_page_title = __('MaxButtons: Social Share', 'maxbuttons');
260 $submenu_title = __('Social Share', 'maxbuttons');
261 $submenu_slug = 'maxbuttons-collections';
262 $admin_pages[] = add_submenu_page($menu_slug, $submenu_page_title, $submenu_title, $capability, $submenu_slug, $submenu_function);
263
264 // Now add the submenu page for the Go Pro page
265 $submenu_page_title = __('MaxButtons: Upgrade to Pro', 'maxbuttons');
266 $submenu_title = __('Upgrade to Pro', 'maxbuttons');
267 $submenu_slug = 'maxbuttons-pro';
268 //$submenu_function = 'maxbuttons_pro';
269 $admin_pages[] = add_submenu_page($menu_slug, $submenu_page_title, $submenu_title, $capability, $submenu_slug, $submenu_function);
270
271 // Now add the submenu page for the Settings page
272 $submenu_page_title = __('MaxButtons: Settings', 'maxbuttons');
273 $submenu_title = __('Settings', 'maxbuttons');
274 $submenu_slug = 'maxbuttons-settings';
275 //$submenu_function = 'maxbuttons_settings';
276 $admin_pages[] = add_submenu_page($menu_slug, $submenu_page_title, $submenu_title, $admin_capability, $submenu_slug, $submenu_function);
277
278 // Now add the submenu page for the Support page
279 $submenu_page_title = __('MaxButtons: Support', 'maxbuttons');
280 $submenu_title = __('Support', 'maxbuttons');
281 $submenu_slug = 'maxbuttons-support';
282 //$submenu_function = 'maxbuttons_support';
283 $admin_pages[] = add_submenu_page($menu_slug, $submenu_page_title, $submenu_title, $admin_capability, $submenu_slug, $submenu_function);
284
285 }
286
287 function load_admin_page($page)
288 {
289 $page = sanitize_text_field($_GET["page"]);
290
291 switch($page)
292 {
293 case "maxbuttons-button":
294 $pagepath = "includes/maxbuttons-button.php";
295 break;
296 case "maxbuttons-support":
297 $pagepath = "includes/maxbuttons-support.php";
298 break;
299 case "maxbuttons-settings":
300 $pagepath = "includes/maxbuttons-settings.php";
301 break;
302 case "maxbuttons-pro":
303 $pagepath = "includes/maxbuttons-pro.php";
304 break;
305 case "maxbuttons-collections":
306 $pagepath = "includes/maxbuttons-collections.php";
307 break;
308 default:
309 $pagepath = "includes/maxbuttons-controller.php";
310 break;
311 }
312 $pagepath = $this->plugin_path . $pagepath;
313
314 include(apply_filters("mb-load-admin-page-$page", $pagepath));
315 }
316
317
318 function add_admin_styles($hook) {
319 // only hook in maxbuttons realm.
320 if ( strpos($hook,'maxbuttons') === false && $hook != 'post.php' && $hook != 'post-new.php' )
321 {
322 if (! isset($_GET['fl_builder'])) // exception for beaver builder
323 return;
324 }
325
326 $version = MAXBUTTONS_VERSION_NUM;
327
328 $fa_url = apply_filters("mb_fa_url", $this->plugin_url . 'assets/libraries/font-awesome/css/font-awesome.min.css', array(), $version);
329 if ($fa_url != false && $fa_url != '')
330 {
331 wp_register_style('mbpro-font-awesome', $fa_url, array(), $version);
332 wp_enqueue_style('mbpro-font-awesome');
333 }
334
335 wp_enqueue_style('wp-color-picker');
336 wp_enqueue_style('maxbuttons-css', $this->plugin_url . 'assets/css/style.css', array(), $version);
337
338 }
339
340 /** Add Admin scripts
341 *
342 * Uses WP hook for Admin scripts to add needed js.
343 */
344 function add_admin_scripts($hook) {
345 // only hook in maxbuttons realm.
346 if ( strpos($hook,'maxbuttons') === false ) //&& $hook != 'post.php' && $hook != 'post-new.php'
347 return;
348
349 $version = MAXBUTTONS_VERSION_NUM;
350
351 $js_url = trailingslashit($this->plugin_url . 'js');
352 if (! $this->debug_mode)
353 $js_url .= 'min/';
354
355
356 wp_enqueue_script('jquery-ui-draggable');
357
358 wp_enqueue_script('maxbutton-admin', $js_url . 'maxbuttons-admin.js', array('jquery', 'jquery-ui-draggable', 'maxbuttons-tabs','maxbuttons-modal', 'wp-color-picker', 'underscore'),$version, true);
359 wp_enqueue_script('maxbutton-js-init', $js_url . 'init.js', array('maxbutton-admin','maxcollections','maxbuttons-modal'),$version, true);
360 wp_enqueue_script('maxbuttons-tabs', $js_url . 'maxtabs.js', array('jquery'),$version, true);
361 wp_enqueue_script('maxbuttons-responsive', $js_url . 'responsive.js', array('maxbutton-admin'), $version, true );
362
363 wp_register_script('maxbuttons-ajax', $js_url . 'maxajax.js', array('maxbutton-admin'), $version, true);
364 wp_localize_script('maxbuttons-ajax', 'maxajax',
365 array(
366 'ajax_url' => admin_url( 'admin-ajax.php' ),
367 'ajax_action' => 'maxajax',
368 'nonce' => wp_create_nonce('maxajax'),
369 ));
370
371 wp_enqueue_script('maxbuttons-ajax');
372
373 wp_register_script('maxcollections', $js_url . 'maxcollections.js',
374 array('jquery', 'maxbutton-admin', 'jquery-ui-sortable'),$version, true );
375
376 $local = array();
377 $local["ajaxurl"] = admin_url( 'admin-ajax.php' );
378 $local["maxurl"] = $this->plugin_url;
379 wp_localize_script('maxbutton-admin', 'mb_ajax', $local);
380
381 $local = array(
382 "leave_page" => __("You have unsaved data, are you sure you want to leave the page?","maxbuttons"),
383 'picker_title' => __('Select your buttons','maxbuttons'),
384
385 );
386 wp_localize_script('maxcollections', 'maxcol_wp', $local);
387
388 $this->load_modal_script();
389
390 wp_enqueue_script('maxcollections');
391 }
392
393 /** Load the Modal Script
394 * The modal script is the generic solution for all popups within the plugin.
395 */
396 public function load_modal_script()
397 {
398 $version = MAXBUTTONS_VERSION_NUM;
399 $js_url = trailingslashit($this->plugin_url . 'js');
400 if (! $this->debug_mode)
401 $js_url .= 'min/';
402
403 wp_register_script('maxbuttons-modal', $js_url . 'maxmodal.js', array('jquery','jquery-ui-draggable'), $version, true);
404 // translations of controls and other elements that can be used in maxmodal
405 $translations = array(
406 'yes' => __("Yes","maxbuttons"),
407 'no' => __("No","maxbuttons"),
408 'ok' => __("OK","maxbuttons"),
409 'cancel' => __("Cancel","maxbuttons"),
410 );
411 wp_localize_script('maxbuttons-modal', 'modaltext', $translations);
412 wp_enqueue_script('maxbuttons-modal');
413
414 }
415
416 /** Load Media Buttons Script
417 *
418 * Useful for integrations that don't implement the media button but uses the media button JS for loading the button picker
419 *
420 */
421 public function load_media_script()
422 {
423 $version = MAXBUTTONS_VERSION_NUM;
424
425 $js_url = trailingslashit($this->plugin_url . 'js');
426 if (! $this->debug_mode)
427 $js_url .= 'min/';
428
429 $fa_url = apply_filters("mb_fa_url", $this->plugin_url . 'assets/libraries/font-awesome/css/font-awesome.min.css');
430 if ($fa_url != false && $fa_url != '')
431 {
432 wp_register_style('mbpro-font-awesome', $fa_url, array(), $version);
433 wp_enqueue_style('mbpro-font-awesome');
434 }
435
436 wp_enqueue_script('mb-media-button', $js_url . 'maxbuttons_media_button.js', array('jquery', 'maxbuttons-modal'), $version, true);
437 $this->load_modal_script();
438
439 $translations = array(
440 'insert' => __('Insert Button into Editor', 'maxbuttons'),
441 'loading' => __("Loading your buttons","maxbuttons"),
442 'select' => __('Click on a button from the list below to place the button shortcode in the editor.', 'maxbuttons'),
443 'cancel' => __('Cancel', 'maxbuttons'),
444 'windowtitle' => __("Select a MaxButton","maxbuttons"),
445 'icon' => $this->plugin_url . 'images/mb-peach-32.png',
446 'ajax_url' => admin_url( 'admin-ajax.php' ),
447 'short_url_label' => __('Button URL', 'maxbuttons'),
448 'short_text_label' => __('Button Text', 'maxbuttons'),
449 'short_options_explain' => __('If you want to change the URL or Text of the Button, enter the appropiate field. If you want to use the button values, just click Add to editor', 'maxbuttons'),
450 'short_add_button' => __('Add to Editor', 'maxbuttons'),
451 );
452
453 wp_localize_script('mb-media-button','mbtrans', $translations);
454 }
455
456 /** Load Media Button in WP editor
457 *
458 * The 'add button' interface in WP post and page editor to simplify adding buttons. Loads button plus required Javascript.
459 */
460 function media_button($editor_id) {
461 $output = '';
462
463 // options
464 if (get_option('maxbuttons_noshowtinymce') == 1) return;
465
466 $this->load_media_script();
467
468 // Only run in post/page creation and edit screens
469
470 $title = __('Add Button', 'maxbuttons');
471 $icon = $this->plugin_url . 'images/mb-peach-icon.png';
472 $img = '<span class="wp-media-buttons-icon" style="background-image: url(' . $icon . '); width: 16px; height: 16px; margin-top: 1px;"></span>';
473 $output = '<a href="javascript:void(0);" class="button maxbutton_media_button" data-callback="window.maxMedia.showShortcodeOptions" title="' . $title . '" style="padding-left: .4em;">' . $img . ' ' . $title . '</a>';
474
475 echo $output;
476 }
477
478 /** Scripts run on front-end
479 * Load font-awesome, and limited javascript for the front-end. This is being kept extremely limited for performance reasons.
480 */
481 public function front_scripts()
482 {
483 $version = MAXBUTTONS_VERSION_NUM;
484
485 $fa_url = apply_filters("mb_fa_url", $this->plugin_url . 'assets/libraries/font-awesome/css/font-awesome.min.css');
486 if ($fa_url != false && $fa_url != '')
487 {
488 wp_register_style('mbpro-font-awesome', $fa_url, array(), $version);
489 wp_enqueue_style('mbpro-font-awesome');
490 }
491
492 // load backend script on front in Beaver Builder
493 if (isset($_GET['fl_builder']))
494 {
495 $this->add_admin_styles('maxbuttons');
496 }
497
498 wp_enqueue_script('maxbuttons-front', $this->plugin_url . 'js/min/front.js', array('jquery'), $version);
499 $local = array();
500 $local["ajaxurl"] = admin_url( 'admin-ajax.php' );
501
502 wp_localize_script('maxbuttons-front', 'mb_ajax', $local);
503 }
504
505 /** Extra text to display in admin footer */
506 function admin_footer_text($text)
507 {
508 if (! isset($_GET["page"]))
509 return $text;
510
511 if ( strpos($_GET["page"],'maxbuttons') === false)
512 return $text;
513 $text = '';
514
515 $text .= sprintf("If you like MaxButtons please give us a %s�
516
517
518
519
520 %s rating!",
521 "<a href='https://wordpress.org/support/view/plugin-reviews/maxbuttons#postform' target='_blank'>",
522 "</a>") ;
523 return $text;
524
525 }
526
527
528 function shortcode($atts)
529 {
530 $button = $this->getClass("button");
531 return $button->shortcode($atts);
532 }
533
534 public function collection_shortcode($atts, $content = null)
535 {
536 $atts = shortcode_atts(array(
537 "id" => 0,
538 "name" => '',
539 "nocache" => false, // these are button options.
540 "mode" => "normal",
541 "style" => "footer",
542 ),
543
544 $atts);
545
546 $id = intval($atts["id"]);
547 $name = sanitize_text_field($atts["name"]);
548
549 if ($id > 0)
550 $collection = maxCollections::getCollectionByID($id);
551 elseif ($atts["name"] != '')
552 $collection = maxCollections::getCollectionByName($name);
553
554
555 if ($collection)
556 return $collection->shortcode($atts,$content);
557
558 }
559
560
561 function plugin_action_links($links, $file) {
562
563 if ($file == plugin_basename(dirname(MAXBUTTONS_ROOT_FILE) . '/maxbuttons.php')) {
564 $label = __('Buttons', 'maxbuttons');
565 $dashboard_link = '<a href="' . admin_url() . 'admin.php?page=maxbuttons-controller&action=list">' . $label . '</a>';
566 array_unshift($links, $dashboard_link);
567 }
568
569 return $links;
570 }
571
572
573 function plugin_row_meta($links, $file) {
574 if ($file == plugin_basename(dirname(__FILE__) . '/maxbuttons.php')) {
575 $links[] = sprintf(__('%sUpgrade to Pro Version%s', 'maxbuttons'), '<a href="http://maxbuttons.com/?ref=mbfree" target="_blank">', '</a>');
576 }
577
578 return $links;
579 }
580
581
582 function do_footer($id, $code, $type = "css")
583 {
584
585 $this->footer[$type][$id] = $code;
586
587 }
588 function footer()
589 {
590 if(count($this->footer) == 0) return; // nothing
591
592 foreach ($this->footer as $type => $part)
593 {
594 // add tag
595 if ($type == 'css')
596 {
597 echo "<!--email_off--><style type='text/css'>";
598 }
599 foreach ($part as $id => $statements)
600 {
601 if (strlen($statements) > 0) // prevent whitespace
602 echo $statements . "\n";
603 }
604 if ($type == 'css')
605 {
606 echo "</style><!--/email_off-->\n";
607 }
608 }
609
610 }
611
612 public function do_review_notice () {
613
614 $current_user_id = get_current_user_id();
615 $version = MAXBUTTONS_VERSION_NUM;
616
617 $review = get_user_meta( $current_user_id, 'maxbuttons_review_notice' , true );
618
619 if ($review == '')
620 {
621 //$created = get_option("MBFREE_CREATED");
622 $show = time() + (7* DAY_IN_SECONDS);
623 update_user_meta($current_user_id, 'maxbuttons_review_notice', $show);
624 return;
625 }
626
627
628 $display_review = false;
629
630 if ($review == 'off')
631 { return; // no show
632
633 }
634 elseif (is_numeric($review))
635 {
636 $now = time();
637
638 if ($now > $review)
639 {
640 $display_review = true;
641
642 }
643 }
644
645 // load style / script. It's seperated since it should show everywhere in admin.
646 if ($display_review)
647 {
648 add_action( 'admin_notices', array( maxUtils::namespaceit('maxAdmin'), 'mb_review_notice'));
649 wp_enqueue_style('maxbuttons-review-notice', $this->plugin_url . 'assets/css/review_notice.css', array(), $version);
650 wp_enqueue_script('maxbuttons-review-notice', $this->plugin_url . 'js/min/review-notice.js', array('jquery'), $version);
651
652 $local = array();
653 $local["ajaxurl"] = admin_url( 'admin-ajax.php' );
654 wp_localize_script('maxbuttons-review-notice', 'mb_ajax_review', $local);
655 }
656
657 }
658
659 public function setReviewNoticeStatus()
660 {
661 $status = isset($_POST["status"]) ? sanitize_text_field($_POST["status"]) : '';
662 $current_user_id = get_current_user_id();
663
664 $updated = false;
665
666 if ($status == 'off')
667 {
668 $updated = true;
669 update_user_meta($current_user_id, 'maxbuttons_review_notice', 'off');
670
671 }
672 if ($status == 'later')
673 {
674 $updated = true;
675 $later = time() + (14 * DAY_IN_SECONDS );
676
677 update_user_meta($current_user_id, 'maxbuttons_review_notice', $later);
678 }
679 if ($status == 'reviewoffer-dismiss') // different ad!
680 {
681 $updated = true;
682 update_user_meta($current_user_id, 'maxbuttons_review_offer', 'off');
683
684 }
685
686 echo json_encode(array("updated" => $updated)) ;
687
688 exit();
689 }
690
691 /* Add a notice
692
693 The added notice will be displayed to the user in WordPress format.
694 @see display_notices
695
696 @param $type string message | notice | error | fatal
697 @param $message string User understandable message
698
699 */
700 public static function add_notice($type, $message)
701 {
702 self::$notices[] = array("type" => $type,
703 "message" => $message
704 );
705
706 }
707
708 /* Display all notices
709
710 Then notices added by @see add_notice will be displayed. This function is called by an action hook
711
712 @param $echo echo the results or silently return.
713 @return string|null If not written to screen via echo, the HTML output will be returned
714 */
715 public function display_notices($echo = true)
716 {
717
718 if ($echo === '') $echo = true;
719 $notices = self::$notices;
720 $output = '';
721 if (count($notices) == 0)
722 return;
723
724 foreach($notices as $index => $notice)
725 {
726 $type = $notice["type"];
727 $message = $notice["message"];
728 $output .= "<div class='mb-message $type'> ";
729 $output .= $message ;
730 $output .= "</div>";
731 }
732
733 self::$notices = array(); // empty notices to prevent double display
734
735 if ($echo) echo $output;
736 else return $output;
737 }
738
739 } // class
740