PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.10.0
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.10.0
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/Wizard.php +34 -202 4.0.83.10.0 View file →
@@ -72,9 +72,8 @@
72 72 add_action( "load-$hook", array( $this, 'visualizer_load_setup_wizard_page' ) );
73 73 }
74 74 }
75 75
76 -
77 76 /**
78 77 * Method to register the setup wizard page.
79 78 *
80 79 * @access public
@@ -152,14 +151,8 @@
152 151 * @param bool $redirect_to_dashboard Redirect to dashboard.
153 152 * @return bool|void
154 153 */
155 154 public function dismissWizard( $redirect_to_dashboard = true ) {
156 - if ( ! current_user_can( 'manage_options' ) ) {
157 - wp_die( esc_html__( 'You do not have permission to perform this action.', 'visualizer' ), '', array( 'response' => 403 ) );
158 - }
159 - if ( false !== $redirect_to_dashboard ) {
160 - check_admin_referer( 'visualizer_dismiss_wizard' );
161 - }
162 155 // phpcs:ignore WordPress.Security.NonceVerification.Recommended
163 156 $status = isset( $_REQUEST['status'] ) ? (int) $_REQUEST['status'] : 0;
164 157 update_option( 'visualizer_fresh_install', $status );
165 158 delete_option( 'visualizer_wizard_data' );
@@ -174,12 +167,9 @@
174 167 * Setup wizard process.
175 168 */
176 169 public function visualizer_wizard_step_process() {
177 170 check_ajax_referer( VISUALIZER_ABSPATH, 'security' );
178 - if ( ! current_user_can( 'manage_options' ) ) {
179 - wp_send_json( array( 'status' => 0 ), 403 );
180 - }
181 - $step = ! empty( $_POST['step'] ) ? sanitize_text_field( wp_unslash( $_POST['step'] ) ) : 1;
171 + $step = ! empty( $_POST['step'] ) ? filter_input( INPUT_POST, 'step', FILTER_SANITIZE_STRING ) : 1;
182 172 switch ( $step ) {
183 173 case 'step_2':
184 174 $this->setup_wizard_import_chart();
185 175 break;
@@ -202,9 +192,9 @@
202 192 * Step: 2 import chart.
203 193 */
204 194 private function setup_wizard_import_chart() {
205 195 // phpcs:ignore WordPress.Security.NonceVerification.Missing
206 - $chart_type = ! empty( $_POST['chart_type'] ) ? sanitize_text_field( wp_unslash( $_POST['chart_type'] ) ) : '';
196 + $chart_type = ! empty( $_POST['chart_type'] ) ? filter_input( INPUT_POST, 'chart_type', FILTER_SANITIZE_STRING ) : '';
207 197 $chart_status = Visualizer_Module_Admin::checkChartStatus( $chart_type );
208 198 if ( ! $chart_status ) {
209 199 wp_send_json(
210 200 array(
@@ -215,21 +205,19 @@
215 205 }
216 206
217 207 $source = new Visualizer_Source_Csv( VISUALIZER_ABSPATH . DIRECTORY_SEPARATOR . 'samples' . DIRECTORY_SEPARATOR . $chart_type . '.csv' );
218 208 $source->fetch();
219 - $series = $source->getSeries();
220 209 $response = array(
221 210 'success' => 2,
222 211 'message' => __( 'Something went wrong while importing the chart', 'visualizer' ),
223 212 );
224 213
225 - $data = $source->getData();
226 214 $args = array(
227 215 'post_type' => Visualizer_Plugin::CPT_VISUALIZER,
228 216 'post_title' => 'Visualization',
229 217 'post_author' => get_current_user_id(),
230 218 'post_status' => 'publish',
231 - 'post_content' => $data,
219 + 'post_content' => $source->getData(),
232 220 );
233 221 $chart_id = wp_insert_post( $args );
234 222
235 223 if ( $chart_id && ! is_wp_error( $chart_id ) ) {
@@ -239,156 +227,15 @@
239 227
240 228 update_post_meta( $chart_id, Visualizer_Plugin::CF_CHART_TYPE, $chart_type );
241 229 update_post_meta( $chart_id, Visualizer_Plugin::CF_DEFAULT_DATA, 1 );
242 230 update_post_meta( $chart_id, Visualizer_Plugin::CF_SOURCE, $source->getSourceName() );
243 - update_post_meta( $chart_id, Visualizer_Plugin::CF_SERIES, $series );
231 + update_post_meta( $chart_id, Visualizer_Plugin::CF_SERIES, $source->getSeries() );
244 232 update_post_meta( $chart_id, Visualizer_Plugin::CF_CHART_LIBRARY, '' );
245 -
246 - $data = Visualizer_Module::decode_content( $data );
247 - $setting_series = array();
248 - $setting_slices = array();
249 - foreach ( $data as $s ) {
250 - $setting_series[] = array(
251 - 'visibleInLegend' => '',
252 - 'lineWidth' => '',
253 - 'pointSize' => '',
254 - 'format' => '',
255 - 'curveType' => '',
256 - 'color' => '',
257 - 'role' => '',
258 - );
259 - $setting_slices[] = array(
260 - 'offset' => 0,
261 - 'color' => '',
262 - );
263 - }
264 233 update_post_meta(
265 234 $chart_id,
266 235 Visualizer_Plugin::CF_SETTINGS,
267 236 array(
268 - 'title' => '',
269 - 'titlePosition' => '',
270 - 'titleTextStyle' => array(
271 - 'color' => '#000',
272 - ),
273 - 'legend' => array(
274 - 'position' => 'right',
275 - 'alignment' => 15,
276 - 'textStyle' => array(
277 - 'color' => '#000',
278 - 'text' => 'both',
279 - ),
280 - ),
281 - 'tooltip' => array(
282 - 'trigger' => 'focus',
283 - 'showColorCode' => 0,
284 - 'showColorCode' => 0,
285 - ),
286 - 'animation' => array(
287 - 'startup' => 0,
288 - 'duration' => '',
289 - 'easing' => 'linear',
290 - ),
291 - 'width' => '',
292 - 'height' => '',
293 - 'keepAspectRatio' => false,
294 - 'isStacked' => false,
295 - 'lazy_load_chart' => true,
296 - 'backgroundColor' => array(
297 - 'strokeWidth' => '',
298 - 'stroke' => '',
299 - 'fill' => '',
300 - ),
301 - 'chartArea' => array(
302 - 'left' => '',
303 - 'top' => '',
304 - 'width' => '',
305 - 'height' => '',
306 - ),
307 - 'focusTarget' => 'datum',
308 - 'series' => $setting_series,
309 - 'slices' => $setting_slices,
310 - 'vAxis' => array(
311 - 'title' => '',
312 - 'textPosition' => '',
313 - 'direction' => 1,
314 - 'baselineColor' => '#000',
315 - 'textStyle' => array(
316 - 'color' => '#000',
317 - ),
318 - 'format' => '',
319 - 'gridlines' => array(
320 - 'count' => '',
321 - 'color' => '#ccc',
322 - ),
323 - 'minorGridlines' => array(
324 - 'count' => '',
325 - 'color' => '',
326 - ),
327 - 'viewWindow' => array(
328 - 'max' => '',
329 - 'min' => '',
330 - ),
331 - ),
332 - 'hAxis' => array(
333 - 'title' => '',
334 - 'textPosition' => '',
335 - 'direction' => 1,
336 - 'baselineColor' => '#000',
337 - 'textStyle' => array(
338 - 'color' => '#000',
339 - ),
340 - 'format' => '',
341 - 'gridlines' => array(
342 - 'count' => '',
343 - 'color' => '#ccc',
344 - ),
345 - 'minorGridlines' => array(
346 - 'count' => '',
347 - 'color' => '',
348 - ),
349 - 'viewWindow' => array(
350 - 'max' => '',
351 - 'min' => '',
352 - ),
353 - ),
354 - 'customcss' => array(
355 - 'headerRow' => array(
356 - 'background-color' => '',
357 - 'color' => '',
358 - 'transform' => '',
359 - ),
360 - 'tableRow' => array(
361 - 'background-color' => '',
362 - 'color' => '',
363 - 'transform' => '',
364 - ),
365 - 'oddTableRow' => array(
366 - 'background-color' => '',
367 - 'color' => '',
368 - 'transform' => '',
369 - ),
370 - 'selectedTableRow' => array(
371 - 'background-color' => '',
372 - 'color' => '',
373 - 'transform' => '',
374 - ),
375 - 'hoverTableRow' => array(
376 - 'background-color' => '',
377 - 'color' => '',
378 - 'transform' => '',
379 - ),
380 - 'headerCell' => array(
381 - 'background-color' => '',
382 - 'color' => '',
383 - 'transform' => '',
384 - ),
385 - 'tableCell' => array(
386 - 'background-color' => '',
387 - 'color' => '',
388 - 'transform' => '',
389 - ),
390 - ),
237 + 'focusTarget' => 'datum',
391 238 )
392 239 );
393 240 $wizard_data = array(
394 241 'chart_type' => $chart_type,
@@ -395,10 +242,9 @@
395 242 'chart_id' => $chart_id,
396 243 );
397 244 $this->update_wizard_data( $wizard_data, false );
398 245 $response = array(
399 - 'success' => 1,
400 - 'chart_id' => $chart_id,
246 + 'success' => 1,
401 247 );
402 248 }
403 249 wp_send_json( $response );
404 250 exit;
@@ -426,9 +272,9 @@
426 272 */
427 273 private function setup_wizard_create_draft_page( $return_page_id = false ) {
428 274 $add_basic_shortcode = ! empty( $_POST['add_basic_shortcode'] ) ? sanitize_text_field( wp_unslash( $_POST['add_basic_shortcode'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Missing
429 275 $add_basic_shortcode = 'true' === $add_basic_shortcode ? true : false;
430 - $basic_shortcode = ! empty( $_POST['basic_shortcode'] ) ? sanitize_text_field( wp_unslash( $_POST['basic_shortcode'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Missing
276 + $basic_shortcode = ! empty( $_POST['basic_shortcode'] ) ? filter_input( INPUT_POST, 'basic_shortcode', FILTER_SANITIZE_STRING ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Missing
431 277
432 278 if ( ! $add_basic_shortcode ) {
433 279 wp_send_json(
434 280 array(
@@ -486,9 +332,9 @@
486 332 * Step: 3 Install plugin.
487 333 */
488 334 private function setup_wizard_install_plugin() {
489 335 // phpcs:ignore WordPress.Security.NonceVerification.Missing
490 - $slug = ! empty( $_POST['slug'] ) ? sanitize_text_field( wp_unslash( $_POST['slug'] ) ) : '';
336 + $slug = ! empty( $_POST['slug'] ) ? filter_input( INPUT_POST, 'slug', FILTER_SANITIZE_STRING ) : '';
491 337 if ( empty( $slug ) ) {
492 338 wp_send_json(
493 339 array(
494 340 'status' => 0,
@@ -506,12 +352,10 @@
506 352 );
507 353 }
508 354
509 355 if ( ! empty( $slug ) ) {
510 - $wizard_data = get_option( self::OPTION_NAME, array() );
511 356 require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
512 357 include_once ABSPATH . 'wp-admin/includes/plugin-install.php';
513 - require_once ABSPATH . 'wp-admin/includes/plugin.php';
514 358
515 359 $api = plugins_api(
516 360 'plugin_information',
517 361 array(
@@ -571,38 +415,13 @@
571 415
572 416 wp_send_json( $status );
573 417 }
574 418
575 - $installed_plugins = get_plugins( '/' . sanitize_key( wp_unslash( $slug ) ) );
576 - if ( ! empty( $installed_plugins ) ) {
577 - $plugin_files = array_keys( $installed_plugins );
578 - $plugin_file = sanitize_key( wp_unslash( $slug ) ) . '/' . $plugin_files[0];
579 - activate_plugin( $plugin_file );
580 - }
581 - $wizard_data_updated = false;
582 - if ( 'optimole-wp' === $slug ) {
583 - delete_transient( 'optml_fresh_install' );
584 - // Update wizard data.
585 - $wizard_data['enable_perfomance'] = true;
586 - $wizard_data_updated = true;
587 - }
588 - if ( 'otter-blocks' === $slug ) {
589 - // Update wizard data.
590 - $wizard_data['enable_otter_blocks'] = true;
591 - $wizard_data_updated = true;
592 - // Suppress Otter's post-activation redirects so the user stays in Visualizer.
593 - update_option( 'themeisle_blocks_settings_redirect', '0' );
594 - update_option( 'themeisle_blocks_settings_onboarding', '0' );
595 - }
596 - if ( 'wp-cloudflare-page-cache' === $slug ) {
597 - // Update wizard data.
598 - $wizard_data['enable_page_cache'] = true;
599 - $wizard_data_updated = true;
600 - update_option( 'swcfpc_dashboard_redirect', false );
601 - }
602 - if ( $wizard_data_updated ) {
603 - $this->update_wizard_data( $wizard_data );
604 - }
419 + activate_plugin( 'optimole-wp/optimole-wp.php' );
420 + delete_transient( 'optml_fresh_install' );
421 + // Update wizard data.
422 + $wizard_data['enable_perfomance'] = true;
423 + $this->update_wizard_data( $wizard_data );
605 424
606 425 wp_send_json(
607 426 array(
608 427 'status' => 1,
@@ -651,19 +470,18 @@
651 470 );
652 471 }
653 472
654 473 if ( $with_subscribe && is_email( $email ) ) {
655 - wp_remote_post(
474 + $request_res = wp_remote_post(
656 475 VISUALIZER_SUBSCRIBE_API,
657 476 array(
658 - 'timeout' => 5,
659 - 'blocking' => false,
660 - 'headers' => array(
477 + 'timeout' => 100,
478 + 'headers' => array(
661 479 'Content-Type' => 'application/json',
662 480 'Cache-Control' => 'no-cache',
663 481 'Accept' => 'application/json, */*;q=0.1',
664 482 ),
665 - 'body' => wp_json_encode(
483 + 'body' => wp_json_encode(
666 484 array(
667 485 'slug' => 'visualizer',
668 486 'site' => home_url(),
669 487 'email' => $email,
@@ -673,12 +491,26 @@
673 491 )
674 492 ),
675 493 )
676 494 );
495 + if ( ! is_wp_error( $request_res ) ) {
496 + $body = json_decode( wp_remote_retrieve_body( $request_res ) );
497 + if ( 'success' === $body->code ) {
498 + $this->dismissWizard( false );
499 + wp_send_json( $response );
500 + }
501 + }
502 + wp_send_json(
503 + array(
504 + 'status' => 0,
505 + 'redirect_to' => '',
506 + 'message' => '',
507 + )
508 + );
509 + } else {
510 + $this->dismissWizard( false );
511 + wp_send_json( $response );
677 512 }
678 -
679 - $this->dismissWizard( false );
680 - wp_send_json( $response );
681 513 }
682 514
683 515 /**
684 516 * Filter chart setting.