| @@ -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 | } |