PluginProbe
MaxButtons – Create buttons / 6.23
MaxButtons – Create buttons v6.23
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.23, at classes/maxbuttons-class.php

739 lines 23.7 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 }
196
197 protected function checkbox_option($options)
198 {
199 if (! isset($options["maxbuttons_minify"]))
200 $options["maxbuttons_minify"] = 0;
201
202 return $options;
203
204 }
205
206 /** Returns the full path of the plugin installation directory */
207 public static function get_plugin_path()
208 {
209 return plugin_dir_path(MAXBUTTONS_ROOT_FILE);
210 }
211
212 /** Returns the full URL of the plugin installation path */
213 public static function get_plugin_url()
214 {
215 $url = plugin_dir_url(MAXBUTTONS_ROOT_FILE);
216 return $url;
217 }
218
219 /** Returns the current installed version */
220 public function get_installed_version()
221 {
222 return $this->installed_version;
223 }
224
225 /** Installs and adds the main menu and the submenu items */
226 function admin_menu() {
227 $maxbuttons_capabilities = get_option('maxbuttons_user_level');
228 if(!$maxbuttons_capabilities) {
229 $maxbuttons_capabilities = 'manage_options';
230 settings_fields( 'maxbuttons_settings' );
231 update_option('maxbuttons_user_level', $maxbuttons_capabilities);
232 }
233 $admin_pages = array();
234
235 $page_title = __('MaxButtons: Buttons', 'maxbuttons');
236 $menu_title = __('MaxButtons', 'maxbuttons');
237 $capability = $maxbuttons_capabilities;
238 $admin_capability = 'manage_options';
239 $menu_slug = 'maxbuttons-controller';
240 $function = array($this, 'load_admin_page');
241 $icon_url = $this->plugin_url . 'images/mb-peach-icon.png';
242 $submenu_function = array($this, 'load_admin_page');
243
244 add_menu_page($page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, 81);
245
246 // We add this submenu page with the same slug as the parent to ensure we don't get duplicates
247 $sub_menu_title = __('Buttons', 'maxbuttons');
248 $admin_pages[] = add_submenu_page($menu_slug, $page_title, $sub_menu_title, $capability, $menu_slug, $function);
249
250 // Now add the submenu page for the Add New page
251 $submenu_page_title = __('MaxButtons: Add/Edit Button', 'maxbuttons');
252 $submenu_title = __('Add New', 'maxbuttons');
253 $submenu_slug = 'maxbuttons-controller&action=edit';
254 //$submenu_function = 'maxbuttons_button';
255 $admin_pages[] = add_submenu_page($menu_slug, $submenu_page_title, $submenu_title, $capability, $submenu_slug, $submenu_function);
256
257 // Now add the submenu page for the Export page
258 $submenu_page_title = __('MaxButtons: Social Share', 'maxbuttons');
259 $submenu_title = __('Social Share', 'maxbuttons');
260 $submenu_slug = 'maxbuttons-collections';
261 $admin_pages[] = add_submenu_page($menu_slug, $submenu_page_title, $submenu_title, $capability, $submenu_slug, $submenu_function);
262
263 // Now add the submenu page for the Go Pro page
264 $submenu_page_title = __('MaxButtons: Upgrade to Pro', 'maxbuttons');
265 $submenu_title = __('Upgrade to Pro', 'maxbuttons');
266 $submenu_slug = 'maxbuttons-pro';
267 //$submenu_function = 'maxbuttons_pro';
268 $admin_pages[] = add_submenu_page($menu_slug, $submenu_page_title, $submenu_title, $capability, $submenu_slug, $submenu_function);
269
270 // Now add the submenu page for the Settings page
271 $submenu_page_title = __('MaxButtons: Settings', 'maxbuttons');
272 $submenu_title = __('Settings', 'maxbuttons');
273 $submenu_slug = 'maxbuttons-settings';
274 //$submenu_function = 'maxbuttons_settings';
275 $admin_pages[] = add_submenu_page($menu_slug, $submenu_page_title, $submenu_title, $admin_capability, $submenu_slug, $submenu_function);
276
277 // Now add the submenu page for the Support page
278 $submenu_page_title = __('MaxButtons: Support', 'maxbuttons');
279 $submenu_title = __('Support', 'maxbuttons');
280 $submenu_slug = 'maxbuttons-support';
281 //$submenu_function = 'maxbuttons_support';
282 $admin_pages[] = add_submenu_page($menu_slug, $submenu_page_title, $submenu_title, $admin_capability, $submenu_slug, $submenu_function);
283
284 }
285
286 function load_admin_page($page)
287 {
288 $page = sanitize_text_field($_GET["page"]);
289
290 switch($page)
291 {
292 case "maxbuttons-button":
293 $pagepath = "includes/maxbuttons-button.php";
294 break;
295 case "maxbuttons-support":
296 $pagepath = "includes/maxbuttons-support.php";
297 break;
298 case "maxbuttons-settings":
299 $pagepath = "includes/maxbuttons-settings.php";
300 break;
301 case "maxbuttons-pro":
302 $pagepath = "includes/maxbuttons-pro.php";
303 break;
304 case "maxbuttons-collections":
305 $pagepath = "includes/maxbuttons-collections.php";
306 break;
307 default:
308 $pagepath = "includes/maxbuttons-controller.php";
309 break;
310 }
311 $pagepath = $this->plugin_path . $pagepath;
312
313 include(apply_filters("mb-load-admin-page-$page", $pagepath));
314 }
315
316
317 function add_admin_styles($hook) {
318 // only hook in maxbuttons realm.
319 if ( strpos($hook,'maxbuttons') === false && $hook != 'post.php' && $hook != 'post-new.php' )
320 {
321 if (! isset($_GET['fl_builder'])) // exception for beaver builder
322 return;
323 }
324
325
326 $fa_url = apply_filters("mb_fa_url", $this->plugin_url . 'assets/libraries/font-awesome/css/font-awesome.min.css');
327 if ($fa_url != false && $fa_url != '')
328 {
329 wp_register_style('mbpro-font-awesome', $fa_url );
330 wp_enqueue_style('mbpro-font-awesome');
331 }
332
333 wp_enqueue_style('wp-color-picker');
334 wp_enqueue_style('maxbuttons-css', $this->plugin_url . 'assets/css/style.css');
335
336 }
337
338 /** Add Admin scripts
339 *
340 * Uses WP hook for Admin scripts to add needed js.
341 */
342 function add_admin_scripts($hook) {
343 // only hook in maxbuttons realm.
344 if ( strpos($hook,'maxbuttons') === false ) //&& $hook != 'post.php' && $hook != 'post-new.php'
345 return;
346
347 $version = MAXBUTTONS_VERSION_NUM;
348
349 $js_url = trailingslashit($this->plugin_url . 'js');
350 if (! $this->debug_mode)
351 $js_url .= 'min/';
352
353
354 wp_enqueue_script('jquery-ui-draggable');
355
356 //wp_enqueue_script('maxbuttons-colorpicker-js', $js_url .'colpick.js', array('jquery'), $version, true);
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);
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
484 $fa_url = apply_filters("mb_fa_url", $this->plugin_url . 'assets/libraries/font-awesome/css/font-awesome.min.css');
485 if ($fa_url != false && $fa_url != '')
486 {
487 wp_register_style('mbpro-font-awesome', $fa_url);
488 wp_enqueue_style('mbpro-font-awesome');
489 }
490
491 // load backend script on front in Beaver Builder
492 if (isset($_GET['fl_builder']))
493 {
494 $this->add_admin_styles('maxbuttons');
495 }
496
497 wp_enqueue_script('maxbuttons-front', $this->plugin_url . 'js/min/front.js', array('jquery'), true);
498 $local = array();
499 $local["ajaxurl"] = admin_url( 'admin-ajax.php' );
500
501 wp_localize_script('maxbuttons-front', 'mb_ajax', $local);
502 }
503
504 /** Extra text to display in admin footer */
505 function admin_footer_text($text)
506 {
507 if (! isset($_GET["page"]))
508 return $text;
509
510 if ( strpos($_GET["page"],'maxbuttons') === false)
511 return $text;
512 $text = '';
513
514 $text .= sprintf("If you like MaxButtons please give us a %s�
515
516
517
518
519 %s rating!",
520 "<a href='https://wordpress.org/support/view/plugin-reviews/maxbuttons#postform' target='_blank'>",
521 "</a>") ;
522 return $text;
523
524 }
525
526
527 function shortcode($atts)
528 {
529 $button = $this->getClass("button");
530 return $button->shortcode($atts);
531 }
532
533 public function collection_shortcode($atts, $content = null)
534 {
535 $atts = shortcode_atts(array(
536 "id" => 0,
537 "name" => '',
538 "nocache" => false, // these are button options.
539 "mode" => "normal",
540 "style" => "footer",
541 ),
542
543 $atts);
544
545 $id = intval($atts["id"]);
546 $name = sanitize_text_field($atts["name"]);
547
548 if ($id > 0)
549 $collection = maxCollections::getCollectionByID($id);
550 elseif ($atts["name"] != '')
551 $collection = maxCollections::getCollectionByName($name);
552
553
554 if ($collection)
555 return $collection->shortcode($atts,$content);
556
557 }
558
559
560 function plugin_action_links($links, $file) {
561
562 if ($file == plugin_basename(dirname(MAXBUTTONS_ROOT_FILE) . '/maxbuttons.php')) {
563 $label = __('Buttons', 'maxbuttons');
564 $dashboard_link = '<a href="' . admin_url() . 'admin.php?page=maxbuttons-controller&action=list">' . $label . '</a>';
565 array_unshift($links, $dashboard_link);
566 }
567
568 return $links;
569 }
570
571
572 function plugin_row_meta($links, $file) {
573 if ($file == plugin_basename(dirname(__FILE__) . '/maxbuttons.php')) {
574 $links[] = sprintf(__('%sUpgrade to Pro Version%s', 'maxbuttons'), '<a href="http://maxbuttons.com/?ref=mbfree" target="_blank">', '</a>');
575 }
576
577 return $links;
578 }
579
580
581 function do_footer($id, $code, $type = "css")
582 {
583
584 $this->footer[$type][$id] = $code;
585
586 }
587 function footer()
588 {
589 if(count($this->footer) == 0) return; // nothing
590
591 foreach ($this->footer as $type => $part)
592 {
593 // add tag
594 if ($type == 'css')
595 {
596 echo "<!--email_off--><style type='text/css'>";
597 }
598 foreach ($part as $id => $statements)
599 {
600 if (strlen($statements) > 0) // prevent whitespace
601 echo $statements . "\n";
602 }
603 if ($type == 'css')
604 {
605 echo "</style><!--/email_off-->\n";
606 }
607 }
608
609 }
610
611 public function do_review_notice () {
612
613 $current_user_id = get_current_user_id();
614 $review = get_user_meta( $current_user_id, 'maxbuttons_review_notice' , true );
615
616 if ($review == '')
617 {
618 //$created = get_option("MBFREE_CREATED");
619 $show = time() + (7* DAY_IN_SECONDS);
620 update_user_meta($current_user_id, 'maxbuttons_review_notice', $show);
621 return;
622 }
623
624
625 $display_review = false;
626
627 if ($review == 'off')
628 { return; // no show
629
630 }
631 elseif (is_numeric($review))
632 {
633 $now = time();
634
635 if ($now > $review)
636 {
637 $display_review = true;
638
639 }
640 }
641
642 // load style / script. It's seperated since it should show everywhere in admin.
643 if ($display_review)
644 {
645 add_action( 'admin_notices', array( maxUtils::namespaceit('maxAdmin'), 'mb_review_notice'));
646 wp_enqueue_style('maxbuttons-review-notice', $this->plugin_url . 'assets/css/review_notice.css');
647 wp_enqueue_script('maxbuttons-review-notice', $this->plugin_url . 'js/min/review-notice.js', array('jquery'), true);
648
649 $local = array();
650 $local["ajaxurl"] = admin_url( 'admin-ajax.php' );
651 wp_localize_script('maxbuttons-review-notice', 'mb_ajax_review', $local);
652 }
653
654 }
655
656 public function setReviewNoticeStatus()
657 {
658 $status = isset($_POST["status"]) ? sanitize_text_field($_POST["status"]) : '';
659 $current_user_id = get_current_user_id();
660
661 $updated = false;
662
663 if ($status == 'off')
664 {
665 $updated = true;
666 update_user_meta($current_user_id, 'maxbuttons_review_notice', 'off');
667
668 }
669 if ($status == 'later')
670 {
671 $updated = true;
672 $later = time() + (14 * DAY_IN_SECONDS );
673
674 update_user_meta($current_user_id, 'maxbuttons_review_notice', $later);
675 }
676 if ($status == 'reviewoffer-dismiss') // different ad!
677 {
678 $updated = true;
679 update_user_meta($current_user_id, 'maxbuttons_review_offer', 'off');
680
681 }
682
683 echo json_encode(array("updated" => $updated)) ;
684
685 exit();
686 }
687
688 /* Add a notice
689
690 The added notice will be displayed to the user in WordPress format.
691 @see display_notices
692
693 @param $type string message | notice | error | fatal
694 @param $message string User understandable message
695
696 */
697 public static function add_notice($type, $message)
698 {
699 self::$notices[] = array("type" => $type,
700 "message" => $message
701 );
702
703 }
704
705 /* Display all notices
706
707 Then notices added by @see add_notice will be displayed. This function is called by an action hook
708
709 @param $echo echo the results or silently return.
710 @return string|null If not written to screen via echo, the HTML output will be returned
711 */
712 public function display_notices($echo = true)
713 {
714
715 if ($echo === '') $echo = true;
716 $notices = self::$notices;
717 $output = '';
718 if (count($notices) == 0)
719 return;
720
721 foreach($notices as $index => $notice)
722 {
723 $type = $notice["type"];
724 $message = $notice["message"];
725 $output .= "<div class='mb-message $type'> ";
726 $output .= $message ;
727 $output .= "</div>";
728 }
729
730 self::$notices = array(); // empty notices to prevent double display
731
732 if ($echo) echo $output;
733 else return $output;
734 }
735
736 } // class
737
738
739