Total Complexity | 123 |
Total Lines | 1343 |
Duplicated Lines | 0 % |
Changes | 0 |
Complex classes like MetaSliderPlugin often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use MetaSliderPlugin, and based on these observations, apply Extract Interface, too.
1 | <?php |
||
53 | class MetaSliderPlugin |
||
54 | { |
||
55 | /** Current Slider **/ |
||
56 | public $slider = null; |
||
57 | |||
58 | /** |
||
59 | * Constructor |
||
60 | */ |
||
61 | public function __construct() |
||
62 | { |
||
63 | // create the admin menu/page |
||
64 | add_action('admin_menu', [$this, 'register_admin_menu'], 9553); |
||
65 | |||
66 | // register slider post type and taxonomy |
||
67 | add_action('init', [$this, 'register_post_type']); |
||
68 | add_action('init', [$this, 'register_taxonomy']); |
||
69 | add_action('init', [$this, 'load_plugin_textdomain']); |
||
70 | |||
71 | // register shortcodes |
||
72 | add_shortcode('metaslider', [$this, 'register_shortcode']); |
||
73 | add_shortcode('ml-slider', [$this, 'register_shortcode']); // backwards compatibility |
||
74 | |||
75 | add_filter('media_upload_tabs', [$this, 'custom_media_upload_tab_name'], 998); |
||
76 | add_filter('media_view_strings', [$this, 'custom_media_uploader_tabs'], 5); |
||
77 | add_action('media_upload_vimeo', [$this, 'metaslider_pro_tab']); |
||
78 | add_action('media_upload_youtube', [$this, 'metaslider_pro_tab']); |
||
79 | add_action('media_upload_post_feed', [$this, 'metaslider_pro_tab']); |
||
80 | add_action('media_upload_layer', [$this, 'metaslider_pro_tab']); |
||
81 | |||
82 | add_filter('media_buttons_context', [$this, 'insert_metaslider_button']); |
||
83 | add_action('admin_footer', [$this, 'admin_footer']); |
||
84 | |||
85 | // add 'go pro' link to plugin options |
||
86 | $plugin = plugin_basename(__FILE__); |
||
87 | add_filter("plugin_action_links_{$plugin}", [$this, 'upgrade_to_pro']); |
||
88 | |||
89 | $this->register_slide_types(); |
||
90 | } |
||
91 | |||
92 | /** |
||
93 | * Check our WordPress installation is compatible with Meta Slider |
||
94 | */ |
||
95 | public function system_check() |
||
99 | } |
||
100 | |||
101 | /** |
||
102 | * Add settings link on plugin page |
||
103 | * @param $links |
||
104 | * @return array |
||
105 | */ |
||
106 | public function upgrade_to_pro($links) |
||
107 | { |
||
108 | if (function_exists('is_plugin_active') && !is_plugin_active('ml-slider-pro/ml-slider-pro.php')) { |
||
109 | $links[] = '<a href="http://www.metaslider.com/upgrade" target="_blank">' . __('Go Pro', 'metaslider') . '</a>'; |
||
110 | } |
||
111 | |||
112 | return $links; |
||
113 | } |
||
114 | |||
115 | /** |
||
116 | * Return the meta slider pro upgrade iFrame |
||
117 | */ |
||
118 | public function metaslider_pro_tab() |
||
119 | { |
||
120 | if (function_exists('is_plugin_active') && !is_plugin_active('ml-slider-pro/ml-slider-pro.php')) { |
||
121 | return wp_iframe([$this, 'iframe']); |
||
122 | } |
||
123 | } |
||
124 | |||
125 | /** |
||
126 | * Media Manager iframe HTML |
||
127 | */ |
||
128 | public function iframe() |
||
129 | { |
||
130 | wp_enqueue_style('metaslider-admin-styles', METASLIDER_ASSETS_URL . 'metaslider/admin.css', false, METASLIDER_VERSION); |
||
131 | wp_enqueue_script('google-font-api', 'http://fonts.googleapis.com/css?family=PT+Sans:400,700'); |
||
132 | |||
133 | $link = apply_filters('metaslider_hoplink', 'http://www.metaslider.com/upgrade/'); |
||
134 | $link .= '?utm_source=lite&utm_medium=more-slide-types&utm_campaign=pro'; |
||
135 | |||
136 | echo "<div class='metaslider'>"; |
||
137 | echo "<p style='text-align: center; font-size: 1.2em; margin-top: 50px;'>Get the Pro Addon pack to add support for: <b>Post Feed</b> Slides, <b>YouTube</b> Slides, <b>HTML</b> Slides & <b>Vimeo</b> Slides</p>"; |
||
138 | echo "<p style='text-align: center; font-size: 1.2em;'><b>NEW: </b> Animated HTML <b>Layer</b> Slides (with an awesome Drag & Drop editor!)</p>"; |
||
139 | echo "<p style='text-align: center; font-size: 1.2em;'><b></b> Live Theme Editor!</p>"; |
||
140 | echo "<p style='text-align: center; font-size: 1.2em;'><b>NEW:</b> Thumbnail Navigation for Flex & Nivo Slider!</p>"; |
||
141 | echo "<a class='probutton' href='{$link}' target='_blank'>Get <span class='logo'><strong>Meta</strong>Slider</span><span class='super'>Pro</span></a>"; |
||
142 | echo "<span class='subtext'>Opens in a new window</span>"; |
||
143 | echo '</div>'; |
||
144 | } |
||
145 | |||
146 | /** |
||
147 | * Register our slide types |
||
148 | */ |
||
149 | private function register_slide_types() |
||
150 | { |
||
151 | $image = new MetaImageSlide(); |
||
152 | } |
||
153 | |||
154 | /** |
||
155 | * Initialise translations |
||
156 | */ |
||
157 | public function load_plugin_textdomain() |
||
160 | } |
||
161 | |||
162 | /** |
||
163 | * Update the tab options in the media manager |
||
164 | * @param $strings |
||
165 | * @return mixed |
||
166 | */ |
||
167 | public function custom_media_uploader_tabs($strings) |
||
183 | } |
||
184 | |||
185 | /** |
||
186 | * Add extra tabs to the default wordpress Media Manager iframe |
||
187 | * |
||
188 | * |
||
189 | * @param mixed $tabs |
||
190 | * @return array |
||
191 | */ |
||
192 | public function custom_media_upload_tab_name($tabs) |
||
193 | { |
||
194 | $metaslider_tabs = ['post_feed', 'layer', 'youtube', 'vimeo']; |
||
195 | |||
196 | // restrict our tab changes to the meta slider plugin page |
||
197 | if ((isset($_GET['page']) && 'metaslider' === $_GET['page']) || (isset($_GET['tab']) && in_array($_GET['tab'], $metaslider_tabs))) { |
||
198 | $newtabs = []; |
||
199 | |||
200 | if (function_exists('is_plugin_active') && !is_plugin_active('ml-slider-pro/ml-slider-pro.php')) { |
||
201 | $newtabs = [ |
||
202 | 'post_feed' => __('Post Feed', 'metaslider'), |
||
203 | 'vimeo' => __('Vimeo', 'metaslider'), |
||
204 | 'youtube' => __('YouTube', 'metaslider'), |
||
205 | 'layer' => __('Layer Slide', 'metaslider'), |
||
206 | ]; |
||
207 | } |
||
208 | |||
209 | if (isset($tabs['nextgen'])) { |
||
210 | unset($tabs['nextgen']); |
||
211 | } |
||
212 | |||
213 | return array_merge($tabs, $newtabs); |
||
214 | } |
||
215 | |||
216 | return $tabs; |
||
217 | } |
||
218 | |||
219 | /** |
||
220 | * Rehister admin styles |
||
221 | */ |
||
222 | public function register_admin_styles() |
||
223 | { |
||
224 | wp_enqueue_style('metaslider-admin-styles', METASLIDER_ASSETS_URL . 'metaslider/admin.css', false, METASLIDER_VERSION); |
||
225 | wp_enqueue_style('metaslider-colorbox-styles', METASLIDER_ASSETS_URL . 'colorbox/colorbox.css', false, METASLIDER_VERSION); |
||
226 | wp_enqueue_style('metaslider-tipsy-styles', METASLIDER_ASSETS_URL . 'tipsy/tipsy.css', false, METASLIDER_VERSION); |
||
227 | |||
228 | do_action('metaslider_register_admin_styles'); |
||
229 | } |
||
230 | |||
231 | /** |
||
232 | * Register admin JavaScript |
||
233 | */ |
||
234 | public function register_admin_scripts() |
||
235 | { |
||
236 | if (wp_script_is('wp-auth-check', 'queue')) { |
||
237 | // meta slider checks for active AJAX requests in order to show the spinner |
||
238 | // .. but the auth-check runs an AJAX request every 15 seconds |
||
239 | // deregister the script that displays the login panel if the user becomes logged |
||
240 | // out at some point |
||
241 | // todo: implement some more intelligent request checking |
||
242 | wp_deregister_script('wp-auth-check'); |
||
243 | wp_register_script('wp-auth-check', null); // fix php notice |
||
244 | } |
||
245 | |||
246 | // media library dependencies |
||
247 | wp_enqueue_media(); |
||
248 | |||
249 | // plugin dependencies |
||
250 | wp_enqueue_script('jquery-ui-core', ['jquery']); |
||
251 | wp_enqueue_script('jquery-ui-sortable', ['jquery', 'jquery-ui-core']); |
||
252 | wp_enqueue_script('metaslider-colorbox', METASLIDER_ASSETS_URL . 'colorbox/jquery.colorbox-min.js', ['jquery'], METASLIDER_VERSION); |
||
253 | wp_enqueue_script('metaslider-tipsy', METASLIDER_ASSETS_URL . 'tipsy/jquery.tipsy.js', ['jquery'], METASLIDER_VERSION); |
||
254 | wp_enqueue_script('metaslider-admin-script', METASLIDER_ASSETS_URL . 'metaslider/admin.js', ['jquery', 'metaslider-tipsy', 'media-upload'], METASLIDER_VERSION); |
||
255 | wp_enqueue_script('metaslider-admin-addslide', METASLIDER_ASSETS_URL . 'metaslider/image/image.js', ['metaslider-admin-script'], METASLIDER_VERSION); |
||
256 | |||
257 | // localise the JS |
||
258 | wp_localize_script('metaslider-admin-addslide', 'metaslider_image', [ |
||
259 | 'addslide_nonce' => wp_create_nonce('metaslider_addslide'), |
||
260 | ]); |
||
261 | |||
262 | // localise the JS |
||
263 | wp_localize_script('metaslider-admin-script', 'metaslider', [ |
||
264 | 'url' => __('URL', 'metaslider'), |
||
265 | 'caption' => __('Caption', 'metaslider'), |
||
266 | 'new_window' => __('New Window', 'metaslider'), |
||
267 | 'confirm' => __('Are you sure?', 'metaslider'), |
||
268 | 'ajaxurl' => admin_url('admin-ajax.php'), |
||
269 | 'resize_nonce' => wp_create_nonce('metaslider_resize'), |
||
270 | 'iframeurl' => METASLIDER_BASE_URL . 'preview.php', |
||
271 | 'useWithCaution' => __("Caution: This setting is for advanced developers only. If you're unsure, leave it checked.", 'metaslider'), |
||
272 | ]); |
||
273 | |||
274 | do_action('metaslider_register_admin_scripts'); |
||
275 | } |
||
276 | |||
277 | /** |
||
278 | * Add the menu page |
||
279 | */ |
||
280 | public function register_admin_menu() |
||
281 | { |
||
282 | $title = apply_filters('metaslider_menu_title', 'Meta Slider'); |
||
283 | |||
284 | $page = add_menu_page($title, $title, 'edit_others_posts', 'metaslider', [ |
||
285 | $this, |
||
286 | 'render_admin_page', |
||
287 | ], METASLIDER_ASSETS_URL . 'metaslider/matchalabs.png', 9501); |
||
288 | |||
289 | // ensure our JavaScript is only loaded on the Meta Slider admin page |
||
290 | add_action('admin_print_scripts-' . $page, [$this, 'register_admin_scripts']); |
||
291 | add_action('admin_print_styles-' . $page, [$this, 'register_admin_styles']); |
||
292 | add_action('load-' . $page, [$this, 'help_tab']); |
||
293 | } |
||
294 | |||
295 | /** |
||
296 | * Upgrade CTA. |
||
297 | */ |
||
298 | public function go_pro_cta() |
||
299 | { |
||
300 | if (function_exists('is_plugin_active') && !is_plugin_active('ml-slider-pro/ml-slider-pro.php')) { |
||
301 | $link = apply_filters('metaslider_hoplink', 'http://www.metaslider.com/upgrade/'); |
||
302 | |||
303 | $link .= '?utm_source=lite&utm_medium=nag&utm_campaign=pro'; |
||
304 | |||
305 | $goPro = "<div style='display: none;' id='screen-options-link-wrap'><a target='_blank' class='show-settings' href='{$link}'>Meta Slider v" . METASLIDER_VERSION . ' - ' . __('Upgrade to Pro $19', 'metaslider') . '</a></div>'; |
||
306 | |||
307 | echo $goPro; |
||
308 | } |
||
309 | } |
||
310 | |||
311 | public function help_tab() |
||
320 | ]); |
||
321 | } |
||
322 | |||
323 | /** |
||
324 | * Register ML Slider post type |
||
325 | */ |
||
326 | public function register_post_type() |
||
335 | ], |
||
336 | ]); |
||
337 | } |
||
338 | |||
339 | /** |
||
340 | * Register taxonomy to store slider => slides relationship |
||
341 | */ |
||
342 | public function register_taxonomy() |
||
349 | ]); |
||
350 | } |
||
351 | |||
352 | /** |
||
353 | * Shortcode used to display slideshow |
||
354 | * |
||
355 | * @param $atts |
||
356 | * @return string HTML output of the shortcode |
||
357 | */ |
||
358 | public function register_shortcode($atts) |
||
359 | { |
||
360 | if (!isset($atts['id'])) { |
||
361 | return false; |
||
362 | } |
||
363 | |||
364 | // we have an ID to work with |
||
365 | $slider = get_post($atts['id']); |
||
366 | |||
367 | // check the slider is published |
||
368 | if ('publish' !== $slider->post_status) { |
||
369 | return false; |
||
370 | } |
||
371 | |||
372 | // lets go |
||
373 | $this->set_slider($atts['id'], $atts); |
||
374 | $this->slider->enqueue_scripts(); |
||
375 | |||
376 | return $this->slider->render_public_slides(); |
||
377 | } |
||
378 | |||
379 | /** |
||
380 | * Set the current slider |
||
381 | * @param $id |
||
382 | * @param array $shortcode_settings |
||
383 | */ |
||
384 | public function set_slider($id, $shortcode_settings = []) |
||
385 | { |
||
386 | $type = 'flex'; |
||
387 | |||
388 | $settings = array_merge(get_post_meta($id, 'ml-slider_settings', true), $shortcode_settings); |
||
389 | |||
390 | if (isset($settings['type']) && in_array($settings['type'], ['flex', 'coin', 'nivo', 'responsive'])) { |
||
391 | $type = $settings['type']; |
||
392 | } |
||
393 | |||
394 | $this->slider = $this->create_slider($type, $id, $shortcode_settings); |
||
395 | } |
||
396 | |||
397 | /** |
||
398 | * Create a new slider based on the sliders type setting |
||
399 | * @param $type |
||
400 | * @param $id |
||
401 | * @param $shortcode_settings |
||
402 | * @return MetaFlexSlider|MetaNivoSlider|MetaResponsiveSlider |
||
403 | */ |
||
404 | private function create_slider($type, $id, $shortcode_settings) |
||
422 | } |
||
423 | } |
||
424 | |||
425 | /** |
||
426 | * Handle slide uploads/changes. |
||
427 | */ |
||
428 | public function admin_process() |
||
460 | } |
||
461 | } |
||
462 | |||
463 | /** |
||
464 | * Create a new slider |
||
465 | */ |
||
466 | private function add_slider() |
||
467 | { |
||
468 | // check nonce |
||
469 | check_admin_referer('metaslider_add_slider'); |
||
470 | |||
471 | $defaults = []; |
||
472 | |||
473 | // if possible, take a copy of the last edited slider settings in place of default settings |
||
474 | $last_modified = $this->find_slider('modified', 'DESC'); |
||
475 | if ($last_modified) { |
||
476 | $defaults = get_post_meta($last_modified, 'ml-slider_settings', true); |
||
477 | } |
||
478 | |||
479 | // use the default settings if we can't find anything more suitable. |
||
480 | if (empty($defaults)) { |
||
481 | $slider = new MetaSlider($id, []); |
||
482 | $defaults = $slider->get_default_parameters(); |
||
483 | } |
||
484 | |||
485 | // insert the post |
||
486 | $id = wp_insert_post([ |
||
487 | 'post_title' => __('New Slider', 'metaslider'), |
||
488 | 'post_status' => 'publish', |
||
489 | 'post_type' => 'ml-slider', |
||
490 | ]); |
||
491 | |||
492 | // insert the post meta |
||
493 | add_post_meta($id, 'ml-slider_settings', $defaults, true); |
||
494 | |||
495 | // create the taxonomy term, the term is the ID of the slider itself |
||
496 | wp_insert_term($id, 'ml-slider'); |
||
497 | |||
498 | return $id; |
||
499 | } |
||
500 | |||
501 | /** |
||
502 | * Delete a slider (send it to trash) |
||
503 | * |
||
504 | * @param int $id |
||
505 | * @return int |
||
506 | */ |
||
507 | private function delete_slider($id) |
||
508 | { |
||
509 | // check nonce |
||
510 | check_admin_referer('metaslider_delete_slider'); |
||
511 | |||
512 | // send the post to trash |
||
513 | wp_update_post([ |
||
514 | 'ID' => $id, |
||
515 | 'post_status' => 'trash', |
||
516 | ]); |
||
517 | |||
518 | return $this->find_slider('date', 'DESC'); |
||
519 | } |
||
520 | |||
521 | /** |
||
522 | * Find a single slider ID. For example, last edited, or first published. |
||
523 | * |
||
524 | * @param string $orderby field to order. |
||
525 | * @param string $order direction (ASC or DESC). |
||
526 | * @return int slider ID. |
||
527 | */ |
||
528 | private function find_slider($orderby, $order) |
||
529 | { |
||
530 | $args = [ |
||
531 | 'force_no_custom_order' => true, |
||
532 | 'post_type' => 'ml-slider', |
||
533 | 'num_posts' => 1, |
||
534 | 'post_status' => 'publish', |
||
535 | 'suppress_filters' => 1, // wpml, ignore language filter |
||
536 | 'orderby' => $orderby, |
||
537 | 'order' => $order, |
||
538 | ]; |
||
539 | |||
540 | $the_query = new WP_Query($args); |
||
541 | |||
542 | while ($the_query->have_posts()) { |
||
543 | $the_query->the_post(); |
||
544 | |||
545 | return $the_query->post->ID; |
||
546 | } |
||
547 | |||
548 | wp_reset_query(); |
||
549 | |||
550 | return false; |
||
551 | } |
||
552 | |||
553 | /** |
||
554 | * Get sliders. Returns a nicely formatted array of currently |
||
555 | * published sliders. |
||
556 | * |
||
557 | * @param string $sort_key |
||
558 | * @return array all published sliders |
||
559 | */ |
||
560 | private function all_meta_sliders($sort_key = 'date') |
||
561 | { |
||
562 | $sliders = false; |
||
563 | |||
564 | // list the tabs |
||
565 | $args = [ |
||
566 | 'post_type' => 'ml-slider', |
||
567 | 'post_status' => 'publish', |
||
568 | 'orderby' => $sort_key, |
||
569 | 'suppress_filters' => 1, // wpml, ignore language filter |
||
570 | 'order' => 'ASC', |
||
571 | 'posts_per_page' => -1, |
||
572 | ]; |
||
573 | |||
574 | $args = apply_filters('metaslider_all_meta_sliders_args', $args); |
||
575 | |||
576 | $the_query = new WP_Query($args); |
||
577 | |||
578 | while ($the_query->have_posts()) { |
||
579 | $the_query->the_post(); |
||
580 | $active = $this->slider && ($this->slider->id == $the_query->post->ID) ? true : false; |
||
581 | |||
582 | $sliders[] = [ |
||
583 | 'active' => $active, |
||
584 | 'title' => get_the_title(), |
||
585 | 'id' => $the_query->post->ID, |
||
586 | ]; |
||
587 | } |
||
588 | |||
589 | wp_reset_query(); |
||
590 | |||
591 | return $sliders; |
||
592 | } |
||
593 | |||
594 | /** |
||
595 | * Compare array values |
||
596 | * |
||
597 | * @param array $elem1 |
||
598 | * @param array $elem2 |
||
599 | * @return bool |
||
600 | */ |
||
601 | private function compare_elems($elem1, $elem2) |
||
602 | { |
||
603 | return $elem1['priority'] > $elem2['priority']; |
||
604 | } |
||
605 | |||
606 | /** |
||
607 | * @param array $aFields - array of field to render |
||
608 | * @return string |
||
609 | */ |
||
610 | public function build_settings_rows($aFields) |
||
611 | { |
||
612 | // order the fields by priority |
||
613 | uasort($aFields, [$this, 'compare_elems']); |
||
614 | |||
615 | $return = ''; |
||
616 | |||
617 | // loop through the array and build the settings HTML |
||
618 | foreach ($aFields as $id => $row) { |
||
619 | // checkbox input type |
||
620 | if ('checkbox' === $row['type']) { |
||
621 | $return .= "<tr><td class='tipsy-tooltip' title=\"{$row['helptext']}\">{$row['label']}</td><td><input class='option {$row['class']} {$id}' type='checkbox' name='settings[{$id}]' {$row['checked']} >"; |
||
622 | |||
623 | if (isset($row['after'])) { |
||
624 | $return .= "<span class='after'>{$row['after']}</span>"; |
||
625 | } |
||
626 | |||
627 | $return .= '</td></tr>'; |
||
628 | } |
||
629 | |||
630 | // navigation row |
||
631 | if ('navigation' === $row['type']) { |
||
632 | $navigation_row = "<tr class='{$row['type']}'><td class='tipsy-tooltip' title=\"{$row['helptext']}\">{$row['label']}</td><td><ul>"; |
||
633 | |||
634 | foreach ($row['options'] as $k => $v) { |
||
635 | $checked = checked($k, $row['value'], false); |
||
636 | $disabled = 'thumbnails' === $k ? 'disabled' : ''; |
||
637 | $navigation_row .= "<li><label><input type='radio' name='settings[{$id}]' value='{$k}' {$checked} {$disabled}>{$v['label']}</label></li>"; |
||
638 | } |
||
639 | |||
640 | $navigation_row .= '</ul></td></tr>'; |
||
641 | |||
642 | $return .= apply_filters('metaslider_navigation_options', $navigation_row, $this->slider); |
||
643 | } |
||
644 | |||
645 | // navigation row |
||
646 | if ('radio' === $row['type']) { |
||
647 | $navigation_row = "<tr class='{$row['type']}'><td class='tipsy-tooltip' title=\"{$row['helptext']}\">{$row['label']}</td><td><ul>"; |
||
648 | |||
649 | foreach ($row['options'] as $k => $v) { |
||
650 | $checked = checked($k, $row['value'], false); |
||
651 | $class = isset($v['class']) ? $v['class'] : ''; |
||
652 | $navigation_row .= "<li><label><input type='radio' name='settings[{$id}]' value='{$k}' {$checked} class='radio {$class}'>{$v['label']}</label></li>"; |
||
653 | } |
||
654 | |||
655 | $navigation_row .= '</ul></td></tr>'; |
||
656 | |||
657 | $return .= apply_filters('metaslider_navigation_options', $navigation_row, $this->slider); |
||
658 | } |
||
659 | |||
660 | // header/divider row |
||
661 | if ('divider' === $row['type']) { |
||
662 | $return .= "<tr class='{$row['type']}'><td colspan='2' class='divider'><b>{$row['value']}</b></td></tr>"; |
||
663 | } |
||
664 | |||
665 | // slideshow select row |
||
666 | if ('slider-lib' === $row['type']) { |
||
667 | $return .= "<tr class='{$row['type']}'><td colspan='2' class='slider-lib-row'>"; |
||
668 | |||
669 | foreach ($row['options'] as $k => $v) { |
||
670 | $checked = checked($k, $row['value'], false); |
||
671 | $return .= "<input class='select-slider' id='{$k}' rel='{$k}' type='radio' name='settings[type]' value='{$k}' {$checked} > |
||
672 | <label for='{$k}'>{$v['label']}</label>"; |
||
673 | } |
||
674 | |||
675 | $return .= '</td></tr>'; |
||
676 | } |
||
677 | |||
678 | // number input type |
||
679 | if ('number' === $row['type']) { |
||
680 | $return .= "<tr class='{$row['type']}'><td class='tipsy-tooltip' title=\"{$row['helptext']}\">{$row['label']}</td><td><input class='option {$row['class']} {$id}' type='number' min='{$row['min']}' max='{$row['max']}' step='{$row['step']}' name='settings[{$id}]' value='{$row['value']}' ><span class='after'>{$row['after']}</span></td></tr>"; |
||
681 | } |
||
682 | |||
683 | // select drop down |
||
684 | if ('select' === $row['type']) { |
||
685 | $return .= "<tr class='{$row['type']}'><td class='tipsy-tooltip' title=\"{$row['helptext']}\">{$row['label']}</td><td><select class='option {$row['class']} {$id}' name='settings[{$id}]'>"; |
||
686 | foreach ($row['options'] as $k => $v) { |
||
687 | $selected = selected($k, $row['value'], false); |
||
688 | $return .= "<option class='{$v['class']}' value='{$k}' {$selected}>{$v['label']}</option>"; |
||
689 | } |
||
690 | $return .= '</select></td></tr>'; |
||
691 | } |
||
692 | |||
693 | // theme drop down |
||
694 | if ('theme' === $row['type']) { |
||
695 | $return .= "<tr class='{$row['type']}'><td class='tipsy-tooltip' title=\"{$row['helptext']}\">{$row['label']}</td><td><select class='option {$row['class']} {$id}' name='settings[{$id}]'>"; |
||
696 | $themes = ''; |
||
697 | |||
698 | foreach ($row['options'] as $k => $v) { |
||
699 | $selected = selected($k, $row['value'], false); |
||
700 | $themes .= "<option class='{$v['class']}' value='{$k}' {$selected}>{$v['label']}</option>"; |
||
701 | } |
||
702 | |||
703 | $return .= apply_filters('metaslider_get_available_themes', $themes, $this->slider->get_setting('theme')); |
||
704 | |||
705 | $return .= '</select></td></tr>'; |
||
706 | } |
||
707 | |||
708 | // text input type |
||
709 | if ('text' === $row['type']) { |
||
710 | $return .= "<tr class='{$row['type']}'><td class='tipsy-tooltip' title=\"{$row['helptext']}\">{$row['label']}</td><td><input class='option {$row['class']} {$id}' type='text' name='settings[{$id}]' value='{$row['value']}' ></td></tr>"; |
||
711 | } |
||
712 | |||
713 | // text input type |
||
714 | if ('title' === $row['type']) { |
||
715 | $return .= "<tr class='{$row['type']}'><td class='tipsy-tooltip' title=\"{$row['helptext']}\">{$row['label']}</td><td><input class='option {$row['class']} {$id}' type='text' name='{$id}' value='{$row['value']}' ></td></tr>"; |
||
716 | } |
||
717 | } |
||
718 | |||
719 | return $return; |
||
720 | } |
||
721 | |||
722 | /** |
||
723 | * Return an indexed array of all easing options |
||
724 | * |
||
725 | * @return array |
||
726 | */ |
||
727 | private function get_easing_options() |
||
773 | } |
||
774 | |||
775 | /** |
||
776 | * Render the admin page (tabs, slides, settings) |
||
777 | */ |
||
778 | public function render_admin_page() |
||
779 | { |
||
780 | $this->admin_process(); |
||
781 | $this->go_pro_cta(); |
||
782 | $this->system_check(); |
||
783 | $max_tabs = apply_filters('metaslider_max_tabs', 0); ?> |
||
784 | |||
785 | <script type='text/javascript'> |
||
786 | var metaslider_slider_id = <?php echo $this->slider->id; ?>; |
||
787 | var metaslider_pro_active = <?php echo function_exists('is_plugin_active') && is_plugin_active('ml-slider-pro/ml-slider-pro.php') ? 'true' : 'false' ?>; |
||
788 | </script> |
||
789 | |||
790 | <div class="wrap metaslider"> |
||
791 | <form accept-charset="UTF-8" action="?page=metaslider&id=<?php echo $this->slider->id ?>" method="post"> |
||
792 | <?php |
||
793 | if ($this->slider) { |
||
794 | wp_nonce_field('metaslider_save_' . $this->slider->id); |
||
795 | } |
||
796 | |||
797 | $title = ''; |
||
798 | $add_url = wp_nonce_url('?page=metaslider&add=true', 'metaslider_add_slider'); |
||
799 | |||
800 | $tabs = $this->all_meta_sliders(); |
||
801 | if ($tabs) { |
||
802 | if ($max_tabs && count($tabs) > $max_tabs) { |
||
803 | if (\Xmf\Request::hasVar('add', 'GET') && 'true' === $_GET['add']) { |
||
804 | echo "<div id='message' class='updated'><p>" . __("New slideshow created. Click 'Add Slide' to get started!", 'metaslider') . '</p></div>'; |
||
805 | } |
||
806 | echo "<div style='margin-top: 20px;'><label for='select-slider'>Select Slider: </label>"; |
||
807 | echo "<select name='select-slider' onchange='if (this.value) window.location.href=this.value'>"; |
||
808 | |||
809 | $tabs = $this->all_meta_sliders('title'); |
||
810 | |||
811 | foreach ($tabs as $tab) { |
||
812 | $selected = $tab['active'] ? ' selected' : ''; |
||
813 | |||
814 | if ($tab['active']) { |
||
815 | $title = $tab['title']; |
||
816 | } |
||
817 | |||
818 | echo "<option value='?page=metaslider&id={$tab['id']}'{$selected}>{$tab['title']}</option>"; |
||
819 | } |
||
820 | echo '</select> ' . __('or', 'metaslider') . ' '; |
||
821 | echo "<a href='{$add_url}'>" . __('Add New Slideshow', 'metaslider') . '</a></div>'; |
||
822 | } else { |
||
823 | echo "<h3 class='nav-tab-wrapper'>"; |
||
824 | foreach ($tabs as $tab) { |
||
825 | if ($tab['active']) { |
||
826 | echo "<div class='nav-tab nav-tab-active'><input type='text' name='title' value='" . $tab['title'] . "' onfocus='this.style.width = ((this.value.length + 1) * 9) + \"px\"' ></div>"; |
||
827 | } else { |
||
828 | echo "<a href='?page=metaslider&id={$tab['id']}' class='nav-tab'>" . $tab['title'] . '</a>'; |
||
829 | } |
||
830 | } |
||
831 | echo "<a href='{$add_url}' id='create_new_tab' class='nav-tab'>+</a>"; |
||
832 | echo '</h3>'; |
||
833 | } |
||
834 | } else { |
||
835 | echo "<h3 class='nav-tab-wrapper'>"; |
||
836 | echo "<a href='{$add_url}' id='create_new_tab' class='nav-tab'>+</a>"; |
||
837 | echo "<div class='bubble'>" . __('Create your first slideshow') . '</div>'; |
||
838 | echo '</h3>'; |
||
839 | } ?> |
||
840 | |||
841 | <?php |
||
842 | if (!$this->slider) { |
||
843 | return; |
||
844 | } ?> |
||
845 | <div id='poststuff'> |
||
846 | <div id='post-body' class='metabox-holder columns-2'> |
||
847 | |||
848 | <div id='post-body-content'> |
||
849 | <div class="left"> |
||
850 | <table class="widefat sortable"> |
||
851 | <thead> |
||
852 | <tr> |
||
853 | <th style="width: 100px;"> |
||
854 | <h3><?php _e('Slides', 'metaslider') ?></h3> |
||
855 | </th> |
||
856 | <th> |
||
857 | <a href='#' class='button alignright add-slide' data-editor='content' title='<?php _e('Add Slide', 'metaslider') ?>'> |
||
858 | <span class='wp-media-buttons-icon'></span> <?php _e('Add Slide', 'metaslider') ?> |
||
859 | </a> |
||
860 | </th> |
||
861 | </tr> |
||
862 | </thead> |
||
863 | |||
864 | <tbody> |
||
865 | <?php |
||
866 | $this->slider->render_admin_slides(); ?> |
||
867 | </tbody> |
||
868 | </table> |
||
869 | </div> |
||
870 | </div> |
||
871 | |||
872 | <div id='postbox-container-1' class='postbox-container'> |
||
873 | <div id="side-sortables" class="meta-box-sortables"> |
||
874 | <div class='right'> |
||
875 | <div class="postbox"> |
||
876 | <h3 class='configuration'> |
||
877 | <?php _e('Settings', 'metaslider') ?> |
||
878 | <input class='alignright button button-primary' type='submit' name='save' id='ms-save' value='<?php _e('Save', 'metaslider') ?>'> |
||
879 | <input class='alignright button button-primary' type='submit' name='preview' id='ms-preview' value='<?php _e('Save & Preview', 'metaslider') ?>' data-slider_id='<?php echo $this->slider->id ?>' |
||
880 | data-slider_width='<?php echo $this->slider->get_setting('width') ?>' data-slider_height='<?php echo $this->slider->get_setting('height') ?>'> |
||
881 | <span class="spinner"></span> |
||
882 | </h3> |
||
883 | <div class="inside"> |
||
884 | <table class="widefat settings"> |
||
885 | <tbody> |
||
886 | <?php |
||
887 | $aFields = [ |
||
888 | 'type' => [ |
||
889 | 'priority' => 0, |
||
890 | 'type' => 'slider-lib', |
||
891 | 'value' => $this->slider->get_setting('type'), |
||
892 | 'options' => [ |
||
893 | 'flex' => ['label' => __('Flex Slider', 'metaslider')], |
||
894 | 'responsive' => ['label' => __('Responsive', 'metaslider')], |
||
895 | 'nivo' => ['label' => __('Nivo Slider', 'metaslider')], |
||
896 | 'coin' => ['label' => __('Coin Slider', 'metaslider')], |
||
897 | ], |
||
898 | ], |
||
899 | 'width' => [ |
||
900 | 'priority' => 10, |
||
901 | 'type' => 'number', |
||
902 | 'size' => 3, |
||
903 | 'min' => 0, |
||
904 | 'max' => 9999, |
||
905 | 'step' => 1, |
||
906 | 'value' => $this->slider->get_setting('width'), |
||
907 | 'label' => __('Width', 'metaslider'), |
||
908 | 'class' => 'coin flex responsive nivo', |
||
909 | 'helptext' => __('Slideshow width', 'metaslider'), |
||
910 | 'after' => __('px', 'metaslider'), |
||
911 | ], |
||
912 | 'height' => [ |
||
913 | 'priority' => 20, |
||
914 | 'type' => 'number', |
||
915 | 'size' => 3, |
||
916 | 'min' => 0, |
||
917 | 'max' => 9999, |
||
918 | 'step' => 1, |
||
919 | 'value' => $this->slider->get_setting('height'), |
||
920 | 'label' => __('Height', 'metaslider'), |
||
921 | 'class' => 'coin flex responsive nivo', |
||
922 | 'helptext' => __('Slideshow height', 'metaslider'), |
||
923 | 'after' => __('px', 'metaslider'), |
||
924 | ], |
||
925 | 'effect' => [ |
||
926 | 'priority' => 30, |
||
927 | 'type' => 'select', |
||
928 | 'value' => $this->slider->get_setting('effect'), |
||
929 | 'label' => __('Effect', 'metaslider'), |
||
930 | 'class' => 'effect coin flex responsive nivo', |
||
931 | 'helptext' => __('Slide transition effect', 'metaslider'), |
||
932 | 'options' => [ |
||
933 | 'random' => ['class' => 'option coin nivo', 'label' => __('Random', 'metaslider')], |
||
934 | 'swirl' => ['class' => 'option coin', 'label' => __('Swirl', 'metaslider')], |
||
935 | 'rain' => ['class' => 'option coin', 'label' => __('Rain', 'metaslider')], |
||
936 | 'straight' => ['class' => 'option coin', 'label' => __('Straight', 'metaslider')], |
||
937 | 'sliceDown' => ['class' => 'option nivo', 'label' => __('Slide Down', 'metaslider')], |
||
938 | 'sliceUp' => ['class' => 'option nivo', 'label' => __('Slice Up', 'metaslider')], |
||
939 | 'sliceUpLeft' => ['class' => 'option nivo', 'label' => __('Slide Up Left', 'metaslider')], |
||
940 | 'sliceUpDown' => ['class' => 'option nivo', 'label' => __('Slice Up Down', 'metaslider')], |
||
941 | 'slideUpDownLeft' => ['class' => 'option nivo', 'label' => __('Slide Up Down Left', 'metaslider')], |
||
942 | 'fold' => ['class' => 'option nivo', 'label' => __('Fold', 'metaslider')], |
||
943 | 'fade' => ['class' => 'option nivo flex responsive', 'label' => __('Fade', 'metaslider')], |
||
944 | 'slideInRight' => ['class' => 'option nivo', 'label' => __('Slide In Right', 'metaslider')], |
||
945 | 'slideInLeft' => ['class' => 'option nivo', 'label' => __('Slide In Left', 'metaslider')], |
||
946 | 'boxRandom' => ['class' => 'option nivo', 'label' => __('Box Random', 'metaslider')], |
||
947 | 'boxRain' => ['class' => 'option nivo', 'label' => __('Box Rain', 'metaslider')], |
||
948 | 'boxRainReverse' => ['class' => 'option nivo', 'label' => __('Box Rain Reverse', 'metaslider')], |
||
949 | 'boxRainGrowReverse' => ['class' => 'option nivo', 'label' => __('Box Rain Grow Reverse', 'metaslider')], |
||
950 | 'slide' => ['class' => 'option flex', 'label' => __('Slide', 'metaslider')], |
||
951 | ], |
||
952 | ], |
||
953 | 'theme' => [ |
||
954 | 'priority' => 40, |
||
955 | 'type' => 'theme', |
||
956 | 'value' => $this->slider->get_setting('theme'), |
||
957 | 'label' => __('Theme', 'metaslider'), |
||
958 | 'class' => 'effect coin flex responsive nivo', |
||
959 | 'helptext' => __('Slideshow theme', 'metaslider'), |
||
960 | 'options' => [ |
||
961 | 'default' => ['class' => 'option nivo flex coin responsive', 'label' => __('Default', 'metaslider')], |
||
962 | 'dark' => ['class' => 'option nivo', 'label' => __('Dark (Nivo)', 'metaslider')], |
||
963 | 'light' => ['class' => 'option nivo', 'label' => __('Light (Nivo)', 'metaslider')], |
||
964 | 'bar' => ['class' => 'option nivo', 'label' => __('Bar (Nivo)', 'metaslider')], |
||
965 | ], |
||
966 | ], |
||
967 | 'links' => [ |
||
968 | 'priority' => 50, |
||
969 | 'type' => 'checkbox', |
||
970 | 'label' => __('Arrows', 'metaslider'), |
||
971 | 'class' => 'option coin flex nivo responsive', |
||
972 | 'checked' => 'true' === $this->slider->get_setting('links') ? 'checked' : '', |
||
973 | 'helptext' => __('Show the previous/next arrows', 'metaslider'), |
||
974 | ], |
||
975 | 'navigation' => [ |
||
976 | 'priority' => 60, |
||
977 | 'type' => 'navigation', |
||
978 | 'label' => __('Navigation', 'metaslider'), |
||
979 | 'class' => 'option coin flex nivo responsive', |
||
980 | 'value' => $this->slider->get_setting('navigation'), |
||
981 | 'helptext' => __('Show the slide navigation bullets', 'metaslider'), |
||
982 | 'options' => [ |
||
983 | 'false' => ['label' => __('Hidden', 'metaslider')], |
||
984 | 'true' => ['label' => __('Dots', 'metaslider')], |
||
985 | 'thumbnails' => ['label' => __('Thumbnails (Pro)', 'metaslider')], |
||
986 | ], |
||
987 | ], |
||
988 | ]; |
||
989 | |||
990 | if ($max_tabs && count($this->all_meta_sliders()) > $max_tabs) { |
||
991 | $aFields['title'] = [ |
||
992 | 'type' => 'title', |
||
993 | 'priority' => 5, |
||
994 | 'class' => 'option flex nivo responsive coin', |
||
995 | 'value' => $title, |
||
996 | 'label' => __('Title', 'metaslider'), |
||
997 | 'helptext' => __('Slideshow title', 'metaslider'), |
||
998 | ]; |
||
999 | } |
||
1000 | |||
1001 | $aFields = apply_filters('metaslider_basic_settings', $aFields, $this->slider); |
||
1002 | |||
1003 | echo $this->build_settings_rows($aFields); ?> |
||
1004 | </tbody> |
||
1005 | </table> |
||
1006 | </div> |
||
1007 | </div> |
||
1008 | |||
1009 | <div class="postbox ms-toggle closed"> |
||
1010 | <div class="handlediv" title="Click to toggle"><br></div> |
||
1011 | <h3 class="hndle"><span><?php _e('Advanced Settings', 'metaslider') ?></span></h3> |
||
1012 | <div class="inside"> |
||
1013 | <table> |
||
1014 | <tbody> |
||
1015 | <?php |
||
1016 | $aFields = [ |
||
1017 | 'fullWidth' => [ |
||
1018 | 'priority' => 5, |
||
1019 | 'type' => 'checkbox', |
||
1020 | 'label' => __('Stretch', 'metaslider'), |
||
1021 | 'class' => 'option flex nivo responsive', |
||
1022 | 'after' => __('100% wide output', 'metaslider'), |
||
1023 | 'checked' => 'true' === $this->slider->get_setting('fullWidth') ? 'checked' : '', |
||
1024 | 'helptext' => __("Stretch the slideshow output to fill it's parent container", 'metaslider'), |
||
1025 | ], |
||
1026 | 'center' => [ |
||
1027 | 'priority' => 10, |
||
1028 | 'type' => 'checkbox', |
||
1029 | 'label' => __('Center align', 'metaslider'), |
||
1030 | 'class' => 'option coin flex nivo responsive', |
||
1031 | 'checked' => 'true' === $this->slider->get_setting('center') ? 'checked' : '', |
||
1032 | 'helptext' => __('Center align the slideshow', 'metaslider'), |
||
1033 | ], |
||
1034 | 'autoPlay' => [ |
||
1035 | 'priority' => 20, |
||
1036 | 'type' => 'checkbox', |
||
1037 | 'label' => __('Auto play', 'metaslider'), |
||
1038 | 'class' => 'option flex nivo responsive', |
||
1039 | 'checked' => 'true' === $this->slider->get_setting('autoPlay') ? 'checked' : '', |
||
1040 | 'helptext' => __('Transition between slides automatically', 'metaslider'), |
||
1041 | ], |
||
1042 | 'smartCrop' => [ |
||
1043 | 'priority' => 30, |
||
1044 | 'type' => 'checkbox', |
||
1045 | 'label' => __('Smart crop', 'metaslider'), |
||
1046 | 'class' => 'option coin flex nivo responsive', |
||
1047 | 'checked' => 'true' === $this->slider->get_setting('smartCrop') ? 'checked' : '', |
||
1048 | 'helptext' => __('Smart Crop ensures your responsive slides are cropped to a ratio that results in a consistent slideshow size', 'metaslider'), |
||
1049 | ], |
||
1050 | 'carouselMode' => [ |
||
1051 | 'priority' => 40, |
||
1052 | 'type' => 'checkbox', |
||
1053 | 'label' => __('Carousel mode', 'metaslider'), |
||
1054 | 'class' => 'option flex', |
||
1055 | 'checked' => 'true' === $this->slider->get_setting('carouselMode') ? 'checked' : '', |
||
1056 | 'helptext' => __('Display multiple slides at once. Slideshow output will be 100% wide.', 'metaslider'), |
||
1057 | ], |
||
1058 | 'random' => [ |
||
1059 | 'priority' => 50, |
||
1060 | 'type' => 'checkbox', |
||
1061 | 'label' => __('Random', 'metaslider'), |
||
1062 | 'class' => 'option coin flex nivo responsive', |
||
1063 | 'checked' => 'true' === $this->slider->get_setting('random') ? 'checked' : '', |
||
1064 | 'helptext' => __('Randomise the order of the slides', 'metaslider'), |
||
1065 | ], |
||
1066 | 'hoverPause' => [ |
||
1067 | 'priority' => 60, |
||
1068 | 'type' => 'checkbox', |
||
1069 | 'label' => __('Hover pause', 'metaslider'), |
||
1070 | 'class' => 'option coin flex nivo responsive', |
||
1071 | 'checked' => 'true' === $this->slider->get_setting('hoverPause') ? 'checked' : '', |
||
1072 | 'helptext' => __('Pause the slideshow when hovering over slider, then resume when no longer hovering.', 'metaslider'), |
||
1073 | ], |
||
1074 | 'reverse' => [ |
||
1075 | 'priority' => 70, |
||
1076 | 'type' => 'checkbox', |
||
1077 | 'label' => __('Reverse', 'metaslider'), |
||
1078 | 'class' => 'option flex', |
||
1079 | 'checked' => 'true' === $this->slider->get_setting('reverse') ? 'checked' : '', |
||
1080 | 'helptext' => __('Reverse the animation direction', 'metaslider'), |
||
1081 | ], |
||
1082 | 'delay' => [ |
||
1083 | 'priority' => 80, |
||
1084 | 'type' => 'number', |
||
1085 | 'size' => 3, |
||
1086 | 'min' => 500, |
||
1087 | 'max' => 10000, |
||
1088 | 'step' => 100, |
||
1089 | 'value' => $this->slider->get_setting('delay'), |
||
1090 | 'label' => __('Slide delay', 'metaslider'), |
||
1091 | 'class' => 'option coin flex responsive nivo', |
||
1092 | 'helptext' => __('How long to display each slide, in milliseconds', 'metaslider'), |
||
1093 | 'after' => __('ms', 'metaslider'), |
||
1094 | ], |
||
1095 | 'animationSpeed' => [ |
||
1096 | 'priority' => 90, |
||
1097 | 'type' => 'number', |
||
1098 | 'size' => 3, |
||
1099 | 'min' => 0, |
||
1100 | 'max' => 2000, |
||
1101 | 'step' => 100, |
||
1102 | 'value' => $this->slider->get_setting('animationSpeed'), |
||
1103 | 'label' => __('Animation speed', 'metaslider'), |
||
1104 | 'class' => 'option flex responsive nivo', |
||
1105 | 'helptext' => __('Set the speed of animations, in milliseconds', 'metaslider'), |
||
1106 | 'after' => __('ms', 'metaslider'), |
||
1107 | ], |
||
1108 | 'slices' => [ |
||
1109 | 'priority' => 100, |
||
1110 | 'type' => 'number', |
||
1111 | 'size' => 3, |
||
1112 | 'min' => 0, |
||
1113 | 'max' => 20, |
||
1114 | 'step' => 1, |
||
1115 | 'value' => $this->slider->get_setting('slices'), |
||
1116 | 'label' => __('Number of slices', 'metaslider'), |
||
1117 | 'class' => 'option nivo', |
||
1118 | 'helptext' => __('Number of slices', 'metaslider'), |
||
1119 | 'after' => __('ms', 'metaslider'), |
||
1120 | ], |
||
1121 | 'spw' => [ |
||
1122 | 'priority' => 110, |
||
1123 | 'type' => 'number', |
||
1124 | 'size' => 3, |
||
1125 | 'min' => 0, |
||
1126 | 'max' => 20, |
||
1127 | 'step' => 1, |
||
1128 | 'value' => $this->slider->get_setting('spw'), |
||
1129 | 'label' => __('Number of squares', 'metaslider') . ' (' . __('Width', 'metaslider') . ')', |
||
1130 | 'class' => 'option nivo', |
||
1131 | 'helptext' => __('Number of squares', 'metaslider'), |
||
1132 | 'after' => '', |
||
1133 | ], |
||
1134 | 'sph' => [ |
||
1135 | 'priority' => 120, |
||
1136 | 'type' => 'number', |
||
1137 | 'size' => 3, |
||
1138 | 'min' => 0, |
||
1139 | 'max' => 20, |
||
1140 | 'step' => 1, |
||
1141 | 'value' => $this->slider->get_setting('sph'), |
||
1142 | 'label' => __('Number of squares', 'metaslider') . ' (' . __('Height', 'metaslider') . ')', |
||
1143 | 'class' => 'option nivo', |
||
1144 | 'helptext' => __('Number of squares', 'metaslider'), |
||
1145 | 'after' => '', |
||
1146 | ], |
||
1147 | 'direction' => [ |
||
1148 | 'priority' => 130, |
||
1149 | 'type' => 'select', |
||
1150 | 'label' => __('Slide direction', 'metaslider'), |
||
1151 | 'class' => 'option flex', |
||
1152 | 'helptext' => __('Select the sliding direction', 'metaslider'), |
||
1153 | 'value' => $this->slider->get_setting('direction'), |
||
1154 | 'options' => [ |
||
1155 | 'horizontal' => ['label' => __('Horizontal', 'metaslider'), 'class' => ''], |
||
1156 | 'vertical' => ['label' => __('Vertical', 'metaslider'), 'class' => ''], |
||
1157 | ], |
||
1158 | ], |
||
1159 | 'easing' => [ |
||
1160 | 'priority' => 140, |
||
1161 | 'type' => 'select', |
||
1162 | 'label' => __('Easing', 'metaslider'), |
||
1163 | 'class' => 'option flex', |
||
1164 | 'helptext' => __('Animation easing effect', 'metaslider'), |
||
1165 | 'value' => $this->slider->get_setting('easing'), |
||
1166 | 'options' => $this->get_easing_options(), |
||
1167 | ], |
||
1168 | 'prevText' => [ |
||
1169 | 'priority' => 150, |
||
1170 | 'type' => 'text', |
||
1171 | 'label' => __('Previous text', 'metaslider'), |
||
1172 | 'class' => 'option coin flex responsive nivo', |
||
1173 | 'helptext' => __("Set the text for the 'previous' direction item", 'metaslider'), |
||
1174 | 'value' => 'false' === $this->slider->get_setting('prevText') ? '' : $this->slider->get_setting('prevText'), |
||
1175 | ], |
||
1176 | 'nextText' => [ |
||
1177 | 'priority' => 160, |
||
1178 | 'type' => 'text', |
||
1179 | 'label' => __('Next text', 'metaslider'), |
||
1180 | 'class' => 'option coin flex responsive nivo', |
||
1181 | 'helptext' => __("Set the text for the 'next' direction item", 'metaslider'), |
||
1182 | 'value' => 'false' === $this->slider->get_setting('nextText') ? '' : $this->slider->get_setting('nextText'), |
||
1183 | ], |
||
1184 | 'sDelay' => [ |
||
1185 | 'priority' => 170, |
||
1186 | 'type' => 'number', |
||
1187 | 'size' => 3, |
||
1188 | 'min' => 0, |
||
1189 | 'max' => 500, |
||
1190 | 'step' => 10, |
||
1191 | 'value' => $this->slider->get_setting('sDelay'), |
||
1192 | 'label' => __('Square delay', 'metaslider'), |
||
1193 | 'class' => 'option coin', |
||
1194 | 'helptext' => __('Delay between squares in ms', 'metaslider'), |
||
1195 | 'after' => __('ms', 'metaslider'), |
||
1196 | ], |
||
1197 | 'opacity' => [ |
||
1198 | 'priority' => 180, |
||
1199 | 'type' => 'number', |
||
1200 | 'size' => 3, |
||
1201 | 'min' => 0, |
||
1202 | 'max' => 1, |
||
1203 | 'step' => 0.1, |
||
1204 | 'value' => $this->slider->get_setting('opacity'), |
||
1205 | 'label' => __('Opacity', 'metaslider'), |
||
1206 | 'class' => 'option coin', |
||
1207 | 'helptext' => __('Opacity of title and navigation', 'metaslider'), |
||
1208 | 'after' => '', |
||
1209 | ], |
||
1210 | 'titleSpeed' => [ |
||
1211 | 'priority' => 190, |
||
1212 | 'type' => 'number', |
||
1213 | 'size' => 3, |
||
1214 | 'min' => 0, |
||
1215 | 'max' => 10000, |
||
1216 | 'step' => 100, |
||
1217 | 'value' => $this->slider->get_setting('titleSpeed'), |
||
1218 | 'label' => __('Caption speed', 'metaslider'), |
||
1219 | 'class' => 'option coin', |
||
1220 | 'helptext' => __('Set the fade in speed of the caption', 'metaslider'), |
||
1221 | 'after' => __('ms', 'metaslider'), |
||
1222 | ], |
||
1223 | 'developerOptions' => [ |
||
1224 | 'priority' => 195, |
||
1225 | 'type' => 'divider', |
||
1226 | 'class' => 'option coin flex responsive nivo', |
||
1227 | 'value' => __('Developer options', 'metaslider'), |
||
1228 | ], |
||
1229 | 'cssClass' => [ |
||
1230 | 'priority' => 200, |
||
1231 | 'type' => 'text', |
||
1232 | 'label' => __('CSS classes', 'metaslider'), |
||
1233 | 'class' => 'option coin flex responsive nivo', |
||
1234 | 'helptext' => __('Specify any custom CSS Classes you would like to be added to the slider wrapper', 'metaslider'), |
||
1235 | 'value' => 'false' === $this->slider->get_setting('cssClass') ? '' : $this->slider->get_setting('cssClass'), |
||
1236 | ], |
||
1237 | 'printCss' => [ |
||
1238 | 'priority' => 210, |
||
1239 | 'type' => 'checkbox', |
||
1240 | 'label' => __('Print CSS', 'metaslider'), |
||
1241 | 'class' => 'option coin flex responsive nivo useWithCaution', |
||
1242 | 'checked' => 'true' === $this->slider->get_setting('printCss') ? 'checked' : '', |
||
1243 | 'helptext' => __('Uncheck this is you would like to include your own CSS', 'metaslider'), |
||
1244 | ], |
||
1245 | 'printJs' => [ |
||
1246 | 'priority' => 220, |
||
1247 | 'type' => 'checkbox', |
||
1248 | 'label' => __('Print JS', 'metaslider'), |
||
1249 | 'class' => 'option coin flex responsive nivo useWithCaution', |
||
1250 | 'checked' => 'true' === $this->slider->get_setting('printJs') ? 'checked' : '', |
||
1251 | 'helptext' => __('Uncheck this is you would like to include your own Javascript', 'metaslider'), |
||
1252 | ], |
||
1253 | 'noConflict' => [ |
||
1254 | 'priority' => 230, |
||
1255 | 'type' => 'checkbox', |
||
1256 | 'label' => __('No conflict mode', 'metaslider'), |
||
1257 | 'class' => 'option flex', |
||
1258 | 'checked' => 'true' === $this->slider->get_setting('noConflict') ? 'checked' : '', |
||
1259 | 'helptext' => __('Delay adding the flexslider class to the slideshow', 'metaslider'), |
||
1260 | ], |
||
1261 | ]; |
||
1262 | |||
1263 | $aFields = apply_filters('metaslider_advanced_settings', $aFields, $this->slider); |
||
1264 | |||
1265 | echo $this->build_settings_rows($aFields); ?> |
||
1266 | </tbody> |
||
1267 | </table> |
||
1268 | </div> |
||
1269 | </div> |
||
1270 | |||
1271 | <div class="postbox shortcode ms-toggle"> |
||
1272 | <div class="handlediv" title="Click to toggle"><br></div> |
||
1273 | <h3 class="hndle"><span><?php _e('Usage', 'metaslider') ?></span></h3> |
||
1274 | <div class="inside"> |
||
1275 | <ul class='tabs'> |
||
1276 | <li rel='tab-1' class='selected'><?php _e('Shortcode', 'metaslider') ?></li> |
||
1277 | <li rel='tab-2'><?php _e('Template Include', 'metaslider') ?></li> |
||
1278 | </ul> |
||
1279 | <div class='tabs-content'> |
||
1280 | <div class='tab tab-1'> |
||
1281 | <p><?php _e('Copy & paste the shortcode directly into any WordPress post or page.', 'metaslider'); ?></p> |
||
1282 | <input readonly='readonly' type='text' value='[metaslider id=<?php echo $this->slider->id ?>]'></div> |
||
1283 | <div class='tab tab-2' style='display: none'> |
||
1284 | <p><?php _e('Copy & paste this code into a template file to include the slideshow within your theme.', 'metaslider'); ?></p> |
||
1285 | <textarea readonly='readonly'><?php echo do_shortcode("[metaslider id=<?php echo $this->slider->id ?>]"); ?></textarea></div> |
||
1286 | </div> |
||
1287 | </div> |
||
1288 | </div> |
||
1289 | |||
1290 | <div class="postbox social"> |
||
1291 | <div class="inside"> |
||
1292 | <ul class='info'> |
||
1293 | <li style='width: 33%;'> |
||
1294 | <a href="https://twitter.com/share" class="twitter-share-button" data-url="http://www.metaslider.com" data-text="Check out Meta Slider, an easy to use slideshow plugin for WordPress" data-hashtags="metaslider, wordpress, slideshow">Tweet</a> |
||
1295 | <script>!function (d, s, id) { |
||
1296 | var js, fjs = d.getElementsByTagName(s)[0], p = /^http:/.test(d.location) ? 'http' : 'https'; |
||
1297 | if (!d.getElementById(id)) { |
||
1298 | js = d.createElement(s); |
||
1299 | js.id = id; |
||
1300 | js.src = p + '://platform.twitter.com/widgets.js'; |
||
1301 | fjs.parentNode.insertBefore(js, fjs); |
||
1302 | } |
||
1303 | }(document, 'script', 'twitter-wjs');</script> |
||
1304 | </li> |
||
1305 | <li style='width: 34%;'> |
||
1306 | <div class="g-plusone" data-size="medium" data-href="http://www.metaslider.com"></div> |
||
1307 | <script type="text/javascript"> |
||
1308 | (function () { |
||
1309 | var po = document.createElement('script'); |
||
1310 | po.type = 'text/javascript'; |
||
1311 | po.async = true; |
||
1312 | po.src = 'https://apis.google.com/js/plusone.js'; |
||
1313 | var s = document.getElementsByTagName('script')[0]; |
||
1314 | s.parentNode.insertBefore(po, s); |
||
1315 | })(); |
||
1316 | </script> |
||
1317 | </li> |
||
1318 | <li style='width: 33%;'> |
||
1319 | <iframe style='border:none; overflow:hidden; width:80px; height:21px;' |
||
1320 | src="//www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.metaslider.com&send=false&layout=button_count&width=90&show_faces=false&font&colorscheme=light&action=like&height=21&appId=156668027835524" |
||
1321 | scrolling="no" frameborder="0" allowTransparency="true"></iframe> |
||
1322 | </li> |
||
1323 | </ul> |
||
1324 | </div> |
||
1325 | </div> |
||
1326 | <a class='delete-slider alignright button-secondary confirm' href='<?php echo wp_nonce_url("?page=metaslider&delete={$this->slider->id}", 'metaslider_delete_slider'); ?>'><?php _e('Delete Slider', 'metaslider') ?></a> |
||
1327 | </div> |
||
1328 | </div> |
||
1329 | </div> |
||
1330 | </div> |
||
1331 | </div> |
||
1332 | </form> |
||
1333 | </div> |
||
1334 | <?php |
||
1335 | } |
||
1336 | |||
1337 | /** |
||
1338 | * Append the 'Add Slider' button to selected admin pages |
||
1339 | * @param $context |
||
1340 | * @return string |
||
1341 | */ |
||
1342 | public function insert_metaslider_button($context) |
||
1357 | } |
||
1358 | |||
1359 | /** |
||
1360 | * Append the 'Choose Meta Slider' thickbox content to the bottom of selected admin pages |
||
1361 | */ |
||
1362 | public function admin_footer() |
||
1396 | </div> |
||
1397 | <?php |
||
1398 | } |
||
1399 | } |
||
1400 | } |
||
1401 | |||
1402 | $metaslider = new MetaSliderPlugin(); |
||
1403 | |||
1405 |