MetaSliderPlugin::get_easing_options()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 46
Code Lines 39

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 39
nc 2
nop 0
dl 0
loc 46
rs 9.296
c 0
b 0
f 0
1
<?php
2
/*
3
 * Plugin Name: Meta Slider
4
 * Plugin URI: http://www.metaslider.com
5
 * Description: Easy to use slideshow plugin. Create SEO optimised responsive slideshows with Nivo Slider, Flex Slider, Coin Slider and Responsive Slides.
6
 * Version: 2.6.3
7
 * Author: Matcha Labs
8
 * Author URI: http://www.matchalabs.com
9
 * License: GPLv2 or later
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 */
16
17
// disable direct access
18
if (!defined('ABSPATH')) {
19
    exit;
20
}
21
22
define('METASLIDER_VERSION', '2.6.3');
23
define('METASLIDER_BASE_URL', plugins_url('ml-slider') . '/'); //plugin_dir_url(__FILE__)
0 ignored issues
show
Bug introduced by
The function plugins_url was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

23
define('METASLIDER_BASE_URL', /** @scrutinizer ignore-call */ plugins_url('ml-slider') . '/'); //plugin_dir_url(__FILE__)
Loading history...
24
define('METASLIDER_ASSETS_URL', METASLIDER_BASE_URL . 'assets/');
25
define('METASLIDER_BASE_DIR_LONG', __DIR__);
26
define('METASLIDER_INC_DIR', METASLIDER_BASE_DIR_LONG . '/inc/');
27
28
// include slider classes
29
require_once METASLIDER_INC_DIR . 'slider/metaslider.class.php';
30
require_once METASLIDER_INC_DIR . 'slider/metaslider.coin.class.php';
31
require_once METASLIDER_INC_DIR . 'slider/metaslider.flex.class.php';
32
require_once METASLIDER_INC_DIR . 'slider/metaslider.nivo.class.php';
33
require_once METASLIDER_INC_DIR . 'slider/metaslider.responsive.class.php';
34
35
// include slide classes
36
require_once METASLIDER_INC_DIR . 'slide/metaslide.class.php';
37
require_once METASLIDER_INC_DIR . 'slide/metaslide.image.class.php';
38
39
// include image helper
40
require_once METASLIDER_INC_DIR . 'metaslider.imagehelper.class.php';
41
42
// include widget
43
require_once METASLIDER_INC_DIR . 'metaslider.widget.class.php';
44
45
// include system check
46
require_once METASLIDER_INC_DIR . 'metaslider.systemcheck.class.php';
47
48
/**
49
 * Register the plugin.
50
 *
51
 * Display the administration panel, insert JavaScript etc.
52
 */
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);
0 ignored issues
show
Bug introduced by
The function add_action was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

64
        /** @scrutinizer ignore-call */ 
65
        add_action('admin_menu', [$this, 'register_admin_menu'], 9553);
Loading history...
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']);
0 ignored issues
show
Bug introduced by
The function add_shortcode was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

72
        /** @scrutinizer ignore-call */ 
73
        add_shortcode('metaslider', [$this, 'register_shortcode']);
Loading history...
73
        add_shortcode('ml-slider', [$this, 'register_shortcode']); // backwards compatibility
74
75
        add_filter('media_upload_tabs', [$this, 'custom_media_upload_tab_name'], 998);
0 ignored issues
show
Bug introduced by
The function add_filter was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

75
        /** @scrutinizer ignore-call */ 
76
        add_filter('media_upload_tabs', [$this, 'custom_media_upload_tab_name'], 998);
Loading history...
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__);
0 ignored issues
show
Bug introduced by
The function plugin_basename was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

86
        $plugin = /** @scrutinizer ignore-call */ plugin_basename(__FILE__);
