PluginProbe
MaxButtons – Create buttons / 7.0
MaxButtons – Create buttons v7.0
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 7.0, at classes/maxbuttons-class.php

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