PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.4.1
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.4.1
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/Module/Admin.php +80 -333 3.10.13.4.1 View file →
@@ -53,19 +53,17 @@
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 );
62 62 $this->_addFilter( 'visualizer_logger_data', 'getLoggerData' );
63 + $this->_addFilter( 'visualizer_get_chart_counts', 'getChartCountsByTypeAndMeta' );
63 64 $this->_addFilter( 'visualizer_feedback_review_trigger', 'feedbackReviewTrigger' );
64 65
65 - // screen pagination
66 - $this->_addFilter( 'set-screen-option', 'setScreenOptions', 10, 3 );
67 -
68 66 // revision support.
69 67 $this->_addFilter( 'wp_revisions_to_keep', 'limitRevisions', null, 10, 2 );
70 68 $this->_addAction( '_wp_put_post_revision', 'addRevision', null, 10, 1 );
71 69 $this->_addAction( 'wp_restore_post_revision', 'restoreRevision', null, 10, 2 );
@@ -72,32 +70,10 @@
72 70
73 71 $this->_addAction( 'visualizer_chart_schedules_spl', 'addSplChartSchedules', null, 10, 3 );
74 72
75 73 $this->_addAction( 'admin_init', 'init' );
76 -
77 - $this->_addAction( 'visualizer_chart_languages', 'addMultilingualSupport' );
78 -
79 - if ( defined( 'TI_CYPRESS_TESTING' ) ) {
80 - $this->load_cypress_hooks();
81 - }
82 -
83 74 }
84 75
85 - /**
86 - * Define the hooks that are needed for cypress.
87 - *
88 - * @since 3.4.0
89 - * @access private
90 - */
91 - private function load_cypress_hooks() {
92 - // all charts should load on the same page without pagination.
93 - add_filter(
94 - 'visualizer_query_args', function( $args ) {
95 - $args['posts_per_page'] = 20;
96 - return $args;
97 - }, 10, 1
98 - );
99 - }
100 76
101 77 /**
102 78 * Add disabled `optgroup` schedules to the drop downs.
103 79 *
@@ -315,9 +291,9 @@
315 291
316 292 // Load all the assets for the different libraries we support.
317 293 $deps = array(
318 294 Visualizer_Render_Sidebar_Google::enqueue_assets( array( 'media-editor' ) ),
319 - Visualizer_Render_Sidebar_Type_DataTable_Tabular::enqueue_assets( array( 'media-editor' ) ),
295 + Visualizer_Render_Sidebar_Type_DataTable_DataTable::enqueue_assets( array( 'media-editor' ) ),
320 296 );
321 297
322 298 wp_enqueue_script( 'visualizer-media-model', VISUALIZER_ABSURL . 'js/media/model.js', $deps, Visualizer_Plugin::VERSION, true );
323 299 wp_enqueue_script( 'visualizer-media-collection', VISUALIZER_ABSURL . 'js/media/collection.js', array( 'visualizer-media-model' ), Visualizer_Plugin::VERSION, true );
@@ -366,9 +342,9 @@
366 342 'filters' => $chart_types,
367 343 'types' => array_keys( $chart_types ),
368 344 ),
369 345 'nonce' => wp_create_nonce(),
370 - 'buildurl' => esc_url( add_query_arg( 'action', Visualizer_Plugin::ACTION_CREATE_CHART, admin_url( 'admin-ajax.php' ) ) ),
346 + 'buildurl' => add_query_arg( 'action', Visualizer_Plugin::ACTION_CREATE_CHART, admin_url( 'admin-ajax.php' ) ),
371 347 );
372 348
373 349 return $strings;
374 350 }
@@ -390,71 +366,74 @@
390 366 'enabled' => true,
391 367 );
392 368 }
393 369
394 - $enabled = self::proFeaturesLocked();
395 -
396 370 $types = array_merge(
397 371 $additional,
398 372 array(
399 - 'tabular' => array(
373 + 'dataTable' => array(
400 374 'name' => esc_html__( 'Table', 'visualizer' ),
401 375 'enabled' => true,
402 - 'supports' => $enabled ? array( 'Google Charts', 'DataTable' ) : array( 'DataTable' ),
376 + 'supports' => array( 'DataTable' ),
403 377 ),
404 378 'pie' => array(
405 379 'name' => esc_html__( 'Pie/Donut', 'visualizer' ),
406 380 'enabled' => true,
407 - 'supports' => $enabled ? array( 'Google Charts', 'ChartJS' ) : array( 'Google Charts' ),
381 + 'supports' => array( 'Google Charts', 'ChartJS' ),
408 382 ),
409 383 'line' => array(
410 384 'name' => esc_html__( 'Line', 'visualizer' ),
411 385 'enabled' => true,
412 - 'supports' => $enabled ? array( 'Google Charts', 'ChartJS' ) : array( 'Google Charts' ),
386 + 'supports' => array( 'Google Charts', 'ChartJS' ),
413 387 ),
414 - 'bar' => array(
415 - 'name' => esc_html__( 'Bar', 'visualizer' ),
416 - 'enabled' => true,
417 - 'supports' => $enabled ? array( 'Google Charts', 'ChartJS' ) : array( 'Google Charts' ),
418 - ),
419 388 'area' => array(
420 389 'name' => esc_html__( 'Area', 'visualizer' ),
421 - 'enabled' => $enabled,
390 + 'enabled' => true,
422 391 // in ChartJS, the fill option is used to make Line chart an area: https://www.chartjs.org/docs/latest/charts/area.html
423 392 'supports' => array( 'Google Charts' ),
424 393 ),
425 394 'geo' => array(
426 395 'name' => esc_html__( 'Geo', 'visualizer' ),
427 - 'enabled' => $enabled,
396 + 'enabled' => true,
428 397 'supports' => array( 'Google Charts' ),
429 398 ),
399 + 'bar' => array(
400 + 'name' => esc_html__( 'Bar', 'visualizer' ),
401 + 'enabled' => true,
402 + 'supports' => array( 'Google Charts', 'ChartJS' ),
403 + ),
430 404 'column' => array(
431 405 'name' => esc_html__( 'Column', 'visualizer' ),
432 - 'enabled' => $enabled,
406 + 'enabled' => true,
433 407 'supports' => array( 'Google Charts', 'ChartJS' ),
434 408 ),
435 409 'bubble' => array(
436 410 'name' => esc_html__( 'Bubble', 'visualizer' ),
437 - 'enabled' => $enabled,
411 + 'enabled' => true,
438 412 // 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 413 'supports' => array( 'Google Charts' ),
440 414 ),
441 415 'scatter' => array(
442 416 'name' => esc_html__( 'Scatter', 'visualizer' ),
443 - 'enabled' => $enabled,
417 + 'enabled' => true,
444 418 'supports' => array( 'Google Charts' ),
445 419 ),
446 420 'gauge' => array(
447 421 'name' => esc_html__( 'Gauge', 'visualizer' ),
448 - 'enabled' => $enabled,
422 + 'enabled' => true,
449 423 'supports' => array( 'Google Charts' ),
450 424 ),
451 425 'candlestick' => array(
452 426 'name' => esc_html__( 'Candlestick', 'visualizer' ),
453 - 'enabled' => $enabled,
427 + 'enabled' => true,
454 428 'supports' => array( 'Google Charts' ),
455 429 ),
456 430 // pro types
431 + 'table' => array(
432 + 'name' => esc_html__( 'Table (Deprecated)', 'visualizer' ),
433 + 'enabled' => false,
434 + 'supports' => array( 'Google Charts' ),
435 + ),
457 436 'timeline' => array(
458 437 'name' => esc_html__( 'Timeline', 'visualizer' ),
459 438 'enabled' => false,
460 439 'supports' => array( 'Google Charts', 'ChartJS' ),
@@ -523,8 +502,18 @@
523 502 switch ( $where ) {
524 503 case 'types':
525 504 // fall-through
526 505 case 'library':
506 + // if the user has a Google Table chart, show it as deprecated otherwise remove the option from the library.
507 + if ( ! self::hasChartType( 'table' ) ) {
508 + $deprecated[] = 'table';
509 + if ( $get2Darray ) {
510 + $types['dataTable'] = esc_html__( 'Table', 'visualizer' );
511 + } else {
512 + $types['dataTable']['name'] = esc_html__( 'Table', 'visualizer' );
513 + }
514 + }
515 +
527 516 // if a user has a Gauge/Candlestick chart, then let them keep using it.
528 517 if ( ! Visualizer_Module::is_pro() ) {
529 518 if ( ! self::hasChartType( 'gauge' ) ) {
530 519 if ( $get2Darray ) {
@@ -542,8 +531,18 @@
542 531 }
543 532 }
544 533 break;
545 534 default:
535 + // remove the option to create a Google Table chart.
536 + $deprecated[] = 'table';
537 +
538 + // rename the new table chart type.
539 + if ( $get2Darray ) {
540 + $types['dataTable'] = esc_html__( 'Table', 'visualizer' );
541 + } else {
542 + $types['dataTable']['name'] = esc_html__( 'Table', 'visualizer' );
543 + }
544 +
546 545 // if a user has a Gauge/Candlestick chart, then let them keep using it.
547 546 if ( ! Visualizer_Module::is_pro() ) {
548 547 if ( ! self::hasChartType( 'gauge' ) ) {
549 548 if ( $get2Darray ) {
@@ -610,9 +609,8 @@
610 609 VISUALIZER_ABSURL . 'js/library.js',
611 610 array(
612 611 'jquery',
613 612 'media-views',
614 - 'clipboard',
615 613 ),
616 614 Visualizer_Plugin::VERSION,
617 615 true
618 616 );
@@ -687,161 +685,12 @@
687 685 'edit_posts',
688 686 'viz-support',
689 687 array( $this, 'renderSupportPage' )
690 688 );
691 -
692 - if ( ! Visualizer_Module::is_pro() ) {
693 - add_submenu_page(
694 - Visualizer_Plugin::NAME,
695 - __( 'Get Visualizer Pro', 'visualizer' ),
696 - __( 'Get Visualizer Pro', 'visualizer' ),
697 - 'edit_posts',
698 - 'viz-get-pro',
699 - '__return_null'
700 - );
701 - add_action( 'admin_footer', array( $this, 'handleGetProSubMenu' ) );
702 - }
703 689 remove_submenu_page( Visualizer_Plugin::NAME, Visualizer_Plugin::NAME );
704 -
705 - add_action( "load-{$this->_libraryPage}", array( $this, 'addScreenOptions' ) );
706 690 }
707 691
708 692 /**
709 - * Handle get pro plugin submenu.
710 - */
711 - public function handleGetProSubMenu() {
712 - ?>
713 - <style type="text/css">
714 - #toplevel_page_visualizer ul.wp-submenu li.wp-first-item + li + li + li {
715 - background: #FF7E65;
716 - font-size: 14px;
717 - font-weight: 600;
718 - color: #fff;
719 - }
720 - #toplevel_page_visualizer ul.wp-submenu li.wp-first-item + li + li + li > a {
721 - color: #fff !important;
722 - }
723 - #toplevel_page_visualizer ul.wp-submenu li.wp-first-item + li + li + li > a:hover {
724 - box-shadow: inherit;
725 - }
726 - #toplevel_page_visualizer ul.wp-submenu li.wp-first-item + li + li + li + li {
727 - display: none;
728 - }
729 - </style>
730 - <script type="text/javascript">
731 - jQuery( document ).ready( function() {
732 - jQuery( '#toplevel_page_visualizer' ).on( 'click', 'li:not(.wp-submenu-head, .wp-first-item):eq(2)', function( e ) {
733 - e.preventDefault();
734 - window.open( '<?php echo tsdk_utmify( 'https://themeisle.com/plugins/visualizer-charts-and-graphs/upgrade/', 'toplevel' ); ?>', '_blank' );
735 - } );
736 - } );
737 - </script>
738 - <?php
739 - }
740 -
741 - /**
742 - * Adds the screen options for pagination.
743 - */
744 - function addScreenOptions() {
745 - $screen = get_current_screen();
746 -
747 - // bail if it's some other page.
748 - if ( ! is_object( $screen ) || $screen->id !== $this->_libraryPage ) {
749 - return;
750 - }
751 -
752 - $args = array(
753 - 'label' => __( 'Number of charts per page:', 'visualizer' ),
754 - 'default' => 6,
755 - 'option' => 'visualizer_library_per_page',
756 - );
757 - add_screen_option( 'per_page', $args );
758 - }
759 -
760 - /**
761 - * Returns the screen option for pagination.
762 - */
763 - function setScreenOptions( $status, $option, $value ) {
764 - if ( 'visualizer_library_per_page' === $option ) {
765 - return $value;
766 - }
767 - }
768 -
769 - /**
770 - * Adds the display filters to be used in the meta_query while displaying the charts.
771 - */
772 - private function getDisplayFilters( &$query_args ) {
773 - $query = array();
774 - global $sitepress;
775 - if ( Visualizer_Module::is_pro() && ( function_exists( 'icl_get_languages' ) && $sitepress instanceof \SitePress ) ) {
776 - $current_lang = icl_get_current_language();
777 - if ( in_array( $current_lang, array( 'all', icl_get_default_language() ), true ) ) {
778 - $query[] = array(
779 - 'key' => 'chart_lang',
780 - 'compare' => 'NOT EXISTS',
781 - );
782 - } else {
783 - $query[] = array(
784 - 'key' => 'chart_lang',
785 - 'value' => $current_lang,
786 - 'compare' => '=',
787 - );
788 - }
789 - }
790 -
791 - // add chart type filter to the query arguments
792 - $type = filter_input( INPUT_GET, 'type' );
793 - if ( $type && in_array( $type, Visualizer_Plugin::getChartTypes(), true ) ) {
794 - $query[] = array(
795 - 'key' => Visualizer_Plugin::CF_CHART_TYPE,
796 - 'value' => $type,
797 - 'compare' => '=',
798 - );
799 - }
800 -
801 - // add chart library filter to the query arguments
802 - $library = filter_input( INPUT_GET, 'library' );
803 - if ( $library ) {
804 - $query[] = array(
805 - 'key' => Visualizer_Plugin::CF_CHART_LIBRARY,
806 - 'value' => $library,
807 - 'compare' => '=',
808 - );
809 - }
810 -
811 - // add date filter to the query arguments
812 - $date = filter_input( INPUT_GET, 'date' );
813 - $possible = array_keys( Visualizer_Plugin::getSupportedDateFilter() );
814 - if ( $date && in_array( $date, $possible, true ) ) {
815 - $query_args['date_query'] = array(
816 - 'after' => "$date -1 day",
817 - 'inclusive' => true,
818 - );
819 - }
820 -
821 - // add source filter to the query arguments
822 - $source = filter_input( INPUT_GET, 'source' );
823 - if ( $source ) {
824 - $source = ucwords( $source );
825 - $source = "Visualizer_Source_{$source}";
826 - $query[] = array(
827 - 'key' => Visualizer_Plugin::CF_SOURCE,
828 - 'value' => $source,
829 - 'compare' => '=',
830 - );
831 - }
832 -
833 - $query_args['meta_query'] = $query;
834 -
835 - $orderby = filter_input( INPUT_GET, 'orderby' );
836 - $order = filter_input( INPUT_GET, 'order' );
837 - if ( $orderby ) {
838 - $query_args['order_by'] = $orderby;
839 - }
840 - $query_args['order'] = empty( $order ) ? 'desc' : $order;
841 - }
842 -
843 - /**
844 693 * Get the instance of WP_Query that fetches the charts as per the given criteria.
845 694 */
846 695 private function getQuery() {
847 696 static $q;
@@ -860,34 +709,29 @@
860 709 'default' => 1,
861 710 ),
862 711 )
863 712 );
864 -
865 - $per_page = 6;
866 - $screen = get_current_screen();
867 - if ( $screen ) {
868 - // retrieve the per_page option
869 - $screen_option = $screen->get_option( 'per_page', 'option' );
870 - // retrieve the value stored for the current user
871 - $user = get_current_user_id();
872 - $per_page = get_user_meta( $user, $screen_option, true );
873 - if ( empty( $per_page ) || $per_page < 1 ) {
874 - // nothing set, get the default value
875 - $per_page = $screen->get_option( 'per_page', 'default' );
876 - }
877 - }
878 -
879 713 // the initial query arguments to fetch charts
880 714 $query_args = array(
881 715 'post_type' => Visualizer_Plugin::CPT_VISUALIZER,
882 - 'posts_per_page' => $per_page,
716 + 'posts_per_page' => 6,
883 717 'paged' => $page,
884 718 );
885 -
886 - $this->getDisplayFilters( $query_args );
887 -
719 + // add chart type filter to the query arguments
720 + $filter = filter_input( INPUT_GET, 'type' );
721 + if ( $filter && in_array( $filter, Visualizer_Plugin::getChartTypes(), true ) ) {
722 + $query_args['meta_query'] = array(
723 + array(
724 + 'key' => Visualizer_Plugin::CF_CHART_TYPE,
725 + 'value' => $filter,
726 + 'compare' => '=',
727 + ),
728 + );
729 + } else {
730 + $filter = 'all';
731 + }
888 732 // Added by Ash/Upwork
889 - $filterByMeta = ! empty( $_GET['s'] ) ? sanitize_text_field( wp_unslash( $_GET['s'] ) ) : null; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
733 + $filterByMeta = filter_input( INPUT_GET, 's', FILTER_SANITIZE_STRING );
890 734 if ( $filterByMeta ) {
891 735 $query = array(
892 736 'key' => Visualizer_Plugin::CF_SETTINGS,
893 737 'value' => $filterByMeta,
@@ -896,9 +740,9 @@
896 740 $meta = isset( $query_args['meta_query'] ) ? $query_args['meta_query'] : array();
897 741 $meta[] = $query;
898 742 $query_args['meta_query'] = $meta;
899 743 }
900 - $q = new WP_Query( apply_filters( 'visualizer_query_args', $query_args ) );
744 + $q = new WP_Query( $query_args );
901 745 return $q;
902 746 }
903 747
904 748 /**
@@ -965,22 +809,10 @@
965 809 unset( $settings['height'], $settings['width'], $settings['chartArea'] );
966 810 }
967 811
968 812 $series = apply_filters( Visualizer_Plugin::FILTER_GET_CHART_SERIES, get_post_meta( $chart->ID, Visualizer_Plugin::CF_SERIES, true ), $chart->ID, $type );
969 - $data = self::get_chart_data( $chart, $type );
813 + $data = apply_filters( Visualizer_Plugin::FILTER_GET_CHART_DATA, unserialize( html_entity_decode( $chart->post_content ) ), $chart->ID, $type );
970 814
971 - // Set default setting series when add manual chart data - Only during first creation.
972 - if ( isset( $settings['series'] ) && ! empty( $series ) ) {
973 - $count_series = count( $series ) - count( $settings['series'] );
974 - if ( $count_series > 1 ) {
975 - $clone_last_series = end( $settings['series'] );
976 - $clone_last_series = array_fill_keys( array_keys( $clone_last_series ), '' );
977 - foreach ( range( 1, $count_series ) as $item ) {
978 - $settings['series'][] = $clone_last_series;
979 - }
980 - }
981 - }
982 -
983 815 $library = $this->load_chart_type( $chart->ID );
984 816
985 817 $id = 'visualizer-' . $chart->ID;
986 818 $arguments = $this->get_inline_custom_css( $id, $settings );
@@ -988,15 +820,8 @@
988 820 $css .= $arguments[0];
989 821 $settings = $arguments[1];
990 822 }
991 823
992 - if ( isset( $settings['controls']['ui']['labelStacking'] ) ) {
993 - unset( $settings['controls']['ui']['labelStacking'] );
994 - }
995 - if ( isset( $settings['controls']['ui']['orientation'] ) ) {
996 - unset( $settings['controls']['ui']['orientation'] );
997 - }
998 -
999 824 // add chart to the array
1000 825 $charts[ $id ] = array(
1001 826 'id' => $chart->ID,
1002 827 'type' => $type,
@@ -1015,38 +840,30 @@
1015 840 'language' => $this->get_language(),
1016 841 'map_api_key' => get_option( 'visualizer-map-api-key' ),
1017 842 'charts' => $charts,
1018 843 'urls' => array(
1019 - 'base' => esc_url( add_query_arg( array( 'vpage' => false, 'vaction' => false ) ) ),
1020 - 'create' => esc_url(
1021 - add_query_arg(
1022 - array(
1023 - 'action' => Visualizer_Plugin::ACTION_CREATE_CHART,
1024 - 'library' => 'yes',
1025 - 'type' => isset( $_GET['type'] ) ? $_GET['type'] : '',
1026 - 'chart-library' => isset( $_GET['chart-library'] ) ? $_GET['chart-library'] : '',
1027 - 'vaction' => false,
1028 - ),
1029 - $ajaxurl
1030 - )
844 + 'base' => add_query_arg( array( 'vpage' => false, 'vaction' => false ) ),
845 + 'create' => add_query_arg(
846 + array(
847 + 'action' => Visualizer_Plugin::ACTION_CREATE_CHART,
848 + 'library' => 'yes',
849 + 'type' => isset( $_GET['type'] ) ? $_GET['type'] : '',
850 + 'chart-library' => isset( $_GET['chart-library'] ) ? $_GET['chart-library'] : '',
851 + 'vaction' => false,
852 + ),
853 + $ajaxurl
1031 854 ),
1032 - 'edit' => esc_url(
1033 - add_query_arg(
1034 - array(
1035 - 'action' => Visualizer_Plugin::ACTION_EDIT_CHART,
1036 - 'library' => 'yes',
1037 - 'vaction' => false,
1038 - ),
1039 - $ajaxurl
1040 - )
855 + 'edit' => add_query_arg(
856 + array(
857 + 'action' => Visualizer_Plugin::ACTION_EDIT_CHART,
858 + 'library' => 'yes',
859 + 'vaction' => false,
860 + ),
861 + $ajaxurl
1041 862 ),
1042 863 ),
1043 864 'page_type' => 'library',
1044 865 'is_front' => false,
1045 - 'i10n' => array(
1046 - 'copied' => __( 'The shortcode has been copied to your clipboard. Hit Ctrl-V/Cmd-V to paste it.', 'visualizer' ),
1047 - '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' ),
1048 - ),
1049 866 )
1050 867 );
1051 868 // render library page
1052 869 $render = new Visualizer_Render_Library();
@@ -1113,9 +930,9 @@
1113 930 esc_html__( 'Docs', 'visualizer' )
1114 931 );
1115 932 // flattr link
1116 933 $plugin_meta[] = sprintf(
1117 - '<a style="color:red" href="' . tsdk_utmify( Visualizer_Plugin::PRO_TEASER_URL, 'pluginrow' ) . '" target="_blank">%s</a>',
934 + '<a style="color:red" href="' . Visualizer_Plugin::PRO_TEASER_URL . '" target="_blank">%s</a>',
1118 935 esc_html__( 'Pro Addon', 'visualizer' )
1119 936 );
1120 937 }
1121 938
@@ -1121,75 +938,5 @@
1121 938
1122 939 return $plugin_meta;
1123 940 }
1124 941
1125 - /**
1126 - * If check is existing user.
1127 - *
1128 - * @return bool Default false
1129 - */
1130 - public static function proFeaturesLocked() {
1131 - if ( Visualizer_Module::is_pro() ) {
1132 - return true;
1133 - }
1134 - return 'yes' === get_option( 'visualizer-new-user', 'yes' ) ? false : true;
1135 - }
1136 -
1137 - /**
1138 - * Multilingual Support.
1139 - *
1140 - * @param int $chart_id Chart ID.
1141 - * @return bool Default false
1142 - */
1143 - public function addMultilingualSupport( $chart_id ) {
1144 - global $sitepress;
1145 - if ( Visualizer_Module::is_pro() ) {
1146 - return;
1147 - }
1148 - if ( function_exists( 'icl_get_languages' ) && $sitepress instanceof \SitePress ) {
1149 - $language = icl_get_languages();
1150 - $current_lang = icl_get_current_language();
1151 - $default_lang = icl_get_default_language();
1152 - $post_info = wpml_get_language_information( null, $chart_id );
1153 - $translations = array();
1154 - if ( ! empty( $post_info ) && ( $default_lang === $post_info['language_code'] ) ) {
1155 - $trid = $sitepress->get_element_trid( $chart_id, 'post_' . Visualizer_Plugin::CPT_VISUALIZER );
1156 - $translations = $sitepress->get_element_translations( $trid );
1157 - }
1158 - if ( empty( $translations ) ) {
1159 - return;
1160 - }
1161 - ?>
1162 - <hr><div class="visualizer-languages-list only-pro">
1163 - <?php
1164 - foreach ( $language as $lang ) {
1165 - $lang_code = $lang['code'];
1166 - if ( $current_lang !== $lang_code ) {
1167 - ?>
1168 - <a href="javascript:;">
1169 - <img src="<?php echo esc_url( $lang['country_flag_url'] ); ?>" alt="<?php echo esc_attr( $lang['translated_name'] ); ?>">
1170 - </a>
1171 - <?php
1172 - }
1173 - }
1174 - ?>
1175 - <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>
1176 - </div>
1177 - <?php
1178 - }
1179 - }
1180 -
1181 - /**
1182 - * Check chart is enabled or not.
1183 - *
1184 - * @param string $type Chart ID.
1185 - *
1186 - * @return bool Default false
1187 - */
1188 - public static function checkChartStatus( $type ) {
1189 - $types = self::_getChartTypesLocalized( false, false, false, true );
1190 - if ( isset( $types[ $type ] ) ) {
1191 - return ! empty( $types[ $type ]['enabled'] );
1192 - }
1193 - return false;
1194 - }
1195 942 }