PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 4.0.8
Visualizer – Tables & Charts Manager with Built-in AI Generator v4.0.8
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 | index.php +69 -15 3.10.144.0.8 View file →
@@ -1,14 +1,12 @@
1 1 <?php
2 2 /*
3 3 Plugin Name: Visualizer: Tables and Charts for WordPress
4 4 Plugin URI: https://themeisle.com/plugins/visualizer-charts-and-graphs/
5 - Description: A simple, easy to use and quite powerful tool to create, manage and embed interactive charts into your WordPress posts and pages. The plugin uses Google Visualization API to render charts, which supports cross-browser compatibility (adopting VML for older IE versions) and cross-platform portability to iOS and new Android releases.
6 - Version: 3.10.14
5 + Description: Effortlessly create and embed responsive charts and tables with Visualizer, a powerful WordPress plugin that enhances data presentation from multiple sources.
6 + Version: 4.0.8
7 7 Author: Themeisle
8 8 Author URI: http://themeisle.com
9 - Requires at least: 5.2
10 - Tested up to: 5.6
11 9 License: GPL v2.0 or later
12 10 WordPress Available: yes
13 11 Requires License: no
14 12 Pro Slug: visualizer-pro
@@ -37,17 +35,17 @@
37 35 * approved classes.
38 36 *
39 37 * @since 1.0.0
40 38 *
41 - * @param string $class The class name to autoload.
39 + * @param string $class_name The class name to autoload.
42 40 *
43 41 * @return boolean Returns TRUE if the class is located. Otherwise FALSE.
44 42 */
45 -function visualizer_autoloader( $class ) {
43 +function visualizer_autoloader( $class_name ) {
46 44 $namespaces = array( 'Visualizer' );
47 45 foreach ( $namespaces as $namespace ) {
48 - if ( substr( $class, 0, strlen( $namespace ) ) === $namespace ) {
49 - $filename = dirname( __FILE__ ) . str_replace( '_', DIRECTORY_SEPARATOR, "_classes_{$class}.php" );
46 + if ( substr( $class_name, 0, strlen( $namespace ) ) === $namespace ) {
47 + $filename = __DIR__ . str_replace( '_', DIRECTORY_SEPARATOR, "_classes_{$class_name}.php" );
50 48 if ( is_readable( $filename ) ) {
51 49 require $filename;
52 50
53 51 return true;
@@ -67,9 +65,9 @@
67 65 // setup environment
68 66 define( 'VISUALIZER_BASEFILE', __FILE__ );
69 67 define( 'VISUALIZER_BASENAME', plugin_basename( __FILE__ ) );
70 68 define( 'VISUALIZER_ABSURL', plugins_url( '/', __FILE__ ) );
71 - define( 'VISUALIZER_ABSPATH', dirname( __FILE__ ) );
69 + define( 'VISUALIZER_ABSPATH', __DIR__ );
72 70 define( 'VISUALIZER_DIRNAME', basename( VISUALIZER_ABSPATH ) );
73 71 define( 'VISUALIZER_REST_VERSION', 1 );
74 72 // if the below is true, then the js/customization.js in the plugin folder will be used instead of the one in the uploads folder (if it exists).
75 73 // this is also used in Block.php
@@ -94,12 +92,13 @@
94 92
95 93 // the link to pre-build queries.
96 94 define( 'VISUALIZER_DB_QUERY_DOC_URL', 'https://docs.themeisle.com/article/970-visualizer-sample-queries-to-generate-charts' );
97 95 define( 'VISUALIZER_MAIN_DOC', 'https://docs.themeisle.com/category/657-visualizer' );
98 - define( 'VISUALIZER_DOC_COLLECTION', 'https://docs.themeisle.com/search?collectionId=561ec249c69791452ed4bceb&query=#+visualizer' );
96 + define( 'VISUALIZER_DOC_COLLECTION', 'https://docs.themeisle.com/visualizer-charts-and-graphs/?query=#' );
99 97 define( 'VISUALIZER_DEMO_URL', 'https://demo.themeisle.com/visualizer/#' );
100 98 define( 'VISUALIZER_CODE_SNIPPETS_URL', 'https://docs.themeisle.com/category/726-visualizer' );
101 99 define( 'VISUALIZER_SUBSCRIBE_API', 'https://api.themeisle.com/tracking/subscribe' );
100 + define( 'VISUALIZER_AGENTS_URL', 'https://ai.themeisle.com' );
102 101
103 102 // to redirect all themeisle_log_event to error log.
104 103 define( 'VISUALIZER_LOCAL_DEBUG', false );
105 104
@@ -113,8 +112,18 @@
113 112 Visualizer_Gutenberg_Block::get_instance();
114 113 }}
115 114 );
116 115
116 + // register Elementor widget and related hooks
117 + // Use elementor/init so Elementor's autoloader is registered and Widget_Base is resolvable.
118 + add_action(
119 + 'elementor/init',
120 + function () {
121 + require_once VISUALIZER_ABSPATH . '/classes/Visualizer/Elementor/Widget.php';
122 + Visualizer_Elementor_Widget::register_hooks();
123 + }
124 + );
125 +
117 126 // set general modules
118 127 $plugin->setModule( Visualizer_Module_Utility::NAME );
119 128 $plugin->setModule( Visualizer_Module_Setup::NAME );
120 129 $plugin->setModule( Visualizer_Module_Sources::NAME );
@@ -132,12 +141,22 @@
132 141
133 142 // Set setup wizard module.
134 143 $plugin->setModule( Visualizer_Module_Wizard::NAME );
135 144
145 + // AI Chart Builder module (AJAX endpoints for the React wizard).
146 + $plugin->setModule( Visualizer_Module_AIBuilder::NAME );
147 +
136 148 $vendor_file = VISUALIZER_ABSPATH . '/vendor/autoload.php';
137 149 if ( is_readable( $vendor_file ) ) {
138 - include_once( $vendor_file );
150 + include_once $vendor_file;
139 151 }
152 +
153 + $action_scheduler_file = VISUALIZER_ABSPATH . '/vendor/woocommerce/action-scheduler/action-scheduler.php';
154 +
155 + if ( is_readable( $action_scheduler_file ) ) {
156 + require_once $action_scheduler_file;
157 + }
158 +
140 159 add_filter( 'themeisle_sdk_products', 'visualizer_register_sdk', 10, 1 );
141 160 add_filter( 'pirate_parrot_log', 'visualizer_register_parrot', 10, 1 );
142 161 add_filter(
143 162 'themeisle_sdk_compatibilities/' . VISUALIZER_DIRNAME, function ( $compatibilities ) {
@@ -143,9 +162,9 @@
143 162 'themeisle_sdk_compatibilities/' . VISUALIZER_DIRNAME, function ( $compatibilities ) {
144 163 $compatibilities['VisualizerPRO'] = array(
145 164 'basefile' => defined( 'VISUALIZER_PRO_BASEFILE' ) ? VISUALIZER_PRO_BASEFILE : '',
146 165 'required' => '1.8',
147 - 'tested_up' => '1.13',
166 + 'tested_up' => '2.0',
148 167 );
149 168 return $compatibilities;
150 169 }
151 170 );
@@ -150,18 +169,53 @@
150 169 }
151 170 );
152 171 add_filter(
153 172 'visualizer_about_us_metadata',
154 - function() {
173 + function () {
155 174 return array(
156 175 'logo' => esc_url( VISUALIZER_ABSURL . 'images/visualizer-logo.svg' ),
157 176 'location' => 'visualizer',
158 177 'has_upgrade_menu' => ! Visualizer_Module::is_pro(),
159 - 'upgrade_text' => esc_html__( 'Get Visualizer Pro', 'feedzy-rss-feeds' ),
160 - 'upgrade_link' => esc_url( tsdk_utmify( Visualizer_Plugin::PRO_TEASER_URL, 'aboutUsPage' ) ),
178 + 'upgrade_text' => esc_html__( 'Get Visualizer Pro', 'visualizer' ),
179 + 'upgrade_link' => esc_url( tsdk_utmify( Visualizer_Plugin::PRO_TEASER_URL, 'sidebarMenuUpgrade', 'index' ) ),
161 180 );
162 181 }
163 182 );
183 +
184 + if ( ! defined( 'TI_E2E_TESTING' ) && 'yes' === get_option( 'visualizer_logger_flag', 'no' ) ) {
185 + add_filter( 'themeisle_sdk_enable_telemetry', '__return_true' );
186 + add_filter(
187 + 'themeisle_sdk_telemetry_products',
188 + function ( $products ) {
189 + $already_registered = false;
190 +
191 + $license = get_option( 'visualizer_pro_license_data', 'free' );
192 + if ( ! empty( $license ) && is_object( $license ) ) {
193 + $license = $license->key ?? 'free';
194 + }
195 + $track_hash = 'free' === $license ? 'free' : wp_hash( $license );
196 +
197 + foreach ( $products as &$product ) {
198 + if ( strstr( $product['slug'], 'visualizer' ) !== false ) {
199 + $already_registered = true;
200 + $product['trackHash'] = $track_hash;
201 + }
202 + }
203 +
204 + if ( $already_registered ) {
205 + return $products;
206 + }
207 +
208 + // Add Visualizer to the list of products to track the usage of AI Block.
209 + $products[] = array(
210 + 'slug' => 'visualizer',
211 + 'consent' => 'yes' === get_option( 'visualizer_logger_flag', 'no' ),
212 + 'trackHash' => $track_hash,
213 + );
214 + return $products;
215 + }
216 + );
217 + }
164 218 }
165 219
166 220 /**
167 221 * Registers with the SDK