Loading history...
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()
96
    {
97
        $systemCheck = new MetaSliderSystemCheck();
98
        $systemCheck->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>';
0 ignored issues
show
Bug introduced by
The function __ was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

109
            $links[] = '<a href="http://www.metaslider.com/upgrade" target="_blank">' . /** @scrutinizer ignore-call */ __('Go Pro', 'metaslider') . '</a>';
Loading history...
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']);
0 ignored issues
show
Bug introduced by
The function wp_iframe was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

121
            return /** @scrutinizer ignore-call */ wp_iframe([$this, 'iframe']);
Loading history...
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);
0 ignored issues
show
Bug introduced by
The function wp_enqueue_style was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

130
        /** @scrutinizer ignore-call */ 
131
        wp_enqueue_style('metaslider-admin-styles', METASLIDER_ASSETS_URL . 'metaslider/admin.css', false, METASLIDER_VERSION);
Loading history...
131
        wp_enqueue_script('google-font-api', 'http://fonts.googleapis.com/css?family=PT+Sans:400,700');
0 ignored issues
show
Bug introduced by
The function wp_enqueue_script was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

131
        /** @scrutinizer ignore-call */ 
132
        wp_enqueue_script('google-font-api', 'http://fonts.googleapis.com/css?family=PT+Sans:400,700');
Loading history...
132
133
        $link = apply_filters('metaslider_hoplink', 'http://www.metaslider.com/upgrade/');
0 ignored issues
show
Bug introduced by
The function apply_filters was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

133
        $link = /** @scrutinizer ignore-call */ apply_filters('metaslider_hoplink', 'http://www.metaslider.com/upgrade/');
Loading history...
134
        $link .= '?utm_source=lite&amp;utm_medium=more-slide-types&amp;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();
0 ignored issues
show
Unused Code introduced by
The assignment to $image is dead and can be removed.
Loading history...
152
    }
153
154
    /**
155
     * Initialise translations
156
     */
157
    public function load_plugin_textdomain()
158
    {
159
        load_plugin_textdomain('metaslider', false, \dirname(plugin_basename(__FILE__)) . '/languages/');
0 ignored issues
show
Bug introduced by
The function plugin_basename was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

159
        load_plugin_textdomain('metaslider', false, \dirname(/** @scrutinizer ignore-call */ plugin_basename(__FILE__)) . '/languages/');
Loading history...
Bug introduced by
The function load_plugin_textdomain was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

159
        /** @scrutinizer ignore-call */ 
160
        load_plugin_textdomain('metaslider', false, \dirname(plugin_basename(__FILE__)) . '/languages/');
Loading history...
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)
168
    {
169
        //update strings
170
        if (\Xmf\Request::hasVar('page', 'GET') && 'metaslider' == $_GET['page']) {
171
            $strings['insertMediaTitle'] = __('Image', 'metaslider');
0 ignored issues
show
Bug introduced by
The function __ was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

171
            $strings['insertMediaTitle'] = /** @scrutinizer ignore-call */ __('Image', 'metaslider');
Loading history...
172
            $strings['insertIntoPost']   = __('Add to slider', 'metaslider');
173
            // remove options
174
            if (isset($strings['createGalleryTitle'])) {
175
                unset($strings['createGalleryTitle']);
176
            }
177
            if (isset($strings['insertFromUrlTitle'])) {
178
                unset($strings['insertFromUrlTitle']);
179
            }
180
        }
181
182
        return $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'),
0 ignored issues
show
Bug introduced by
The function __ was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

202
                    'post_feed' => /** @scrutinizer ignore-call */ __('Post Feed', 'metaslider'),
Loading history...
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);
0 ignored issues
show
Bug introduced by
The function wp_enqueue_style was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

224
        /** @scrutinizer ignore-call */ 
225
        wp_enqueue_style('metaslider-admin-styles', METASLIDER_ASSETS_URL . 'metaslider/admin.css', false, METASLIDER_VERSION);
Loading history...
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');
0 ignored issues
show
Bug introduced by
The function do_action was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

228
        /** @scrutinizer ignore-call */ 
229
        do_action('metaslider_register_admin_styles');
Loading history...
229
    }
230
231
    /**
232
     * Register admin JavaScript
233
     */
234
    public function register_admin_scripts()
