PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.4.4
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.4.4
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/Admin.php +66 -191 3.10.33.4.4 View file →
@@ -53,9 +53,9 @@
53 53 parent::__construct( $plugin );
54 54 $this->_addAction( 'load-post.php', 'enqueueMediaScripts' );
55 55 $this->_addAction( 'load-post-new.php', 'enqueueMediaScripts' );
56 56 $this->_addAction( 'admin_footer', 'renderTemplates' );
57 - $this->_addAction( 'admin_enqueue_scripts', 'enqueueLibraryScripts', null, 0 );
57 + $this->_addAction( 'admin_enqueue_scripts', 'enqueueLibraryScripts', null, 8 );
58 58 $this->_addAction( 'admin_menu', 'registerAdminMenu' );
59 59 $this->_addFilter( 'media_view_strings', 'setupMediaViewStrings' );
60 60 $this->_addFilter( 'plugin_action_links', 'getPluginActionLinks', 10, 2 );
61 61 $this->_addFilter( 'plugin_row_meta', 'getPluginMetaLinks', 10, 2 );
@@ -73,10 +73,8 @@
73 73 $this->_addAction( 'visualizer_chart_schedules_spl', 'addSplChartSchedules', null, 10, 3 );
74 74
75 75 $this->_addAction( 'admin_init', 'init' );
76 76
77 - $this->_addAction( 'visualizer_chart_languages', 'addMultilingualSupport' );
78 -
79 77 if ( defined( 'TI_CYPRESS_TESTING' ) ) {
80 78 $this->load_cypress_hooks();
81 79 }
82 80
@@ -315,9 +313,9 @@
315 313
316 314 // Load all the assets for the different libraries we support.
317 315 $deps = array(
318 316 Visualizer_Render_Sidebar_Google::enqueue_assets( array( 'media-editor' ) ),
319 - Visualizer_Render_Sidebar_Type_DataTable_Tabular::enqueue_assets( array( 'media-editor' ) ),
317 + Visualizer_Render_Sidebar_Type_DataTable_DataTable::enqueue_assets( array( 'media-editor' ) ),
320 318 );
321 319
322 320 wp_enqueue_script( 'visualizer-media-model', VISUALIZER_ABSURL . 'js/media/model.js', $deps, Visualizer_Plugin::VERSION, true );
323 321 wp_enqueue_script( 'visualizer-media-collection', VISUALIZER_ABSURL . 'js/media/collection.js', array( 'visualizer-media-model' ), Visualizer_Plugin::VERSION, true );
@@ -366,9 +364,9 @@
366 364 'filters' => $chart_types,
367 365 'types' => array_keys( $chart_types ),
368 366 ),
369 367 'nonce' => wp_create_nonce(),
370 - 'buildurl' => esc_url( add_query_arg( 'action', Visualizer_Plugin::ACTION_CREATE_CHART, admin_url( 'admin-ajax.php' ) ) ),
368 + 'buildurl' => add_query_arg( 'action', Visualizer_Plugin::ACTION_CREATE_CHART, admin_url( 'admin-ajax.php' ) ),
371 369 );
372 370
373 371 return $strings;
374 372 }
@@ -390,71 +388,74 @@
390 388 'enabled' => true,
391 389 );
392 390 }
393 391
394 - $enabled = self::proFeaturesLocked();
395 -
396 392 $types = array_merge(
397 393 $additional,
398 394 array(
399 - 'tabular' => array(
395 + 'dataTable' => array(
400 396 'name' => esc_html__( 'Table', 'visualizer' ),
401 397 'enabled' => true,
402 - 'supports' => $enabled ? array( 'Google Charts', 'DataTable' ) : array( 'DataTable' ),
398 + 'supports' => array( 'DataTable' ),
403 399 ),
404 400 'pie' => array(
405 401 'name' => esc_html__( 'Pie/Donut', 'visualizer' ),
406 402 'enabled' => true,
407 - 'supports' => $enabled ? array( 'Google Charts', 'ChartJS' ) : array( 'Google Charts' ),
403 + 'supports' => array( 'Google Charts', 'ChartJS' ),
408 404 ),
409 405 'line' => array(
410 406 'name' => esc_html__( 'Line', 'visualizer' ),
411 407 'enabled' => true,
412 - 'supports' => $enabled ? array( 'Google Charts', 'ChartJS' ) : array( 'Google Charts' ),
408 + 'supports' => array( 'Google Charts', 'ChartJS' ),
413 409 ),
414 - 'bar' => array(
415 - 'name' => esc_html__( 'Bar', 'visualizer' ),
416 - 'enabled' => true,
417 - 'supports' => $enabled ? array( 'Google Charts', 'ChartJS' ) : array( 'Google Charts' ),
418 - ),
419 410 'area' => array(
420 411 'name' => esc_html__( 'Area', 'visualizer' ),
421 - 'enabled' => $enabled,
412 + 'enabled' => true,
422 413 // in ChartJS, the fill option is used to make Line chart an area: https://www.chartjs.org/docs/latest/charts/area.html
423 414 'supports' => array( 'Google Charts' ),
424 415 ),
425 416 'geo' => array(
426 417 'name' => esc_html__( 'Geo', 'visualizer' ),
427 - 'enabled' => $enabled,
418 + 'enabled' => true,
428 419 'supports' => array( 'Google Charts' ),
429 420 ),
421 + 'bar' => array(
422 + 'name' => esc_html__( 'Bar', 'visualizer' ),
423 + 'enabled' => true,
424 + 'supports' => array( 'Google Charts', 'ChartJS' ),
425 + ),
430 426 'column' => array(
431 427 'name' => esc_html__( 'Column', 'visualizer' ),
432 - 'enabled' => $enabled,
428 + 'enabled' => true,
433 429 'supports' => array( 'Google Charts', 'ChartJS' ),
434 430 ),
435 431 'bubble' => array(
436 432 'name' => esc_html__( 'Bubble', 'visualizer' ),
437 - 'enabled' => $enabled,
433 + 'enabled' => true,
438 434 // chartjs' bubble is ugly looking (and it won't work off the default bubble.csv) so it is being excluded for the time being.
439 435 'supports' => array( 'Google Charts' ),
440 436 ),
441 437 'scatter' => array(
442 438 'name' => esc_html__( 'Scatter', 'visualizer' ),
443 - 'enabled' => $enabled,
439 + 'enabled' => true,
444 440 'supports' => array( 'Google Charts' ),
445 441 ),
446 442 'gauge' => array(
447 443 'name' => esc_html__( 'Gauge', 'visualizer' ),
448 - 'enabled' => $enabled,
444 + 'enabled' => true,
449 445 'supports' => array( 'Google Charts' ),
450 446 ),
451 447 'candlestick' => array(
452 448 'name' => esc_html__( 'Candlestick', 'visualizer' ),
453 - 'enabled' => $enabled,
449 + 'enabled' => true,
454 450 'supports' => array( 'Google Charts' ),
455 451 ),
456 452 // pro types
453 + 'table' => array(
454 + 'name' => esc_html__( 'Table (Deprecated)', 'visualizer' ),
455 + 'enabled' => false,
456 + 'supports' => array( 'Google Charts' ),
457 + ),
457 458 'timeline' => array(
458 459 'name' => esc_html__( 'Timeline', 'visualizer' ),
459 460 'enabled' => false,
460 461 'supports' => array( 'Google Charts', 'ChartJS' ),
@@ -523,8 +524,18 @@
523 524 switch ( $where ) {
524 525 case 'types':
525 526 // fall-through
526 527 case 'library':
528 + // if the user has a Google Table chart, show it as deprecated otherwise remove the option from the library.
529 + if ( ! self::hasChartType( 'table' ) ) {
530 + $deprecated[] = 'table';
531 + if ( $get2Darray ) {
532 + $types['dataTable'] = esc_html__( 'Table', 'visualizer' );
533 + } else {
534 + $types['dataTable']['name'] = esc_html__( 'Table', 'visualizer' );
535 + }
536 + }
537 +
527 538 // if a user has a Gauge/Candlestick chart, then let them keep using it.
528 539 if ( ! Visualizer_Module::is_pro() ) {
529 540 if ( ! self::hasChartType( 'gauge' ) ) {
530 541 if ( $get2Darray ) {
@@ -542,8 +553,18 @@
542 553 }
543 554 }
544 555 break;
545 556 default:
557 + // remove the option to create a Google Table chart.
558 + $deprecated[] = 'table';
559 +
560 + // rename the new table chart type.
561 + if ( $get2Darray ) {
562 + $types['dataTable'] = esc_html__( 'Table', 'visualizer' );
563 + } else {
564 + $types['dataTable']['name'] = esc_html__( 'Table', 'visualizer' );
565 + }
566 +
546 567 // if a user has a Gauge/Candlestick chart, then let them keep using it.
547 568 if ( ! Visualizer_Module::is_pro() ) {
548 569 if ( ! self::hasChartType( 'gauge' ) ) {
549 570 if ( $get2Darray ) {
@@ -610,9 +631,8 @@
610 631 VISUALIZER_ABSURL . 'js/library.js',
611 632 array(
612 633 'jquery',
613 634 'media-views',
614 - 'clipboard',
615 635 ),
616 636 Visualizer_Plugin::VERSION,
617 637 true
618 638 );
@@ -687,49 +707,14 @@
687 707 'edit_posts',
688 708 'viz-support',
689 709 array( $this, 'renderSupportPage' )
690 710 );
691 -
692 711 remove_submenu_page( Visualizer_Plugin::NAME, Visualizer_Plugin::NAME );
693 712
694 713 add_action( "load-{$this->_libraryPage}", array( $this, 'addScreenOptions' ) );
695 - add_action( 'admin_footer', array( $this, 'handleGetProSubMenu' ) );
696 714 }
697 715
698 716 /**
699 - * Handle get pro plugin submenu.
700 - */
701 - public function handleGetProSubMenu() {
702 - if ( ! Visualizer_Module::is_pro() ) {
703 - ?>
704 - <style type="text/css">
705 - #toplevel_page_visualizer ul.wp-submenu li:last-child {
706 - background: #FF7E65;
707 - font-size: 14px;
708 - font-weight: 600;
709 - color: #fff;
710 - }
711 - #toplevel_page_visualizer ul.wp-submenu li:last-child > a {
712 - color: #fff !important;
713 - }
714 - #toplevel_page_visualizer ul.wp-submenu li:last-child > a:hover {
715 - box-shadow: inherit;
716 - }
717 - </style>
718 - <?php
719 - if ( get_option( 'visualizer_fresh_install', false ) ) {
720 - ?>
721 - <style type="text/css">
722 - #toplevel_page_visualizer ul.wp-submenu li.wp-first-item + li + li + li {
723 - display: none;
724 - }
725 - </style>
726 - <?php
727 - }
728 - }
729 - }
730 -
731 - /**
732 717 * Adds the screen options for pagination.
733 718 */
734 719 function addScreenOptions() {
735 720 $screen = get_current_screen();
@@ -741,9 +726,9 @@
741 726
742 727 $args = array(
743 728 'label' => __( 'Number of charts per page:', 'visualizer' ),
744 729 'default' => 6,
745 - 'option' => 'visualizer_library_per_page',
730 + 'option' => 'visualizer_per_page_library',
746 731 );
747 732 add_screen_option( 'per_page', $args );
748 733 }
749 734
@@ -750,9 +735,9 @@
750 735 /**
751 736 * Returns the screen option for pagination.
752 737 */
753 738 function setScreenOptions( $status, $option, $value ) {
754 - if ( 'visualizer_library_per_page' === $option ) {
739 + if ( 'visualizer_per_page_library' === $option ) {
755 740 return $value;
756 741 }
757 742 }
758 743
@@ -760,24 +745,8 @@
760 745 * Adds the display filters to be used in the meta_query while displaying the charts.
761 746 */
762 747 private function getDisplayFilters( &$query_args ) {
763 748 $query = array();
764 - global $sitepress;
765 - if ( Visualizer_Module::is_pro() && ( function_exists( 'icl_get_languages' ) && $sitepress instanceof \SitePress ) ) {
766 - $current_lang = icl_get_current_language();
767 - if ( in_array( $current_lang, array( 'all', icl_get_default_language() ), true ) ) {
768 - $query[] = array(
769 - 'key' => 'chart_lang',
770 - 'compare' => 'NOT EXISTS',
771 - );
772 - } else {
773 - $query[] = array(
774 - 'key' => 'chart_lang',
775 - 'value' => $current_lang,
776 - 'compare' => '=',
777 - );
778 - }
779 - }
780 749
781 750 // add chart type filter to the query arguments
782 751 $type = filter_input( INPUT_GET, 'type' );
783 752 if ( $type && in_array( $type, Visualizer_Plugin::getChartTypes(), true ) ) {
@@ -875,9 +844,9 @@
875 844
876 845 $this->getDisplayFilters( $query_args );
877 846
878 847 // Added by Ash/Upwork
879 - $filterByMeta = ! empty( $_GET['s'] ) ? sanitize_text_field( wp_unslash( $_GET['s'] ) ) : null; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
848 + $filterByMeta = filter_input( INPUT_GET, 's', FILTER_SANITIZE_STRING );
880 849 if ( $filterByMeta ) {
881 850 $query = array(
882 851 'key' => Visualizer_Plugin::CF_SETTINGS,
883 852 'value' => $filterByMeta,
@@ -957,20 +926,8 @@
957 926
958 927 $series = apply_filters( Visualizer_Plugin::FILTER_GET_CHART_SERIES, get_post_meta( $chart->ID, Visualizer_Plugin::CF_SERIES, true ), $chart->ID, $type );
959 928 $data = self::get_chart_data( $chart, $type );
960 929
961 - // Set default setting series when add manual chart data - Only during first creation.
962 - if ( isset( $settings['series'] ) && ! empty( $series ) ) {
963 - $count_series = count( $series ) - count( $settings['series'] );
964 - if ( $count_series > 1 ) {
965 - $clone_last_series = end( $settings['series'] );
966 - $clone_last_series = array_fill_keys( array_keys( $clone_last_series ), '' );
967 - foreach ( range( 1, $count_series ) as $item ) {
968 - $settings['series'][] = $clone_last_series;
969 - }
970 - }
971 - }
972 -
973 930 $library = $this->load_chart_type( $chart->ID );
974 931
975 932 $id = 'visualizer-' . $chart->ID;
976 933 $arguments = $this->get_inline_custom_css( $id, $settings );
@@ -978,15 +935,8 @@
978 935 $css .= $arguments[0];
979 936 $settings = $arguments[1];
980 937 }
981 938
982 - if ( isset( $settings['controls']['ui']['labelStacking'] ) ) {
983 - unset( $settings['controls']['ui']['labelStacking'] );
984 - }
985 - if ( isset( $settings['controls']['ui']['orientation'] ) ) {
986 - unset( $settings['controls']['ui']['orientation'] );
987 - }
988 -
989 939 // add chart to the array
990 940 $charts[ $id ] = array(
991 941 'id' => $chart->ID,
992 942 'type' => $type,
@@ -1005,36 +955,31 @@
1005 955 'language' => $this->get_language(),
1006 956 'map_api_key' => get_option( 'visualizer-map-api-key' ),
1007 957 'charts' => $charts,
1008 958 'urls' => array(
1009 - 'base' => esc_url( add_query_arg( array( 'vpage' => false, 'vaction' => false ) ) ),
1010 - 'create' => esc_url(
1011 - add_query_arg(
1012 - array(
1013 - 'action' => Visualizer_Plugin::ACTION_CREATE_CHART,
1014 - 'library' => 'yes',
1015 - 'type' => isset( $_GET['type'] ) ? $_GET['type'] : '',
1016 - 'chart-library' => isset( $_GET['chart-library'] ) ? $_GET['chart-library'] : '',
1017 - 'vaction' => false,
1018 - ),
1019 - $ajaxurl
1020 - )
959 + 'base' => add_query_arg( array( 'vpage' => false, 'vaction' => false ) ),
960 + 'create' => add_query_arg(
961 + array(
962 + 'action' => Visualizer_Plugin::ACTION_CREATE_CHART,
963 + 'library' => 'yes',
964 + 'type' => isset( $_GET['type'] ) ? $_GET['type'] : '',
965 + 'chart-library' => isset( $_GET['chart-library'] ) ? $_GET['chart-library'] : '',
966 + 'vaction' => false,
967 + ),
968 + $ajaxurl
1021 969 ),
1022 - 'edit' => esc_url(
1023 - add_query_arg(
1024 - array(
1025 - 'action' => Visualizer_Plugin::ACTION_EDIT_CHART,
1026 - 'library' => 'yes',
1027 - 'vaction' => false,
1028 - ),
1029 - $ajaxurl
1030 - )
970 + 'edit' => add_query_arg(
971 + array(
972 + 'action' => Visualizer_Plugin::ACTION_EDIT_CHART,
973 + 'library' => 'yes',
974 + 'vaction' => false,
975 + ),
976 + $ajaxurl
1031 977 ),
1032 978 ),
1033 979 'page_type' => 'library',
1034 980 'is_front' => false,
1035 - 'i10n' => array(
1036 - 'copied' => __( 'The shortcode has been copied to your clipboard. Hit Ctrl-V/Cmd-V to paste it.', 'visualizer' ),
981 + 'i10n' => array(
1037 982 'conflict' => __( 'We have detected a potential conflict with another component that prevents Visualizer from functioning properly. Please disable any of the following components if they are activated on your instance: Modern Events Calendar plugin, Acronix plugin. In case the aforementioned components are not activated or you continue to see this error message, please disable all other plugins and enable them one by one to find out the component that is causing the conflict.', 'visualizer' ),
1038 983 ),
1039 984 )
1040 985 );
@@ -1103,9 +1048,9 @@
1103 1048 esc_html__( 'Docs', 'visualizer' )
1104 1049 );
1105 1050 // flattr link
1106 1051 $plugin_meta[] = sprintf(
1107 - '<a style="color:red" href="' . tsdk_utmify( Visualizer_Plugin::PRO_TEASER_URL, 'pluginrow' ) . '" target="_blank">%s</a>',
1052 + '<a style="color:red" href="' . Visualizer_Plugin::PRO_TEASER_URL . '" target="_blank">%s</a>',
1108 1053 esc_html__( 'Pro Addon', 'visualizer' )
1109 1054 );
1110 1055 }
1111 1056
@@ -1111,75 +1056,5 @@
1111 1056
1112 1057 return $plugin_meta;
1113 1058 }
1114 1059
1115 - /**
1116 - * If check is existing user.
1117 - *
1118 - * @return bool Default false
1119 - */
1120 - public static function proFeaturesLocked() {
1121 - if ( Visualizer_Module::is_pro() ) {
1122 - return true;
1123 - }
1124 - return 'yes' === get_option( 'visualizer-new-user', 'yes' ) ? false : true;
1125 - }
1126 -
1127 - /**
1128 - * Multilingual Support.
1129 - *
1130 - * @param int $chart_id Chart ID.
1131 - * @return bool Default false
1132 - */
1133 - public function addMultilingualSupport( $chart_id ) {
1134 - global $sitepress;
1135 - if ( Visualizer_Module::is_pro() ) {
1136 - return;
1137 - }
1138 - if ( function_exists( 'icl_get_languages' ) && $sitepress instanceof \SitePress ) {
1139 - $language = icl_get_languages();
1140 - $current_lang = icl_get_current_language();
1141 - $default_lang = icl_get_default_language();
1142 - $post_info = wpml_get_language_information( null, $chart_id );
1143 - $translations = array();
1144 - if ( ! empty( $post_info ) && ( $default_lang === $post_info['language_code'] ) ) {
1145 - $trid = $sitepress->get_element_trid( $chart_id, 'post_' . Visualizer_Plugin::CPT_VISUALIZER );
1146 - $translations = $sitepress->get_element_translations( $trid );
1147 - }
1148 - if ( empty( $translations ) ) {
1149 - return;
1150 - }
1151 - ?>
1152 - <hr><div class="visualizer-languages-list only-pro">
1153 - <?php
1154 - foreach ( $language as $lang ) {
1155 - $lang_code = $lang['code'];
1156 - if ( $current_lang !== $lang_code ) {
1157 - ?>
1158 - <a href="javascript:;">
1159 - <img src="<?php echo esc_url( $lang['country_flag_url'] ); ?>" alt="<?php echo esc_attr( $lang['translated_name'] ); ?>">
1160 - </a>
1161 - <?php
1162 - }
1163 - }
1164 - ?>
1165 - <a href="<?php echo tsdk_utmify( Visualizer_Plugin::PRO_TEASER_URL, 'wpml-support', 'visualizer_render_char' ); ?>"target="_blank"><?php esc_html_e( 'Upgrade to PRO to active this translation for charts', 'visualizer' ); ?></a>
1166 - </div>
1167 - <?php
1168 - }
1169 - }
1170 -
1171 - /**
1172 - * Check chart is enabled or not.
1173 - *
1174 - * @param string $type Chart ID.
1175 - *
1176 - * @return bool Default false
1177 - */
1178 - public static function checkChartStatus( $type ) {
1179 - $types = self::_getChartTypesLocalized( false, false, false, true );
1180 - if ( isset( $types[ $type ] ) ) {
1181 - return ! empty( $types[ $type ]['enabled'] );
1182 - }
1183 - return false;
1184 - }
1185 1060 }