| @@ -61,12 +61,74 @@ | ||
| 61 | 61 | $this->_addFilter( 'visualizer_logger_data', 'getLoggerData' ); |
| 62 | 62 | $this->_addFilter( 'visualizer_get_chart_counts', 'getChartCountsByTypeAndMeta' ); |
| 63 | 63 | $this->_addFilter( 'visualizer_feedback_review_trigger', 'feedbackReviewTrigger' ); |
| 64 | 64 | |
| 65 | + // revision support. | |
| 66 | + $this->_addFilter( 'wp_revisions_to_keep', 'limitRevisions', null, 10, 2 ); | |
| 67 | + $this->_addAction( '_wp_put_post_revision', 'addRevision', null, 10, 1 ); | |
| 68 | + $this->_addAction( 'wp_restore_post_revision', 'restoreRevision', null, 10, 2 ); | |
| 69 | + | |
| 65 | 70 | $this->_addAction( 'admin_init', 'init' ); |
| 66 | 71 | } |
| 67 | 72 | |
| 68 | 73 | /** |
| 74 | + * No limits on revisions. | |
| 75 | + */ | |
| 76 | + public function limitRevisions( $num, $post ) { | |
| 77 | + if ( Visualizer_Plugin::CPT_VISUALIZER === $post->post_type ) { | |
| 78 | + return -1; | |
| 79 | + } | |
| 80 | + return $num; | |
| 81 | + } | |
| 82 | + | |
| 83 | + /** | |
| 84 | + * Add a revision. | |
| 85 | + */ | |
| 86 | + public function addRevision( $revision_id ) { | |
| 87 | + $parent_id = wp_is_post_revision( $revision_id ); | |
| 88 | + if ( Visualizer_Plugin::CPT_VISUALIZER === get_post_type( $parent_id ) ) { | |
| 89 | + // add the meta data to this revision. | |
| 90 | + $meta = get_post_meta( $parent_id, '', true ); | |
| 91 | + | |
| 92 | + if ( $meta ) { | |
| 93 | + foreach ( $meta as $key => $value ) { | |
| 94 | + if ( 0 === strpos( $key, 'visualizer' ) ) { | |
| 95 | + add_metadata( 'post', $revision_id, $key, maybe_unserialize( $value[0] ) ); | |
| 96 | + } | |
| 97 | + } | |
| 98 | + } | |
| 99 | + } | |
| 100 | + } | |
| 101 | + | |
| 102 | + /** | |
| 103 | + * Restore a revision. | |
| 104 | + */ | |
| 105 | + public function restoreRevision( $post_id, $revision_id ) { | |
| 106 | + if ( Visualizer_Plugin::CPT_VISUALIZER === get_post_type( $post_id ) ) { | |
| 107 | + // get the meta information from the revision. | |
| 108 | + $meta = get_metadata( 'post', $revision_id, '', true ); | |
| 109 | + | |
| 110 | + // delete all meta information from the post before adding. | |
| 111 | + $post_meta = get_post_meta( $post_id, '', true ); | |
| 112 | + if ( $post_meta ) { | |
| 113 | + foreach ( $meta as $key => $value ) { | |
| 114 | + if ( 0 === strpos( $key, 'visualizer' ) ) { | |
| 115 | + delete_post_meta( $post_id, $key ); | |
| 116 | + } | |
| 117 | + } | |
| 118 | + } | |
| 119 | + | |
| 120 | + if ( $meta ) { | |
| 121 | + foreach ( $meta as $key => $value ) { | |
| 122 | + if ( 0 === strpos( $key, 'visualizer' ) ) { | |
| 123 | + add_post_meta( $post_id, $key, maybe_unserialize( $value[0] ) ); | |
| 124 | + } | |
| 125 | + } | |
| 126 | + } | |
| 127 | + } | |
| 128 | + } | |
| 129 | + | |
| 130 | + /** | |
| 69 | 131 | * Admin init. |
| 70 | 132 | * |
| 71 | 133 | * @access public |
| 72 | 134 | */ |
| @@ -156,8 +218,17 @@ | ||
| 156 | 218 | wp_enqueue_script( 'visualizer-media-model', VISUALIZER_ABSURL . 'js/media/model.js', array( 'visualizer-google-jsapi-old' ), Visualizer_Plugin::VERSION, true ); |
| 157 | 219 | wp_enqueue_script( 'visualizer-media-collection', VISUALIZER_ABSURL . 'js/media/collection.js', array( 'visualizer-media-model' ), Visualizer_Plugin::VERSION, true ); |
| 158 | 220 | wp_enqueue_script( 'visualizer-media-controller', VISUALIZER_ABSURL . 'js/media/controller.js', array( 'visualizer-media-collection' ), Visualizer_Plugin::VERSION, true ); |
| 159 | 221 | wp_enqueue_script( 'visualizer-media-view', VISUALIZER_ABSURL . 'js/media/view.js', array( 'visualizer-media-controller' ), Visualizer_Plugin::VERSION, true ); |
| 222 | + wp_localize_script( | |
| 223 | + 'visualizer-media-view', | |
| 224 | + 'visualizer', | |
| 225 | + array( | |
| 226 | + 'i10n' => array( | |
| 227 | + 'insert' => __( 'Insert', 'visualizer' ), | |
| 228 | + ), | |
| 229 | + ) | |
| 230 | + ); | |
| 160 | 231 | wp_enqueue_script( 'visualizer-media-toolbar', VISUALIZER_ABSURL . 'js/media/toolbar.js', array( 'visualizer-media-view' ), Visualizer_Plugin::VERSION, true ); |
| 161 | 232 | wp_enqueue_script( 'visualizer-media', VISUALIZER_ABSURL . 'js/media.js', array( 'visualizer-media-toolbar' ), Visualizer_Plugin::VERSION, true ); |
| 162 | 233 | } |
| 163 | 234 | } |
| @@ -216,9 +287,10 @@ | ||
| 216 | 287 | ); |
| 217 | 288 | } |
| 218 | 289 | |
| 219 | 290 | $types = array_merge( |
| 220 | - $additional, array( | |
| 291 | + $additional, | |
| 292 | + array( | |
| 221 | 293 | 'pie' => array( |
| 222 | 294 | 'name' => esc_html__( 'Pie', 'visualizer' ), |
| 223 | 295 | 'enabled' => true, |
| 224 | 296 | ), |
| @@ -333,20 +405,30 @@ | ||
| 333 | 405 | wp_enqueue_style( 'visualizer-library', VISUALIZER_ABSURL . 'css/library.css', array(), Visualizer_Plugin::VERSION ); |
| 334 | 406 | $this->_addFilter( 'media_upload_tabs', 'setupVisualizerTab' ); |
| 335 | 407 | wp_enqueue_media(); |
| 336 | 408 | wp_enqueue_script( |
| 337 | - 'visualizer-library', VISUALIZER_ABSURL . 'js/library.js', array( | |
| 409 | + 'visualizer-library', | |
| 410 | + VISUALIZER_ABSURL . 'js/library.js', | |
| 411 | + array( | |
| 338 | 412 | 'jquery', |
| 339 | 413 | 'media-views', |
| 340 | - ), Visualizer_Plugin::VERSION, true | |
| 414 | + ), | |
| 415 | + Visualizer_Plugin::VERSION, | |
| 416 | + true | |
| 341 | 417 | ); |
| 342 | 418 | wp_enqueue_script( 'google-jsapi-new', '//www.gstatic.com/charts/loader.js', array(), null, true ); |
| 343 | 419 | wp_enqueue_script( 'google-jsapi-old', '//www.google.com/jsapi', array( 'google-jsapi-new' ), null, true ); |
| 420 | + wp_enqueue_script( 'visualizer-customization', $this->get_user_customization_js(), array(), null, true ); | |
| 344 | 421 | wp_enqueue_script( |
| 345 | - 'visualizer-render', VISUALIZER_ABSURL . 'js/render.js', array( | |
| 422 | + 'visualizer-render', | |
| 423 | + VISUALIZER_ABSURL . 'js/render.js', | |
| 424 | + array( | |
| 346 | 425 | 'google-jsapi-old', |
| 347 | 426 | 'visualizer-library', |
| 348 | - ), Visualizer_Plugin::VERSION, true | |
| 427 | + 'visualizer-customization', | |
| 428 | + ), | |
| 429 | + Visualizer_Plugin::VERSION, | |
| 430 | + true | |
| 349 | 431 | ); |
| 350 | 432 | } |
| 351 | 433 | } |
| 352 | 434 | |
| @@ -389,9 +471,12 @@ | ||
| 389 | 471 | */ |
| 390 | 472 | public function renderLibraryPage() { |
| 391 | 473 | // get current page |
| 392 | 474 | $page = filter_input( |
| 393 | - INPUT_GET, 'vpage', FILTER_VALIDATE_INT, array( | |
| 475 | + INPUT_GET, | |
| 476 | + 'vpage', | |
| 477 | + FILTER_VALIDATE_INT, | |
| 478 | + array( | |
| 394 | 479 | 'options' => array( |
| 395 | 480 | 'min_range' => 1, |
| 396 | 481 | 'default' => 1, |
| 397 | 482 | ), |
| @@ -433,8 +518,12 @@ | ||
| 433 | 518 | $charts = array(); |
| 434 | 519 | $query = new WP_Query( $query_args ); |
| 435 | 520 | while ( $query->have_posts() ) { |
| 436 | 521 | $chart = $query->next_post(); |
| 522 | + | |
| 523 | + // if the user has updated a chart and instead of saving it, has closed the modal. If the user refreshes, they should get the original chart. | |
| 524 | + $chart = $this->handleExistingRevisions( $chart->ID, $chart ); | |
| 525 | + | |
| 437 | 526 | // fetch and update settings |
| 438 | 527 | $settings = get_post_meta( $chart->ID, Visualizer_Plugin::CF_SETTINGS, true ); |
| 439 | 528 | unset( $settings['height'], $settings['width'] ); |
| 440 | 529 | $type = get_post_meta( $chart->ID, Visualizer_Plugin::CF_CHART_TYPE, true ); |
| @@ -451,9 +540,13 @@ | ||
| 451 | 540 | } |
| 452 | 541 | // enqueue charts array |
| 453 | 542 | $ajaxurl = admin_url( 'admin-ajax.php' ); |
| 454 | 543 | wp_localize_script( |
| 455 | - 'visualizer-library', 'visualizer', array( | |
| 544 | + 'visualizer-library', | |
| 545 | + 'visualizer', | |
| 546 | + array( | |
| 547 | + 'language' => $this->get_language(), | |
| 548 | + 'map_api_key' => get_option( 'visualizer-map-api-key' ), | |
| 456 | 549 | 'charts' => $charts, |
| 457 | 550 | 'urls' => array( |
| 458 | 551 | 'base' => add_query_arg( 'vpage', false ), |
| 459 | 552 | 'create' => add_query_arg( |
| @@ -459,15 +552,18 @@ | ||
| 459 | 552 | 'create' => add_query_arg( |
| 460 | 553 | array( |
| 461 | 554 | 'action' => Visualizer_Plugin::ACTION_CREATE_CHART, |
| 462 | 555 | 'library' => 'yes', |
| 463 | - ), $ajaxurl | |
| 556 | + 'type' => isset( $_GET['type'] ) ? $_GET['type'] : '', | |
| 557 | + ), | |
| 558 | + $ajaxurl | |
| 464 | 559 | ), |
| 465 | 560 | 'edit' => add_query_arg( |
| 466 | 561 | array( |
| 467 | 562 | 'action' => Visualizer_Plugin::ACTION_EDIT_CHART, |
| 468 | 563 | 'library' => 'yes', |
| 469 | - ), $ajaxurl | |
| 564 | + ), | |
| 565 | + $ajaxurl | |
| 470 | 566 | ), |
| 471 | 567 | ), |
| 472 | 568 | ) |
| 473 | 569 | ); |