PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 1.4.2.2
Visualizer – Tables & Charts Manager with Built-in AI Generator v1.4.2.2
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/Setup.php +6 -375 3.10.21.4.2.2 View file →
@@ -18,8 +18,9 @@
18 18 // | MA 02110-1301 USA |
19 19 // +----------------------------------------------------------------------+
20 20 // | Author: Eugene Manuilov <eugene@manuilov.org> |
21 21 // +----------------------------------------------------------------------+
22 +
22 23 /**
23 24 * General module what setups all required environment.
24 25 *
25 26 * @category Visualizer
@@ -41,122 +42,13 @@
41 42 */
42 43 public function __construct( Visualizer_Plugin $plugin ) {
43 44 parent::__construct( $plugin );
44 45
45 - register_activation_hook( VISUALIZER_BASEFILE, array( $this, 'activate' ) );
46 - register_deactivation_hook( VISUALIZER_BASEFILE, array( $this, 'deactivate' ) );
47 - $this->_addAction( 'visualizer_schedule_refresh_db', 'refreshDbChart' );
48 - $this->_addFilter( 'visualizer_schedule_refresh_chart', 'refresh_db_for_chart', 10, 3 );
49 -
50 - $this->_addAction( 'admin_init', 'adminInit' );
51 46 $this->_addAction( 'init', 'setupCustomPostTypes' );
52 47 $this->_addAction( 'plugins_loaded', 'loadTextDomain' );
53 - $this->_addFilter( 'visualizer_logger_data', 'getLoggerData' );
54 - $this->_addFilter( 'visualizer_get_chart_counts', 'getUsage', 10, 2 );
55 -
56 - $this->_addAction( 'init', 'checkIsExistingUser' );
57 -
58 - // only for testing
59 - // $this->_addAction( 'admin_init', 'getUsage' );
60 48 }
61 - /**
62 - * Fetches the SDK logger data.
63 - *
64 - * @param array $data The default data that needs to be sent.
65 - *
66 - * @access public
67 - */
68 - public function getLoggerData( $data ) {
69 - return $this->getUsage( $data );
70 - }
71 49
72 50 /**
73 - * Fetches the usage of charts.
74 - *
75 - * @param array $data The default data that needs to be sent.
76 - * @param array $meta_keys An array of name vs. meta keys - to return how many charts have these keys.
77 - *
78 - * @access public
79 - */
80 - public function getUsage( $data, $meta_keys = array() ) {
81 - $charts = array( 'types' => array(), 'sources' => array(), 'library' => array(), 'permissions' => 0, 'manual_config' => 0, 'scheduled' => 0 );
82 - $query_args = array(
83 - 'post_type' => Visualizer_Plugin::CPT_VISUALIZER,
84 - 'posts_per_page' => 300,
85 - 'post_status' => 'publish',
86 - 'fields' => 'ids',
87 - 'no_rows_found' => false,
88 - 'update_post_meta_cache' => false,
89 - 'update_post_term_cache' => false,
90 - );
91 -
92 - // default permissions.
93 - $default_perms = array(
94 - 'read' => 'all',
95 - 'read-specific' => null,
96 - 'edit' => 'roles',
97 - 'edit-specific' => array( 'administrator' ),
98 - );
99 -
100 - // collect all schedules chart ids.
101 - $scheduled = array_merge(
102 - array_keys( get_option( Visualizer_Plugin::CF_CHART_SCHEDULE, array() ) ),
103 - array_keys( get_option( Visualizer_Plugin::CF_DB_SCHEDULE, array() ) )
104 - );
105 - $query = new WP_Query( $query_args );
106 - while ( $query->have_posts() ) {
107 - $chart_id = $query->next_post();
108 - $type = get_post_meta( $chart_id, Visualizer_Plugin::CF_CHART_TYPE, true );
109 - $charts['types'][ $type ] = isset( $charts['types'][ $type ] ) ? $charts['types'][ $type ] + 1 : 1;
110 - $source = get_post_meta( $chart_id, Visualizer_Plugin::CF_SOURCE, true );
111 - $charts['sources'][ $source ] = isset( $charts['sources'][ $source ] ) ? $charts['sources'][ $source ] + 1 : 1;
112 - $lib = get_post_meta( $chart_id, Visualizer_Plugin::CF_CHART_LIBRARY, true );
113 - $charts['library'][ $lib ] = isset( $charts['library'][ $lib ] ) ? $charts['library'][ $lib ] + 1 : 1;
114 - $settings = get_post_meta( $chart_id, Visualizer_Plugin::CF_SETTINGS, true );
115 - if ( array_key_exists( 'manual', $settings ) && ! empty( $settings['manual'] ) ) {
116 - $charts['manual_config'] = $charts['manual_config'] + 1;
117 - }
118 -
119 - // phpcs:ignore WordPress.PHP.StrictInArray.FoundNonStrictFalse
120 - if ( in_array( $chart_id, $scheduled, false ) ) {
121 - $charts['scheduled'] = $charts['scheduled'] + 1;
122 - }
123 -
124 - if ( Visualizer_Module::is_pro() ) {
125 - $permissions = get_post_meta( $chart_id, Visualizer_PRO::CF_PERMISSIONS, true );
126 - if ( empty( $permissions ) ) {
127 - continue;
128 - }
129 - $permissions = $permissions['permissions'];
130 - $customized = false;
131 - foreach ( $default_perms as $key => $val ) {
132 - if ( ! is_array( $val ) && ! is_null( $val ) && isset( $permissions[ $key ] ) && $permissions[ $key ] !== $val ) {
133 - $customized = true;
134 - } elseif ( is_array( $val ) && ! is_null( $val ) && isset( $permissions[ $key ] ) && count( $permissions[ $key ] ) !== count( $val ) ) {
135 - $customized = true;
136 - }
137 - }
138 - if ( $customized ) {
139 - $charts['permissions'] = $charts['permissions'] + 1;
140 - }
141 - }
142 -
143 - if ( ! empty( $meta_keys ) ) {
144 - foreach ( $meta_keys as $name => $key ) {
145 - $data = get_post_meta( $chart_id, $key, true );
146 - if ( ! empty( $data ) ) {
147 - $charts[ $name ] = isset( $charts[ $name ] ) ? $charts[ $name ] + 1 : 1;
148 - } else {
149 - $charts[ $name ] = 0;
150 - }
151 - }
152 - }
153 - }
154 -
155 - return $charts;
156 - }
157 -
158 - /**
159 51 * Registers custom post type for charts.
160 52 *
161 53 * @since 1.0.0
162 54 * @uses register_post_type() To register custom post type for charts.
@@ -163,19 +55,12 @@
163 55 *
164 56 * @access public
165 57 */
166 58 public function setupCustomPostTypes() {
167 - register_post_type(
168 - Visualizer_Plugin::CPT_VISUALIZER,
169 - array(
170 - 'label' => 'Visualizer Charts',
171 - 'public' => false,
172 - 'supports' => array( 'revisions' ),
173 - 'show_in_rest' => true,
174 - 'rest_base' => 'visualizer',
175 - 'rest_controller_class' => 'WP_REST_Posts_Controller',
176 - )
177 - );
59 + register_post_type( Visualizer_Plugin::CPT_VISUALIZER, array(
60 + 'label' => 'Visualizer Chart',
61 + 'public' => false,
62 + ) );
178 63 }
179 64
180 65 /**
181 66 * Loads plugin text domain translations.
@@ -188,259 +73,5 @@
188 73 public function loadTextDomain() {
189 74 load_plugin_textdomain( Visualizer_Plugin::NAME, false, dirname( plugin_basename( VISUALIZER_BASEFILE ) ) . '/languages/' );
190 75 }
191 76
192 - /**
193 - * Activate the plugin
194 - */
195 - public function activate( $network_wide ) {
196 - if ( is_multisite() && $network_wide ) {
197 - foreach ( get_sites( array( 'fields' => 'ids' ) ) as $blog_id ) {
198 - switch_to_blog( $blog_id );
199 - $this->activate_on_site();
200 - restore_current_blog();
201 - }
202 - } else {
203 - $this->activate_on_site();
204 - }
205 - }
206 -
207 - /**
208 - * Activates the plugin on a particular blog instance (supports multisite and single site).
209 - */
210 - private function activate_on_site() {
211 - wp_clear_scheduled_hook( 'visualizer_schedule_refresh_db' );
212 - wp_schedule_event( strtotime( 'midnight' ) - get_option( 'gmt_offset' ) * HOUR_IN_SECONDS, apply_filters( 'visualizer_chart_schedule_interval', 'hourly' ), 'visualizer_schedule_refresh_db' );
213 - add_option( 'visualizer-activated', true );
214 - $is_fresh_install = get_option( 'visualizer_fresh_install', false );
215 - if ( ! defined( 'TI_CYPRESS_TESTING' ) && false === $is_fresh_install ) {
216 - update_option( 'visualizer_fresh_install', '1' );
217 - }
218 - }
219 -
220 - /**
221 - * Deactivate the plugin
222 - */
223 - public function deactivate( $network_wide ) {
224 - if ( is_multisite() && $network_wide ) {
225 - foreach ( get_sites( array( 'fields' => 'ids' ) ) as $blog_id ) {
226 - switch_to_blog( $blog_id );
227 - $this->deactivate_on_site();
228 - restore_current_blog();
229 - }
230 - } else {
231 - $this->deactivate_on_site();
232 - }
233 - }
234 -
235 - /**
236 - * Deactivates the plugin on a particular blog instance (supports multisite and single site).
237 - */
238 - private function deactivate_on_site() {
239 - wp_clear_scheduled_hook( 'visualizer_schedule_refresh_db' );
240 - delete_option( 'visualizer-activated', true );
241 - }
242 -
243 - /**
244 - * Check if plugin has been activated and then redirect to the correct page.
245 - */
246 - public function adminInit() {
247 - if ( defined( 'TI_UNIT_TESTING' ) ) {
248 - return;
249 - }
250 -
251 - define( 'VISUALIZER_SURVEY', Visualizer_Module::is_pro() ? 'https://forms.gle/7Zo7FuZbvQ8DTvRi6' : 'https://forms.gle/muMtbcyvHn1aTvmJ7' );
252 - // fire any upgrades necessary.
253 - Visualizer_Module_Upgrade::upgrade();
254 -
255 - if ( get_option( 'visualizer-activated' ) ) {
256 - delete_option( 'visualizer-activated' );
257 - if ( ! headers_sent() ) {
258 - if ( ! Visualizer_Module::is_pro() && ! empty( get_option( 'visualizer_fresh_install', false ) ) ) {
259 - $redirect_url = array(
260 - 'page' => 'visualizer-setup-wizard',
261 - 'tab' => '#step-1',
262 - );
263 - } else {
264 - $page_name = Visualizer_Module::numberOfCharts() > 0 ? Visualizer_Plugin::NAME : 'viz-support';
265 - $redirect_url = array(
266 - 'page' => $page_name,
267 - );
268 - }
269 - wp_safe_redirect(
270 - add_query_arg(
271 - $redirect_url,
272 - admin_url( 'admin.php' )
273 - )
274 - );
275 - exit();
276 - }
277 - }
278 - }
279 -
280 -
281 - /**
282 - * Refresh the specific chart from the db.
283 - *
284 - * @param WP_Post $chart The chart object.
285 - * @param int $chart_id The chart id.
286 - * @param bool $force If this is true, then the chart data will be force refreshed. If false, data will be refreshed only if the chart requests live data.
287 - *
288 - * @access public
289 - */
290 - public function refresh_db_for_chart( $chart, $chart_id, $force = false ) {
291 - if ( ! $chart_id ) {
292 - return $chart;
293 - }
294 -
295 - if ( ! $chart ) {
296 - $chart = get_post( $chart_id );
297 - }
298 -
299 - if ( ! $chart ) {
300 - return $chart;
301 - }
302 -
303 - // check if the source is correct.
304 - $source = get_post_meta( $chart_id, Visualizer_Plugin::CF_SOURCE, true );
305 - $load_series = false;
306 - switch ( $source ) {
307 - case 'Visualizer_Source_Query':
308 - // check if its a live-data chart or a cached-data chart.
309 - if ( ! $force ) {
310 - $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_DB_SCHEDULE, true );
311 - if ( ! empty( $hours ) ) {
312 - // cached, bail!
313 - return $chart;
314 - }
315 - }
316 -
317 - $params = get_post_meta( $chart_id, Visualizer_Plugin::CF_DB_QUERY, true );
318 - $source = new Visualizer_Source_Query( $params, $chart_id );
319 - $source->fetch( false );
320 - $load_series = true;
321 - break;
322 - case 'Visualizer_Source_Json':
323 - // check if its a live-data chart or a cached-data chart.
324 - if ( ! $force ) {
325 - $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_JSON_SCHEDULE, true );
326 - if ( ! empty( $hours ) ) {
327 - // cached, bail!
328 - return $chart;
329 - }
330 - }
331 -
332 - $url = get_post_meta( $chart_id, Visualizer_Plugin::CF_JSON_URL, true );
333 - $root = get_post_meta( $chart_id, Visualizer_Plugin::CF_JSON_ROOT, true );
334 - $paging = get_post_meta( $chart_id, Visualizer_Plugin::CF_JSON_PAGING, true );
335 - $series = get_post_meta( $chart_id, Visualizer_Plugin::CF_SERIES, true );
336 - $source = new Visualizer_Source_Json( array( 'url' => $url, 'root' => $root, 'paging' => $paging ) );
337 - $source->refresh( $series );
338 - break;
339 - case 'Visualizer_Source_Csv_Remote':
340 - // check if its a live-data chart or a cached-data chart.
341 - if ( ! $force ) {
342 - $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_CHART_SCHEDULE, true );
343 - if ( ! empty( $hours ) ) {
344 - // cached, bail!
345 - return $chart;
346 - }
347 - }
348 - do_action( 'visualizer_schedule_import' );
349 - return get_post( $chart_id );
350 - default:
351 - return $chart;
352 - }
353 -
354 - $error = $source->get_error();
355 - if ( empty( $error ) ) {
356 - $this->disableRevisionsTemporarily();
357 - if ( $load_series ) {
358 - update_post_meta( $chart_id, Visualizer_Plugin::CF_SERIES, $source->getSeries() );
359 - }
360 -
361 - $allow_html = false;
362 - $settings = get_post_meta( $chart_id, Visualizer_Plugin::CF_SETTINGS, true );
363 - if ( isset( $settings['allowHtml'] ) && intval( $settings['allowHtml'] ) === 1 ) {
364 - $allow_html = true;
365 - }
366 -
367 - $allow_html = apply_filters( 'visualizer_allow_html_content', $allow_html, $chart_id, $chart );
368 -
369 - if ( $allow_html ) {
370 - kses_remove_filters();
371 - }
372 -
373 - wp_update_post(
374 - array(
375 - 'ID' => $chart_id,
376 - 'post_content' => $source->getData( get_post_meta( $chart_id, Visualizer_Plugin::CF_EDITABLE_TABLE, true ) ),
377 - )
378 - );
379 -
380 - if ( $allow_html ) {
381 - kses_init_filters();
382 - }
383 -
384 - $chart = get_post( $chart_id );
385 - delete_post_meta( $chart_id, Visualizer_Plugin::CF_ERROR );
386 - } else {
387 - update_post_meta( $chart_id, Visualizer_Plugin::CF_ERROR, sprintf( 'Error while updating chart: %s', $error ) );
388 - }
389 -
390 - return $chart;
391 - }
392 -
393 - /**
394 - * Refresh the db chart.
395 - *
396 - * @access public
397 - */
398 - public function refreshDbChart() {
399 - $schedules = get_option( Visualizer_Plugin::CF_DB_SCHEDULE, array() );
400 - if ( ! $schedules ) {
401 - return;
402 - }
403 - if ( ! defined( 'VISUALIZER_DO_NOT_DIE' ) ) {
404 - // define this so that the ajax call does not die
405 - // this means that if the new version of pro and the old version of free are installed, only the first chart will be updated
406 - define( 'VISUALIZER_DO_NOT_DIE', true );
407 - }
408 -
409 - $new_schedules = array();
410 - $now = time();
411 - foreach ( $schedules as $chart_id => $time ) {
412 - $new_schedules[ $chart_id ] = $time;
413 - if ( $time > $now ) {
414 - continue;
415 - }
416 -
417 - // if the time is nigh, we force an update.
418 - $this->refresh_db_for_chart( null, $chart_id, true );
419 - // Clear existing chart cache.
420 - $cache_key = Visualizer_Plugin::CF_CHART_CACHE . '_' . $chart_id;
421 - if ( get_transient( $cache_key ) ) {
422 - delete_transient( $cache_key );
423 - }
424 - $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_DB_SCHEDULE, true );
425 - $new_schedules[ $chart_id ] = time() + $hours * HOUR_IN_SECONDS;
426 - }
427 - update_option( Visualizer_Plugin::CF_DB_SCHEDULE, $new_schedules );
428 - }
429 -
430 - /**
431 - * Save flag for existing users.
432 - */
433 - public function checkIsExistingUser() {
434 - $chart_exists = get_option( 'visualizer-new-user', '' );
435 - if ( '' === $chart_exists ) {
436 - $charts = get_posts(
437 - array(
438 - 'post_type' => Visualizer_Plugin::CPT_VISUALIZER,
439 - 'fields' => 'ids',
440 - )
441 - );
442 - update_option( 'visualizer-new-user', ! empty( $charts ) ? 'no' : 'yes' );
443 - }
444 - }
445 -
446 -}
77 +}