| @@ -56,11 +56,9 @@ | ||
| 56 | 56 | $this->_addAjaxAction( Visualizer_Plugin::ACTION_CREATE_CHART, 'renderChartPages' ); |
| 57 | 57 | $this->_addAjaxAction( Visualizer_Plugin::ACTION_EDIT_CHART, 'renderChartPages' ); |
| 58 | 58 | $this->_addAjaxAction( Visualizer_Plugin::ACTION_UPLOAD_DATA, 'uploadData' ); |
| 59 | 59 | $this->_addAjaxAction( Visualizer_Plugin::ACTION_CLONE_CHART, 'cloneChart' ); |
| 60 | - // Added by Ash/Upwork | |
| 61 | 60 | $this->_addAjaxAction( Visualizer_Plugin::ACTION_EXPORT_DATA, 'exportData' ); |
| 62 | - // Added by Ash/Upwork | |
| 63 | 61 | } |
| 64 | 62 | |
| 65 | 63 | /** |
| 66 | 64 | * Fetches charts from database. |
| @@ -82,8 +80,13 @@ | ||
| 82 | 80 | ) |
| 83 | 81 | ), |
| 84 | 82 | ); |
| 85 | 83 | $filter = filter_input( INPUT_GET, 's', FILTER_SANITIZE_STRING ); |
| 84 | + if ( empty( $filter ) ) { | |
| 85 | + // 'filter' is from the modal from the add media button. | |
| 86 | + $filter = filter_input( INPUT_GET, 'filter', FILTER_SANITIZE_STRING ); | |
| 87 | + } | |
| 88 | + | |
| 86 | 89 | if ( $filter && in_array( $filter, Visualizer_Plugin::getChartTypes() ) ) { |
| 87 | 90 | $query_args['meta_query'] = array( |
| 88 | 91 | array( |
| 89 | 92 | 'key' => Visualizer_Plugin::CF_CHART_TYPE, |
| @@ -205,9 +208,9 @@ | ||
| 205 | 208 | defined( 'IFRAME_REQUEST' ) || define( 'IFRAME_REQUEST', 1 ); |
| 206 | 209 | // check chart, if chart not exists, will create new one and redirects to the same page with proper chart id |
| 207 | 210 | $chart_id = isset( $_GET['chart'] ) ? filter_var( $_GET['chart'], FILTER_VALIDATE_INT ) : ''; |
| 208 | 211 | if ( ! $chart_id || ! ( $chart = get_post( $chart_id ) ) || $chart->post_type != Visualizer_Plugin::CPT_VISUALIZER ) { |
| 209 | - $default_type = 'line'; | |
| 212 | + $default_type = isset( $_GET['type'] ) && ! empty( $_GET['type'] ) ? $_GET['type'] : 'line'; | |
| 210 | 213 | $source = new Visualizer_Source_Csv( VISUALIZER_ABSPATH . DIRECTORY_SEPARATOR . 'samples' . DIRECTORY_SEPARATOR . $default_type . '.csv' ); |
| 211 | 214 | $source->fetch(); |
| 212 | 215 | $chart_id = wp_insert_post( |
| 213 | 216 | array( |
| @@ -261,11 +264,27 @@ | ||
| 261 | 264 | } |
| 262 | 265 | // dispatch pages |
| 263 | 266 | $this->_chart = get_post( $chart_id ); |
| 264 | 267 | $tab = isset( $_GET['tab'] ) && ! empty( $_GET['tab'] ) ? $_GET['tab'] : 'visualizer'; |
| 268 | + | |
| 269 | + // skip chart type pages only for existing charts. | |
| 270 | + if ( VISUALIZER_SKIP_CHART_TYPE_PAGE && 'auto-draft' !== $this->_chart->post_status && ( ! empty( $_GET['tab'] ) && 'visualizer' === $_GET['tab'] ) ) { | |
| 271 | + $tab = 'settings'; | |
| 272 | + } | |
| 273 | + | |
| 274 | + if ( isset( $_POST['cancel'] ) && 1 === intval( $_POST['cancel'] ) ) { | |
| 275 | + // if the cancel button is clicked. | |
| 276 | + $this->undoRevisions( $chart_id, true ); | |
| 277 | + } elseif ( isset( $_POST['save'] ) && 1 === intval( $_POST['save'] ) ) { | |
| 278 | + // if the save button is clicked. | |
| 279 | + $this->undoRevisions( $chart_id, false ); | |
| 280 | + } else { | |
| 281 | + // if the edit button is clicked. | |
| 282 | + $this->_chart = $this->handleExistingRevisions( $chart_id, $this->_chart ); | |
| 283 | + } | |
| 284 | + | |
| 265 | 285 | switch ( $tab ) { |
| 266 | 286 | case 'settings': |
| 267 | - // changed by Ash/Upwork | |
| 268 | 287 | $this->_handleDataAndSettingsPage(); |
| 269 | 288 | break; |
| 270 | 289 | case 'type': // fall through. |
| 271 | 290 | case 'visualizer': // fall through. |
| @@ -287,11 +306,18 @@ | ||
| 287 | 306 | } |
| 288 | 307 | if ( $_SERVER['REQUEST_METHOD'] == 'POST' && isset( $_GET['nonce'] ) && wp_verify_nonce( $_GET['nonce'] ) ) { |
| 289 | 308 | if ( $this->_chart->post_status == 'auto-draft' ) { |
| 290 | 309 | $this->_chart->post_status = 'publish'; |
| 310 | + | |
| 311 | + // ensure that a revision is not created. If a revision is created it will have the proper data and the parent of the revision will have default data. | |
| 312 | + // we do not want any difference in data so disable revisions temporarily. | |
| 313 | + add_filter( 'wp_revisions_to_keep', '__return_false' ); | |
| 291 | 314 | wp_update_post( $this->_chart->to_array() ); |
| 292 | 315 | } |
| 293 | - update_post_meta( $this->_chart->ID, Visualizer_Plugin::CF_SETTINGS, $_POST ); | |
| 316 | + // save meta data only when it is NOT being canceled. | |
| 317 | + if ( ! ( isset( $_POST['cancel'] ) && 1 === intval( $_POST['cancel'] ) ) ) { | |
| 318 | + update_post_meta( $this->_chart->ID, Visualizer_Plugin::CF_SETTINGS, $_POST ); | |
| 319 | + } | |
| 294 | 320 | $render = new Visualizer_Render_Page_Send(); |
| 295 | 321 | $render->text = sprintf( '[visualizer id="%d"]', $this->_chart->ID ); |
| 296 | 322 | wp_iframe( array( $render, 'render' ) ); |
| 297 | 323 | |
| @@ -325,8 +351,9 @@ | ||
| 325 | 351 | ), |
| 326 | 352 | 'charts' => array( |
| 327 | 353 | 'canvas' => $data, |
| 328 | 354 | ), |
| 355 | + 'language' => $this->get_language(), | |
| 329 | 356 | 'map_api_key' => get_option( 'visualizer-map-api-key' ), |
| 330 | 357 | 'ajax' => array( |
| 331 | 358 | 'url' => admin_url( 'admin-ajax.php' ), |
| 332 | 359 | 'nonces' => array( |
| @@ -345,8 +372,11 @@ | ||
| 345 | 372 | if ( filter_input( INPUT_GET, 'library', FILTER_VALIDATE_BOOLEAN ) ) { |
| 346 | 373 | $render->button = filter_input( INPUT_GET, 'action' ) == Visualizer_Plugin::ACTION_EDIT_CHART |
| 347 | 374 | ? esc_html__( 'Save Chart', 'visualizer' ) |
| 348 | 375 | : esc_html__( 'Create Chart', 'visualizer' ); |
| 376 | + if ( filter_input( INPUT_GET, 'action' ) == Visualizer_Plugin::ACTION_EDIT_CHART ) { | |
| 377 | + $render->cancel_button = esc_html__( 'Cancel', 'visualizer' ); | |
| 378 | + } | |
| 349 | 379 | } else { |
| 350 | 380 | $render->button = esc_attr__( 'Insert Chart', 'visualizer' ); |
| 351 | 381 | } |
| 352 | 382 | if ( VISUALIZER_PRO ) { |
| @@ -414,20 +444,32 @@ | ||
| 414 | 444 | * |
| 415 | 445 | * @access public |
| 416 | 446 | */ |
| 417 | 447 | public function uploadData() { |
| 448 | + // if this is being called internally from pro and VISUALIZER_DO_NOT_DIE is set. | |
| 449 | + // otherwise, assume this is a normal web request. | |
| 450 | + $can_die = ! ( defined( 'VISUALIZER_DO_NOT_DIE' ) && VISUALIZER_DO_NOT_DIE ); | |
| 451 | + | |
| 418 | 452 | // validate nonce |
| 419 | - // do not use filter_input as it does not work for phpunit test cases, use filter_var instead | |
| 420 | 453 | if ( ! isset( $_GET['nonce'] ) || ! wp_verify_nonce( $_GET['nonce'] ) ) { |
| 454 | + if ( ! $can_die ) { | |
| 455 | + return; | |
| 456 | + } | |
| 421 | 457 | status_header( 403 ); |
| 422 | 458 | exit; |
| 423 | 459 | } |
| 460 | + | |
| 424 | 461 | // check chart, if chart exists |
| 462 | + // do not use filter_input as it does not work for phpunit test cases, use filter_var instead | |
| 425 | 463 | $chart_id = isset( $_GET['chart'] ) ? filter_var( $_GET['chart'], FILTER_VALIDATE_INT ) : ''; |
| 426 | 464 | if ( ! $chart_id || ! ( $chart = get_post( $chart_id ) ) || $chart->post_type != Visualizer_Plugin::CPT_VISUALIZER ) { |
| 465 | + if ( ! $can_die ) { | |
| 466 | + return; | |
| 467 | + } | |
| 427 | 468 | status_header( 400 ); |
| 428 | 469 | exit; |
| 429 | 470 | } |
| 471 | + | |
| 430 | 472 | if ( ! isset( $_POST['vz-import-time'] ) ) { |
| 431 | 473 | apply_filters( 'visualizer_pro_remove_schedule', $chart_id ); |
| 432 | 474 | } |
| 433 | 475 | |
| @@ -444,18 +486,29 @@ | ||
| 444 | 486 | apply_filters( 'visualizer_pro_chart_schedule', $chart_id, $_POST['remote_data'], $_POST['vz-import-time'] ); |
| 445 | 487 | } |
| 446 | 488 | } elseif ( isset( $_FILES['local_data'] ) && $_FILES['local_data']['error'] == 0 ) { |
| 447 | 489 | $source = new Visualizer_Source_Csv( $_FILES['local_data']['tmp_name'] ); |
| 448 | - // Added by Ash/Upwork | |
| 449 | 490 | } elseif ( isset( $_POST['chart_data'] ) && strlen( $_POST['chart_data'] ) > 0 ) { |
| 450 | 491 | $source = apply_filters( 'visualizer_pro_handle_chart_data', $_POST['chart_data'], '' ); |
| 451 | - // Added by Ash/Upwork | |
| 452 | 492 | } else { |
| 453 | 493 | $render->message = esc_html__( 'CSV file with chart data was not uploaded. Please, try again.', 'visualizer' ); |
| 454 | 494 | } |
| 455 | 495 | if ( $source ) { |
| 456 | 496 | if ( $source->fetch() ) { |
| 457 | - $chart->post_content = $source->getData(); | |
| 497 | + $content = $source->getData(); | |
| 498 | + $populate = true; | |
| 499 | + if ( is_string( $content ) && is_array( unserialize( $content ) ) ) { | |
| 500 | + $json = unserialize( $content ); | |
| 501 | + // if source exists, so should data. if source exists but data is blank, do not populate the chart. | |
| 502 | + // if we populate the data even if it is empty, the chart will show "Table has no columns". | |
| 503 | + if ( array_key_exists( 'source', $json ) && ! empty( $json['source'] ) && ( ! array_key_exists( 'data', $json ) || empty( $json['data'] ) ) ) { | |
| 504 | + do_action( 'themeisle_log_event', Visualizer_Plugin::NAME, sprintf( 'Not populating chart data as source exists (%s) but data is empty!', $json['source'] ), 'warn', __FILE__, __LINE__ ); | |
| 505 | + $populate = false; | |
| 506 | + } | |
| 507 | + } | |
| 508 | + if ( $populate ) { | |
| 509 | + $chart->post_content = $content; | |
| 510 | + } | |
| 458 | 511 | wp_update_post( $chart->to_array() ); |
| 459 | 512 | update_post_meta( $chart->ID, Visualizer_Plugin::CF_SERIES, $source->getSeries() ); |
| 460 | 513 | update_post_meta( $chart->ID, Visualizer_Plugin::CF_SOURCE, $source->getSourceName() ); |
| 461 | 514 | update_post_meta( $chart->ID, Visualizer_Plugin::CF_DEFAULT_DATA, 0 ); |
| @@ -465,11 +518,12 @@ | ||
| 465 | 518 | $render->message = esc_html__( 'CSV file is broken or invalid. Please, try again.', 'visualizer' ); |
| 466 | 519 | } |
| 467 | 520 | } |
| 468 | 521 | $render->render(); |
| 469 | - if ( ! ( defined( 'VISUALIZER_DO_NOT_DIE' ) && VISUALIZER_DO_NOT_DIE ) ) { | |
| 470 | - defined( 'WP_TESTS_DOMAIN' ) ? wp_die() : exit(); | |
| 522 | + if ( ! $can_die ) { | |
| 523 | + return; | |
| 471 | 524 | } |
| 525 | + defined( 'WP_TESTS_DOMAIN' ) ? wp_die() : exit(); | |
| 472 | 526 | } |
| 473 | 527 | |
| 474 | 528 | /** |
| 475 | 529 | * Clones the chart. |
| @@ -587,5 +641,6 @@ | ||
| 587 | 641 | // Added by Ash/Upwork |
| 588 | 642 | $this->_addAction( 'admin_head', 'renderFlattrScript' ); |
| 589 | 643 | wp_iframe( array( $render, 'render' ) ); |
| 590 | 644 | } |
| 645 | + | |
| 591 | 646 | } |