PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.7.9
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.7.9
4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.2 3.1.3 3.10.0 3.10.1 3.10.10 3.10.11 3.10.12 3.10.13 3.10.14 3.10.15 3.10.2 3.10.3 3.10.4 All 148 releases
← All changes | classes/Visualizer/Module/Setup.php +20 -125 4.0.73.7.9 View file →
@@ -48,9 +48,8 @@
48 48 $this->_addFilter( 'visualizer_schedule_refresh_chart', 'refresh_db_for_chart', 10, 3 );
49 49
50 50 $this->_addAction( 'admin_init', 'adminInit' );
51 51 $this->_addAction( 'init', 'setupCustomPostTypes' );
52 - $this->_addFilter( 'cron_schedules', 'custom_cron_schedules' );
53 52 $this->_addAction( 'plugins_loaded', 'loadTextDomain' );
54 53 $this->_addFilter( 'visualizer_logger_data', 'getLoggerData' );
55 54 $this->_addFilter( 'visualizer_get_chart_counts', 'getUsage', 10, 2 );
56 55
@@ -122,9 +121,9 @@
122 121 $charts['scheduled'] = $charts['scheduled'] + 1;
123 122 }
124 123
125 124 if ( Visualizer_Module::is_pro() ) {
126 - $permissions = get_post_meta( $chart_id, Visualizer_Pro::CF_PERMISSIONS, true );
125 + $permissions = get_post_meta( $chart_id, Visualizer_PRO::CF_PERMISSIONS, true );
127 126 if ( empty( $permissions ) ) {
128 127 continue;
129 128 }
130 129 $permissions = $permissions['permissions'];
@@ -208,14 +207,11 @@
208 207 /**
209 208 * Activates the plugin on a particular blog instance (supports multisite and single site).
210 209 */
211 210 private function activate_on_site() {
212 - $this->schedule_refresh_db_action();
211 + wp_clear_scheduled_hook( 'visualizer_schedule_refresh_db' );
212 + wp_schedule_event( strtotime( 'midnight' ) - get_option( 'gmt_offset' ) * HOUR_IN_SECONDS, apply_filters( 'visualizer_chart_schedule_interval', 'hourly' ), 'visualizer_schedule_refresh_db' );
213 213 add_option( 'visualizer-activated', true );
214 - $is_fresh_install = get_option( 'visualizer_fresh_install', false );
215 - if ( ! defined( 'TI_E2E_TESTING' ) && false === $is_fresh_install ) {
216 - update_option( 'visualizer_fresh_install', '1' );
217 - }
218 214 }
219 215
220 216 /**
221 217 * Deactivate the plugin
@@ -235,9 +231,9 @@
235 231 /**
236 232 * Deactivates the plugin on a particular blog instance (supports multisite and single site).
237 233 */
238 234 private function deactivate_on_site() {
239 - $this->unschedule_refresh_db_action();
235 + wp_clear_scheduled_hook( 'visualizer_schedule_refresh_db' );
240 236 delete_option( 'visualizer-activated', true );
241 237 }
242 238
243 239 /**
@@ -251,39 +247,13 @@
251 247 define( 'VISUALIZER_SURVEY', Visualizer_Module::is_pro() ? 'https://forms.gle/7Zo7FuZbvQ8DTvRi6' : 'https://forms.gle/muMtbcyvHn1aTvmJ7' );
252 248 // fire any upgrades necessary.
253 249 Visualizer_Module_Upgrade::upgrade();
254 250
255 - $activated_flag = get_option( 'visualizer-activated' );
256 - $fresh_install = get_option( 'visualizer_fresh_install', false );
257 - $is_pro = Visualizer_Module::is_pro();
258 - if ( $activated_flag ) {
259 - if ( function_exists( 'wp_doing_ajax' ) && wp_doing_ajax() ) {
260 - // Defer redirect until a normal admin request.
261 - return;
262 - }
263 - if ( wp_doing_cron() ) {
264 - // Defer redirect during cron requests.
265 - return;
266 - }
251 + if ( get_option( 'visualizer-activated' ) ) {
267 252 delete_option( 'visualizer-activated' );
268 253 if ( ! headers_sent() ) {
269 - if ( ! $is_pro && ! empty( $fresh_install ) ) {
270 - $redirect_url = array(
271 - 'page' => 'visualizer-setup-wizard',
272 - 'tab' => '#step-1',
273 - );
274 - } else {
275 - $page_name = Visualizer_Module::numberOfCharts() > 0 ? Visualizer_Plugin::NAME : 'viz-support';
276 - $redirect_url = array(
277 - 'page' => $page_name,
278 - );
279 - }
280 - wp_safe_redirect(
281 - add_query_arg(
282 - $redirect_url,
283 - admin_url( 'admin.php' )
284 - )
285 - );
254 + $page_name = Visualizer_Module::numberOfCharts() > 0 ? Visualizer_Plugin::NAME : 'viz-support';
255 + wp_redirect( esc_url_raw( add_query_arg( 'page', $page_name, admin_url( 'admin.php' ) ) ) );
286 256 exit();
287 257 }
288 258 }
289 259 }
@@ -291,11 +261,11 @@
291 261
292 262 /**
293 263 * Refresh the specific chart from the db.
294 264 *
295 - * @param WP_Post|null $chart The chart object.
296 - * @param int $chart_id The chart id.
297 - * @param bool $force If this is true, then the chart data will be force refreshed. If false, data will be refreshed only if the chart requests live data.
265 + * @param WP_Post $chart The chart object.
266 + * @param int $chart_id The chart id.
267 + * @param bool $force If this is true, then the chart data will be force refreshed. If false, data will be refreshed only if the chart requests live data.
298 268 *
299 269 * @access public
300 270 */
301 271 public function refresh_db_for_chart( $chart, $chart_id, $force = false ) {
@@ -401,19 +371,17 @@
401 371 return $chart;
402 372 }
403 373
404 374 /**
405 - * Refresh the Database chart type.
375 + * Refresh the db chart.
406 376 *
407 377 * @access public
408 378 */
409 379 public function refreshDbChart() {
410 - // NOTE: This use a different key from normal schedule. Updated only by Database chart. Check `visualizer_schedule_import` action.
411 - $chart_schedules = get_option( Visualizer_Plugin::CF_DB_SCHEDULE, array() );
412 - if ( ! $chart_schedules ) {
380 + $schedules = get_option( Visualizer_Plugin::CF_DB_SCHEDULE, array() );
381 + if ( ! $schedules ) {
413 382 return;
414 383 }
415 -
416 384 if ( ! defined( 'VISUALIZER_DO_NOT_DIE' ) ) {
417 385 // define this so that the ajax call does not die
418 386 // this means that if the new version of pro and the old version of free are installed, only the first chart will be updated
419 387 define( 'VISUALIZER_DO_NOT_DIE', true );
@@ -419,33 +387,24 @@
419 387 define( 'VISUALIZER_DO_NOT_DIE', true );
420 388 }
421 389
422 390 $new_schedules = array();
423 - $current_time = time();
424 - foreach ( $chart_schedules as $chart_id => $scheduled_time ) {
425 -
426 - // Skip deleted charts.
427 - if ( false === get_post_status( $chart_id ) ) {
391 + $now = time();
392 + foreach ( $schedules as $chart_id => $time ) {
393 + $new_schedules[ $chart_id ] = $time;
394 + if ( $time > $now ) {
428 395 continue;
429 396 }
430 397
431 - $new_schedules[ $chart_id ] = $scheduled_time;
432 -
433 - // Should we do an update?
434 - if ( $scheduled_time > $current_time ) {
435 - continue;
436 - }
437 -
398 + // if the time is nigh, we force an update.
438 399 $this->refresh_db_for_chart( null, $chart_id, true );
439 -
440 400 // Clear existing chart cache.
441 401 $cache_key = Visualizer_Plugin::CF_CHART_CACHE . '_' . $chart_id;
442 402 if ( get_transient( $cache_key ) ) {
443 403 delete_transient( $cache_key );
444 404 }
445 -
446 - $scheduled_hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_DB_SCHEDULE, true );
447 - $new_schedules[ $chart_id ] = $current_time + $scheduled_hours * HOUR_IN_SECONDS;
405 + $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_DB_SCHEDULE, true );
406 + $new_schedules[ $chart_id ] = time() + $hours * HOUR_IN_SECONDS;
448 407 }
449 408 update_option( Visualizer_Plugin::CF_DB_SCHEDULE, $new_schedules );
450 409 }
451 410
@@ -464,69 +423,5 @@
464 423 update_option( 'visualizer-new-user', ! empty( $charts ) ? 'no' : 'yes' );
465 424 }
466 425 }
467 426
468 - /**
469 - * Add custom cron schedules.
470 - *
471 - * @param array $schedules The current schedules options.
472 - * @return array The modified schedules options.
473 - */
474 - public function custom_cron_schedules( $schedules ) {
475 - $schedules['visualizer_ten_minutes'] = array(
476 - 'interval' => 600,
477 - 'display' => __( 'Every 10 minutes', 'visualizer' ),
478 - );
479 -
480 - return $schedules;
481 - }
482 -
483 - /**
484 - * Schedule the recurring DB refresh action.
485 - */
486 - private function schedule_refresh_db_action(): void {
487 - $hook = 'visualizer_schedule_refresh_db';
488 - $group = 'visualizer';
489 - $interval_key = apply_filters( 'visualizer_chart_schedule_interval', 'visualizer_ten_minutes' );
490 - $interval = $this->get_schedule_interval_seconds( $interval_key );
491 - $timestamp = strtotime( 'midnight' ) - get_option( 'gmt_offset' ) * HOUR_IN_SECONDS;
492 -
493 - if ( function_exists( 'as_next_scheduled_action' ) && function_exists( 'as_schedule_recurring_action' ) ) {
494 - $next = as_next_scheduled_action( $hook, array(), $group );
495 - if ( false === $next ) {
496 - as_schedule_recurring_action( $timestamp, $interval, $hook, array(), $group );
497 - }
498 - wp_clear_scheduled_hook( $hook );
499 - return;
500 - }
501 -
502 - wp_clear_scheduled_hook( $hook );
503 - wp_schedule_event( $timestamp, $interval_key, $hook );
504 - }
505 -
506 - /**
507 - * Unschedule the recurring DB refresh action.
508 - */
509 - private function unschedule_refresh_db_action(): void {
510 - $hook = 'visualizer_schedule_refresh_db';
511 - $group = 'visualizer';
512 - if ( function_exists( 'as_unschedule_all_actions' ) ) {
513 - as_unschedule_all_actions( $hook, array(), $group );
514 - }
515 - wp_clear_scheduled_hook( $hook );
516 - }
517 -
518 - /**
519 - * Resolve a cron schedule key to seconds.
520 - *
521 - * @param string $interval_key Cron schedule key.
522 - * @return int Interval in seconds.
523 - */
524 - private function get_schedule_interval_seconds( $interval_key ) {
525 - $schedules = wp_get_schedules();
526 - if ( isset( $schedules[ $interval_key ]['interval'] ) ) {
527 - return (int) $schedules[ $interval_key ]['interval'];
528 - }
529 -
530 - return 600;
531 - }
532 427 }