PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.11.15
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.11.15
4.0.8 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 All 149 releases
← All changes | classes/Visualizer/Gutenberg/Block.php +35 -12 3.10.153.11.15 View file →
@@ -108,12 +108,17 @@
108 108 'proTeaser' => tsdk_utmify( Visualizer_Plugin::PRO_TEASER_URL, 'blockupsell'),
109 109 'absurl' => VISUALIZER_ABSURL,
110 110 'charts' => Visualizer_Module_Admin::_getChartTypesLocalized(),
111 111 'adminPage' => menu_page_url( 'visualizer', false ),
112 + 'createChart' => add_query_arg( array( 'action' => 'visualizer-create-chart', 'library' => 'yes', 'type' => '', 'chart-library' => '', 'tab' => 'visualizer' ), admin_url( 'admin-ajax.php' ) ),
112 113 'sqlTable' => $table_col_mapping,
113 - 'chartsPerPage' => defined( 'TI_CYPRESS_TESTING' ) ? 20 : 6,
114 + 'chartsPerPage' => defined( 'TI_E2E_TESTING' ) ? 20 : 6,
114 115 'proFeaturesLocked' => Visualizer_Module_Admin::proFeaturesLocked(),
115 116 'isFullSiteEditor' => 'site-editor.php' === $pagenow,
117 + 'legacyBlockEdit' => apply_filters( 'visualizer_legacy_block_edit', false ),
118 + /* translators: %1$s: opening tag, %2$s: closing tag */
119 + 'blockEditDoc' => sprintf( __( 'The editor for managing chart settings has been removed from the block editor. You can find more information in this %1$sdocumentation%2$s', 'visualizer' ), '<a href="https://docs.themeisle.com/article/1705-how-can-i-display-a-chart#using-visualizer-block" target="_blank">', '</a>' ),
120 + 'chartEditUrl' => admin_url( 'admin-ajax.php' ),
116 121 );
117 122 wp_localize_script( 'visualizer-gutenberg-block', 'visualizerLocalize', $translation_array );
118 123
119 124 // Enqueue frontend and editor block styles
@@ -130,9 +135,9 @@
130 135 'lineWrapping' => true,
131 136 'dragDrop' => false,
132 137 'matchBrackets' => true,
133 138 'autoCloseBrackets' => true,
134 - 'extraKeys' => array( 'Ctrl-Space' => 'autocomplete' ),
139 + 'extraKeys' => array( 'Shift-Space' => 'autocomplete' ),
135 140 'hintOptions' => array( 'tables' => $table_col_mapping ),
136 141 ),
137 142 )
138 143 );
@@ -463,9 +468,9 @@
463 468 }
464 469 }
465 470
466 471 if ( Visualizer_Module::is_pro() ) {
467 - $permissions = get_post_meta( $post_id, Visualizer_PRO::CF_PERMISSIONS, true );
472 + $permissions = get_post_meta( $post_id, Visualizer_Pro::CF_PERMISSIONS, true );
468 473
469 474 if ( empty( $permissions ) ) {
470 475 $permissions = array( 'permissions' => array(
471 476 'read' => 'all',
@@ -486,9 +491,9 @@
486 491 *
487 492 * @access public
488 493 */
489 494 public function get_query_data( $data ) {
490 - if ( ! current_user_can( 'edit_posts' ) ) {
495 + if ( ! current_user_can( 'administrator' ) || ( is_multisite() && ! is_super_admin() ) ) {
491 496 return false;
492 497 }
493 498
494 499 $source = new Visualizer_Source_Query( stripslashes( $data['query'] ) );
@@ -590,14 +595,17 @@
590 595 return new WP_Error( 'invalid_post_type', 'Invalid post type.' );
591 596 }
592 597 $chart_type = sanitize_text_field( $data['visualizer-chart-type'] );
593 598 $source_type = sanitize_text_field( $data['visualizer-source'] );
599 + $default_data = (int) $data['visualizer-default-data'];
600 + $series_data = map_deep( $data['visualizer-series'], array( $this, 'sanitize_value' ) );
601 + $settings_data = map_deep( $data['visualizer-settings'], array( $this, 'sanitize_value' ) );
594 602
595 603 update_post_meta( $data['id'], Visualizer_Plugin::CF_CHART_TYPE, $chart_type );
596 604 update_post_meta( $data['id'], Visualizer_Plugin::CF_SOURCE, $source_type );
597 - update_post_meta( $data['id'], Visualizer_Plugin::CF_DEFAULT_DATA, $data['visualizer-default-data'] );
598 - update_post_meta( $data['id'], Visualizer_Plugin::CF_SERIES, $data['visualizer-series'] );
599 - update_post_meta( $data['id'], Visualizer_Plugin::CF_SETTINGS, $data['visualizer-settings'] );
605 + update_post_meta( $data['id'], Visualizer_Plugin::CF_DEFAULT_DATA, $default_data );
606 + update_post_meta( $data['id'], Visualizer_Plugin::CF_SERIES, $series_data );
607 + update_post_meta( $data['id'], Visualizer_Plugin::CF_SETTINGS, $settings_data );
600 608
601 609 if ( $data['visualizer-chart-url'] && $data['visualizer-chart-schedule'] >= 0 ) {
602 610 $chart_url = esc_url_raw( $data['visualizer-chart-url'] );
603 611 $chart_schedule = intval( $data['visualizer-chart-schedule'] );
@@ -622,10 +630,10 @@
622 630 delete_post_meta( $data['id'], Visualizer_Plugin::CF_DB_QUERY );
623 631 }
624 632
625 633 if ( 'Visualizer_Source_Csv_Remote' === $source_type ) {
626 - $schedule_url = $data['visualizer-chart-url'];
627 - $schedule_id = $data['visualizer-chart-schedule'];
634 + $schedule_url = esc_url_raw( $data['visualizer-chart-url'] );
635 + $schedule_id = intval( $data['visualizer-chart-schedule'] );
628 636 update_post_meta( $data['id'], Visualizer_Plugin::CF_CHART_URL, $schedule_url );
629 637 update_post_meta( $data['id'], Visualizer_Plugin::CF_CHART_SCHEDULE, $schedule_id );
630 638 } else {
631 639 delete_post_meta( $data['id'], Visualizer_Plugin::CF_CHART_URL );
@@ -636,10 +644,10 @@
636 644 if ( $source_type === 'Visualizer_Source_Json' ) {
637 645 $json_schedule = intval( $data['visualizer-json-schedule'] );
638 646 $json_url = esc_url_raw( $data['visualizer-json-url'] );
639 647 $json_headers = esc_url_raw( $data['visualizer-json-headers'] );
640 - $json_root = $data['visualizer-json-root'];
641 - $json_paging = $data['visualizer-json-paging'];
648 + $json_root = sanitize_text_field( $data['visualizer-json-root'] );
649 + $json_paging = sanitize_text_field( $data['visualizer-json-paging'] );
642 650
643 651 update_post_meta( $data['id'], Visualizer_Plugin::CF_JSON_SCHEDULE, $json_schedule );
644 652 update_post_meta( $data['id'], Visualizer_Plugin::CF_JSON_URL, $json_url );
645 653 update_post_meta( $data['id'], Visualizer_Plugin::CF_JSON_HEADERS, $json_headers );
@@ -658,9 +666,10 @@
658 666 delete_post_meta( $data['id'], Visualizer_Plugin::CF_JSON_PAGING );
659 667 }
660 668
661 669 if ( Visualizer_Module::is_pro() ) {
662 - update_post_meta( $data['id'], Visualizer_PRO::CF_PERMISSIONS, $data['visualizer-permissions'] );
670 + $permissions_data = map_deep( $data['visualizer-permissions'], array( $this, 'sanitize_value' ) );
671 + update_post_meta( $data['id'], Visualizer_Pro::CF_PERMISSIONS, $permissions_data );
663 672 }
664 673
665 674 if ( $data['visualizer-chart-url'] ) {
666 675 $chart_url = esc_url_raw( $data['visualizer-chart-url'] );
@@ -856,6 +865,20 @@
856 865 ),
857 866 );
858 867 }
859 868 return $args;
869 + }
870 +
871 + /**
872 + * Sanitize value.
873 + *
874 + * @param mixed $value The value to sanitize.
875 + * @return mixed Sanitized value.
876 + */
877 + private function sanitize_value( $value ) {
878 + if ( is_string( $value ) ) {
879 + return sanitize_text_field( $value );
880 + }
881 +
882 + return $value;
860 883 }
861 884 }