| @@ -29,10 +29,8 @@ | ||
| 29 | 29 | class Visualizer_Module_Admin extends Visualizer_Module { |
| 30 | 30 | |
| 31 | 31 | const NAME = __CLASS__; |
| 32 | 32 | |
| 33 | - const OPTION_GLOBAL_SETTINGS = 'visualizer_global_settings'; | |
| 34 | - | |
| 35 | 33 | /** |
| 36 | 34 | * Library page suffix. |
| 37 | 35 | * |
| 38 | 36 | * @since 1.0.0 |
| @@ -42,24 +40,8 @@ | ||
| 42 | 40 | */ |
| 43 | 41 | private $_libraryPage; |
| 44 | 42 | |
| 45 | 43 | /** |
| 46 | - * Support page suffix. | |
| 47 | - * | |
| 48 | - * @access private | |
| 49 | - * @var string | |
| 50 | - */ | |
| 51 | - private $_supportPage; | |
| 52 | - | |
| 53 | - /** | |
| 54 | - * Settings page suffix. | |
| 55 | - * | |
| 56 | - * @access private | |
| 57 | - * @var string | |
| 58 | - */ | |
| 59 | - private $_settingsPage; | |
| 60 | - | |
| 61 | - /** | |
| 62 | 44 | * Constructor. |
| 63 | 45 | * |
| 64 | 46 | * @since 1.0.0 |
| 65 | 47 | * |
| @@ -70,14 +52,10 @@ | ||
| 70 | 52 | public function __construct( Visualizer_Plugin $plugin ) { |
| 71 | 53 | parent::__construct( $plugin ); |
| 72 | 54 | $this->_addAction( 'load-post.php', 'enqueueMediaScripts' ); |
| 73 | 55 | $this->_addAction( 'load-post-new.php', 'enqueueMediaScripts' ); |
| 74 | - $this->_addAction( 'enqueue_block_editor_assets', 'enqueueMediaScripts' ); | |
| 75 | 56 | $this->_addAction( 'admin_footer', 'renderTemplates' ); |
| 76 | 57 | $this->_addAction( 'admin_enqueue_scripts', 'enqueueLibraryScripts', null, 0 ); |
| 77 | - $this->_addAction( 'admin_enqueue_scripts', 'enqueue_support_page' ); | |
| 78 | - $this->_addAction( 'admin_enqueue_scripts', 'enqueueSettingsScripts' ); | |
| 79 | - $this->_addAction( 'admin_post_visualizer_save_global_settings', 'saveGlobalSettings' ); | |
| 80 | 58 | $this->_addAction( 'admin_menu', 'registerAdminMenu' ); |
| 81 | 59 | $this->_addFilter( 'media_view_strings', 'setupMediaViewStrings' ); |
| 82 | 60 | $this->_addFilter( 'plugin_action_links', 'getPluginActionLinks', 10, 2 ); |
| 83 | 61 | $this->_addFilter( 'plugin_row_meta', 'getPluginMetaLinks', 10, 2 ); |
| @@ -82,9 +60,8 @@ | ||
| 82 | 60 | $this->_addFilter( 'plugin_action_links', 'getPluginActionLinks', 10, 2 ); |
| 83 | 61 | $this->_addFilter( 'plugin_row_meta', 'getPluginMetaLinks', 10, 2 ); |
| 84 | 62 | $this->_addFilter( 'visualizer_logger_data', 'getLoggerData' ); |
| 85 | 63 | $this->_addFilter( 'visualizer_feedback_review_trigger', 'feedbackReviewTrigger' ); |
| 86 | - $this->_addFilter( 'themeisle_sdk_blackfriday_data', 'add_black_friday_data' ); | |
| 87 | 64 | |
| 88 | 65 | // screen pagination |
| 89 | 66 | $this->_addFilter( 'set-screen-option', 'setScreenOptions', 10, 3 ); |
| 90 | 67 | |
| @@ -96,47 +73,14 @@ | ||
| 96 | 73 | $this->_addAction( 'visualizer_chart_schedules_spl', 'addSplChartSchedules', null, 10, 3 ); |
| 97 | 74 | |
| 98 | 75 | $this->_addAction( 'admin_init', 'init' ); |
| 99 | 76 | |
| 100 | - $this->_addAction( 'visualizer_chart_languages', 'addMultilingualSupport' ); | |
| 101 | - | |
| 102 | - $this->_addFilter( 'admin_footer_text', 'render_review_notice' ); | |
| 103 | - | |
| 104 | - if ( ! defined( 'TI_E2E_TESTING' ) ) { | |
| 105 | - $this->_addFilter( 'themeisle-sdk/survey/' . VISUALIZER_DIRNAME, 'get_survey_metadata', 10, 2 ); | |
| 106 | - } | |
| 107 | - | |
| 108 | - if ( defined( 'TI_E2E_TESTING' ) ) { | |
| 77 | + if ( defined( 'TI_CYPRESS_TESTING' ) ) { | |
| 109 | 78 | $this->load_cypress_hooks(); |
| 110 | 79 | } |
| 111 | - } | |
| 112 | - /** | |
| 113 | - * Display review notice. | |
| 114 | - */ | |
| 115 | - public function render_review_notice( $footer_text ) { | |
| 116 | - $current_screen = get_current_screen(); | |
| 117 | 80 | |
| 118 | - $visualizer_page_ids = array( 'toplevel_page_visualizer', 'visualizer_page_viz-support', 'visualizer_page_ti-about-visualizer' ); | |
| 119 | - | |
| 120 | - if ( ! empty( $current_screen ) && isset( $current_screen->id ) ) { | |
| 121 | - foreach ( $visualizer_page_ids as $page_to_check ) { | |
| 122 | - if ( strpos( $current_screen->id, $page_to_check ) !== false ) { | |
| 123 | - $footer_text = sprintf( | |
| 124 | - // translators: %1$s - the name of the plugin (Visualizer), %2$s - message (You can help us by leaving a), %3$s - HTML entity code. | |
| 125 | - __( 'Enjoying %1$s? %2$s %3$s rating. Thank you for being so supportive!', 'visualizer' ), | |
| 126 | - '<b>Visualizer</b>', | |
| 127 | - esc_html__( 'You can help us by leaving a', 'visualizer' ), | |
| 128 | - '<a href="https://wordpress.org/support/plugin/visualizer/reviews/#new-post" target="_blank">★★★★★</a>' | |
| 129 | - ); | |
| 130 | - break; | |
| 131 | - } | |
| 132 | - } | |
| 133 | - } | |
| 134 | - | |
| 135 | - return $footer_text; | |
| 136 | 81 | } |
| 137 | 82 | |
| 138 | - | |
| 139 | 83 | /** |
| 140 | 84 | * Define the hooks that are needed for cypress. |
| 141 | 85 | * |
| 142 | 86 | * @since 3.4.0 |
| @@ -144,9 +88,9 @@ | ||
| 144 | 88 | */ |
| 145 | 89 | private function load_cypress_hooks() { |
| 146 | 90 | // all charts should load on the same page without pagination. |
| 147 | 91 | add_filter( |
| 148 | - 'visualizer_query_args', function ( $args ) { | |
| 92 | + 'visualizer_query_args', function( $args ) { | |
| 149 | 93 | $args['posts_per_page'] = 20; |
| 150 | 94 | return $args; |
| 151 | 95 | }, 10, 1 |
| 152 | 96 | ); |
| @@ -167,16 +111,23 @@ | ||
| 167 | 111 | if ( apply_filters( 'visualizer_is_business', false ) ) { |
| 168 | 112 | return; |
| 169 | 113 | } |
| 170 | 114 | |
| 171 | - $is_new_personal = apply_filters( 'visualizer_is_new_personal', false ); | |
| 115 | + $license = __( 'PRO', 'visualizer' ); | |
| 116 | + if ( Visualizer_Module::is_pro() ) { | |
| 117 | + switch ( $plan ) { | |
| 118 | + case 1: | |
| 119 | + $license = __( 'Developer', 'visualizer' ); | |
| 120 | + break; | |
| 121 | + } | |
| 122 | + } | |
| 172 | 123 | |
| 173 | 124 | $hours = array( |
| 174 | - '0.16' => __( '10 minutes', 'visualizer' ), | |
| 175 | - '1' => __( 'Each hour', 'visualizer' ), | |
| 176 | - '12' => __( 'Each 12 hours', 'visualizer' ), | |
| 177 | - '24' => __( 'Each day', 'visualizer' ), | |
| 178 | - '72' => __( 'Each 3 days', 'visualizer' ), | |
| 125 | + '0' => __( 'Live', 'visualizer' ), | |
| 126 | + '1' => __( 'Each hour', 'visualizer' ), | |
| 127 | + '12' => __( 'Each 12 hours', 'visualizer' ), | |
| 128 | + '24' => __( 'Each day', 'visualizer' ), | |
| 129 | + '72' => __( 'Each 3 days', 'visualizer' ), | |
| 179 | 130 | ); |
| 180 | 131 | |
| 181 | 132 | switch ( $feature ) { |
| 182 | 133 | case 'json': |
| @@ -181,9 +132,9 @@ | ||
| 181 | 132 | switch ( $feature ) { |
| 182 | 133 | case 'json': |
| 183 | 134 | case 'csv': |
| 184 | 135 | // no more schedules if pro is already active. |
| 185 | - if ( Visualizer_Module::is_pro() && ! $is_new_personal ) { | |
| 136 | + if ( Visualizer_Module::is_pro() ) { | |
| 186 | 137 | return; |
| 187 | 138 | } |
| 188 | 139 | break; |
| 189 | 140 | case 'wp': |
| @@ -193,9 +144,9 @@ | ||
| 193 | 144 | default: |
| 194 | 145 | return; |
| 195 | 146 | } |
| 196 | 147 | |
| 197 | - echo '<optgroup disabled label="' . __( 'Upgrade required', 'visualizer' ) . '">'; | |
| 148 | + echo '<optgroup disabled label="' . sprintf( __( 'More in the %s version', 'visualizer' ), $license ) . '">'; | |
| 198 | 149 | foreach ( $hours as $hour => $desc ) { |
| 199 | 150 | echo '<option disabled>' . $desc . '</option>'; |
| 200 | 151 | } |
| 201 | 152 | echo '</optgroup>'; |
| @@ -263,9 +214,10 @@ | ||
| 263 | 214 | * |
| 264 | 215 | * @access public |
| 265 | 216 | */ |
| 266 | 217 | public function init() { |
| 267 | - if ( current_user_can( 'edit_posts' ) && current_user_can( 'edit_pages' ) && 'true' === get_user_option( 'rich_editing' ) ) { | |
| 218 | + // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison | |
| 219 | + if ( current_user_can( 'edit_posts' ) && current_user_can( 'edit_pages' ) && 'true' == get_user_option( 'rich_editing' ) ) { | |
| 268 | 220 | $this->_addFilter( 'mce_external_languages', 'add_tinymce_lang', 10, 1 ); |
| 269 | 221 | $this->_addFilter( 'mce_external_plugins', 'tinymce_plugin', 10, 1 ); |
| 270 | 222 | $this->_addFilter( 'mce_buttons', 'register_mce_button', 10, 1 ); |
| 271 | 223 | $this->_addFilter( 'tiny_mce_before_init', 'get_strings_for_block', 10, 1 ); |
| @@ -277,9 +229,9 @@ | ||
| 277 | 229 | * |
| 278 | 230 | * @since ? |
| 279 | 231 | * @access friendly |
| 280 | 232 | */ |
| 281 | - public function get_strings_for_block( $settings ) { | |
| 233 | + function get_strings_for_block( $settings ) { | |
| 282 | 234 | $class = new Visualizer_Module_Language(); |
| 283 | 235 | $strings = $class->get_strings(); |
| 284 | 236 | $array = array( 'visualizer_tinymce_plugin' => json_encode( $strings ) ); |
| 285 | 237 | return array_merge( $settings, $array ); |
| @@ -355,36 +307,11 @@ | ||
| 355 | 307 | * @access public |
| 356 | 308 | */ |
| 357 | 309 | public function enqueueMediaScripts() { |
| 358 | 310 | global $typenow; |
| 359 | - global $current_screen; | |
| 360 | - | |
| 361 | - if ( post_type_supports( $typenow, 'editor' ) || $current_screen->id === 'widgets' || $current_screen->id === 'customize' ) { | |
| 311 | + if ( post_type_supports( $typenow, 'editor' ) ) { | |
| 362 | 312 | wp_enqueue_style( 'visualizer-media', VISUALIZER_ABSURL . 'css/media.css', array( 'media-views' ), Visualizer_Plugin::VERSION ); |
| 363 | 313 | |
| 364 | - $d3_renderer_asset = VISUALIZER_ABSPATH . '/classes/Visualizer/D3Renderer/build/index.asset.php'; | |
| 365 | - if ( file_exists( $d3_renderer_asset ) && ! wp_script_is( 'visualizer-d3-renderer', 'registered' ) ) { | |
| 366 | - // @phpstan-ignore-next-line | |
| 367 | - $d3_asset = include $d3_renderer_asset; | |
| 368 | - wp_register_script( | |
| 369 | - 'visualizer-d3-renderer', | |
| 370 | - VISUALIZER_ABSURL . 'classes/Visualizer/D3Renderer/build/index.js', | |
| 371 | - array_merge( $d3_asset['dependencies'], array( 'jquery' ) ), | |
| 372 | - $d3_asset['version'], | |
| 373 | - true | |
| 374 | - ); | |
| 375 | - } | |
| 376 | - if ( wp_script_is( 'visualizer-d3-renderer', 'registered' ) ) { | |
| 377 | - wp_enqueue_script( 'visualizer-d3-renderer' ); | |
| 378 | - wp_localize_script( | |
| 379 | - 'visualizer-d3-renderer', | |
| 380 | - 'vizD3Renderer', | |
| 381 | - array( | |
| 382 | - 'iframeJsUrl' => VISUALIZER_ABSURL . 'classes/Visualizer/D3Renderer/build/iframe.js', | |
| 383 | - ) | |
| 384 | - ); | |
| 385 | - } | |
| 386 | - | |
| 387 | 314 | // Load all the assets for the different libraries we support. |
| 388 | 315 | $deps = array( |
| 389 | 316 | Visualizer_Render_Sidebar_Google::enqueue_assets( array( 'media-editor' ) ), |
| 390 | 317 | Visualizer_Render_Sidebar_Type_DataTable_Tabular::enqueue_assets( array( 'media-editor' ) ), |
| @@ -398,9 +325,9 @@ | ||
| 398 | 325 | 'visualizer-media-view', |
| 399 | 326 | 'visualizer', |
| 400 | 327 | array( |
| 401 | 328 | 'i10n' => array( |
| 402 | - 'insert' => __( 'Insert Chart', 'visualizer' ), | |
| 329 | + 'insert' => __( 'Insert', 'visualizer' ), | |
| 403 | 330 | ), |
| 404 | 331 | ) |
| 405 | 332 | ); |
| 406 | 333 | wp_enqueue_script( 'visualizer-media-toolbar', VISUALIZER_ABSURL . 'js/media/toolbar.js', array( 'visualizer-media-view' ), Visualizer_Plugin::VERSION, true ); |
| @@ -429,9 +356,9 @@ | ||
| 429 | 356 | 'controller' => array( |
| 430 | 357 | 'title' => esc_html__( 'Visualizations', 'visualizer' ), |
| 431 | 358 | ), |
| 432 | 359 | 'routers' => array( |
| 433 | - 'library' => esc_html__( 'Insert from Library', 'visualizer' ), | |
| 360 | + 'library' => esc_html__( 'From Library', 'visualizer' ), | |
| 434 | 361 | 'create' => esc_html__( 'Create New', 'visualizer' ), |
| 435 | 362 | ), |
| 436 | 363 | 'library' => array( |
| 437 | 364 | 'filters' => $chart_types, |
| @@ -461,9 +388,9 @@ | ||
| 461 | 388 | 'enabled' => true, |
| 462 | 389 | ); |
| 463 | 390 | } |
| 464 | 391 | |
| 465 | - $enabled = self::proFeaturesEnabled(); | |
| 392 | + $enabled = self::proFeaturesLocked(); | |
| 466 | 393 | |
| 467 | 394 | $types = array_merge( |
| 468 | 395 | $additional, |
| 469 | 396 | array( |
| @@ -474,14 +401,14 @@ | ||
| 474 | 401 | ), |
| 475 | 402 | 'pie' => array( |
| 476 | 403 | 'name' => esc_html__( 'Pie/Donut', 'visualizer' ), |
| 477 | 404 | 'enabled' => true, |
| 478 | - 'supports' => array( 'Google Charts', 'ChartJS' ), | |
| 405 | + 'supports' => $enabled ? array( 'Google Charts', 'ChartJS' ) : array( 'Google Charts' ), | |
| 479 | 406 | ), |
| 480 | 407 | 'line' => array( |
| 481 | 408 | 'name' => esc_html__( 'Line', 'visualizer' ), |
| 482 | 409 | 'enabled' => true, |
| 483 | - 'supports' => array( 'Google Charts', 'ChartJS' ), | |
| 410 | + 'supports' => $enabled ? array( 'Google Charts', 'ChartJS' ) : array( 'Google Charts' ), | |
| 484 | 411 | ), |
| 485 | 412 | 'bar' => array( |
| 486 | 413 | 'name' => esc_html__( 'Bar', 'visualizer' ), |
| 487 | 414 | 'enabled' => true, |
| @@ -491,21 +418,18 @@ | ||
| 491 | 418 | 'name' => esc_html__( 'Area', 'visualizer' ), |
| 492 | 419 | 'enabled' => $enabled, |
| 493 | 420 | // in ChartJS, the fill option is used to make Line chart an area: https://www.chartjs.org/docs/latest/charts/area.html |
| 494 | 421 | 'supports' => array( 'Google Charts' ), |
| 495 | - 'demo_url' => 'https://demo.themeisle.com/visualizer/area-chart/', | |
| 496 | 422 | ), |
| 497 | 423 | 'geo' => array( |
| 498 | 424 | 'name' => esc_html__( 'Geo', 'visualizer' ), |
| 499 | 425 | 'enabled' => $enabled, |
| 500 | 426 | 'supports' => array( 'Google Charts' ), |
| 501 | - 'demo_url' => 'https://demo.themeisle.com/visualizer/geo-chart/', | |
| 502 | 427 | ), |
| 503 | 428 | 'column' => array( |
| 504 | 429 | 'name' => esc_html__( 'Column', 'visualizer' ), |
| 505 | 430 | 'enabled' => $enabled, |
| 506 | 431 | 'supports' => array( 'Google Charts', 'ChartJS' ), |
| 507 | - 'demo_url' => 'https://demo.themeisle.com/visualizer/column-chart/', | |
| 508 | 432 | ), |
| 509 | 433 | 'bubble' => array( |
| 510 | 434 | 'name' => esc_html__( 'Bubble', 'visualizer' ), |
| 511 | 435 | 'enabled' => $enabled, |
| @@ -510,27 +434,23 @@ | ||
| 510 | 434 | 'name' => esc_html__( 'Bubble', 'visualizer' ), |
| 511 | 435 | 'enabled' => $enabled, |
| 512 | 436 | // chartjs' bubble is ugly looking (and it won't work off the default bubble.csv) so it is being excluded for the time being. |
| 513 | 437 | 'supports' => array( 'Google Charts' ), |
| 514 | - 'demo_url' => 'https://demo.themeisle.com/visualizer/bubble-chart/', | |
| 515 | 438 | ), |
| 516 | 439 | 'scatter' => array( |
| 517 | 440 | 'name' => esc_html__( 'Scatter', 'visualizer' ), |
| 518 | 441 | 'enabled' => $enabled, |
| 519 | 442 | 'supports' => array( 'Google Charts' ), |
| 520 | - 'demo_url' => 'https://demo.themeisle.com/visualizer/scatter-chart/', | |
| 521 | 443 | ), |
| 522 | 444 | 'gauge' => array( |
| 523 | 445 | 'name' => esc_html__( 'Gauge', 'visualizer' ), |
| 524 | 446 | 'enabled' => $enabled, |
| 525 | 447 | 'supports' => array( 'Google Charts' ), |
| 526 | - 'demo_url' => 'https://demo.themeisle.com/visualizer/gauge-chart/', | |
| 527 | 448 | ), |
| 528 | 449 | 'candlestick' => array( |
| 529 | 450 | 'name' => esc_html__( 'Candlestick', 'visualizer' ), |
| 530 | 451 | 'enabled' => $enabled, |
| 531 | 452 | 'supports' => array( 'Google Charts' ), |
| 532 | - 'demo_url' => 'https://demo.themeisle.com/visualizer/candlestick-chart/', | |
| 533 | 453 | ), |
| 534 | 454 | // pro types |
| 535 | 455 | 'timeline' => array( |
| 536 | 456 | 'name' => esc_html__( 'Timeline', 'visualizer' ), |
| @@ -535,27 +455,23 @@ | ||
| 535 | 455 | 'timeline' => array( |
| 536 | 456 | 'name' => esc_html__( 'Timeline', 'visualizer' ), |
| 537 | 457 | 'enabled' => false, |
| 538 | 458 | 'supports' => array( 'Google Charts', 'ChartJS' ), |
| 539 | - 'demo_url' => 'https://demo.themeisle.com/visualizer/timeline-chart/', | |
| 540 | 459 | ), |
| 541 | 460 | 'combo' => array( |
| 542 | 461 | 'name' => esc_html__( 'Combo', 'visualizer' ), |
| 543 | 462 | 'enabled' => false, |
| 544 | 463 | 'supports' => array( 'Google Charts' ), |
| 545 | - 'demo_url' => 'https://demo.themeisle.com/visualizer/combo-chart/', | |
| 546 | 464 | ), |
| 547 | 465 | 'polarArea' => array( |
| 548 | 466 | 'name' => esc_html__( 'Polar Area', 'visualizer' ), |
| 549 | 467 | 'enabled' => false, |
| 550 | 468 | 'supports' => array( 'ChartJS' ), |
| 551 | - 'demo_url' => 'https://demo.themeisle.com/visualizer/polar-area-chart/', | |
| 552 | 469 | ), |
| 553 | 470 | 'radar' => array( |
| 554 | 471 | 'name' => esc_html__( 'Radar/Spider', 'visualizer' ), |
| 555 | 472 | 'enabled' => false, |
| 556 | 473 | 'supports' => array( 'ChartJS' ), |
| 557 | - 'demo_url' => 'https://demo.themeisle.com/visualizer/radar-spider-chart/', | |
| 558 | 474 | ), |
| 559 | 475 | ) |
| 560 | 476 | ); |
| 561 | 477 | $types = apply_filters( 'visualizer_pro_chart_types', $types ); |
| @@ -682,159 +598,45 @@ | ||
| 682 | 598 | * |
| 683 | 599 | * @param string $suffix The current page suffix. |
| 684 | 600 | */ |
| 685 | 601 | public function enqueueLibraryScripts( $suffix ) { |
| 686 | - if ( $suffix !== $this->_libraryPage ) { | |
| 687 | - return; | |
| 688 | - } | |
| 689 | - | |
| 690 | - wp_enqueue_style( 'visualizer-library', VISUALIZER_ABSURL . 'css/library.css', array(), Visualizer_Plugin::VERSION ); | |
| 691 | - $this->_addFilter( 'media_upload_tabs', 'setupVisualizerTab' ); | |
| 692 | - wp_enqueue_media(); | |
| 693 | - wp_enqueue_script( | |
| 694 | - 'visualizer-library', | |
| 695 | - VISUALIZER_ABSURL . 'js/library.js', | |
| 696 | - array( | |
| 697 | - 'jquery', | |
| 698 | - 'media-views', | |
| 699 | - 'clipboard', | |
| 700 | - ), | |
| 701 | - Visualizer_Plugin::VERSION, | |
| 702 | - true | |
| 703 | - ); | |
| 704 | - | |
| 705 | - wp_enqueue_script( 'visualizer-customization', $this->get_user_customization_js(), array(), null, true ); | |
| 706 | - | |
| 707 | - $has_d3 = false; | |
| 708 | - $query = $this->getQuery(); | |
| 709 | - while ( $query->have_posts() ) { | |
| 710 | - $chart = $query->next_post(); | |
| 711 | - $library = $this->load_chart_type( $chart->ID ); | |
| 712 | - if ( is_null( $library ) ) { | |
| 713 | - continue; | |
| 714 | - } | |
| 602 | + if ( $suffix === $this->_libraryPage ) { | |
| 603 | + wp_enqueue_style( 'visualizer-library', VISUALIZER_ABSURL . 'css/library.css', array(), Visualizer_Plugin::VERSION ); | |
| 604 | + $this->_addFilter( 'media_upload_tabs', 'setupVisualizerTab' ); | |
| 605 | + wp_enqueue_media(); | |
| 715 | 606 | wp_enqueue_script( |
| 716 | - "visualizer-render-$library", | |
| 717 | - VISUALIZER_ABSURL . 'js/render-facade.js', | |
| 718 | - apply_filters( 'visualizer_assets_render', array( 'visualizer-library', 'visualizer-customization' ), true ), | |
| 607 | + 'visualizer-library', | |
| 608 | + VISUALIZER_ABSURL . 'js/library.js', | |
| 609 | + array( | |
| 610 | + 'jquery', | |
| 611 | + 'media-views', | |
| 612 | + 'clipboard', | |
| 613 | + ), | |
| 719 | 614 | Visualizer_Plugin::VERSION, |
| 720 | 615 | true |
| 721 | 616 | ); |
| 722 | - if ( 'd3' === $library ) { | |
| 723 | - $has_d3 = true; | |
| 724 | - } | |
| 725 | - } | |
| 726 | 617 | |
| 727 | - if ( $has_d3 ) { | |
| 728 | - $d3_renderer_asset = VISUALIZER_ABSPATH . '/classes/Visualizer/D3Renderer/build/index.asset.php'; | |
| 729 | - if ( file_exists( $d3_renderer_asset ) && ! wp_script_is( 'visualizer-d3-renderer', 'registered' ) ) { | |
| 730 | - /** | |
| 731 | - * Ignore missing build asset in source checkout. | |
| 732 | - * | |
| 733 | - * @phpstan-ignore-next-line | |
| 734 | - */ | |
| 735 | - $d3_asset = include $d3_renderer_asset; | |
| 736 | - wp_register_script( | |
| 737 | - 'visualizer-d3-renderer', | |
| 738 | - VISUALIZER_ABSURL . 'classes/Visualizer/D3Renderer/build/index.js', | |
| 739 | - array_merge( $d3_asset['dependencies'], array( 'jquery' ) ), | |
| 740 | - $d3_asset['version'], | |
| 741 | - true | |
| 742 | - ); | |
| 743 | - wp_enqueue_script( 'visualizer-d3-renderer' ); | |
| 744 | - } | |
| 745 | - wp_localize_script( | |
| 746 | - 'visualizer-d3-renderer', | |
| 747 | - 'vizD3Renderer', | |
| 748 | - array( | |
| 749 | - 'iframeJsUrl' => VISUALIZER_ABSURL . 'classes/Visualizer/D3Renderer/build/iframe.js', | |
| 750 | - ) | |
| 751 | - ); | |
| 752 | - } | |
| 618 | + wp_enqueue_script( 'visualizer-customization', $this->get_user_customization_js(), array(), null, true ); | |
| 753 | 619 | |
| 754 | - $chart_builder_asset = VISUALIZER_ABSPATH . '/classes/Visualizer/ChartBuilder/build/index.asset.php'; | |
| 755 | - if ( file_exists( $chart_builder_asset ) ) { | |
| 756 | - /** | |
| 757 | - * Ignore missing build asset in source checkout. | |
| 758 | - * | |
| 759 | - * @phpstan-ignore-next-line | |
| 760 | - */ | |
| 761 | - $asset = include $chart_builder_asset; | |
| 762 | - $chart_builder_deps = $asset['dependencies']; | |
| 763 | - if ( ! wp_script_is( 'visualizer-handsontable', 'registered' ) && defined( 'Visualizer_Pro_ABSURL' ) && defined( 'VISUALIZER_PRO_VERSION' ) ) { | |
| 764 | - wp_register_script( | |
| 765 | - 'visualizer-handsontable', | |
| 766 | - Visualizer_Pro_ABSURL . 'vendor/handsontable/dist/handsontable.full.min.js', | |
| 767 | - array(), | |
| 768 | - VISUALIZER_PRO_VERSION, | |
| 620 | + $query = $this->getQuery(); | |
| 621 | + while ( $query->have_posts() ) { | |
| 622 | + $chart = $query->next_post(); | |
| 623 | + $library = $this->load_chart_type( $chart->ID ); | |
| 624 | + if ( is_null( $library ) ) { | |
| 625 | + continue; | |
| 626 | + } | |
| 627 | + wp_enqueue_script( | |
| 628 | + "visualizer-render-$library", | |
| 629 | + VISUALIZER_ABSURL . 'js/render-facade.js', | |
| 630 | + apply_filters( 'visualizer_assets_render', array( 'visualizer-library', 'visualizer-customization' ), true ), | |
| 631 | + Visualizer_Plugin::VERSION, | |
| 769 | 632 | true |
| 770 | 633 | ); |
| 771 | 634 | } |
| 772 | - if ( ! wp_style_is( 'visualizer-handsontable', 'registered' ) && defined( 'Visualizer_Pro_ABSURL' ) && defined( 'VISUALIZER_PRO_VERSION' ) ) { | |
| 773 | - wp_register_style( | |
| 774 | - 'visualizer-handsontable', | |
| 775 | - Visualizer_Pro_ABSURL . 'vendor/handsontable/dist/handsontable.full.min.css', | |
| 776 | - array(), | |
| 777 | - VISUALIZER_PRO_VERSION | |
| 778 | - ); | |
| 779 | - } | |
| 780 | - if ( wp_script_is( 'visualizer-handsontable', 'registered' ) ) { | |
| 781 | - wp_enqueue_script( 'visualizer-handsontable' ); | |
| 782 | - $chart_builder_deps = array_unique( array_merge( $chart_builder_deps, array( 'visualizer-handsontable' ) ) ); | |
| 783 | - } | |
| 784 | - if ( wp_style_is( 'visualizer-handsontable', 'registered' ) ) { | |
| 785 | - wp_enqueue_style( 'visualizer-handsontable' ); | |
| 786 | - } | |
| 787 | - wp_enqueue_script( | |
| 788 | - 'visualizer-chart-builder', | |
| 789 | - VISUALIZER_ABSURL . 'classes/Visualizer/ChartBuilder/build/index.js', | |
| 790 | - $chart_builder_deps, | |
| 791 | - $asset['version'], | |
| 792 | - true | |
| 793 | - ); | |
| 794 | - wp_enqueue_style( | |
| 795 | - 'visualizer-chart-builder', | |
| 796 | - VISUALIZER_ABSURL . 'classes/Visualizer/ChartBuilder/build/style-index.css', | |
| 797 | - array(), | |
| 798 | - $asset['version'] | |
| 799 | - ); | |
| 800 | - $chart_builder_css = VISUALIZER_ABSPATH . '/classes/Visualizer/ChartBuilder/build/index.css'; | |
| 801 | - if ( file_exists( $chart_builder_css ) ) { | |
| 802 | - wp_enqueue_style( | |
| 803 | - 'visualizer-chart-builder-runtime', | |
| 804 | - VISUALIZER_ABSURL . 'classes/Visualizer/ChartBuilder/build/index.css', | |
| 805 | - array( 'visualizer-chart-builder' ), | |
| 806 | - $asset['version'] | |
| 807 | - ); | |
| 808 | - } | |
| 809 | - wp_localize_script( | |
| 810 | - 'visualizer-chart-builder', | |
| 811 | - 'vizAIBuilder', | |
| 812 | - array( | |
| 813 | - 'ajaxUrl' => admin_url( 'admin-ajax.php' ), | |
| 814 | - 'nonce' => wp_create_nonce( 'visualizer-ai-builder' ), | |
| 815 | - 'isPro' => Visualizer_Module::is_pro(), | |
| 816 | - 'upgradeUrl' => tsdk_utmify( Visualizer_Plugin::PRO_TEASER_URL, 'aiBuilderUpgrade', 'dataSource' ), | |
| 817 | - ) | |
| 818 | - ); | |
| 819 | 635 | } |
| 820 | - | |
| 821 | - do_action( 'themeisle_internal_page', VISUALIZER_DIRNAME, 'library' ); | |
| 822 | 636 | } |
| 823 | 637 | |
| 824 | 638 | /** |
| 825 | - * Enqueue script for support page. | |
| 826 | - * | |
| 827 | - * @param string $hook_suffix Current hook. | |
| 828 | - */ | |
| 829 | - public function enqueue_support_page( $hook_suffix ) { | |
| 830 | - if ( $this->_supportPage !== $hook_suffix ) { | |
| 831 | - return; | |
| 832 | - } | |
| 833 | - do_action( 'themeisle_internal_page', VISUALIZER_DIRNAME, 'support' ); | |
| 834 | - } | |
| 835 | - | |
| 836 | - /** | |
| 837 | 639 | * Adds visualizer tab for media upload tabs array. |
| 838 | 640 | * |
| 839 | 641 | * @since 1.0.0 |
| 840 | 642 | * |
| @@ -866,9 +668,9 @@ | ||
| 866 | 668 | Visualizer_Plugin::NAME, |
| 867 | 669 | __( 'Chart Library', 'visualizer' ), |
| 868 | 670 | __( 'Chart Library', 'visualizer' ), |
| 869 | 671 | 'edit_posts', |
| 870 | - 'admin.php?page=' . Visualizer_Plugin::NAME | |
| 672 | + admin_url( 'admin.php?page=' . Visualizer_Plugin::NAME ) | |
| 871 | 673 | ); |
| 872 | 674 | add_submenu_page( |
| 873 | 675 | Visualizer_Plugin::NAME, |
| 874 | 676 | __( 'Add New Chart', 'visualizer' ), |
| @@ -873,22 +675,12 @@ | ||
| 873 | 675 | Visualizer_Plugin::NAME, |
| 874 | 676 | __( 'Add New Chart', 'visualizer' ), |
| 875 | 677 | __( 'Add New Chart', 'visualizer' ), |
| 876 | 678 | 'edit_posts', |
| 877 | - 'admin.php?page=' . Visualizer_Plugin::NAME . '&vaction=addnew' | |
| 679 | + admin_url( 'admin.php?page=' . Visualizer_Plugin::NAME . '&vaction=addnew' ) | |
| 878 | 680 | ); |
| 879 | - | |
| 880 | - $this->_settingsPage = add_submenu_page( | |
| 681 | + add_submenu_page( | |
| 881 | 682 | Visualizer_Plugin::NAME, |
| 882 | - __( 'Settings', 'visualizer' ), | |
| 883 | - __( 'Settings', 'visualizer' ), | |
| 884 | - 'manage_options', | |
| 885 | - 'viz-settings', | |
| 886 | - array( $this, 'renderSettingsPage' ) | |
| 887 | - ); | |
| 888 | - | |
| 889 | - $this->_supportPage = add_submenu_page( | |
| 890 | - Visualizer_Plugin::NAME, | |
| 891 | 683 | __( 'Support', 'visualizer' ), |
| 892 | 684 | __( 'Support', 'visualizer' ) . '<span class="dashicons dashicons-editor-help more-features-icon" style="width: 17px; height: 17px; margin-left: 4px; color: #ffca54; font-size: 17px; vertical-align: -3px;"></span>', |
| 893 | 685 | 'edit_posts', |
| 894 | 686 | 'viz-support', |
| @@ -894,12 +686,22 @@ | ||
| 894 | 686 | 'viz-support', |
| 895 | 687 | array( $this, 'renderSupportPage' ) |
| 896 | 688 | ); |
| 897 | 689 | |
| 690 | + if ( ! Visualizer_Module::is_pro() ) { | |
| 691 | + add_submenu_page( | |
| 692 | + Visualizer_Plugin::NAME, | |
| 693 | + __( 'Get Visualizer Pro', 'visualizer' ), | |
| 694 | + __( 'Get Visualizer Pro', 'visualizer' ), | |
| 695 | + 'edit_posts', | |
| 696 | + 'viz-get-pro', | |
| 697 | + '__return_null' | |
| 698 | + ); | |
| 699 | + add_action( 'admin_footer', array( $this, 'handleGetProSubMenu' ) ); | |
| 700 | + } | |
| 898 | 701 | remove_submenu_page( Visualizer_Plugin::NAME, Visualizer_Plugin::NAME ); |
| 899 | 702 | |
| 900 | 703 | add_action( "load-{$this->_libraryPage}", array( $this, 'addScreenOptions' ) ); |
| 901 | - add_action( 'admin_footer', array( $this, 'handleGetProSubMenu' ) ); | |
| 902 | 704 | } |
| 903 | 705 | |
| 904 | 706 | /** |
| 905 | 707 | * Handle get pro plugin submenu. |
| @@ -904,41 +706,38 @@ | ||
| 904 | 706 | /** |
| 905 | 707 | * Handle get pro plugin submenu. |
| 906 | 708 | */ |
| 907 | 709 | public function handleGetProSubMenu() { |
| 908 | - if ( ! Visualizer_Module::is_pro() ) { | |
| 909 | - ?> | |
| 710 | + ?> | |
| 910 | 711 | <style type="text/css"> |
| 911 | - #toplevel_page_visualizer ul.wp-submenu li:last-child { | |
| 712 | + #toplevel_page_visualizer ul.wp-submenu li.wp-first-item + li + li + li { | |
| 912 | 713 | background: #FF7E65; |
| 913 | 714 | font-size: 14px; |
| 914 | 715 | font-weight: 600; |
| 915 | 716 | color: #fff; |
| 916 | 717 | } |
| 917 | - #toplevel_page_visualizer ul.wp-submenu li:last-child > a > span { | |
| 718 | + #toplevel_page_visualizer ul.wp-submenu li.wp-first-item + li + li + li > a { | |
| 918 | 719 | color: #fff !important; |
| 919 | 720 | } |
| 920 | - #toplevel_page_visualizer ul.wp-submenu li:last-child > a:hover { | |
| 721 | + #toplevel_page_visualizer ul.wp-submenu li.wp-first-item + li + li + li > a:hover { | |
| 921 | 722 | box-shadow: inherit; |
| 922 | 723 | } |
| 923 | 724 | </style> |
| 924 | - <?php | |
| 925 | - if ( get_option( 'visualizer_fresh_install', false ) ) { | |
| 926 | - ?> | |
| 927 | - <style type="text/css"> | |
| 928 | - #toplevel_page_visualizer ul.wp-submenu li.wp-first-item + li + li + li { | |
| 929 | - display: none; | |
| 930 | - } | |
| 931 | - </style> | |
| 932 | - <?php | |
| 933 | - } | |
| 934 | - } | |
| 725 | + <script type="text/javascript"> | |
| 726 | + jQuery( document ).ready( function() { | |
| 727 | + jQuery( '#toplevel_page_visualizer' ).on( 'click', 'li:not(.wp-submenu-head, .wp-first-item):eq(2)', function( e ) { | |
| 728 | + e.preventDefault(); | |
| 729 | + window.open( 'https://themeisle.com/plugins/visualizer-charts-and-graphs/upgrade/#pricing', '_blank' ); | |
| 730 | + } ); | |
| 731 | + } ); | |
| 732 | + </script> | |
| 733 | + <?php | |
| 935 | 734 | } |
| 936 | 735 | |
| 937 | 736 | /** |
| 938 | 737 | * Adds the screen options for pagination. |
| 939 | 738 | */ |
| 940 | - public function addScreenOptions() { | |
| 739 | + function addScreenOptions() { | |
| 941 | 740 | $screen = get_current_screen(); |
| 942 | 741 | |
| 943 | 742 | // bail if it's some other page. |
| 944 | 743 | if ( ! is_object( $screen ) || $screen->id !== $this->_libraryPage ) { |
| @@ -955,9 +754,9 @@ | ||
| 955 | 754 | |
| 956 | 755 | /** |
| 957 | 756 | * Returns the screen option for pagination. |
| 958 | 757 | */ |
| 959 | - public function setScreenOptions( $status, $option, $value ) { | |
| 758 | + function setScreenOptions( $status, $option, $value ) { | |
| 960 | 759 | if ( 'visualizer_library_per_page' === $option ) { |
| 961 | 760 | return $value; |
| 962 | 761 | } |
| 963 | 762 | } |
| @@ -966,24 +765,8 @@ | ||
| 966 | 765 | * Adds the display filters to be used in the meta_query while displaying the charts. |
| 967 | 766 | */ |
| 968 | 767 | private function getDisplayFilters( &$query_args ) { |
| 969 | 768 | $query = array(); |
| 970 | - global $sitepress; | |
| 971 | - if ( Visualizer_Module::is_pro() && ( function_exists( 'icl_get_languages' ) && $sitepress instanceof \SitePress ) ) { | |
| 972 | - $current_lang = icl_get_current_language(); | |
| 973 | - if ( in_array( $current_lang, array( 'all', icl_get_default_language() ), true ) ) { | |
| 974 | - $query[] = array( | |
| 975 | - 'key' => 'chart_lang', | |
| 976 | - 'compare' => 'NOT EXISTS', | |
| 977 | - ); | |
| 978 | - } else { | |
| 979 | - $query[] = array( | |
| 980 | - 'key' => 'chart_lang', | |
| 981 | - 'value' => $current_lang, | |
| 982 | - 'compare' => '=', | |
| 983 | - ); | |
| 984 | - } | |
| 985 | - } | |
| 986 | 769 | |
| 987 | 770 | // add chart type filter to the query arguments |
| 988 | 771 | $type = filter_input( INPUT_GET, 'type' ); |
| 989 | 772 | if ( $type && in_array( $type, Visualizer_Plugin::getChartTypes(), true ) ) { |
| @@ -1081,9 +864,9 @@ | ||
| 1081 | 864 | |
| 1082 | 865 | $this->getDisplayFilters( $query_args ); |
| 1083 | 866 | |
| 1084 | 867 | // Added by Ash/Upwork |
| 1085 | - $filterByMeta = ! empty( $_GET['s'] ) ? sanitize_text_field( wp_unslash( $_GET['s'] ) ) : null; // phpcs:ignore WordPress.Security.NonceVerification.Recommended | |
| 868 | + $filterByMeta = filter_input( INPUT_GET, 's', FILTER_SANITIZE_STRING ); | |
| 1086 | 869 | if ( $filterByMeta ) { |
| 1087 | 870 | $query = array( |
| 1088 | 871 | 'key' => Visualizer_Plugin::CF_SETTINGS, |
| 1089 | 872 | 'value' => $filterByMeta, |
| @@ -1109,91 +892,8 @@ | ||
| 1109 | 892 | include_once VISUALIZER_ABSPATH . '/templates/support.php'; |
| 1110 | 893 | } |
| 1111 | 894 | |
| 1112 | 895 | /** |
| 1113 | - * Enqueues scripts/styles for the Settings page. | |
| 1114 | - * | |
| 1115 | - * @access public | |
| 1116 | - */ | |
| 1117 | - public function enqueueSettingsScripts( string $hook_suffix ): void { | |
| 1118 | - if ( $this->_settingsPage !== $hook_suffix ) { | |
| 1119 | - return; | |
| 1120 | - } | |
| 1121 | - wp_enqueue_style( 'wp-color-picker' ); | |
| 1122 | - wp_enqueue_script( 'wp-color-picker' ); | |
| 1123 | - } | |
| 1124 | - | |
| 1125 | - /** | |
| 1126 | - * Renders the global style settings page. | |
| 1127 | - * | |
| 1128 | - * @access public | |
| 1129 | - */ | |
| 1130 | - public function renderSettingsPage(): void { | |
| 1131 | - if ( ! current_user_can( 'manage_options' ) ) { | |
| 1132 | - wp_die( esc_html__( 'You do not have sufficient permissions to access this page.', 'visualizer' ) ); | |
| 1133 | - } | |
| 1134 | - $settings = self::getGlobalSettings(); | |
| 1135 | - include_once VISUALIZER_ABSPATH . '/templates/global-settings.php'; | |
| 1136 | - } | |
| 1137 | - | |
| 1138 | - /** | |
| 1139 | - * Returns the global style settings option. | |
| 1140 | - * | |
| 1141 | - * @return array<string, string> | |
| 1142 | - * @access public | |
| 1143 | - * @static | |
| 1144 | - */ | |
| 1145 | - public static function getGlobalSettings(): array { | |
| 1146 | - $defaults = array( | |
| 1147 | - 'color_primary' => '', | |
| 1148 | - 'color_secondary' => '', | |
| 1149 | - 'apply_existing' => '0', | |
| 1150 | - ); | |
| 1151 | - $saved = get_option( self::OPTION_GLOBAL_SETTINGS, array() ); | |
| 1152 | - return wp_parse_args( $saved, $defaults ); | |
| 1153 | - } | |
| 1154 | - | |
| 1155 | - /** | |
| 1156 | - * Handles saving of the global style settings. | |
| 1157 | - * | |
| 1158 | - * @access public | |
| 1159 | - */ | |
| 1160 | - public function saveGlobalSettings(): void { | |
| 1161 | - if ( ! current_user_can( 'manage_options' ) ) { | |
| 1162 | - wp_die( esc_html__( 'You do not have sufficient permissions to access this page.', 'visualizer' ) ); | |
| 1163 | - } | |
| 1164 | - | |
| 1165 | - check_admin_referer( 'visualizer_save_global_settings' ); | |
| 1166 | - | |
| 1167 | - $color_primary = sanitize_hex_color( wp_unslash( $_POST['visualizer_color_primary'] ?? '' ) ); | |
| 1168 | - $color_secondary = sanitize_hex_color( wp_unslash( $_POST['visualizer_color_secondary'] ?? '' ) ); | |
| 1169 | - $apply_existing = ! empty( $_POST['visualizer_apply_existing'] ) ? '1' : '0'; | |
| 1170 | - $clear = ! empty( $_POST['visualizer_clear_settings'] ); | |
| 1171 | - | |
| 1172 | - if ( $clear ) { | |
| 1173 | - delete_option( self::OPTION_GLOBAL_SETTINGS ); | |
| 1174 | - } else { | |
| 1175 | - $settings = array( | |
| 1176 | - 'color_primary' => $color_primary ? $color_primary : '', | |
| 1177 | - 'color_secondary' => $color_secondary ? $color_secondary : '', | |
| 1178 | - 'apply_existing' => $apply_existing, | |
| 1179 | - ); | |
| 1180 | - update_option( self::OPTION_GLOBAL_SETTINGS, $settings ); | |
| 1181 | - } | |
| 1182 | - | |
| 1183 | - wp_safe_redirect( | |
| 1184 | - add_query_arg( | |
| 1185 | - array( | |
| 1186 | - 'page' => 'viz-settings', | |
| 1187 | - 'updated' => $clear ? 'cleared' : 'true', | |
| 1188 | - ), | |
| 1189 | - admin_url( 'admin.php' ) | |
| 1190 | - ) | |
| 1191 | - ); | |
| 1192 | - exit; | |
| 1193 | - } | |
| 1194 | - | |
| 1195 | - /** | |
| 1196 | 896 | * Renders visualizer library page. |
| 1197 | 897 | * |
| 1198 | 898 | * @since 1.0.0 |
| 1199 | 899 | * |
| @@ -1267,19 +967,11 @@ | ||
| 1267 | 967 | $css .= $arguments[0]; |
| 1268 | 968 | $settings = $arguments[1]; |
| 1269 | 969 | } |
| 1270 | 970 | |
| 1271 | - if ( isset( $settings['controls']['ui']['labelStacking'] ) ) { | |
| 1272 | - unset( $settings['controls']['ui']['labelStacking'] ); | |
| 1273 | - } | |
| 1274 | - if ( isset( $settings['controls']['ui']['orientation'] ) ) { | |
| 1275 | - unset( $settings['controls']['ui']['orientation'] ); | |
| 1276 | - } | |
| 1277 | - | |
| 1278 | 971 | // add chart to the array |
| 1279 | 972 | $charts[ $id ] = array( |
| 1280 | 973 | 'id' => $chart->ID, |
| 1281 | - 'title' => $chart->post_title, | |
| 1282 | 974 | 'type' => $type, |
| 1283 | 975 | 'series' => $series, |
| 1284 | 976 | 'settings' => $settings, |
| 1285 | 977 | 'data' => $data, |
| @@ -1284,15 +976,11 @@ | ||
| 1284 | 976 | 'settings' => $settings, |
| 1285 | 977 | 'data' => $data, |
| 1286 | 978 | 'library' => $library, |
| 1287 | 979 | ); |
| 1288 | - if ( 'd3' === $library ) { | |
| 1289 | - $charts[ $id ]['code'] = get_post_meta( $chart->ID, Visualizer_Module_AIBuilder::CF_D3_CODE, true ); | |
| 1290 | - } | |
| 1291 | 980 | } |
| 1292 | 981 | // enqueue charts array |
| 1293 | 982 | $ajaxurl = admin_url( 'admin-ajax.php' ); |
| 1294 | - | |
| 1295 | 983 | wp_localize_script( |
| 1296 | 984 | 'visualizer-library', |
| 1297 | 985 | 'visualizer', |
| 1298 | 986 | array( |
| @@ -1329,9 +1017,8 @@ | ||
| 1329 | 1017 | 'i10n' => array( |
| 1330 | 1018 | 'copied' => __( 'The shortcode has been copied to your clipboard. Hit Ctrl-V/Cmd-V to paste it.', 'visualizer' ), |
| 1331 | 1019 | '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' ), |
| 1332 | 1020 | ), |
| 1333 | - 'is_pro_user' => Visualizer_Module::is_pro(), | |
| 1334 | 1021 | ) |
| 1335 | 1022 | ); |
| 1336 | 1023 | // render library page |
| 1337 | 1024 | $render = new Visualizer_Render_Library(); |
| @@ -1347,9 +1034,8 @@ | ||
| 1347 | 1034 | 'total' => $query->max_num_pages, |
| 1348 | 1035 | 'type' => 'array', |
| 1349 | 1036 | ) |
| 1350 | 1037 | ); |
| 1351 | - | |
| 1352 | 1038 | $render->render(); |
| 1353 | 1039 | } |
| 1354 | 1040 | |
| 1355 | 1041 | /** |
| @@ -1391,36 +1077,19 @@ | ||
| 1391 | 1077 | * |
| 1392 | 1078 | * @return array Updated array of plugin meta links. |
| 1393 | 1079 | */ |
| 1394 | 1080 | public function getPluginMetaLinks( $plugin_meta, $plugin_file ) { |
| 1395 | - if ( Visualizer_Module::is_pro() ) { | |
| 1396 | - return $plugin_meta; | |
| 1397 | - } | |
| 1398 | - | |
| 1399 | - // Also suppress the upsell when Pro is installed but not currently active. | |
| 1400 | - if ( ! function_exists( 'get_plugins' ) ) { | |
| 1401 | - require_once ABSPATH . 'wp-admin/includes/plugin.php'; | |
| 1402 | - } | |
| 1403 | - foreach ( array_keys( get_plugins() ) as $installed_plugin ) { | |
| 1404 | - if ( false !== strpos( $installed_plugin, 'visualizer-pro' ) ) { | |
| 1405 | - return $plugin_meta; | |
| 1406 | - } | |
| 1407 | - } | |
| 1408 | - | |
| 1409 | 1081 | if ( $plugin_file === plugin_basename( VISUALIZER_BASEFILE ) ) { |
| 1410 | - $is_black_friday = apply_filters( 'themeisle_sdk_is_black_friday_sale', false ); | |
| 1411 | 1082 | // knowledge base link |
| 1412 | 1083 | $plugin_meta[] = sprintf( |
| 1413 | 1084 | '<a href="' . VISUALIZER_MAIN_DOC . '" target="_blank">%s</a>', |
| 1414 | 1085 | esc_html__( 'Docs', 'visualizer' ) |
| 1415 | 1086 | ); |
| 1416 | - if ( ! $is_black_friday ) { | |
| 1417 | - // flattr link | |
| 1418 | - $plugin_meta[] = sprintf( | |
| 1419 | - '<a style="color:red" href="' . tsdk_utmify( Visualizer_Plugin::PRO_TEASER_URL, 'pluginrow' ) . '" target="_blank">%s</a>', | |
| 1420 | - esc_html__( 'Get Visualizer Pro', 'visualizer' ) | |
| 1421 | - ); | |
| 1422 | - } | |
| 1087 | + // flattr link | |
| 1088 | + $plugin_meta[] = sprintf( | |
| 1089 | + '<a style="color:red" href="' . Visualizer_Plugin::PRO_TEASER_URL . '" target="_blank">%s</a>', | |
| 1090 | + esc_html__( 'Pro Addon', 'visualizer' ) | |
| 1091 | + ); | |
| 1423 | 1092 | } |
| 1424 | 1093 | |
| 1425 | 1094 | return $plugin_meta; |
| 1426 | 1095 | } |
| @@ -1425,234 +1094,15 @@ | ||
| 1425 | 1094 | return $plugin_meta; |
| 1426 | 1095 | } |
| 1427 | 1096 | |
| 1428 | 1097 | /** |
| 1429 | - * Returns true when premium chart types should be enabled for the current user. | |
| 1098 | + * If check is existing user. | |
| 1430 | 1099 | * |
| 1431 | - * Pro 1.9.0+ hooks the 'visualizer_is_pro' filter and returns true only when | |
| 1432 | - * the license is valid. Pre-1.9.0 Pro defined a Visualizer_Pro class instead; | |
| 1433 | - * we detect that as a fallback so those legacy installs still work. | |
| 1434 | - * | |
| 1435 | - * Passing false as the filter default ensures the constant VISUALIZER_PRO | |
| 1436 | - * (which is set to true whenever the Pro class exists, regardless of license | |
| 1437 | - * state) cannot bypass the license check. | |
| 1438 | - * | |
| 1439 | - * @return bool | |
| 1440 | - */ | |
| 1441 | - public static function proFeaturesEnabled() { | |
| 1442 | - $is_pro_filter = apply_filters( 'visualizer_is_pro', false ); | |
| 1443 | - | |
| 1444 | - // Pro 1.9.0+: filter is hooked and returns true only with a valid license. | |
| 1445 | - if ( $is_pro_filter ) { | |
| 1446 | - return true; | |
| 1447 | - } | |
| 1448 | - | |
| 1449 | - // Pro is installed (active) but the license check above did not pass. | |
| 1450 | - // Do NOT fall through to the legacy "old user" path — that path exists | |
| 1451 | - // only for sites that never had Pro installed. If Pro is present but | |
| 1452 | - // the license is inactive we should lock, regardless of chart history. | |
| 1453 | - if ( class_exists( 'Visualizer_Pro', false ) ) { | |
| 1454 | - return false; | |
| 1455 | - } | |
| 1456 | - | |
| 1457 | - // No Pro installed at all: grant legacy access to existing users so | |
| 1458 | - // their charts are not suddenly broken when they upgrade the free plugin. | |
| 1459 | - return 'yes' === get_option( 'visualizer-new-user' ) ? false : true; | |
| 1460 | - } | |
| 1461 | - | |
| 1462 | - /** | |
| 1463 | - * Multilingual Support. | |
| 1464 | - * | |
| 1465 | - * @param int $chart_id Chart ID. | |
| 1466 | 1100 | * @return bool Default false |
| 1467 | 1101 | */ |
| 1468 | - public function addMultilingualSupport( $chart_id ) { | |
| 1469 | - global $sitepress; | |
| 1102 | + public static function proFeaturesLocked() { | |
| 1470 | 1103 | if ( Visualizer_Module::is_pro() ) { |
| 1471 | - return; | |
| 1104 | + return true; | |
| 1472 | 1105 | } |
| 1473 | - if ( function_exists( 'icl_get_languages' ) && $sitepress instanceof \SitePress ) { | |
| 1474 | - $language = icl_get_languages(); | |
| 1475 | - $current_lang = icl_get_current_language(); | |
| 1476 | - $default_lang = icl_get_default_language(); | |
| 1477 | - $post_info = wpml_get_language_information( null, $chart_id ); | |
| 1478 | - $translations = array(); | |
| 1479 | - if ( ! empty( $post_info ) && ( $default_lang === $post_info['language_code'] ) ) { | |
| 1480 | - $trid = $sitepress->get_element_trid( $chart_id, 'post_' . Visualizer_Plugin::CPT_VISUALIZER ); | |
| 1481 | - $translations = $sitepress->get_element_translations( $trid ); | |
| 1482 | - } | |
| 1483 | - if ( empty( $translations ) ) { | |
| 1484 | - return; | |
| 1485 | - } | |
| 1486 | - ?> | |
| 1487 | - <hr><div class="visualizer-languages-list only-pro"> | |
| 1488 | - <?php | |
| 1489 | - foreach ( $language as $lang ) { | |
| 1490 | - $lang_code = $lang['code']; | |
| 1491 | - if ( $current_lang !== $lang_code ) { | |
| 1492 | - ?> | |
| 1493 | - <a href="javascript:;"> | |
| 1494 | - <img src="<?php echo esc_url( $lang['country_flag_url'] ); ?>" alt="<?php echo esc_attr( $lang['translated_name'] ); ?>"> | |
| 1495 | - </a> | |
| 1496 | - <?php | |
| 1497 | - } | |
| 1498 | - } | |
| 1499 | - ?> | |
| 1500 | - <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> | |
| 1501 | - </div> | |
| 1502 | - <?php | |
| 1503 | - } | |
| 1504 | - } | |
| 1505 | - | |
| 1506 | - /** | |
| 1507 | - * Check chart is enabled or not. | |
| 1508 | - * | |
| 1509 | - * @param string $type Chart ID. | |
| 1510 | - * | |
| 1511 | - * @return bool Default false | |
| 1512 | - */ | |
| 1513 | - public static function checkChartStatus( $type ) { | |
| 1514 | - $types = self::_getChartTypesLocalized( false, false, false, true ); | |
| 1515 | - if ( isset( $types[ $type ] ) ) { | |
| 1516 | - return ! empty( $types[ $type ]['enabled'] ); | |
| 1517 | - } | |
| 1518 | - return false; | |
| 1519 | - } | |
| 1520 | - | |
| 1521 | - /** | |
| 1522 | - * Get the survey metadata. | |
| 1523 | - * | |
| 1524 | - * @param array $data The data for survey in Formbricks format. | |
| 1525 | - * @param string $page_slug The slug of the loaded page. | |
| 1526 | - * | |
| 1527 | - * @return array The survey metadata. | |
| 1528 | - */ | |
| 1529 | - public function get_survey_metadata( $data, $page_slug ) { | |
| 1530 | - $install_date = get_option( 'visualizer_install', time() ); | |
| 1531 | - $install_days_number = intval( ( time() - $install_date ) / DAY_IN_SECONDS ); | |
| 1532 | - | |
| 1533 | - $license_status = apply_filters( 'product_visualizer_license_status', 'invalid' ); | |
| 1534 | - $license_plan = apply_filters( 'product_visualizer_license_plan', false ); | |
| 1535 | - $license_key = apply_filters( 'product_visualizer_license_key', false ); | |
| 1536 | - | |
| 1537 | - $plugin_data = get_plugin_data( VISUALIZER_BASEFILE, false, false ); | |
| 1538 | - $plugin_version = ''; | |
| 1539 | - | |
| 1540 | - if ( ! empty( $plugin_data['Version'] ) ) { | |
| 1541 | - $plugin_version = $plugin_data['Version']; | |
| 1542 | - } | |
| 1543 | - | |
| 1544 | - $count_charts_cache_key = 'visualizer_count_charts'; | |
| 1545 | - $charts_number = get_transient( $count_charts_cache_key ); | |
| 1546 | - | |
| 1547 | - if ( false === $charts_number ) { | |
| 1548 | - $charts_number = $this->count_charts( 100 ); | |
| 1549 | - set_transient( $count_charts_cache_key, $charts_number, 100 === $charts_number ? WEEK_IN_SECONDS : 6 * HOUR_IN_SECONDS ); | |
| 1550 | - } else { | |
| 1551 | - $charts_number = strval( $charts_number ); | |
| 1552 | - } | |
| 1553 | - | |
| 1554 | - $data = array( | |
| 1555 | - 'environmentId' => 'cltef8cut1s7wyyfxy3rlxzs5', | |
| 1556 | - 'attributes' => array( | |
| 1557 | - 'free_version' => $plugin_version, | |
| 1558 | - 'pro_version' => defined( 'VISUALIZER_PRO_VERSION' ) ? VISUALIZER_PRO_VERSION : '', | |
| 1559 | - 'license_status' => $license_status, | |
| 1560 | - 'install_days_number' => $install_days_number, | |
| 1561 | - 'charts_number' => $charts_number, | |
| 1562 | - ), | |
| 1563 | - ); | |
| 1564 | - | |
| 1565 | - if ( ! empty( $license_plan ) ) { | |
| 1566 | - $data['attributes']['plan'] = $license_plan; | |
| 1567 | - } | |
| 1568 | - | |
| 1569 | - if ( ! empty( $license_key ) ) { | |
| 1570 | - $data['attributes']['license_key'] = apply_filters( 'themeisle_sdk_secret_masking', $license_key ); | |
| 1571 | - } | |
| 1572 | - | |
| 1573 | - return $data; | |
| 1574 | - } | |
| 1575 | - | |
| 1576 | - /** | |
| 1577 | - * Count the charts. | |
| 1578 | - * | |
| 1579 | - * @param int $limit The count limit (optional). | |
| 1580 | - * | |
| 1581 | - * @return int The number of charts. | |
| 1582 | - */ | |
| 1583 | - public function count_charts( $limit = -1 ) { | |
| 1584 | - $args = array( | |
| 1585 | - 'post_type' => Visualizer_Plugin::CPT_VISUALIZER, | |
| 1586 | - 'post_status' => 'publish', | |
| 1587 | - 'posts_per_page' => $limit, | |
| 1588 | - 'fields' => 'ids', | |
| 1589 | - ); | |
| 1590 | - | |
| 1591 | - $query = new WP_Query( $args); | |
| 1592 | - return $query->post_count; | |
| 1593 | - } | |
| 1594 | - | |
| 1595 | - /** | |
| 1596 | - * Set the black friday data. | |
| 1597 | - * | |
| 1598 | - * @param array $configs The configuration array for the loaded products. | |
| 1599 | - * @return array | |
| 1600 | - */ | |
| 1601 | - public function add_black_friday_data( $configs ) { | |
| 1602 | - $config = $configs['default']; | |
| 1603 | - | |
| 1604 | - $message = __( 'Database queries, private charts, auto-sync. Go beyond basic charts. Exclusively for existing Visualizer users.', 'visualizer' ); | |
| 1605 | - $cta_label = __( 'Get Visualizer Pro', 'visualizer' ); | |
| 1606 | - | |
| 1607 | - $plan = apply_filters( 'product_visualizer_license_plan', 0 ); | |
| 1608 | - $license = apply_filters( 'product_visualizer_license_key', false ); | |
| 1609 | - $status = apply_filters( 'product_visualizer_license_status', false ); | |
| 1610 | - $pro_product_slug = defined( 'VISUALIZER_PRO_BASEFILE' ) ? basename( dirname( VISUALIZER_PRO_BASEFILE ) ) : ''; | |
| 1611 | - | |
| 1612 | - $is_pro = 'valid' === $status; | |
| 1613 | - $is_expired = 'expired' === $status || 'active-expired' === $status; | |
| 1614 | - | |
| 1615 | - if ( $is_pro ) { | |
| 1616 | - // translators: %s is the discount percentage. | |
| 1617 | - $config['plugin_meta_message'] = sprintf( __( 'Black Friday Sale - up to %s off', 'visualizer' ), '30%' ); | |
| 1618 | - // translators: %1$s - discount, %2$s - discount. | |
| 1619 | - $message = sprintf( __( 'Upgrade your Visualizer Pro plan: %1$s off this week. Already on the plan you need? Renew early and save up to %2$s.', 'visualizer' ), '30%', '20%' ); | |
| 1620 | - $cta_label = __( 'See your options', 'visualizer' ); | |
| 1621 | - } elseif ( $is_expired ) { | |
| 1622 | - // translators: %s is the discount percentage. | |
| 1623 | - $config['upgrade_menu_text'] = sprintf( __( 'BF Sale - %s off', 'visualizer' ), '50%' ); | |
| 1624 | - // translators: %s is the discount percentage. | |
| 1625 | - $config['plugin_meta_message'] = sprintf( __( 'Black Friday Sale - %s off', 'visualizer' ), '50%' ); | |
| 1626 | - $message = __( 'Your Visualizer Pro features are still here, just locked. Renew at a reduced rate this week.', 'visualizer' ); | |
| 1627 | - $cta_label = __( 'Reactivate now', 'visualizer' ); | |
| 1628 | - } else { | |
| 1629 | - // translators: %s is the discount percentage. | |
| 1630 | - $config['plugin_meta_message'] = sprintf( __( 'Black Friday Sale - %s off', 'visualizer' ), '60%' ); | |
| 1631 | - $config['title'] = __( 'Visualizer Pro: 60% off this week', 'visualizer' ); | |
| 1632 | - // translators: %s is the discount percentage. | |
| 1633 | - $config['upgrade_menu_text'] = sprintf( __( 'BF Sale - %s off', 'visualizer' ), '60%' ); | |
| 1634 | - } | |
| 1635 | - | |
| 1636 | - $url_params = array( | |
| 1637 | - 'utm_term' => $is_pro ? 'plan-' . $plan : 'free', | |
| 1638 | - 'lkey' => ! empty( $license ) ? $license : false, | |
| 1639 | - 'expired' => $is_expired ? '1' : false, | |
| 1640 | - ); | |
| 1641 | - | |
| 1642 | - if ( ( $is_pro || $is_expired ) && ! empty( $pro_product_slug ) ) { | |
| 1643 | - $config['plugin_meta_targets'] = array( $pro_product_slug ); | |
| 1644 | - } | |
| 1645 | - | |
| 1646 | - $config['message'] = $message; | |
| 1647 | - $config['cta_label'] = $cta_label; | |
| 1648 | - | |
| 1649 | - $config['sale_url'] = add_query_arg( | |
| 1650 | - $url_params, | |
| 1651 | - tsdk_translate_link( tsdk_utmify( 'https://themeisle.link/vizualizer-bf', 'bfcm', 'visualizer' ) ) | |
| 1652 | - ); | |
| 1653 | - | |
| 1654 | - $configs[ VISUALIZER_DIRNAME ] = $config; | |
| 1655 | - | |
| 1656 | - return $configs; | |
| 1106 | + return 'yes' === get_option( 'visualizer-new-user', 'yes' ) ? false : true; | |
| 1657 | 1107 | } |
| 1658 | 1108 | } |