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