PluginProbe
BlockSpare – Gutenberg Blocks, AI Content Generator & Site Builder for News, Magazine & Blogs / 5.0.1
BlockSpare – Gutenberg Blocks, AI Content Generator & Site Builder for News, Magazine & Blogs v5.0.1
5.0.1 4.1.0 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.1.0 1.1.1 1.1.2 1.2.0 1.2.1 1.2.2 1.2.3 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 2.1.2 2.5.0 2.5.3 All 39 releases
← All changes | admin/notice-setup.php +286 -275 4.1.0 → 5.0.1 View file →
@@ -1,335 +1,346 @@
1 1 <?php
2 2 // Exit if accessed directly.
3 -defined( 'ABSPATH' ) || exit;
3 +defined('ABSPATH') || exit;
4 4
5 -class Blockspare_Setup {
5 +class Blockspare_Setup
6 +{
6 7
7 - public $name;
8 - public $type;
9 - public $dismiss_url;
10 - public $temporary_dismiss_url;
11 - public $pricing_url;
12 - public $current_user_id;
8 + public $name;
9 + public $type;
10 + public $dismiss_url;
11 + public $temporary_dismiss_url;
12 + public $pricing_url;
13 + public $current_user_id;
13 14
14 - /**
15 - * Constructor.
16 - */
17 - public function __construct( $name, $type, $dismiss_url, $temporary_dismiss_url ) {
15 + /**
16 + * Constructor.
17 + */
18 + public function __construct($name, $type, $dismiss_url, $temporary_dismiss_url)
19 + {
18 20
19 - $this->name = $name;
20 - $this->type = $type;
21 - $this->dismiss_url = $dismiss_url;
22 - $this->temporary_dismiss_url = $temporary_dismiss_url;
23 - $this->pricing_url = 'https://www.blockspare.com/';
24 - $this->current_user_id = get_current_user_id();
21 + $this->name = $name;
22 + $this->type = $type;
23 + $this->dismiss_url = $dismiss_url;
24 + $this->temporary_dismiss_url = $temporary_dismiss_url;
25 + $this->pricing_url = 'https://www.blockspare.com/';
26 + $this->current_user_id = get_current_user_id();
25 27
26 - add_action( 'admin_notices', array( $this, 'notice' ) );
28 + add_action('admin_notices', array($this, 'notice'));
27 29
28 - $this->dismiss_notice();
29 - $this->dismiss_notice_temporary();
30 - }
30 + $this->dismiss_notice();
31 + $this->dismiss_notice_temporary();
32 + }
31 33
32 - /**
33 - * Display notice.
34 - */
35 - public function notice() {
34 + /**
35 + * Display notice.
36 + */
37 + public function notice()
38 + {
36 39
37 - if ( ! current_user_can( 'publish_posts' ) ) {
38 - return;
39 - }
40 + if (! current_user_can('publish_posts')) {
41 + return;
42 + }
40 43
41 - $current_screen = get_current_screen();
44 + $current_screen = get_current_screen();
42 45
43 - if ( ! $current_screen ) {
44 - return;
45 - }
46 + if (! $current_screen) {
47 + return;
48 + }
46 49
47 - if (
48 - 'dashboard' !== $current_screen->id &&
49 - 'themes' !== $current_screen->id &&
50 - 'plugins' !== $current_screen->id
51 - ) {
52 - return;
53 - }
54 50
55 - if ( ! $this->is_dismiss_notice() ) {
56 - $this->notice_markup();
57 - }
51 + if (
52 + 'dashboard' !== $current_screen->id &&
53 + 'themes' !== $current_screen->id &&
54 + 'plugins' !== $current_screen->id
55 + ) {
56 + return;
58 57 }
59 58
60 - /**
61 - * Check if notice dismissed.
62 - */
63 - private function is_dismiss_notice() {
64 - return apply_filters( 'blockspare_' . $this->name . '_notice_dismiss', false );
59 + if (! $this->is_dismiss_notice()) {
60 + $this->notice_markup();
65 61 }
62 + }
66 63
67 - /**
68 - * Notice markup.
69 - */
70 - public function notice_markup() {
71 - echo '';
72 - }
64 + /**
65 + * Check if notice dismissed.
66 + */
67 + private function is_dismiss_notice()
68 + {
69 + return apply_filters('blockspare_' . $this->name . '_notice_dismiss', false);
70 + }
73 71
74 - /**
75 - * Permanently dismiss notice.
76 - */
77 - public function dismiss_notice() {
72 + /**
73 + * Notice markup.
74 + */
75 + public function notice_markup()
76 + {
77 + echo '';
78 + }
78 79
79 - if (
80 - isset( $_GET['blockspare_setup_notice_dismiss'] ) &&
81 - isset( $_GET['_blockspare_setup_notice_dismiss_nonce'] )
82 - ) {
80 + /**
81 + * Permanently dismiss notice.
82 + */
83 + public function dismiss_notice()
84 + {
83 85
84 - if (
85 - ! wp_verify_nonce(
86 - wp_unslash( $_GET['_blockspare_setup_notice_dismiss_nonce'] ),
87 - 'blockspare_setup_notice_dismiss_nonce'
88 - )
89 - ) {
90 - wp_die( esc_html__( 'Action failed. Please refresh the page and retry.', 'blockspare' ) );
91 - }
86 + if (
87 + isset($_GET['blockspare_setup_notice_dismiss']) &&
88 + isset($_GET['_blockspare_setup_notice_dismiss_nonce'])
89 + ) {
92 90
93 - if ( ! current_user_can( 'publish_posts' ) ) {
94 - wp_die( esc_html__( 'Cheatin&#8217; huh?', 'blockspare' ) );
95 - }
91 + if (
92 + ! wp_verify_nonce(
93 + wp_unslash($_GET['_blockspare_setup_notice_dismiss_nonce']),
94 + 'blockspare_setup_notice_dismiss_nonce'
95 + )
96 + ) {
97 + wp_die(esc_html__('Action failed. Please refresh the page and retry.', 'blockspare'));
98 + }
96 99
97 - $dismiss_notice = sanitize_text_field( wp_unslash( $_GET['blockspare_setup_notice_dismiss'] ) );
100 + if (! current_user_can('publish_posts')) {
101 + wp_die(esc_html__('Cheatin&#8217; huh?', 'blockspare'));
102 + }
98 103
99 - // FIX: Match current notice name dynamically instead of hardcoded 'setup'
100 - if ( $this->name === $dismiss_notice ) {
101 - update_user_meta(
102 - $this->current_user_id,
103 - 'blockspare_' . $dismiss_notice . '_notice_dismiss',
104 - 'yes'
105 - );
106 -
107 - wp_safe_redirect( remove_query_arg( array( 'blockspare_setup_notice_dismiss', '_blockspare_setup_notice_dismiss_nonce' ) ) );
108 - exit;
109 - }
110 - }
104 + $dismiss_notice = sanitize_text_field(wp_unslash($_GET['blockspare_setup_notice_dismiss']));
105 +
106 + // FIX: Match current notice name dynamically instead of hardcoded 'setup'
107 + if ($this->name === $dismiss_notice) {
108 + update_user_meta(
109 + $this->current_user_id,
110 + 'blockspare_' . $dismiss_notice . '_notice_dismiss',
111 + 'yes'
112 + );
113 +
114 + wp_safe_redirect(remove_query_arg(array('blockspare_setup_notice_dismiss', '_blockspare_setup_notice_dismiss_nonce')));
115 + exit;
116 + }
111 117 }
118 + }
112 119
113 - /**
114 - * Temporarily dismiss notice.
115 - */
116 - public function dismiss_notice_temporary() {
120 + /**
121 + * Temporarily dismiss notice.
122 + */
123 + public function dismiss_notice_temporary()
124 + {
117 125
118 - if (
119 - isset( $_GET['blockspare_setup_notice_dismiss_temporary'] ) &&
120 - isset( $_GET['_blockspare_setup_notice_dismiss_temporary_nonce'] )
121 - ) {
126 + if (
127 + isset($_GET['blockspare_setup_notice_dismiss_temporary']) &&
128 + isset($_GET['_blockspare_setup_notice_dismiss_temporary_nonce'])
129 + ) {
122 130
123 - if (
124 - ! wp_verify_nonce(
125 - wp_unslash( $_GET['_blockspare_setup_notice_dismiss_temporary_nonce'] ),
126 - 'blockspare_setup_notice_dismiss_temporary_nonce'
127 - )
128 - ) {
129 - wp_die( esc_html__( 'Action failed. Please refresh the page and retry.', 'blockspare' ) );
130 - }
131 + if (
132 + ! wp_verify_nonce(
133 + wp_unslash($_GET['_blockspare_setup_notice_dismiss_temporary_nonce']),
134 + 'blockspare_setup_notice_dismiss_temporary_nonce'
135 + )
136 + ) {
137 + wp_die(esc_html__('Action failed. Please refresh the page and retry.', 'blockspare'));
138 + }
131 139
132 - if ( ! current_user_can( 'publish_posts' ) ) {
133 - wp_die( esc_html__( 'Cheatin&#8217; huh?', 'blockspare' ) );
134 - }
140 + if (! current_user_can('publish_posts')) {
141 + wp_die(esc_html__('Cheatin&#8217; huh?', 'blockspare'));
142 + }
135 143
136 - $dismiss_notice = sanitize_text_field( wp_unslash( $_GET['blockspare_setup_notice_dismiss_temporary'] ) );
144 + $dismiss_notice = sanitize_text_field(wp_unslash($_GET['blockspare_setup_notice_dismiss_temporary']));
137 145
138 - // FIX: Match current notice name dynamically instead of hardcoded 'setup'
139 - if ( $this->name === $dismiss_notice ) {
140 - update_user_meta(
141 - $this->current_user_id,
142 - 'blockspare_' . $dismiss_notice . '_notice_dismiss_temporary',
143 - 'yes'
144 - );
145 -
146 - wp_safe_redirect( remove_query_arg( array( 'blockspare_setup_notice_dismiss_temporary', '_blockspare_setup_notice_dismiss_temporary_nonce' ) ) );
147 - exit;
148 - }
149 - }
146 + // FIX: Match current notice name dynamically instead of hardcoded 'setup'
147 + if ($this->name === $dismiss_notice) {
148 + update_user_meta(
149 + $this->current_user_id,
150 + 'blockspare_' . $dismiss_notice . '_notice_dismiss_temporary',
151 + 'yes'
152 + );
153 +
154 + wp_safe_redirect(remove_query_arg(array('blockspare_setup_notice_dismiss_temporary', '_blockspare_setup_notice_dismiss_temporary_nonce')));
155 + exit;
156 + }
150 157 }
158 + }
151 159 }
152 160
153 -class Blockspare_Setup_Notice extends Blockspare_Setup {
161 +class Blockspare_Setup_Notice extends Blockspare_Setup
162 +{
154 163
155 - /**
156 - * Constructor.
157 - */
158 - public function __construct() {
164 + /**
165 + * Constructor.
166 + */
167 + public function __construct()
168 + {
159 169
160 - $dismiss_url = wp_nonce_url(
161 - add_query_arg(
162 - 'blockspare_setup_notice_dismiss',
163 - 'setup',
164 - admin_url()
165 - ),
166 - 'blockspare_setup_notice_dismiss_nonce',
167 - '_blockspare_setup_notice_dismiss_nonce'
168 - );
170 + $dismiss_url = wp_nonce_url(
171 + add_query_arg(
172 + 'blockspare_setup_notice_dismiss',
173 + 'setup',
174 + admin_url()
175 + ),
176 + 'blockspare_setup_notice_dismiss_nonce',
177 + '_blockspare_setup_notice_dismiss_nonce'
178 + );
169 179
170 - $temporary_dismiss_url = wp_nonce_url(
171 - add_query_arg(
172 - 'blockspare_setup_notice_dismiss_temporary',
173 - 'setup',
174 - admin_url()
175 - ),
176 - 'blockspare_setup_notice_dismiss_temporary_nonce',
177 - '_blockspare_setup_notice_dismiss_temporary_nonce'
178 - );
180 + $temporary_dismiss_url = wp_nonce_url(
181 + add_query_arg(
182 + 'blockspare_setup_notice_dismiss_temporary',
183 + 'setup',
184 + admin_url()
185 + ),
186 + 'blockspare_setup_notice_dismiss_temporary_nonce',
187 + '_blockspare_setup_notice_dismiss_temporary_nonce'
188 + );
179 189
180 - parent::__construct(
181 - 'setup',
182 - 'info',
183 - $dismiss_url,
184 - $temporary_dismiss_url
185 - );
190 + parent::__construct(
191 + 'setup',
192 + 'info',
193 + $dismiss_url,
194 + $temporary_dismiss_url
195 + );
186 196
187 - $this->set_notice_time();
188 - $this->set_temporary_dismiss_notice_time();
189 - $this->set_dismiss_notice();
197 + $this->set_notice_time();
198 + $this->set_temporary_dismiss_notice_time();
199 + $this->set_dismiss_notice();
200 + }
201 +
202 + /**
203 + * Set initial notice time.
204 + */
205 + private function set_notice_time()
206 + {
207 + if (! get_option('blockspare_setup_notice_start_time')) {
208 + update_option('blockspare_setup_notice_start_time', time());
190 209 }
210 + }
191 211
192 - /**
193 - * Set initial notice time.
194 - */
195 - private function set_notice_time() {
196 - if ( ! get_option( 'blockspare_setup_notice_start_time' ) ) {
197 - update_option( 'blockspare_setup_notice_start_time', time() );
198 - }
212 + /**
213 + * Set temporary dismiss time.
214 + */
215 + private function set_temporary_dismiss_notice_time()
216 + {
217 + if (
218 + isset($_GET['blockspare_setup_notice_dismiss_temporary']) &&
219 + 'setup' === $_GET['blockspare_setup_notice_dismiss_temporary']
220 + ) {
221 + update_user_meta(
222 + $this->current_user_id,
223 + 'blockspare_setup_notice_dismiss_temporary_start_time',
224 + time()
225 + );
199 226 }
227 + }
200 228
201 - /**
202 - * Set temporary dismiss time.
203 - */
204 - private function set_temporary_dismiss_notice_time() {
205 - if (
206 - isset( $_GET['blockspare_setup_notice_dismiss_temporary'] ) &&
207 - 'setup' === $_GET['blockspare_setup_notice_dismiss_temporary']
208 - ) {
209 - update_user_meta(
210 - $this->current_user_id,
211 - 'blockspare_setup_notice_dismiss_temporary_start_time',
212 - time()
213 - );
214 - }
229 + /**
230 + * Set dismiss conditions.
231 + */
232 + public function set_dismiss_notice()
233 + {
234 + $user_id = get_current_user_id();
235 +
236 + $is_permanently_dismissed = ('yes' === get_user_meta($user_id, 'blockspare_setup_notice_dismiss', true));
237 +
238 + $temporary_dismiss_time = (int) get_user_meta($user_id, 'blockspare_setup_notice_dismiss_temporary_start_time', true);
239 + $is_temporarily_dismissed = ($temporary_dismiss_time > strtotime('-2 days'));
240 +
241 + // FIX: Clean, predictable condition parsing
242 + if ($is_permanently_dismissed || $is_temporarily_dismissed) {
243 + add_filter('blockspare_setup_notice_dismiss', '__return_true');
244 + } else {
245 + add_filter('blockspare_setup_notice_dismiss', '__return_false');
215 246 }
247 + }
216 248
217 - /**
218 - * Set dismiss conditions.
219 - */
220 - public function set_dismiss_notice() {
221 - $user_id = get_current_user_id();
249 + /**
250 + * Notice markup.
251 + */
252 + public function notice_markup()
253 + {
222 254
223 - $is_permanently_dismissed = ( 'yes' === get_user_meta( $user_id, 'blockspare_setup_notice_dismiss', true ) );
224 -
225 - $temporary_dismiss_time = (int) get_user_meta( $user_id, 'blockspare_setup_notice_dismiss_temporary_start_time', true );
226 - $is_temporarily_dismissed = ( $temporary_dismiss_time > strtotime( '-2 days' ) );
255 + if (! function_exists('get_plugin_data')) {
256 + require_once ABSPATH . 'wp-admin/includes/plugin.php';
257 + }
227 258
228 - // FIX: Clean, predictable condition parsing
229 - if ( $is_permanently_dismissed || $is_temporarily_dismissed ) {
230 - add_filter( 'blockspare_setup_notice_dismiss', '__return_true' );
231 - } else {
232 - add_filter( 'blockspare_setup_notice_dismiss', '__return_false' );
233 - }
234 - }
259 + $plugin_data = get_plugin_data(BLOCKSPARE_BASE_FILE);
260 + $version = isset($plugin_data['Version']) ? $plugin_data['Version'] : '';
235 261
236 - /**
237 - * Notice markup.
238 - */
239 - public function notice_markup() {
262 +?>
240 263
241 - if ( ! function_exists( 'get_plugin_data' ) ) {
242 - require_once ABSPATH . 'wp-admin/includes/plugin.php';
243 - }
244 -
245 - $plugin_data = get_plugin_data( BLOCKSPARE_BASE_FILE );
246 - $version = isset( $plugin_data['Version'] ) ? $plugin_data['Version'] : '';
247 -
248 - ?>
249 -
250 - <div class="notice notice-success blockspare-notice-setup" style="padding: 18px; position: relative;">
251 -
252 - <div style="display:flex; justify-content:space-between; gap:20px; align-items:flex-start;">
253 -
254 - <div style="flex:1;">
255 -
256 - <h2 style="margin:0 0 8px; font-size:18px; line-height:1.4;">
257 - <?php esc_html_e( 'Welcome to BlockSpare 👋', 'blockspare' ); ?>
258 - </h2>
259 -
260 - <p style="margin:0 0 12px; font-size:14px; color:#555;">
261 - <?php esc_html_e( 'Build professional news, magazine, blog, and business websites faster using ready-made Gutenberg blocks, starter templates, and content-focused layouts.', 'blockspare' ); ?>
262 - </p>
263 -
264 - <div style="display:flex; gap:10px; flex-wrap:wrap; margin-top:10px;">
265 -
266 - <a
267 - class="button button-primary"
268 - href="<?php echo esc_url( admin_url( 'post-new.php?post_type=page&blockspare_show_intro=true' ) ); ?>"
269 - >
270 - <?php esc_html_e( 'Get Started', 'blockspare' ); ?>
271 - </a>
272 -
273 - <a
274 - class="button"
275 - href="<?php echo esc_url( admin_url( 'admin.php?page=blockspare' ) ); ?>"
276 - >
277 - <?php esc_html_e( 'Browse Templates', 'blockspare' ); ?>
278 - </a>
279 -
280 - <a
281 - class="button button-secondary"
282 - href="<?php echo esc_url( 'https://blockspare.com/' ); ?>"
283 - target="_blank"
284 - >
285 - <?php esc_html_e( 'Learn More', 'blockspare' ); ?>
286 - </a>
287 -
288 - </div>
289 -
290 - <?php if ( $version ) : ?>
291 - <p style="margin-top:10px; font-size:12px; color:#888;">
292 - <?php echo esc_html( 'Version ' . $version ); ?>
293 - </p>
294 - <?php endif; ?>
295 -
296 - </div>
297 -
298 - <div style="min-width:120px; text-align:right;">
299 -
300 - <div style="font-size:12px; color:#777; margin-bottom:8px;">
301 - <?php esc_html_e( 'Quick Setup', 'blockspare' ); ?>
302 - </div>
303 -
304 - <div style="font-size:11px; color:#999;">
305 - <?php esc_html_e( 'Takes less than 2 minutes', 'blockspare' ); ?>
306 - </div>
307 -
308 - </div>
309 -
310 - </div>
311 -
264 + <div class="notice notice-success blockspare-notice-setup" style="padding: 18px; position: relative;">
265 +
266 + <div style="display:flex; justify-content:space-between; gap:20px; align-items:flex-start;">
267 +
268 + <div style="flex:1;">
269 +
270 + <h2 style="margin:0 0 8px; font-size:18px; line-height:1.4;">
271 + <?php esc_html_e('Welcome to BlockSpare 👋', 'blockspare'); ?>
272 + </h2>
273 +
274 + <p style="margin:0 0 12px; font-size:14px; color:#555;">
275 + <?php esc_html_e('Build professional news, magazine, blog, and business websites faster using ready-made Gutenberg blocks, starter templates, and content-focused layouts.', 'blockspare'); ?>
276 + </p>
277 +
278 + <div style="display:flex; gap:10px; flex-wrap:wrap; margin-top:10px;">
279 +
312 280 <a
313 - class="notice-dismiss"
314 - href="<?php echo esc_url( $this->dismiss_url ); ?>"
315 - ></a>
316 -
281 + class="button button-primary"
282 + href="<?php echo esc_url(admin_url('post-new.php?post_type=page&blockspare_show_intro=true')); ?>">
283 + <?php esc_html_e('Get Started', 'blockspare'); ?>
284 + </a>
285 +
286 + <a
287 + class="button"
288 + href="<?php echo esc_url(admin_url('admin.php?page=blockspare')); ?>">
289 + <?php esc_html_e('Browse Templates', 'blockspare'); ?>
290 + </a>
291 +
292 + <a
293 + class="button button-secondary"
294 + href="<?php echo esc_url('https://blockspare.com/'); ?>"
295 + target="_blank">
296 + <?php esc_html_e('Learn More', 'blockspare'); ?>
297 + </a>
298 +
299 + </div>
300 +
301 + <?php if ($version) : ?>
302 + <p style="margin-top:10px; font-size:12px; color:#888;">
303 + <?php echo esc_html('Version ' . $version); ?>
304 + </p>
305 + <?php endif; ?>
306 +
317 307 </div>
318 -
319 - <?php
320 - }
308 +
309 + <div style="min-width:120px; text-align:right;">
310 +
311 + <div style="font-size:12px; color:#777; margin-bottom:8px;">
312 + <?php esc_html_e('Quick Setup', 'blockspare'); ?>
313 + </div>
314 +
315 + <div style="font-size:11px; color:#999;">
316 + <?php esc_html_e('Takes less than 2 minutes', 'blockspare'); ?>
317 + </div>
318 +
319 + </div>
320 +
321 + </div>
322 +
323 + <a
324 + class="notice-dismiss"
325 + href="<?php echo esc_url($this->dismiss_url); ?>"></a>
326 +
327 + </div>
328 +
329 +<?php
330 + }
321 331 }
322 332
323 333 /**
324 334 * Initialize notice after WordPress admin loads.
325 335 */
326 -function blockspare_setup_notice_init() {
336 +function blockspare_setup_notice_init()
337 +{
327 338
328 - if ( ! is_admin() ) {
329 - return;
330 - }
339 + if (! is_admin()) {
340 + return;
341 + }
331 342
332 - new Blockspare_Setup_Notice();
343 + new Blockspare_Setup_Notice();
333 344 }
334 345
335 -add_action( 'admin_init', 'blockspare_setup_notice_init' );
346 +add_action('admin_init', 'blockspare_setup_notice_init');