235
    {
236
        if (wp_script_is('wp-auth-check', 'queue')) {
0 ignored issues
show
Bug introduced by
The function wp_script_is was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

236
        if (/** @scrutinizer ignore-call */ wp_script_is('wp-auth-check', 'queue')) {
Loading history...
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');
0 ignored issues
show
Bug introduced by
The function wp_deregister_script was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

242
            /** @scrutinizer ignore-call */ 
243
            wp_deregister_script('wp-auth-check');
Loading history...
243
            wp_register_script('wp-auth-check', null); // fix php notice
0 ignored issues
show
Bug introduced by
The function wp_register_script was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

243
            /** @scrutinizer ignore-call */ 
244
            wp_register_script('wp-auth-check', null); // fix php notice
Loading history...
244
        }
245
246
        // media library dependencies
247
        wp_enqueue_media();
0 ignored issues
show
Bug introduced by
The function wp_enqueue_media was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

247
        /** @scrutinizer ignore-call */ 
248
        wp_enqueue_media();
Loading history...
248
249
        // plugin dependencies
250
        wp_enqueue_script('jquery-ui-core', ['jquery']);
0 ignored issues
show
Bug introduced by
The function wp_enqueue_script was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

250
        /** @scrutinizer ignore-call */ 
251
        wp_enqueue_script('jquery-ui-core', ['jquery']);
Loading history...
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', [
0 ignored issues
show
Bug introduced by
The function wp_localize_script was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

258
        /** @scrutinizer ignore-call */ 
259
        wp_localize_script('metaslider-admin-addslide', 'metaslider_image', [
Loading history...
259
            'addslide_nonce' => wp_create_nonce('metaslider_addslide'),
0 ignored issues
show
Bug introduced by
The function wp_create_nonce was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

259
            'addslide_nonce' => /** @scrutinizer ignore-call */ wp_create_nonce('metaslider_addslide'),
Loading history...
260
        ]);
261
262
        // localise the JS
263
        wp_localize_script('metaslider-admin-script', 'metaslider', [
264
            'url'            => __('URL', 'metaslider'),
0 ignored issues
show
Bug introduced by
The function __ was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

264
            'url'            => /** @scrutinizer ignore-call */ __('URL', 'metaslider'),
Loading history...
265
            'caption'        => __('Caption', 'metaslider'),
266
            'new_window'     => __('New Window', 'metaslider'),
267
            'confirm'        => __('Are you sure?', 'metaslider'),
268
            'ajaxurl'        => admin_url('admin-ajax.php'),
0 ignored issues
show
Bug introduced by
The function admin_url was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

268
            'ajaxurl'        => /** @scrutinizer ignore-call */ admin_url('admin-ajax.php'),
Loading history...
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');
0 ignored issues
show
Bug introduced by
The function do_action was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

274
        /** @scrutinizer ignore-call */ 
275
        do_action('metaslider_register_admin_scripts');
Loading history...
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');
0 ignored issues
show
Bug introduced by
The function apply_filters was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

282
        $title = /** @scrutinizer ignore-call */ apply_filters('metaslider_menu_title', 'Meta Slider');
Loading history...
283
284
        $page = add_menu_page($title, $title, 'edit_others_posts', 'metaslider', [
0 ignored issues
show
Bug introduced by
The function add_menu_page was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

284
        $page = /** @scrutinizer ignore-call */ add_menu_page($title, $title, 'edit_others_posts', 'metaslider', [
Loading history...
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']);
0 ignored issues
show
Bug introduced by
The function add_action was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

290
        /** @scrutinizer ignore-call */ 
291
        add_action('admin_print_scripts-' . $page, [$this, 'register_admin_scripts']);
Loading history...
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/');
0 ignored issues
show
Bug introduced by
The function apply_filters was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

301
            $link = /** @scrutinizer ignore-call */ apply_filters('metaslider_hoplink', 'http://www.metaslider.com/upgrade/');
Loading history...
302
303
            $link .= '?utm_source=lite&amp;utm_medium=nag&amp;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>';
0 ignored issues
show
Bug introduced by
The function __ was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

305
            $goPro = "<div style='display: none;' id='screen-options-link-wrap'><a target='_blank' class='show-settings' href='{$link}'>Meta Slider v" . METASLIDER_VERSION . ' - ' . /** @scrutinizer ignore-call */ __('Upgrade to Pro $19', 'metaslider') . '</a></div>';
Loading history...
306
307
            echo $goPro;
308
        }
309
    }
310
311
    public function help_tab()
312
    {
313
        $screen = get_current_screen();
0 ignored issues
show
Bug introduced by
The function get_current_screen was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

313
        $screen = /** @scrutinizer ignore-call */ get_current_screen();
Loading history...
314
315
        // documentation tab
316
        $screen->add_help_tab([
317
                                  'id'      => 'documentation',
318
                                  'title'   => __('Documentation'),
0 ignored issues
show
Bug introduced by
The function __ was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

318
                                  'title'   => /** @scrutinizer ignore-call */ __('Documentation'),
Loading history...
319
                                  'content' => "<p><a href='http://www.metaslider.com/documentation/' target='blank'>Meta Slider Documentation</a></p>",
320
                              ]);
321
    }
322
323
    /**
324
     * Register ML Slider post type
325
     */
326
    public function register_post_type()
327
    {
328
        register_post_type('ml-slider', [
0 ignored issues
show
Bug introduced by
The function register_post_type was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

328
        /** @scrutinizer ignore-call */ 
329
        register_post_type('ml-slider', [
Loading history...
329
            'query_var' => false,
330
            'rewrite'   => false,
331
            'public'    => true,
332
            'show_ui'   => false,
333
            'labels'    => [
334
                'name' => 'Meta Slider',
335
            ],
336
        ]);
337
    }
338
339
    /**
340
     * Register taxonomy to store slider => slides relationship
341
     */
342
    public function register_taxonomy()
343
    {
344
        register_taxonomy('ml-slider', 'attachment', [
0 ignored issues
show
Bug introduced by
The function register_taxonomy was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

344
        /** @scrutinizer ignore-call */ 
345
        register_taxonomy('ml-slider', 'attachment', [
Loading history...
345
            'hierarchical' => true,
346
            'public'       => false,
347
            'query_var'    => false,
348
            'rewrite'      => false,
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;
0 ignored issues
show
Bug Best Practice introduced by
The expression return false returns the type false which is incompatible with the documented return type string.
Loading history...
362
        }
363
364
        // we have an ID to work with
365
        $slider = get_post($atts['id']);
0 ignored issues
show
Bug introduced by
The function get_post was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

365
        $slider = /** @scrutinizer ignore-call */ get_post($atts['id']);
Loading history...
366
367
        // check the slider is published
368
        if ('publish' !== $slider->post_status) {
369
            return false;
0 ignored issues
show
Bug Best Practice introduced by
The expression return false returns the type false which is incompatible with the documented return type string.
Loading history...
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);
0 ignored issues
show
Bug introduced by
The function get_post_meta was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

388
        $settings = array_merge(/** @scrutinizer ignore-call */ get_post_meta($id, 'ml-slider_settings', true), $shortcode_settings);
Loading history...
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)
405
    {
406
        switch ($type) {
407
            case ('coin'):
408
409
                return new MetaCoinSlider($id, $shortcode_settings);
0 ignored issues
show
Bug Best Practice introduced by
The expression return new MetaCoinSlide...d, $shortcode_settings) returns the type MetaCoinSlider which is incompatible with the documented return type MetaFlexSlider|MetaNivoSlider|MetaResponsiveSlider.
Loading history...
410
            case ('flex'):
411
412
                return new MetaFlexSlider($id, $shortcode_settings);
413
            case ('nivo'):
414
415
                return new MetaNivoSlider($id, $shortcode_settings);
416
            case ('responsive'):
417
418
                return new MetaResponsiveSlider($id, $shortcode_settings);
419
            default:
420
421
                return new MetaFlexSlider($id, $shortcode_settings);
422
        }
423
    }
424
425
    /**
426
     * Handle slide uploads/changes.
427
     */
428
    public function admin_process()
429
    {
430
        // this function should only ever be called from the Meta Slider admin page.
431
        if (!is_admin()) {
0 ignored issues
show
Bug introduced by
The function is_admin was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

431
        if (!/** @scrutinizer ignore-call */ is_admin()) {
Loading history...
432
            return;
433
        }
434
435
        // default to the latest slider
436
        $slider_id = $this->find_slider('modified', 'DESC');
437
438
        // delete a slider
439
        if (\Xmf\Request::hasVar('delete', 'GET')) {
440
            $slider_id = $this->delete_slider((int)$_GET['delete']);
441
        }
442
443
        // create a new slider
444
        if (\Xmf\Request::hasVar('add', 'GET')) {
445
            $slider_id = $this->add_slider();
446
        }
447
448
        // load a slider by ID
449
        if (\Xmf\Request::hasVar('id', 'REQUEST')) {
450
            $temp_id = (int)$_REQUEST['id'];
451
452
            // check valid post ID
453
            if (get_post($temp_id)) {
0 ignored issues
show
Bug introduced by
The function get_post was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

453
            if (/** @scrutinizer ignore-call */ get_post($temp_id)) {
Loading history...
454
                $slider_id = $temp_id;
455
            }
456
        }
457
458
        if ($slider_id > 0) {
459
            $this->set_slider($slider_id);
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');
0 ignored issues
show
Bug introduced by
The function check_admin_referer was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

469
        /** @scrutinizer ignore-call */ 
470
        check_admin_referer('metaslider_add_slider');
Loading history...
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);
0 ignored issues
show
Bug introduced by
The function get_post_meta was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

476
            $defaults = /** @scrutinizer ignore-call */ get_post_meta($last_modified, 'ml-slider_settings', true);
Loading history...
477
        }
478
479
        // use the default settings if we can't find anything more suitable.
480
        if (empty($defaults)) {
481
            $slider   = new MetaSlider($id, []);
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $id seems to be never defined.
Loading history...
482
            $defaults = $slider->get_default_parameters();
483
        }
484
485
        // insert the post
486
        $id = wp_insert_post([
0 ignored issues
show
Bug introduced by
The function wp_insert_post was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

486
        $id = /** @scrutinizer ignore-call */ wp_insert_post([
Loading history...
487
                                 'post_title'  => __('New Slider', 'metaslider'),
0 ignored issues
show
Bug introduced by
The function __ was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

487
                                 'post_title'  => /** @scrutinizer ignore-call */ __('New Slider', 'metaslider'),
Loading history...
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);
0 ignored issues
show
Bug introduced by
The function add_post_meta was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

493
        /** @scrutinizer ignore-call */ 
494
        add_post_meta($id, 'ml-slider_settings', $defaults, true);
Loading history...
494
495
        // create the taxonomy term, the term is the ID of the slider itself
496
        wp_insert_term($id, 'ml-slider');
0 ignored issues
show
Bug introduced by
The function wp_insert_term was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

496
        /** @scrutinizer ignore-call */ 
497
        wp_insert_term($id, 'ml-slider');
Loading history...
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');
0 ignored issues
show
Bug introduced by
The function check_admin_referer was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

510
        /** @scrutinizer ignore-call */ 
511
        check_admin_referer('metaslider_delete_slider');
Loading history...
511
512
        // send the post to trash
513
        wp_update_post([
0 ignored issues
show
Bug introduced by
The function wp_update_post was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

513
        /** @scrutinizer ignore-call */ 
514
        wp_update_post([
Loading history...
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);
0 ignored issues
show
Bug introduced by
The type WP_Query was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
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();
0 ignored issues
show
Bug introduced by
The function wp_reset_query was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

548
        /** @scrutinizer ignore-call */ 
549
        wp_reset_query();
Loading history...
549
550
        return false;
0 ignored issues
show
Bug Best Practice introduced by
The expression return false returns the type false which is incompatible with the documented return type integer.
Loading history...
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);
0 ignored issues
show
Bug introduced by
The function apply_filters was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

574
        $args = /** @scrutinizer ignore-call */ apply_filters('metaslider_all_meta_sliders_args', $args);
Loading history...
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(),
0 ignored issues
show
Bug introduced by
The function get_the_title was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

584
                'title'  => /** @scrutinizer ignore-call */ get_the_title(),
Loading history...
585
                'id'     => $the_query->post->ID,
586
            ];
587
        }
588
589
        wp_reset_query();
0 ignored issues
show
Bug introduced by
The function wp_reset_query was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

589
        /** @scrutinizer ignore-call */ 
590
        wp_reset_query();
Loading history...
590
591
        return $sliders;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $sliders returns the type false which is incompatible with the documented return type array.
Loading history...
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);
0 ignored issues
show
Bug introduced by
The function checked was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

635
                    $checked        = /** @scrutinizer ignore-call */ checked($k, $row['value'], false);
Loading history...
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);
0 ignored issues
show
Bug introduced by
The function apply_filters was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

642
                $return .= /** @scrutinizer ignore-call */ apply_filters('metaslider_navigation_options', $navigation_row, $this->slider);
Loading history...
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);
0 ignored issues
show
Bug introduced by
The function selected was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

687
                    $selected = /** @scrutinizer ignore-call */ selected($k, $row['value'], false);
Loading history...
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()
728
    {
729
        $options = [
730
            'linear',
731
            'swing',
732
            'jswing',
733
            'easeInQuad',
734
            'easeOutQuad',
735
            'easeInOutQuad',
736
            'easeInCubic',
737
            'easeOutCubic',
738
            'easeInOutCubic',
739
            'easeInQuart',
740
            'easeOutQuart',
741
            'easeInOutQuart',
742
            'easeInQuint',
743
            'easeOutQuint',
744
            'easeInOutQuint',
745
            'easeInSine',
746
            'easeOutSine',
747
            'easeInOutSine',
748
            'easeInExpo',
749
            'easeOutExpo',
750
            'easeInOutExpo',
751
            'easeInCirc',
752
            'easeOutCirc',
753
            'easeInOutCirc',
754
            'easeInElastic',
755
            'easeOutElastic',
756
            'easeInOutElastic',
757
            'easeInBack',
758
            'easeOutBack',
759
            'easeInOutBack',
760
            'easeInBounce',
761
            'easeOutBounce',
762
            'easeInOutBounce',
763
        ];
764
765
        foreach ($options as $option) {
766
            $return[$option] = [
767
                'label' => ucfirst(preg_replace('/(\w+)([A-Z])/U', '\\1 \\2', $option)),
768
                'class' => '',
769
            ];
770
        }
771
772
        return $return;
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $return seems to be defined by a foreach iteration on line 765. Are you sure the iterator is never empty, otherwise this variable is not defined?
Loading history...
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); ?>
0 ignored issues
show
Bug introduced by
The function apply_filters was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

783
        $max_tabs = /** @scrutinizer ignore-call */ apply_filters('metaslider_max_tabs', 0); ?>
Loading history...
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&amp;id=<?php echo $this->slider->id ?>" method="post">
792
                <?php
793
                if ($this->slider) {
794
                    wp_nonce_field('metaslider_save_' . $this->slider->id);
0 ignored issues
show
Bug introduced by
The function wp_nonce_field was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

794
                    /** @scrutinizer ignore-call */ 
795
                    wp_nonce_field('metaslider_save_' . $this->slider->id);
Loading history...
795
                }
796
797
                $title   = '';
798
                $add_url = wp_nonce_url('?page=metaslider&amp;add=true', 'metaslider_add_slider');
0 ignored issues
show
Bug introduced by
The function wp_nonce_url was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

798
                $add_url = /** @scrutinizer ignore-call */ wp_nonce_url('?page=metaslider&amp;add=true', 'metaslider_add_slider');
Loading history...
799
800
                $tabs = $this->all_meta_sliders();
801
                if ($tabs) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $tabs of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
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>';
0 ignored issues
show
Bug introduced by
The function __ was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

804
                            echo "<div id='message' class='updated'><p>" . /** @scrutinizer ignore-call */ __("New slideshow created. Click 'Add Slide' to get started!", 'metaslider') . '</p></div>';
Loading history...
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&amp;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&amp;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>
0 ignored issues
show
Bug introduced by
The function _e was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

854
                                            <h3><?php /** @scrutinizer ignore-call */ _e('Slides', 'metaslider') ?></h3>
Loading history...
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'>&lt;?php &#13;&#10;    echo do_shortcode("[metaslider id=<?php echo $this->slider->id ?>]"); &#13;&#10;?></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&amp;send=false&amp;layout=button_count&amp;width=90&amp;show_faces=false&amp;font&amp;colorscheme=light&amp;action=like&amp;height=21&amp;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&amp;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)
1343
    {
1344
        global $pagenow;
1345
1346
        if (in_array($pagenow, ['post.php', 'page.php', 'post-new.php', 'post-edit.php'])) {
1347
            $context .= '<a href="#TB_inline?&inlineId=choose-meta-slider" class="thickbox button" title="'
1348
                        . __('Select slideshow to insert into post', 'metaslider')
0 ignored issues
show
Bug introduced by
The function __ was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

1348
                        . /** @scrutinizer ignore-call */ __('Select slideshow to insert into post', 'metaslider')
Loading history...
1349
                        . '"><span class="wp-media-buttons-icon" style="background: url('
1350
                        . METASLIDER_ASSETS_URL
1351
                        . '/metaslider/matchalabs.png); background-repeat: no-repeat; background-position: left bottom;"></span> '
1352
                        . __('Add slider', 'metaslider')
1353
                        . '</a>';
1354
        }
1355
1356
        return $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()
1363
    {
1364
        global $pagenow;
1365
1366
        // Only run in post/page creation and edit screens
1367
        if (in_array($pagenow, ['post.php', 'page.php', 'post-new.php', 'post-edit.php'])) {
1368
            $sliders = $this->all_meta_sliders('title'); ?>
1369
1370
            <script type="text/javascript">
1371
                jQuery(document).ready(function () {
1372
                    jQuery('#insertMetaSlider').on('click', function () {
1373
                        var id = jQuery('#metaslider-select option:selected').val();
1374
                        window.send_to_editor('[metaslider id="' + id + '"]');
1375
                        tb_remove();
1376
                    })
1377
                });
1378
            </script>
1379
1380
            <div id="choose-meta-slider" style="display: none;">
1381
                <div class="wrap">
1382
                    <?php
1383
                    if (count($sliders)) {
1384
                        echo "<h3 style='margin-bottom: 20px;'>" . __('Insert Meta Slider', 'metaslider') . '</h3>';
0 ignored issues
show
Bug introduced by
The function __ was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

1384
                        echo "<h3 style='margin-bottom: 20px;'>" . /** @scrutinizer ignore-call */ __('Insert Meta Slider', 'metaslider') . '</h3>';
Loading history...
1385
                        echo "<select id='metaslider-select'>";
1386
                        echo '<option disabled=disabled>' . __('Choose slideshow', 'metaslider') . '</option>';
1387
                        foreach ($sliders as $slider) {
1388
                            echo "<option value='{$slider['id']}'>{$slider['title']}</option>";
1389
                        }
1390
                        echo '</select>';
1391
                        echo "<button class='button primary' id='insertMetaSlider'>Insert Slideshow</button>";
1392
                    } else {
1393
                        _e('No slideshows found', 'metaslider');
0 ignored issues
show
Bug introduced by
The function _e was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

1393
                        /** @scrutinizer ignore-call */ 
1394
                        _e('No slideshows found', 'metaslider');
Loading history...
1394
                    } ?>
1395
                </div>
1396
            </div>
1397
            <?php
1398
        }
1399
    }
1400
}
1401
1402
$metaslider = new MetaSliderPlugin();
1403
1404
?>
1405