PluginProbe
Boxzilla – WordPress Popup Builder / 3.4.0
Boxzilla – WordPress Popup Builder v3.4.0
3.4.11 3.4.10 3.4.9 3.4.3 3.4.4 3.4.5 3.4.6 3.4.7 3.4.8 trunk 3.0 3.0.1 3.0.2 3.0.3 3.1 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.17 3.1.18 All 72 releases
← All changes | src/admin/class-admin.php +671 -687 3.4.53.4.0 View file →
@@ -7,821 +7,805 @@
7 7 use Boxzilla\Boxzilla;
8 8 use WP_Post;
9 9 use WP_Screen;
10 10
11 -class Admin
12 -{
13 - /**
14 - * @var Plugin $plugin
15 - */
16 - private $plugin;
11 +class Admin {
17 12
18 - /**
19 - * @var Boxzilla
20 - */
21 - protected $boxzilla;
22 13
23 - /**
24 - * @var ReviewNotice
25 - */
26 - protected $review_notice;
14 + /**
15 + * @var Plugin $plugin
16 + */
17 + private $plugin;
27 18
28 - /**
29 - * @param Plugin $plugin
30 - * @param Boxzilla $boxzilla
31 - */
32 - public function __construct(Plugin $plugin, Boxzilla $boxzilla)
33 - {
34 - $this->plugin = $plugin;
35 - $this->boxzilla = $boxzilla;
36 - $this->review_notice = new ReviewNotice();
37 - }
19 + /**
20 + * @var Boxzilla
21 + */
22 + protected $boxzilla;
38 23
39 - /**
40 - * Initialise the all admin related stuff
41 - */
42 - public function init()
43 - {
44 - $this->add_hooks();
45 - $this->run_migrations();
46 - $this->review_notice->init();
47 - }
24 + /**
25 + * @var ReviewNotice
26 + */
27 + protected $review_notice;
48 28
49 - /**
50 - * Add necessary hooks
51 - */
52 - protected function add_hooks()
53 - {
54 - add_action('admin_init', [ $this, 'lazy_add_hooks' ]);
55 - add_action('admin_init', [ $this, 'register' ]);
56 - add_action('init', [ $this, 'listen_for_actions' ]);
57 - add_action('admin_menu', [ $this, 'menu' ]);
58 - add_action('admin_notices', [ $this, 'notices' ]);
59 - add_action('save_post_boxzilla-box', [ $this, 'save_box_options' ], 20, 2);
60 - add_action('trashed_post', [ $this, 'flush_rules' ]);
61 - add_action('untrashed_post', [ $this, 'flush_rules' ]);
62 - add_filter('bulk_actions-edit-boxzilla-box', [ $this, 'bulk_action_add' ]);
63 - add_filter('handle_bulk_actions-edit-boxzilla-box', [ $this, 'bulk_action_handle' ], 10, 3);
64 - }
29 + /**
30 + * @param Plugin $plugin
31 + * @param Boxzilla $boxzilla
32 + */
33 + public function __construct( Plugin $plugin, Boxzilla $boxzilla ) {
34 + $this->plugin = $plugin;
35 + $this->boxzilla = $boxzilla;
36 + $this->review_notice = new ReviewNotice();
37 + }
65 38
66 - /**
67 - * Listen for admin actions.
68 - */
69 - public function listen_for_actions()
70 - {
71 - // triggered?
72 - $vars = array_merge($_POST, $_GET);
73 - if (empty($vars['_boxzilla_admin_action'])) {
74 - return false;
75 - }
39 + /**
40 + * Initialise the all admin related stuff
41 + */
42 + public function init() {
43 + $this->add_hooks();
44 + $this->run_migrations();
45 + $this->review_notice->init();
46 + }
76 47
77 - // authorized?
78 - if (! current_user_can('edit_posts')) {
79 - return false;
80 - }
48 + /**
49 + * Add necessary hooks
50 + */
51 + protected function add_hooks() {
52 + add_action( 'admin_init', array( $this, 'lazy_add_hooks' ) );
53 + add_action( 'admin_init', array( $this, 'register' ) );
54 + add_action( 'init', array( $this, 'listen_for_actions' ) );
55 + add_action( 'admin_menu', array( $this, 'menu' ) );
56 + add_action( 'admin_notices', array( $this, 'notices' ) );
57 + add_action( 'save_post_boxzilla-box', array( $this, 'save_box_options' ), 20, 2 );
58 + add_action( 'trashed_post', array( $this, 'flush_rules' ) );
59 + add_action( 'untrashed_post', array( $this, 'flush_rules' ) );
60 + add_filter( 'bulk_actions-edit-boxzilla-box', array( $this, 'bulk_action_add' ) );
61 + add_filter( 'handle_bulk_actions-edit-boxzilla-box', array( $this, 'bulk_action_handle' ), 10, 3 );
81 62
82 - // fire action
83 - $action = $vars['_boxzilla_admin_action'];
84 - do_action('boxzilla_admin_' . $action);
63 + }
85 64
86 - return true;
87 - }
65 + /**
66 + * Listen for admin actions.
67 + */
68 + public function listen_for_actions() {
69 + // triggered?
70 + $vars = array_merge( $_POST, $_GET );
71 + if ( empty( $vars['_boxzilla_admin_action'] ) ) {
72 + return false;
73 + }
88 74
89 - public function bulk_action_add($bulk_actions)
90 - {
91 - $bulk_actions['boxzilla_duplicate_box'] = esc_attr__('Duplicate box', 'boxzilla');
92 - return $bulk_actions;
93 - }
75 + // authorized?
76 + if ( ! current_user_can( 'edit_posts' ) ) {
77 + return false;
78 + }
94 79
95 - public function bulk_action_handle($redirect_to, $doaction, $post_ids)
96 - {
97 - if ($doaction !== 'boxzilla_duplicate_box' || empty($post_ids)) {
98 - return $redirect_to;
99 - }
80 + // fire action
81 + $action = $vars['_boxzilla_admin_action'];
82 + do_action( 'boxzilla_admin_' . $action );
100 83
101 - foreach ($post_ids as $post_id) {
102 - $post = get_post($post_id);
103 - if ($post->post_type !== 'boxzilla-box') {
104 - continue;
105 - }
84 + return true;
85 + }
106 86
107 - $new_post_id = wp_insert_post(
108 - [
109 - 'post_type' => $post->post_type,
110 - 'post_title' => $post->post_title,
111 - 'post_content' => $post->post_content,
112 - 'post_status' => 'draft',
113 - ]
114 - );
87 + public function bulk_action_add( $bulk_actions ) {
88 + $bulk_actions['boxzilla_duplicate_box'] = esc_attr__( 'Duplicate box', 'boxzilla' );
89 + return $bulk_actions;
90 + }
115 91
116 - $options = get_post_meta($post_id, 'boxzilla_options', true);
117 - add_post_meta($new_post_id, 'boxzilla_options', $options);
92 + public function bulk_action_handle( $redirect_to, $doaction, $post_ids ) {
93 + if ( $doaction !== 'boxzilla_duplicate_box' || empty( $post_ids ) ) {
94 + return $redirect_to;
95 + }
118 96
119 - $this->flush_rules($new_post_id);
120 - }
97 + foreach ( $post_ids as $post_id ) {
98 + $post = get_post( $post_id );
99 + if ( $post->post_type !== 'boxzilla-box' ) {
100 + continue;
101 + }
121 102
122 - return $redirect_to;
123 - }
103 + $new_post_id = wp_insert_post(
104 + array(
105 + 'post_type' => $post->post_type,
106 + 'post_title' => $post->post_title,
107 + 'post_content' => $post->post_content,
108 + 'post_status' => 'draft',
109 + )
110 + );
124 111
125 - /**
126 - * All logic for admin notices lives here.
127 - */
128 - public function notices()
129 - {
130 - global $pagenow,
131 - $current_screen;
112 + $options = get_post_meta( $post_id, 'boxzilla_options', true );
113 + add_post_meta( $new_post_id, 'boxzilla_options', $options );
132 114
133 - if (( $pagenow === 'plugins.php' || ( $current_screen && $current_screen->post_type === 'boxzilla-box' ) )
134 - && current_user_can('install_plugins')
135 - && is_plugin_active('scroll-triggered-boxes/index.php')
136 - ) {
137 - ?>
138 - <div class="notice notice-info">
139 - <p><?php esc_html_e('Awesome, you are using Boxzilla! You can now safely deactivate the Scroll Triggered Boxes plugin.', 'boxzilla'); ?></p>
140 - </div>
141 - <?php
142 - }
143 - }
115 + $this->flush_rules( $new_post_id );
116 + }
144 117
145 - /**
146 - * Checks current version against stored version & runs necessary update routines.
147 - *
148 - * @return bool
149 - */
150 - protected function run_migrations()
151 - {
118 + return $redirect_to;
119 + }
152 120
153 - // Only run if db option is at older version than code constant
154 - $previous_version = get_option('boxzilla_version', '0');
155 - $current_version = $this->plugin->version();
121 + /**
122 + * All logic for admin notices lives here.
123 + */
124 + public function notices() {
125 + global $pagenow,
126 + $current_screen;
156 127
157 - if (version_compare($current_version, $previous_version, '<=')) {
158 - return false;
159 - }
128 + if ( ( $pagenow === 'plugins.php' || ( $current_screen && $current_screen->post_type === 'boxzilla-box' ) )
129 + && current_user_can( 'install_plugins' )
130 + && is_plugin_active( 'scroll-triggered-boxes/index.php' ) ) {
131 + ?>
132 + <div class="notice notice-info">
133 + <p><?php esc_html_e( 'Awesome, you are using Boxzilla! You can now safely deactivate the Scroll Triggered Boxes plugin.', 'boxzilla' ); ?></p>
134 + </div>
135 + <?php
136 + }
137 + }
160 138
161 - $upgrade_routines = new Migrations($previous_version, $current_version, __DIR__ . '/migrations');
162 - $upgrade_routines->run();
163 - update_option('boxzilla_version', $current_version);
164 - }
139 + /**
140 + * Checks current version against stored version & runs necessary update routines.
141 + *
142 + * @return bool
143 + */
144 + protected function run_migrations() {
165 145
166 - public function lazy_add_hooks()
167 - {
168 - global $pagenow;
146 + // Only run if db option is at older version than code constant
147 + $previous_version = get_option( 'boxzilla_version', '0' );
148 + $current_version = $this->plugin->version();
169 149
170 - add_action('admin_enqueue_scripts', [ $this, 'load_assets' ]);
171 - add_action('add_meta_boxes', [ $this, 'add_meta_boxes' ]);
172 - add_filter('tiny_mce_before_init', [ $this, 'tinymce_init' ]);
173 - add_filter('manage_edit-boxzilla-box_columns', [ $this, 'post_type_column_titles' ]);
174 - add_action('manage_boxzilla-box_posts_custom_column', [ $this, 'post_type_column_content' ], 10, 2);
175 - add_filter('admin_footer_text', [ $this, 'admin_footer_text' ]);
150 + if ( version_compare( $current_version, $previous_version, '<=' ) ) {
151 + return false;
152 + }
176 153
177 - if ($pagenow === 'plugins.php') {
178 - add_filter('plugin_action_links', [ $this, 'add_plugin_settings_link' ], 10, 2);
179 - add_filter('plugin_row_meta', [ $this, 'add_plugin_meta_links' ], 10, 2);
180 - }
181 - }
154 + $upgrade_routines = new Migrations( $previous_version, $current_version, __DIR__ . '/migrations' );
155 + $upgrade_routines->run();
156 + update_option( 'boxzilla_version', $current_version );
157 + }
182 158
183 - /**
184 - * @param $post_id
185 - */
186 - public function post_type_column_box_id_content($post_id)
187 - {
188 - echo $post_id;
189 - }
159 + public function lazy_add_hooks() {
160 + global $pagenow;
190 161
191 - /**
192 - * @param $column
193 - * @param $post_id
194 - */
195 - public function post_type_column_content($column, $post_id)
196 - {
197 - $method_name = 'post_type_column_' . $column . '_content';
198 - if (method_exists($this, $method_name)) {
199 - call_user_func([ $this, $method_name ], $post_id);
200 - }
201 - }
162 + add_action( 'admin_enqueue_scripts', array( $this, 'load_assets' ) );
163 + add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ) );
164 + add_filter( 'tiny_mce_before_init', array( $this, 'tinymce_init' ) );
165 + add_filter( 'manage_edit-boxzilla-box_columns', array( $this, 'post_type_column_titles' ) );
166 + add_action( 'manage_boxzilla-box_posts_custom_column', array( $this, 'post_type_column_content' ), 10, 2 );
167 + add_filter( 'admin_footer_text', array( $this, 'admin_footer_text' ) );
202 168
203 - /**
204 - * @param $columns
205 - *
206 - * @return mixed
207 - */
208 - public function post_type_column_titles($columns)
209 - {
210 - $columns = self::array_insert(
211 - $columns,
212 - [
213 - 'box_id' => esc_html__('Box ID', 'boxzilla'),
214 - ],
215 - 1
216 - );
169 + if ( $pagenow === 'plugins.php' ) {
170 + add_filter( 'plugin_action_links', array( $this, 'add_plugin_settings_link' ), 10, 2 );
171 + add_filter( 'plugin_row_meta', array( $this, 'add_plugin_meta_links' ), 10, 2 );
172 + }
173 + }
217 174
218 - $columns['title'] = esc_html__('Box Title', 'boxzilla');
175 + /**
176 + * @param $post_id
177 + */
178 + public function post_type_column_box_id_content( $post_id ) {
179 + echo $post_id;
180 + }
219 181
220 - return $columns;
221 - }
182 + /**
183 + * @param $column
184 + * @param $post_id
185 + */
186 + public function post_type_column_content( $column, $post_id ) {
187 + $method_name = 'post_type_column_' . $column . '_content';
188 + if ( method_exists( $this, $method_name ) ) {
189 + call_user_func( array( $this, $method_name ), $post_id );
190 + }
191 + }
222 192
223 - /**
224 - * Register stuffs
225 - */
226 - public function register()
227 - {
193 + /**
194 + * @param $columns
195 + *
196 + * @return mixed
197 + */
198 + public function post_type_column_titles( $columns ) {
199 + $columns = self::array_insert(
200 + $columns,
201 + array(
202 + 'box_id' => esc_html__( 'Box ID', 'boxzilla' ),
203 + ),
204 + 1
205 + );
228 206
229 - register_setting('boxzilla_settings', 'boxzilla_settings', [ $this, 'sanitize_settings' ]);
207 + $columns['title'] = esc_html__( 'Box Title', 'boxzilla' );
230 208
231 - wp_register_script(
232 - 'boxzilla-admin',
233 - $this->plugin->url('/assets/js/admin-script.js'),
234 - [
235 - 'jquery',
236 - 'wp-util',
237 - 'wp-color-picker',
238 - 'suggest',
239 - ],
240 - $this->plugin->version(),
241 - true
242 - );
209 + return $columns;
210 + }
243 211
244 - wp_register_style('boxzilla-admin', $this->plugin->url('/assets/css/admin-styles.css'), [], $this->plugin->version());
245 - }
212 + /**
213 + * Register stuffs
214 + */
215 + public function register() {
246 216
247 - /**
248 - * Renders the Boxzilla admin menu items
249 - */
250 - public function menu()
251 - {
252 - $menu_items = [
253 - [
254 - esc_html__('Settings', 'boxzilla'),
255 - esc_html__('Settings', 'boxzilla'),
256 - 'boxzilla-settings',
257 - [ $this, 'show_settings_page' ],
258 - ],
259 - [
260 - esc_html__('Extensions', 'boxzilla'),
261 - '<span style="color: orange">' . esc_html__('Extensions', 'boxzilla') . '</span>',
262 - 'boxzilla-extensions',
263 - [ $this, 'show_extensions_page' ],
264 - ],
265 - ];
217 + register_setting( 'boxzilla_settings', 'boxzilla_settings', array( $this, 'sanitize_settings' ) );
266 218
267 - $menu_items = apply_filters('boxzilla_admin_menu_items', $menu_items);
219 + wp_register_script(
220 + 'boxzilla-admin',
221 + $this->plugin->url( '/assets/js/admin-script.js' ),
222 + array(
223 + 'jquery',
224 + 'wp-util',
225 + 'wp-color-picker',
226 + 'suggest',
227 + ),
228 + $this->plugin->version(),
229 + true
230 + );
268 231
269 - foreach ($menu_items as $item) {
270 - add_submenu_page('edit.php?post_type=boxzilla-box', $item[0] . '- Boxzilla', $item[1], 'manage_options', $item[2], $item[3]);
271 - }
272 - }
232 + wp_register_style( 'boxzilla-admin', $this->plugin->url( '/assets/css/admin-styles.css' ), array(), $this->plugin->version() );
233 + }
273 234
274 - /**
275 - * Shows the settings page
276 - */
277 - public function show_settings_page()
278 - {
279 - $opts = $this->boxzilla->options;
280 - require __DIR__ . '/views/settings.php';
281 - }
235 + /**
236 + * Renders the Boxzilla admin menu items
237 + */
238 + public function menu() {
239 + $menu_items = array(
240 + array(
241 + esc_html__( 'Settings', 'boxzilla' ),
242 + esc_html__( 'Settings', 'boxzilla' ),
243 + 'boxzilla-settings',
244 + array( $this, 'show_settings_page' ),
245 + ),
246 + array(
247 + esc_html__( 'Extensions', 'boxzilla' ),
248 + '<span style="color: orange">' . esc_html__( 'Extensions', 'boxzilla' ) . '</span>',
249 + 'boxzilla-extensions',
250 + array( $this, 'show_extensions_page' ),
251 + ),
252 + );
282 253
283 - /**
284 - * Shows the extensions page
285 - */
286 - public function show_extensions_page()
287 - {
288 - $extensions = $this->fetch_extensions();
289 - require __DIR__ . '/views/extensions.php';
290 - }
254 + $menu_items = apply_filters( 'boxzilla_admin_menu_items', $menu_items );
291 255
292 - /**
293 - * Are we currently editing a box?
294 - *
295 - * @return bool
296 - */
297 - protected function on_edit_box_page()
298 - {
299 - global $pagenow;
256 + foreach ( $menu_items as $item ) {
257 + add_submenu_page( 'edit.php?post_type=boxzilla-box', $item[0] . '- Boxzilla', $item[1], 'manage_options', $item[2], $item[3] );
258 + }
259 + }
300 260
301 - if (! in_array($pagenow, [ 'post-new.php', 'post.php' ], true)) {
302 - return false;
303 - }
261 + /**
262 + * Shows the settings page
263 + */
264 + public function show_settings_page() {
265 + $opts = $this->boxzilla->options;
266 + require __DIR__ . '/views/settings.php';
267 + }
304 268
305 - if (isset($_GET['post_type']) && $_GET['post_type'] === 'boxzilla-box') {
306 - return true;
307 - }
269 + /**
270 + * Shows the extensions page
271 + */
272 + public function show_extensions_page() {
273 + $extensions = $this->fetch_extensions();
274 + require __DIR__ . '/views/extensions.php';
275 + }
308 276
309 - if (get_post_type() === 'boxzilla-box') {
310 - return true;
311 - }
277 + /**
278 + * Are we currently editing a box?
279 + *
280 + * @return bool
281 + */
282 + protected function on_edit_box_page() {
283 + global $pagenow;
312 284
313 - return false;
314 - }
285 + if ( ! in_array( $pagenow, array( 'post-new.php', 'post.php' ), true ) ) {
286 + return false;
287 + }
315 288
316 - /**
317 - * @param $args
318 - *
319 - * @return mixed
320 - */
321 - public function tinymce_init($args)
322 - {
289 + if ( isset( $_GET['post_type'] ) && $_GET['post_type'] === 'boxzilla-box' ) {
290 + return true;
291 + }
323 292
324 - // only act on our post type
325 - if (get_post_type() !== 'boxzilla-box') {
326 - return $args;
327 - }
293 + if ( get_post_type() === 'boxzilla-box' ) {
294 + return true;
295 + }
328 296
329 - $args['setup'] = 'function( editor ) { if(typeof(window.Boxzilla_Admin) === \'undefined\') { return; } editor.on("PreInit", window.Boxzilla_Admin.Designer.init ); }';
297 + return false;
298 + }
330 299
331 - return $args;
332 - }
300 + /**
301 + * @param $args
302 + *
303 + * @return mixed
304 + */
305 + public function tinymce_init( $args ) {
333 306
334 - /**
335 - * Load plugin assets
336 - */
337 - public function load_assets()
338 - {
339 - $screen = get_current_screen();
307 + // only act on our post type
308 + if ( get_post_type() !== 'boxzilla-box' ) {
309 + return $args;
310 + }
340 311
341 - if (! $screen instanceof WP_Screen) {
342 - return false;
343 - }
312 + $args['setup'] = 'function( editor ) { if(typeof(window.Boxzilla_Admin) === \'undefined\') { return; } editor.on("PreInit", window.Boxzilla_Admin.Designer.init ); }';
344 313
345 - if ($screen->base === 'edit' && $screen->post_type === 'boxzilla-box') {
346 - wp_enqueue_style('boxzilla-admin');
347 - }
314 + return $args;
315 + }
348 316
349 - if ($screen->base === 'post' && $screen->post_type === 'boxzilla-box') {
350 - // color picker
351 - wp_enqueue_style('wp-color-picker');
317 + /**
318 + * Load plugin assets
319 + */
320 + public function load_assets() {
321 + $screen = get_current_screen();
352 322
353 - // load scripts
354 - wp_enqueue_script('boxzilla-admin');
323 + if ( ! $screen instanceof WP_Screen ) {
324 + return false;
325 + }
355 326
356 - $data = [
357 - 'and' => esc_html__('and', 'boxzilla'),
358 - 'or' => esc_html__('or', 'boxzilla'),
359 - 'enterCommaSeparatedValues' => esc_html__('Enter a comma-separated list of values.', 'boxzilla'),
360 - 'enterCommaSeparatedPosts' => esc_html__("Enter a comma-separated list of post slugs or post ID's..", 'boxzilla'),
361 - 'enterCommaSeparatedPages' => esc_html__("Enter a comma-separated list of page slugs or page ID's..", 'boxzilla'),
362 - 'enterCommaSeparatedPostTypes' => esc_html__('Enter a comma-separated list of post types..', 'boxzilla'),
363 - 'enterCommaSeparatedRelativeUrls' => esc_html__("Enter a comma-separated list of relative URL's, eg /contact/", 'boxzilla'),
364 - ];
365 - wp_localize_script('boxzilla-admin', 'boxzilla_i18n', $data);
327 + if ( $screen->base === 'edit' && $screen->post_type === 'boxzilla-box' ) {
328 + wp_enqueue_style( 'boxzilla-admin' );
329 + }
366 330
367 - // load stylesheets
368 - wp_enqueue_style('boxzilla-admin');
331 + if ( $screen->base === 'post' && $screen->post_type === 'boxzilla-box' ) {
332 + // color picker
333 + wp_enqueue_style( 'wp-color-picker' );
369 334
370 - // allow add-ons to easily load their own scripts or stylesheets
371 - do_action('boxzilla_load_admin_assets');
372 - }
335 + // load scripts
336 + wp_enqueue_script( 'boxzilla-admin' );
373 337
374 - if (isset($_GET['page']) && $_GET['page'] === 'boxzilla-settings') {
375 - wp_enqueue_style('boxzilla-admin');
376 - }
377 - }
338 + $data = array(
339 + 'and' => esc_html__( 'and', 'boxzilla' ),
340 + 'or' => esc_html__( 'or', 'boxzilla' ),
341 + 'enterCommaSeparatedValues' => esc_html__( 'Enter a comma-separated list of values.', 'boxzilla' ),
342 + 'enterCommaSeparatedPosts' => esc_html__( "Enter a comma-separated list of post slugs or post ID's..", 'boxzilla' ),
343 + 'enterCommaSeparatedPages' => esc_html__( "Enter a comma-separated list of page slugs or page ID's..", 'boxzilla' ),
344 + 'enterCommaSeparatedPostTypes' => esc_html__( 'Enter a comma-separated list of post types..', 'boxzilla' ),
345 + 'enterCommaSeparatedRelativeUrls' => esc_html__( "Enter a comma-separated list of relative URL's, eg /contact/", 'boxzilla' ),
346 + );
347 + wp_localize_script( 'boxzilla-admin', 'boxzilla_i18n', $data );
378 348
379 - /**
380 - * Register meta boxes
381 - *
382 - * @param string $post_type
383 - *
384 - * @return bool
385 - */
386 - public function add_meta_boxes($post_type)
387 - {
388 - if ($post_type !== 'boxzilla-box') {
389 - return false;
390 - }
349 + // load stylesheets
350 + wp_enqueue_style( 'boxzilla-admin' );
391 351
392 - add_meta_box(
393 - 'boxzilla-box-appearance-controls',
394 - esc_html__('Box Appearance', 'boxzilla'),
395 - [ $this, 'metabox_box_appearance_controls' ],
396 - 'boxzilla-box',
397 - 'normal',
398 - 'core'
399 - );
352 + // allow add-ons to easily load their own scripts or stylesheets
353 + do_action( 'boxzilla_load_admin_assets' );
354 + }
400 355
401 - add_meta_box(
402 - 'boxzilla-box-options-controls',
403 - esc_html__('Box Options', 'boxzilla'),
404 - [ $this, 'metabox_box_option_controls' ],
405 - 'boxzilla-box',
406 - 'normal',
407 - 'core'
408 - );
356 + if ( isset( $_GET['page'] ) && $_GET['page'] === 'boxzilla-settings' ) {
357 + wp_enqueue_style( 'boxzilla-admin' );
358 + }
359 + }
409 360
410 - add_meta_box(
411 - 'boxzilla-support',
412 - esc_html__('Looking for help?', 'boxzilla'),
413 - [ $this, 'metabox_support' ],
414 - 'boxzilla-box',
415 - 'side'
416 - );
361 + /**
362 + * Register meta boxes
363 + *
364 + * @param string $post_type
365 + *
366 + * @return bool
367 + */
368 + public function add_meta_boxes( $post_type ) {
369 + if ( $post_type !== 'boxzilla-box' ) {
370 + return false;
371 + }
417 372
418 - add_meta_box(
419 - 'boxzilla-our-other-plugins',
420 - esc_html__('Our other plugins', 'boxzilla'),
421 - [ $this, 'metabox_our_other_plugins' ],
422 - 'boxzilla-box',
423 - 'side'
424 - );
373 + add_meta_box(
374 + 'boxzilla-box-appearance-controls',
375 + esc_html__( 'Box Appearance', 'boxzilla' ),
376 + array( $this, 'metabox_box_appearance_controls' ),
377 + 'boxzilla-box',
378 + 'normal',
379 + 'core'
380 + );
425 381
426 - return true;
427 - }
382 + add_meta_box(
383 + 'boxzilla-box-options-controls',
384 + esc_html__( 'Box Options', 'boxzilla' ),
385 + array( $this, 'metabox_box_option_controls' ),
386 + 'boxzilla-box',
387 + 'normal',
388 + 'core'
389 + );
428 390
429 - /**
430 - * @param \WP_Post $post
431 - * @param $metabox
432 - */
433 - public function metabox_box_appearance_controls(\WP_Post $post, $metabox)
434 - {
391 + add_meta_box(
392 + 'boxzilla-support',
393 + esc_html__( 'Looking for help?', 'boxzilla' ),
394 + array( $this, 'metabox_support' ),
395 + 'boxzilla-box',
396 + 'side'
397 + );
435 398
436 - // get box options
437 - $box = new Box($post);
438 - $opts = $box->get_options();
399 + add_meta_box(
400 + 'boxzilla-our-other-plugins',
401 + esc_html__( 'Our other plugins', 'boxzilla' ),
402 + array( $this, 'metabox_our_other_plugins' ),
403 + 'boxzilla-box',
404 + 'side'
405 + );
439 406
440 - // include view
441 - include __DIR__ . '/views/metaboxes/box-appearance-controls.php';
442 - }
407 + add_meta_box(
408 + 'boxzilla-email-optin',
409 + esc_html__( 'Subscribe to our newsletter', 'boxzilla' ),
410 + array( $this, 'metabox_email_optin' ),
411 + 'boxzilla-box',
412 + 'side'
413 + );
443 414
444 - /**
445 - * @param \WP_Post $post
446 - * @param $metabox
447 - */
448 - public function metabox_box_option_controls(\WP_Post $post, $metabox)
449 - {
415 + return true;
416 + }
450 417
451 - // get box options
452 - $box = new Box($post);
453 - $opts = $box->get_options();
454 - $global_opts = $this->boxzilla->options;
418 + /**
419 + * @param \WP_Post $post
420 + * @param $metabox
421 + */
422 + public function metabox_box_appearance_controls( \WP_Post $post, $metabox ) {
455 423
456 - if (empty($opts['rules'])) {
457 - $opts['rules'][] = [
458 - 'condition' => '',
459 - 'qualifier' => 1,
460 - 'value' => '',
461 - ];
462 - }
424 + // get box options
425 + $box = new Box( $post );
426 + $opts = $box->get_options();
463 427
464 - // include view
465 - include __DIR__ . '/views/metaboxes/box-option-controls.php';
466 - }
428 + // include view
429 + include __DIR__ . '/views/metaboxes/box-appearance-controls.php';
430 + }
467 431
468 - /**
469 - * @param \WP_Post $post
470 - * @param $metabox
471 - */
472 - public function metabox_our_other_plugins(\WP_Post $post, $metabox)
473 - {
474 - include __DIR__ . '/views/metaboxes/our-other-plugins.php';
475 - }
432 + /**
433 + * @param \WP_Post $post
434 + * @param $metabox
435 + */
436 + public function metabox_box_option_controls( \WP_Post $post, $metabox ) {
476 437
477 - /**
478 - * @param \WP_Post $post
479 - * @param $metabox
480 - */
481 - public function metabox_support(\WP_Post $post, $metabox)
482 - {
483 - include __DIR__ . '/views/metaboxes/need-help.php';
484 - }
438 + // get box options
439 + $box = new Box( $post );
440 + $opts = $box->get_options();
441 + $global_opts = $this->boxzilla->options;
485 442
443 + if ( empty( $opts['rules'] ) ) {
444 + $opts['rules'][] = array(
445 + 'condition' => '',
446 + 'qualifier' => 1,
447 + 'value' => '',
448 + );
449 + }
486 450
487 - /**
488 - * Saves box options and rules
489 - *
490 - * @param int $box_id
491 - *
492 - * @return bool
493 - */
494 - public function save_box_options($box_id, $post)
495 - {
451 + // include view
452 + include __DIR__ . '/views/metaboxes/box-option-controls.php';
453 + }
496 454
497 - // Only act on our own post type
498 - if ($post->post_type !== 'boxzilla-box') {
499 - return false;
500 - }
455 + /**
456 + * @param \WP_Post $post
457 + * @param $metabox
458 + */
459 + public function metabox_email_optin( \WP_Post $post, $metabox ) {
460 + include __DIR__ . '/views/metaboxes/email-optin.php';
461 + }
501 462
502 - // is this a revision save?
503 - if (wp_is_post_revision($box_id) || ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )) {
504 - return false;
505 - }
463 + /**
464 + * @param \WP_Post $post
465 + * @param $metabox
466 + */
467 + public function metabox_our_other_plugins( \WP_Post $post, $metabox ) {
468 + include __DIR__ . '/views/metaboxes/our-other-plugins.php';
469 + }
506 470
507 - // can user edit this post?
508 - if (! current_user_can('edit_post', $box_id)) {
509 - return false;
510 - }
471 + /**
472 + * @param \WP_Post $post
473 + * @param $metabox
474 + */
475 + public function metabox_support( \WP_Post $post, $metabox ) {
476 + include __DIR__ . '/views/metaboxes/need-help.php';
477 + }
511 478
512 - // make sure options array is set
513 - if (! isset($_POST['boxzilla_box']) || ! is_array($_POST['boxzilla_box'])) {
514 - return false;
515 - }
516 479
517 - // get new options from $_POST
518 - $opts = $this->sanitize_box_options($_POST['boxzilla_box']);
480 + /**
481 + * Saves box options and rules
482 + *
483 + * @param int $box_id
484 + *
485 + * @return bool
486 + */
487 + public function save_box_options( $box_id, $post ) {
519 488
520 - // allow extensions to filter the saved options
521 - $opts = apply_filters('boxzilla_saved_options', $opts, $box_id);
489 + // Only act on our own post type
490 + if ( $post->post_type !== 'boxzilla-box' ) {
491 + return false;
492 + }
522 493
523 - // save individual box settings
524 - update_post_meta($box_id, 'boxzilla_options', $opts);
494 + // is this a revision save?
495 + if ( wp_is_post_revision( $box_id ) || ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) ) {
496 + return false;
497 + }
525 498
526 - // update global settings if given
527 - if (! empty($_POST['boxzilla_global_settings'])) {
528 - $global_settings = get_option('boxzilla_settings', []);
529 - if (! is_array($global_settings)) {
530 - $global_settings = [];
531 - }
532 - $global_settings = array_merge($global_settings, $_POST['boxzilla_global_settings']);
533 - update_option('boxzilla_settings', $global_settings);
534 - }
499 + // can user edit this post?
500 + if ( ! current_user_can( 'edit_post', $box_id ) ) {
501 + return false;
502 + }
535 503
536 - $this->flush_rules($box_id);
504 + // make sure options array is set
505 + if ( ! isset( $_POST['boxzilla_box'] ) || ! is_array( $_POST['boxzilla_box'] ) ) {
506 + return false;
507 + }
537 508
538 - return true;
539 - }
509 + // get new options from $_POST
510 + $opts = $this->sanitize_box_options( $_POST['boxzilla_box'] );
540 511
541 - /**
542 - * @param array $opts
543 - *
544 - * @return array
545 - */
546 - public function sanitize_settings($opts)
547 - {
548 - return $opts;
549 - }
512 + // allow extensions to filter the saved options
513 + $opts = apply_filters( 'boxzilla_saved_options', $opts, $box_id );
550 514
551 - /**
552 - * @param string $url_string
553 - *
554 - * @return string
555 - */
556 - public function sanitize_url($url_string)
557 - {
515 + // save individual box settings
516 + update_post_meta( $box_id, 'boxzilla_options', $opts );
558 517
559 - // if empty, just return a slash
560 - if (empty($url_string)) {
561 - return '/';
562 - }
518 + // update global settings if given
519 + if ( ! empty( $_POST['boxzilla_global_settings'] ) ) {
520 + $global_settings = get_option( 'boxzilla_settings', array() );
521 + if ( ! is_array( $global_settings ) ) {
522 + $global_settings = array();
523 + }
524 + $global_settings = array_merge( $global_settings, $_POST['boxzilla_global_settings'] );
525 + update_option( 'boxzilla_settings', $global_settings );
526 + }
563 527
564 - // if string looks like an absolute URL, extract just the path
565 - if (preg_match('/^((https|http)?\:\/\/)?(\w+\.)?\w+\.\w+\.*/i', $url_string)) {
566 - // make sure URL has scheme prepended, to make parse_url() understand..
567 - $url_string = 'https://' . str_replace([ 'http://', 'https://' ], '', $url_string);
528 + $this->flush_rules( $box_id );
568 529
569 - // get just the path
570 - $url_string = parse_url($url_string, PHP_URL_PATH);
571 - }
530 + return true;
531 + }
572 532
573 - // leading slash it
574 - return $url_string;
575 - }
533 + /**
534 + * @param array $opts
535 + *
536 + * @return array
537 + */
538 + public function sanitize_settings( $opts ) {
539 + return $opts;
540 + }
576 541
577 - /**
578 - * @param array $rule
579 - * @return array The sanitized rule array
580 - */
581 - public function sanitize_box_rule($rule)
582 - {
583 - $rule['value'] = trim($rule['value']);
542 + /**
543 + * @param string $url_string
544 + *
545 + * @return string
546 + */
547 + public function sanitize_url( $url_string ) {
584 548
585 - // convert to array
586 - $rule['value'] = explode(',', trim($rule['value'], ','));
549 + // if empty, just return a slash
550 + if ( empty( $url_string ) ) {
551 + return '/';
552 + }
587 553
588 - // trim all whitespace in value field
589 - $rule['value'] = array_map('trim', $rule['value']);
554 + // if string looks like an absolute URL, extract just the path
555 + if ( preg_match( '/^((https|http)?\:\/\/)?(\w+\.)?\w+\.\w+\.*/i', $url_string ) ) {
590 556
591 - // Make sure "is_url" values have a leading slash
592 - if ($rule['condition'] === 'is_url') {
593 - $rule['value'] = array_map([ $this, 'sanitize_url' ], $rule['value']);
594 - }
557 + // make sure URL has scheme prepended, to make parse_url() understand..
558 + $url_string = 'https://' . str_replace( array( 'http://', 'https://' ), '', $url_string );
595 559
596 - // (re)set value to 0 when condition is everywhere
597 - if ($rule['condition'] === 'everywhere') {
598 - $rule['value'] = '';
599 - }
560 + // get just the path
561 + $url_string = parse_url( $url_string, PHP_URL_PATH );
562 + }
600 563
601 - // convert back to string before saving
602 - if (is_array($rule['value'])) {
603 - $rule['value'] = join(',', $rule['value']);
604 - }
564 + // leading slash it
565 + return $url_string;
566 + }
605 567
606 - return $rule;
607 - }
568 + /**
569 + * @param array $rule
570 + * @return array The sanitized rule array
571 + */
572 + public function sanitize_box_rule( $rule ) {
573 + $rule['value'] = trim( $rule['value'] );
608 574
609 - /**
610 - * @param array $css
611 - * @return array
612 - */
613 - public function sanitize_box_css($css)
614 - {
575 + // convert to array
576 + $rule['value'] = explode( ',', trim( $rule['value'], ',' ) );
615 577
616 - // sanitize settings
617 - if ('' !== $css['width']) {
618 - $css['width'] = absint($css['width']);
619 - }
578 + // trim all whitespace in value field
579 + $rule['value'] = array_map( 'trim', $rule['value'] );
620 580
621 - if ('' !== $css['border_width']) {
622 - $css['border_width'] = absint($css['border_width']);
623 - }
581 + // Make sure "is_url" values have a leading slash
582 + if ( $rule['condition'] === 'is_url' ) {
583 + $rule['value'] = array_map( array( $this, 'sanitize_url' ), $rule['value'] );
584 + }
624 585
625 - // make sure colors start with `#`
626 - $color_keys = [ 'color', 'background_color', 'border_color' ];
627 - foreach ($color_keys as $key) {
628 - $value = $css[ $key ];
629 - $color = sanitize_text_field($value);
586 + // (re)set value to 0 when condition is everywhere
587 + if ( $rule['condition'] === 'everywhere' ) {
588 + $rule['value'] = '';
589 + }
630 590
631 - // make sure color starts with `#`
632 - if ('' !== $color && $color[0] !== '#') {
633 - $color = '#' . $color;
634 - }
635 - $css[ $key ] = $color;
636 - }
591 + // convert back to string before saving
592 + if ( is_array( $rule['value'] ) ) {
593 + $rule['value'] = join( ',', $rule['value'] );
594 + }
637 595
638 - return $css;
639 - }
596 + return $rule;
597 + }
640 598
641 - /**
642 - * Sanitize the options for this box.
643 - *
644 - * @param array $opts
645 - *
646 - * @return array
647 - */
648 - protected function sanitize_box_options($opts)
649 - {
650 - $defaults = [
651 - 'rules' => [],
652 - 'css' => [],
653 - ];
599 + /**
600 + * @param array $css
601 + * @return array
602 + */
603 + public function sanitize_box_css( $css ) {
654 604
655 - $opts = array_replace_recursive($defaults, $opts);
605 + // sanitize settings
606 + if ( '' !== $css['width'] ) {
607 + $css['width'] = absint( $css['width'] );
608 + }
656 609
657 - $opts['rules'] = array_map([ $this, 'sanitize_box_rule' ], $opts['rules']);
658 - $opts['css'] = $this->sanitize_box_css($opts['css']);
659 - $opts['cookie']['triggered'] = absint($opts['cookie']['triggered']);
660 - $opts['cookie']['dismissed'] = absint($opts['cookie']['dismissed']);
661 - $opts['trigger'] = sanitize_text_field($opts['trigger']);
662 - $opts['trigger_percentage'] = absint($opts['trigger_percentage']);
663 - $opts['trigger_element'] = sanitize_text_field($opts['trigger_element']);
664 - $opts['screen_size_condition']['value'] = intval($opts['screen_size_condition']['value']);
610 + if ( '' !== $css['border_width'] ) {
611 + $css['border_width'] = absint( $css['border_width'] );
612 + }
665 613
666 - return $opts;
667 - }
614 + // make sure colors start with `#`
615 + $color_keys = array( 'color', 'background_color', 'border_color' );
616 + foreach ( $color_keys as $key ) {
617 + $value = $css[ $key ];
618 + $color = sanitize_text_field( $value );
668 619
669 - /**
670 - * Add the settings link to the Plugins overview
671 - *
672 - * @param array $links
673 - * @param string $slug
674 - *
675 - * @return array
676 - */
677 - public function add_plugin_settings_link($links, $slug)
678 - {
679 - if ($slug !== $this->plugin->slug() || ! is_array($links)) {
680 - return $links;
681 - }
620 + // make sure color starts with `#`
621 + if ( '' !== $color && $color[0] !== '#' ) {
622 + $color = '#' . $color;
623 + }
624 + $css[ $key ] = $color;
625 + }
682 626
683 - $href = admin_url('edit.php?post_type=boxzilla-box');
684 - $label = esc_html__('Boxes', 'boxzilla');
685 - $settings_link = "<a href=\"{$href}\">{$label}</a>";
686 - array_unshift($links, $settings_link);
687 - return $links;
688 - }
627 + return $css;
628 + }
689 629
690 - /**
691 - * Adds meta links to the plugin in the WP Admin > Plugins screen
692 - *
693 - * @param array $links
694 - * @param string $slug
695 - *
696 - * @return array
697 - */
698 - public function add_plugin_meta_links($links, $slug)
699 - {
700 - if ($slug !== $this->plugin->slug()) {
701 - return $links;
702 - }
630 + /**
631 + * Sanitize the options for this box.
632 + *
633 + * @param array $opts
634 + *
635 + * @return array
636 + */
637 + protected function sanitize_box_options( $opts ) {
638 + $defaults = array(
639 + 'rules' => array(),
640 + 'css' => array(),
641 + );
703 642
704 - $links[] = '<a href="https://kb.boxzillaplugin.com/">Documentation</a>';
705 - $links[] = '<a href="https://boxzillaplugin.com/add-ons/">Add-ons</a>';
643 + $opts = array_replace_recursive( $defaults, $opts );
706 644
707 - return $links;
708 - }
645 + $opts['rules'] = array_map( array( $this, 'sanitize_box_rule' ), $opts['rules'] );
646 + $opts['css'] = $this->sanitize_box_css( $opts['css'] );
647 + $opts['cookie']['triggered'] = absint( $opts['cookie']['triggered'] );
648 + $opts['cookie']['dismissed'] = absint( $opts['cookie']['dismissed'] );
649 + $opts['trigger'] = sanitize_text_field( $opts['trigger'] );
650 + $opts['trigger_percentage'] = absint( $opts['trigger_percentage'] );
651 + $opts['trigger_element'] = sanitize_text_field( $opts['trigger_element'] );
652 + $opts['screen_size_condition']['value'] = intval( $opts['screen_size_condition']['value'] );
709 653
710 - /**
711 - * Flush all box rules
712 - *
713 - * Loops through all published boxes and fills the rules option
714 - *
715 - * @param int $post_id
716 - */
717 - public function flush_rules($post_id)
718 - {
654 + return $opts;
655 + }
719 656
720 - // only act on our own post type
721 - $post = get_post($post_id);
722 - if (! $post instanceof WP_Post || $post->post_type !== 'boxzilla-box') {
723 - return;
724 - }
657 + /**
658 + * Add the settings link to the Plugins overview
659 + *
660 + * @param array $links
661 + * @param string $slug
662 + *
663 + * @return array
664 + */
665 + public function add_plugin_settings_link( $links, $slug ) {
666 + if ( $slug !== $this->plugin->slug() || ! is_array( $links ) ) {
667 + return $links;
668 + }
725 669
726 - // get all published boxes
727 - $query = new \WP_Query();
728 - $boxes = $query->query(
729 - [
730 - 'post_type' => 'boxzilla-box',
731 - 'post_status' => 'publish',
732 - 'posts_per_page' => - 1,
733 - 'ignore_sticky_posts' => true,
734 - 'no_found_rows' => true,
735 - ]
736 - );
670 + $href = admin_url( 'edit.php?post_type=boxzilla-box' );
671 + $label = esc_html__( 'Boxes', 'boxzilla' );
672 + $settings_link = "<a href=\"{$href}\">{$label}</a>";
673 + array_unshift( $links, $settings_link );
674 + return $links;
675 + }
737 676
738 - // setup empty array of rules
739 - $rules = [];
677 + /**
678 + * Adds meta links to the plugin in the WP Admin > Plugins screen
679 + *
680 + * @param array $links
681 + * @param string $slug
682 + *
683 + * @return array
684 + */
685 + public function add_plugin_meta_links( $links, $slug ) {
686 + if ( $slug !== $this->plugin->slug() ) {
687 + return $links;
688 + }
740 689
741 - // fill rules array
742 - if (is_array($boxes)) {
743 - foreach ($boxes as $box) {
744 - // get box meta data
745 - $box_meta = get_post_meta($box->ID, 'boxzilla_options', true);
690 + $links[] = '<a href="https://kb.boxzillaplugin.com/">Documentation</a>';
691 + $links[] = '<a href="https://boxzillaplugin.com/add-ons/">Add-ons</a>';
746 692
747 - // add box rules to all rules
748 - $rules[ $box->ID ] = (array) $box_meta['rules'];
749 - $rules[ $box->ID ]['comparision'] = isset($box_meta['rules_comparision']) ? $box_meta['rules_comparision'] : 'any';
750 - }
751 - }
693 + return $links;
694 + }
752 695
753 - update_option('boxzilla_rules', $rules);
754 - }
696 + /**
697 + * Flush all box rules
698 + *
699 + * Loops through all published boxes and fills the rules option
700 + *
701 + * @param int $post_id
702 + */
703 + public function flush_rules( $post_id ) {
755 704
756 - /**
757 - * Fetches a list of available add-on plugins
758 - *
759 - * @return array
760 - */
761 - protected function fetch_extensions()
762 - {
763 - $extensions = get_transient('boxzilla_remote_extensions');
764 - if ($extensions) {
765 - return $extensions;
766 - }
705 + // only act on our own post type
706 + $post = get_post( $post_id );
707 + if ( ! $post instanceof WP_Post || $post->post_type !== 'boxzilla-box' ) {
708 + return;
709 + }
767 710
768 - $response = wp_remote_get('https://my.boxzillaplugin.com/api/v2/plugins');
769 - if (is_wp_error($response) || wp_remote_retrieve_response_code($response) >= 400) {
770 - return [];
771 - }
711 + // get all published boxes
712 + $query = new \WP_Query;
713 + $boxes = $query->query(
714 + array(
715 + 'post_type' => 'boxzilla-box',
716 + 'post_status' => 'publish',
717 + 'posts_per_page' => - 1,
718 + 'ignore_sticky_posts' => true,
719 + 'no_found_rows' => true,
720 + )
721 + );
772 722
773 - $body = wp_remote_retrieve_body($response);
774 - $data = json_decode($body);
775 - if (is_array($data)) {
776 - set_transient('boxzilla_remote_extensions', $data, 24 * HOUR_IN_SECONDS);
777 - return $data;
778 - }
723 + // setup empty array of rules
724 + $rules = array();
779 725
780 - return [];
781 - }
726 + // fill rules array
727 + if ( is_array( $boxes ) ) {
728 + foreach ( $boxes as $box ) {
729 + // get box meta data
730 + $box_meta = get_post_meta( $box->ID, 'boxzilla_options', true );
782 731
783 - /**
784 - * @param $arr
785 - * @param $insert
786 - * @param $position
787 - *
788 - * @return array
789 - */
790 - public static function array_insert($arr, $insert, $position)
791 - {
792 - $i = 0;
793 - $ret = [];
794 - foreach ($arr as $key => $value) {
795 - if ($i == $position) {
796 - foreach ($insert as $ikey => $ivalue) {
797 - $ret[ $ikey ] = $ivalue;
798 - }
799 - }
800 - $ret[ $key ] = $value;
801 - $i++;
802 - }
732 + // add box rules to all rules
733 + $rules[ $box->ID ] = (array) $box_meta['rules'];
734 + $rules[ $box->ID ]['comparision'] = isset( $box_meta['rules_comparision'] ) ? $box_meta['rules_comparision'] : 'any';
735 + }
736 + }
803 737
804 - return $ret;
805 - }
738 + update_option( 'boxzilla_rules', $rules );
739 + }
806 740
807 - /**
808 - * @param string $text
809 - *
810 - * @return string
811 - */
812 - public function admin_footer_text($text)
813 - {
814 - $screen = get_current_screen();
741 + /**
742 + * Fetches a list of available add-on plugins
743 + *
744 + * @return array
745 + */
746 + protected function fetch_extensions() {
747 + $extensions = get_transient( 'boxzilla_remote_extensions' );
748 + if ( $extensions ) {
749 + return $extensions;
750 + }
815 751
816 - if (! $screen instanceof WP_Screen) {
817 - return $text;
818 - }
752 + $response = wp_remote_get( 'https://my.boxzillaplugin.com/api/v2/plugins' );
753 + if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) >= 400 ) {
754 + return array();
755 + }
819 756
820 - $on_edit_page = $screen->parent_base === 'edit' && $screen->post_type === 'boxzilla-box';
821 - if ($on_edit_page) {
822 - return sprintf('If you enjoy using <strong>Boxzilla</strong>, please <a href="%s" target="_blank">leave us a ★★★★★ rating</a>. A <strong style="text-decoration: underline;">huge</strong> thank you in advance!', 'https://wordpress.org/support/view/plugin-reviews/boxzilla?rate=5#postform');
823 - }
757 + $body = wp_remote_retrieve_body( $response );
758 + $data = json_decode( $body );
759 + if ( is_array( $data ) ) {
760 + set_transient( 'boxzilla_remote_extensions', $data, 24 * HOUR_IN_SECONDS );
761 + return $data;
762 + }
824 763
825 - return $text;
826 - }
764 + return array();
765 + }
766 +
767 + /**
768 + * @param $arr
769 + * @param $insert
770 + * @param $position
771 + *
772 + * @return array
773 + */
774 + public static function array_insert( $arr, $insert, $position ) {
775 + $i = 0;
776 + $ret = array();
777 + foreach ( $arr as $key => $value ) {
778 + if ( $i == $position ) {
779 + foreach ( $insert as $ikey => $ivalue ) {
780 + $ret[ $ikey ] = $ivalue;
781 + }
782 + }
783 + $ret[ $key ] = $value;
784 + $i ++;
785 + }
786 +
787 + return $ret;
788 + }
789 +
790 + /**
791 + * @param string $text
792 + *
793 + * @return string
794 + */
795 + public function admin_footer_text( $text ) {
796 + $screen = get_current_screen();
797 +
798 + if ( ! $screen instanceof WP_Screen ) {
799 + return $text;
800 + }
801 +
802 + $on_edit_page = $screen->parent_base === 'edit' && $screen->post_type === 'boxzilla-box';
803 + if ( $on_edit_page ) {
804 + return sprintf( 'If you enjoy using <strong>Boxzilla</strong>, please <a href="%s" target="_blank">leave us a ★★★★★ rating</a>. A <strong style="text-decoration: underline;">huge</strong> thank you in advance!', 'https://wordpress.org/support/view/plugin-reviews/boxzilla?rate=5#postform' );
805 + }
806 +
807 + return $text;
808 + }
809 +
810 +
827 811 }