PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.10.7
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.10.7
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/Render/Layout.php +225 -385 4.0.83.10.7 View file →
@@ -27,15 +27,8 @@
27 27 */
28 28 class Visualizer_Render_Layout extends Visualizer_Render {
29 29
30 30 /**
31 - * Fallback time for live update option.
32 - *
33 - * @var float
34 - */
35 - public static $live_option_fallback_hour = 0.16; // 10 minutes
36 -
37 - /**
38 31 * Renders template.
39 32 *
40 33 * @since 1.0.0
41 34 *
@@ -60,19 +53,9 @@
60 53 *
61 54 * @access public
62 55 */
63 56 public static function _renderDbQuery( $args ) {
64 - global $wpdb;
65 57 $query = $args[1];
66 - if ( ! $query ) {
67 - $query = '
68 -/* List Posts published per. month */
69 -SELECT CONCAT( YEAR(post_date), "/", MONTH(post_date) ) as date, COUNT(*) AS post_count
70 -FROM ' . $wpdb->prefix . 'posts
71 -WHERE post_type = "post" AND post_status = "publish"
72 -GROUP BY YEAR(post_date), MONTH(post_date)
73 -ORDER BY YEAR(post_date) DESC, MONTH(post_date) DESC;';
74 - }
75 58 ?>
76 59 <div id='visualizer-db-query' style="display: none">
77 60 <div class="visualizer-db-query-form">
78 61 <div>
@@ -88,29 +71,10 @@
88 71 </div>
89 72 </div>
90 73 <div class='db-wizard-hints'>
91 74 <ul>
92 - <li><?php echo __( 'Your database prefix is:', 'visualizer' ); ?> <span class="visualizer-emboss"><?php echo $wpdb->prefix; ?></span></li>
93 - <li>
94 - <?php
95 - echo sprintf(
96 - // translators: %1$s - HTML link tag, %2$s - HTML closing link tag.
97 - __( 'For examples of queries and links to resources that you can use with this feature, please click %1$shere%2$s', 'visualizer' ),
98 - '<a href="' . VISUALIZER_DB_QUERY_DOC_URL . '" target="_blank">',
99 - '</a>'
100 - );
101 - ?>
102 - </li>
103 - <li>
104 - <?php
105 - echo sprintf(
106 - // translators: %1$s - HTML link tag, %2$s - HTML closing link tag.
107 - __( 'Use %1$sShift+Space%2$s for autocompleting keywords or table names.', 'visualizer' ),
108 - '<span class="visualizer-emboss">',
109 - '</span>'
110 - );
111 - ?>
112 - </li>
75 + <li><?php echo sprintf( __( 'For examples of queries and links to resources that you can use with this feature, please click %1$shere%2$s', 'visualizer' ), '<a href="' . VISUALIZER_DB_QUERY_DOC_URL . '" target="_blank">', '</a>' ); ?></li>
76 + <li><?php echo sprintf( __( 'Use %1$sControl+Space%2$s for autocompleting keywords or table names.', 'visualizer' ), '<span class="visualizer-emboss">', '</span>' ); ?></li>
113 77 <?php do_action( 'visualizer_db_query_add_hints', $args ); ?>
114 78 </ul>
115 79 </div>
116 80 <div class='db-wizard-results'></div>
@@ -187,15 +151,10 @@
187 151 $headers['method'] = 'get';
188 152 }
189 153 $methods = apply_filters( 'visualizer_json_request_methods', array( 'GET', 'POST' ) );
190 154
191 - $auth = isset( $headers['auth'] ) ? $headers['auth'] : '';
192 - $auth_username = is_array( $auth ) && isset( $auth['username'] ) ? $auth['username'] : '';
193 - $auth_password = is_array( $auth ) && isset( $auth['password'] ) ? $auth['password'] : '';
194 - $auth_string = is_string( $auth ) ? $auth : '';
195 -
196 155 // open the headers by default?
197 - $headers_open = ! empty( $auth_username ) || ! empty( $auth_string );
156 + $headers_open = $headers && array_key_exists( 'auth', $headers ) && ( array_key_exists( 'username', $headers['auth'] ) && ! empty( $headers['auth']['username'] ) ) || ( ! empty( $headers['auth'] ) && is_string( $headers['auth'] ) );
198 157 ?>
199 158 <div id="visualizer-json-screen" style="display: none">
200 159 <div class="visualizer-json-form">
201 160 <h3 class="viz-step step1"><?php _e( 'STEP 1: Specify the JSON endpoint/URL', 'visualizer' ); ?></h3>
@@ -202,18 +161,9 @@
202 161 <div>
203 162 <form id="json-endpoint-form">
204 163 <div class="json-wizard-hints">
205 164 <ul class="info">
206 - <li>
207 - <?php
208 - echo sprintf(
209 - // translators: %1$s - HTML link tag, %2$s - HTML closing link tag.
210 - __( 'If you want to add authentication or headers to the endpoint or change the request in any way, please refer to our document %1$shere%2$s.', 'visualizer' ),
211 - '<a href="https://docs.themeisle.com/article/1043-visualizer-how-to-extend-rest-endpoints-with-json-response" target="_blank">',
212 - '</a>'
213 - );
214 - ?>
215 - </li>
165 + <li><?php echo sprintf( __( 'If you want to add authentication or headers to the endpoint or change the request in any way, please refer to our document %1$shere%2$s.', 'visualizer' ), '<a href="https://docs.themeisle.com/article/1043-visualizer-how-to-extend-rest-endpoints-with-json-response" target="_blank">', '</a>' ); ?></li>
216 166 </ul>
217 167 </div>
218 168
219 169 <input
@@ -246,9 +196,9 @@
246 196 <input
247 197 type="text"
248 198 id="vz-import-json-username"
249 199 name="username"
250 - value="<?php echo esc_attr( $auth_username ); ?>"
200 + value="<?php echo ( array_key_exists( 'auth', $headers ) && array_key_exists( 'username', $headers['auth'] ) ? $headers['auth']['username'] : '' ); ?>"
251 201 placeholder="<?php esc_html_e( 'Username/Access Key', 'visualizer' ); ?>"
252 202 class="json-form-element">
253 203 &
254 204 <input
@@ -254,9 +204,9 @@
254 204 <input
255 205 type="password"
256 206 id="vz-import-json-password"
257 207 name="password"
258 - value="<?php echo esc_attr( $auth_password ); ?>"
208 + value="<?php echo ( array_key_exists( 'auth', $headers ) && array_key_exists( 'password', $headers['auth'] ) ? $headers['auth']['password'] : '' ); ?>"
259 209 placeholder="<?php esc_html_e( 'Password/Secret Key', 'visualizer' ); ?>"
260 210 class="json-form-element">
261 211 </div>
262 212 </div>
@@ -270,9 +220,9 @@
270 220 <input
271 221 type="text"
272 222 id="vz-import-json-auth"
273 223 name="auth"
274 - value="<?php echo esc_attr( $auth_string ); ?>"
224 + value="<?php echo ( array_key_exists( 'auth', $headers ) && is_string( $headers['auth'] ) ? $headers['auth'] : '' ); ?>"
275 225 placeholder="<?php esc_html_e( 'e.g. SharedKey <AccountName>:<Signature>', 'visualizer' ); ?>"
276 226 class="visualizer-input json-form-element">
277 227 </div>
278 228 </div>
@@ -278,9 +228,9 @@
278 228 </div>
279 229 <div class="json-wizard-header">
280 230 <div class="field-title"><?php esc_html_e( 'Additional headers', 'visualizer' ); ?></div>
281 231 <div>
282 - <textarea name="additional_headers" class="visualizer-input" placeholder="<?php esc_html_e( 'Key:Value, Key2:Value2,...', 'visualizer' ); ?>"><?php echo esc_textarea( isset( $headers['additional_headers'] ) ? $headers['additional_headers'] : '' ); ?></textarea>
232 + <textarea name="additional_headers" class="visualizer-input" placeholder="<?php esc_html_e( 'Key:Value, Key2:Value2,...', 'visualizer' ); ?>"><?php echo isset( $headers['additional_headers'] ) ? $headers['additional_headers'] : ''; ?></textarea>
283 233 </div>
284 234 </div>
285 235 </div>
286 236 </div>
@@ -293,9 +243,9 @@
293 243 <select name="root" id="vz-import-json-root" class="json-form-element">
294 244 <?php
295 245 if ( ! empty( $root ) ) {
296 246 ?>
297 - <option value="<?php echo esc_attr( $root ); ?>"><?php echo esc_html( str_replace( Visualizer_Source_Json::TAG_SEPARATOR, Visualizer_Source_Json::TAG_SEPARATOR_VIEW, $root ) ); ?></option>
247 + <option value="<?php echo esc_attr( $root ); ?>"><?php echo str_replace( Visualizer_Source_Json::TAG_SEPARATOR, Visualizer_Source_Json::TAG_SEPARATOR_VIEW, $root ); ?></option>
298 248 <?php
299 249 }
300 250 ?>
301 251 </select>
@@ -311,9 +261,9 @@
311 261 <option value="0" class="static"><?php _e( 'Get results from the first page only', 'visualizer' ); ?></option>
312 262 <?php
313 263 if ( ! empty( $paging ) ) {
314 264 ?>
315 - <option value="<?php echo esc_attr( $paging ); ?>"><?php echo esc_html( sprintf( 'Get results from the first %d pages using %s', apply_filters( 'visualizer_json_fetch_pages', 5, $url ), str_replace( Visualizer_Source_Json::TAG_SEPARATOR, Visualizer_Source_Json::TAG_SEPARATOR_VIEW, $paging ) ) ); ?></option>
265 + <option value="<?php echo esc_attr( $paging ); ?>"><?php echo sprintf( 'Get results from the first %d pages using %s', apply_filters( 'visualizer_json_fetch_pages', 5, $url ), str_replace( Visualizer_Source_Json::TAG_SEPARATOR, Visualizer_Source_Json::TAG_SEPARATOR_VIEW, $paging ) ); ?></option>
316 266 <?php
317 267 }
318 268 ?>
319 269 </select>
@@ -364,9 +314,9 @@
364 314 $action = esc_url(
365 315 add_query_arg(
366 316 array(
367 317 'action' => Visualizer_Plugin::ACTION_UPLOAD_DATA,
368 - 'nonce' => wp_create_nonce( 'visualizer-upload-data' ),
318 + 'nonce' => wp_create_nonce(),
369 319 'chart' => $chart_id,
370 320 ),
371 321 admin_url( 'admin-ajax.php' )
372 322 )
@@ -394,8 +344,9 @@
394 344 <?php Visualizer_Render_Layout::show( 'text-editor', $chart_id ); ?>
395 345
396 346 </div>
397 347 <?php
348 +
398 349 }
399 350
400 351 /**
401 352 * Show the text area editor.
@@ -535,9 +486,9 @@
535 486 private static function _renderPermissions( $args ) {
536 487 $chart_id = $args[1];
537 488
538 489 // ignore for unit tests because Travis throws the error "Indirect modification of overloaded property Visualizer_Render_Page_Data::$permissions has no effect".
539 - if ( defined( 'WP_TESTS_DOMAIN' ) && function_exists( 'tests_add_filter' ) ) {
490 + if ( defined( 'WP_TESTS_DOMAIN' ) ) {
540 491 return;
541 492 }
542 493
543 494 $permissions = apply_filters( 'visualizer_pro_get_permissions', null, $chart_id );
@@ -620,9 +571,9 @@
620 571 true,
621 572 array( 'visualizer-permission', 'visualizer-permission-specific', 'visualizer-permission-edit-specific' )
622 573 );
623 574 Visualizer_Render_Sidebar::_renderSectionEnd();
624 - echo apply_filters( 'visualizer_pro_upsell', '', 'chart-permissions', 'https://docs.themeisle.com/article/1280-how-to-customize-permissions' );
575 + echo apply_filters( 'visualizer_pro_upsell', '', 'chart-permissions' );
625 576 echo '</div>';
626 577 Visualizer_Render_Sidebar::_renderGroupEnd();
627 578 }
628 579
@@ -631,14 +582,9 @@
631 582 *
632 583 * @access public
633 584 */
634 585 public static function _renderTabAdvanced( $args ) {
635 - $chart_id = $args[1];
636 - $sidebar = $args[2];
637 -
638 - $chart_options = get_post_meta( $chart_id, Visualizer_Plugin::CF_SETTINGS, true );
639 - $backend_title = isset( $chart_options['backend-title'] ) && ! empty( $chart_options['backend-title'] ) ? $chart_options['backend-title'] : '';
640 -
586 + $sidebar = $args[2];
641 587 ?>
642 588 <ul class="viz-group-wrapper full-height">
643 589 <li class="viz-group open" id="vz-chart-settings">
644 590 <ul class="viz-group-content">
@@ -644,9 +590,8 @@
644 590 <ul class="viz-group-content">
645 591 <ul class="viz-group-wrapper">
646 592 <form id="settings-form" action="<?php echo esc_url( add_query_arg( 'nonce', wp_create_nonce() ) ); ?>" method="post">
647 593 <input type="hidden" id="chart-img" name="chart-img">
648 - <input type="hidden" id="backend-title" name="backend-title" value="<?php echo esc_html( $backend_title ); ?>">
649 594 <?php echo $sidebar; ?>
650 595 <?php self::_renderPermissions( $args ); ?>
651 596 <input type="hidden" name="save" value="1">
652 597 </form>
@@ -692,22 +637,12 @@
692 637 <h4><span class="dashicons dashicons-editor-help"></span><a href="<?php echo VISUALIZER_MAIN_DOC; ?>" target="_blank"><?php _e( 'Main documentation page', 'visualizer' ); ?></a></h4>
693 638 <h4><span class="dashicons dashicons-media-code"></span><a href="<?php echo VISUALIZER_CODE_SNIPPETS_URL; ?>" target="_blank"><?php _e( 'Custom code snippets', 'visualizer' ); ?></a></h4>
694 639 <?php
695 640 Visualizer_Render_Sidebar::_renderSectionEnd();
696 - // translators: %s - the chart type.
697 641 Visualizer_Render_Sidebar::_renderSectionStart( sprintf( __( '%s chart', 'visualizer' ), ucwords( $displayType ) ), true );
698 642 ?>
699 643 <h4><span class="dashicons dashicons-video-alt2"></span>&nbsp;<a href="<?php echo str_replace( '#', "$type-chart", VISUALIZER_DEMO_URL ); ?>" target="_blank"><?php _e( 'View demo', 'visualizer' ); ?></a></h4>
700 - <h4><span class="dashicons dashicons-search"></span><a href="<?php echo str_replace( '#', $type, VISUALIZER_DOC_COLLECTION ); ?>" target="_blank">
701 - <?php
702 - echo sprintf(
703 - // translators: %s - the chart type.
704 - __( 'Articles containing "%s"', 'visualizer' ),
705 - $displayType
706 - );
707 - ?>
708 - </a>
709 - </h4>
644 + <h4><span class="dashicons dashicons-search"></span><a href="<?php echo str_replace( '#', $type, VISUALIZER_DOC_COLLECTION ); ?>" target="_blank"><?php echo sprintf( __( 'Articles containing "%s"', 'visualizer' ), $displayType ); ?></a></h4>
710 645 <?php
711 646 Visualizer_Render_Sidebar::_renderSectionEnd();
712 647 Visualizer_Render_Sidebar::_renderGroupEnd();
713 648 ?>
@@ -729,9 +664,9 @@
729 664 $upload_link = esc_url(
730 665 add_query_arg(
731 666 array(
732 667 'action' => Visualizer_Plugin::ACTION_UPLOAD_DATA,
733 - 'nonce' => wp_create_nonce( 'visualizer-upload-data' ),
668 + 'nonce' => wp_create_nonce(),
734 669 'chart' => $chart_id,
735 670 ),
736 671 admin_url( 'admin-ajax.php' )
737 672 )
@@ -750,12 +685,9 @@
750 685 if ( ! empty( $filter_config ) ) {
751 686 $source_of_chart .= '_wp';
752 687 }
753 688 $editor_type = get_post_meta( $chart_id, Visualizer_Plugin::CF_EDITOR, true );
754 - if (
755 - $editor_type ||
756 - ! Visualizer_Module::is_pro() // Use Manual Source for non-pro users since it is the only unlocked source.
757 - ) {
689 + if ( $editor_type ) {
758 690 $source_of_chart = 'visualizer_source_manual';
759 691 }
760 692
761 693 $type = get_post_meta( $chart_id, Visualizer_Plugin::CF_CHART_TYPE, true );
@@ -764,208 +696,125 @@
764 696 <ul class="viz-group-wrapper full-height">
765 697 <li class="viz-group open" id="vz-chart-source">
766 698 <ul class="viz-group-content">
767 699 <ul class="viz-group-wrapper">
768 - <!-- manual -->
769 - <li class="viz-group visualizer_source_manual">
770 - <h2 class="viz-group-title viz-sub-group visualizer-editor-tab" data-current="chart" role="button" tabindex="0"><?php _e( 'Manual Data', 'visualizer' ); ?></h2>
771 - <div class="viz-group-content edit-data-content">
772 - <form id="editor-form" action="<?php echo $upload_link; ?>" method="post" target="thehole">
773 - <input type="hidden" id="chart-data" name="chart_data">
774 - <input type="hidden" id="chart-data-src" name="chart_data_src">
775 -
776 - <?php if ( Visualizer_Module::can_show_feature( 'simple-editor' ) ) { ?>
777 - <div>
778 - <p class="viz-group-description viz-editor-selection">
779 - <?php _e( 'Use the', 'visualizer' ); ?>
780 - <select name="editor-type" id="viz-editor-type">
781 - <?php
782 - if ( empty( $editor_type ) ) {
783 - $editor_type = Visualizer_Module::is_pro() ? 'excel' : 'text';
784 - }
785 - foreach ( apply_filters( 'visualizer_editors', array( 'text' => __( 'Text', 'visualizer' ), 'table' => __( 'Simple', 'visualizer' ) ) ) as $e_type => $e_label ) {
786 - ?>
787 - <option value="<?php echo $e_type; ?>" <?php selected( $editor_type, $e_type ); ?> ><?php echo $e_label; ?></option>
788 - <?php } ?>
789 - </select>
790 - <?php _e( 'editor to manually edit the chart data.', 'visualizer' ); ?>
791 - </p>
792 - <input type="button" id="editor-undo" class="button button-secondary" style="display: none" value="<?php _e( 'Undo Changes', 'visualizer' ); ?>">
793 - <input type="button" id="editor-button" class="button button-primary "
794 - value="<?php _e( 'Edit Data', 'visualizer' ); ?>" data-current="chart"
795 - data-t-editor="<?php _e( 'Show Chart', 'visualizer' ); ?>"
796 - data-t-chart="<?php _e( 'Edit Data', 'visualizer' ); ?>"
797 - >
798 - <p class="viz-group-description viz-info-msg" style="display:none"><?php echo sprintf( __( 'Please make sure you click \'Show Chart\' before you save the chart.', 'visualizer' ) ); ?></p>
700 + <!-- import from file -->
701 + <li class="viz-group visualizer_source_csv">
702 + <h2 class="viz-group-title viz-sub-group visualizer-src-tab"><?php _e( 'Import data from file', 'visualizer' ); ?></h2>
703 + <div class="viz-group-content">
704 + <p class="viz-group-description"><?php esc_html_e( 'Select and upload your data CSV file here. The first row of the CSV file should contain the column headings. The second one should contain series type (string, number, boolean, date, datetime, timeofday).', 'visualizer' ); ?></p>
705 + <p class="viz-group-description viz-info-msg"><b><?php echo sprintf( __( 'If you are unsure about how to format your data CSV then please take a look at this sample: %1$s %2$s%3$s. If you are using non-English characters, please make sure you save the file in UTF-8 encoding.', 'visualizer' ), '<a href="' . VISUALIZER_ABSURL . 'samples/' . $type . '.csv" target="_blank">', $type, '.csv</a>' ); ?></b></p>
706 + <form id="vz-csv-file-form" action="<?php echo $upload_link; ?>" method="post"
707 + target="thehole" enctype="multipart/form-data">
708 + <input type="hidden" id="remote-data" name="remote_data">
709 + <div class="">
710 + <input type="file" id="csv-file" name="local_data">
799 711 </div>
800 - <?php } else { ?>
801 - <input type="button" id="editor-undo" class="button button-secondary" style="display: none" value="<?php _e( 'Undo Changes', 'visualizer' ); ?>">
802 - <input type="button" id="editor-chart-button" class="button button-primary "
803 - value="<?php _e( 'View Editor', 'visualizer' ); ?>" data-current="chart"
804 - data-t-editor="<?php _e( 'Show Chart', 'visualizer' ); ?>"
805 - data-t-chart="<?php _e( 'View Editor', 'visualizer' ); ?>"
806 - >
807 - <p class="viz-group-description viz-info-msg" style="display:none"><?php echo sprintf( __( 'Please make sure you click \'Show Chart\' before you save the chart.', 'visualizer' ) ); ?></p>
808 - <?php } ?>
712 + <input type="button" class="button button-primary" id="vz-import-file"
713 + value="<?php _e( 'Import', 'visualizer' ); ?>">
809 714 </form>
810 715 </div>
811 716 </li>
812 -
813 - <!-- import from file -->
814 - <li class="viz-group visualizer_source_csv <?php echo apply_filters( 'visualizer_pro_upsell_class', 'only-pro-feature', 'import-file' ); ?> ">
815 - <h2 class="viz-group-title viz-sub-group visualizer-src-tab" role="button" tabindex="0"><?php _e( 'Import data from file', 'visualizer' ); ?><span class="dashicons dashicons-lock"></span></h2>
816 - <div class="viz-group-content">
817 - <div>
818 - <p class="viz-group-description"><?php esc_html_e( 'Select and upload your data file here. Supported formats: CSV, XLSX. The first row should contain the column headings. The second row should contain the series type (string, number, boolean, date, datetime, timeofday).', 'visualizer' ); ?></p>
819 - <p class="viz-group-description viz-info-msg">
820 - <b>
821 - <?php
822 - echo sprintf(
823 - // translators: $s - the chart type with the link attached.
824 - __( 'If you are unsure about how to format your data CSV then please take a look at this sample: %s. If you are using non-English characters, please make sure you save the file in UTF-8 encoding.', 'visualizer' ),
825 - '<a href="' . VISUALIZER_ABSURL . 'samples/' . $type . '.csv" target="_blank">' . $type . '.csv</a>'
826 - );
827 - ?>
828 - </b>
829 - </p>
830 - <form id="vz-csv-file-form" action="<?php echo $upload_link; ?>" method="post"
831 - target="thehole" enctype="multipart/form-data">
832 - <input type="hidden" id="remote-data" name="remote_data">
833 - <div class="">
834 - <input type="file" id="csv-file" name="local_data" accept=".csv,.xlsx">
835 - </div>
836 - <input type="button" class="button button-primary" id="vz-import-file"
837 - value="<?php _e( 'Import', 'visualizer' ); ?>">
838 - </form>
839 - <?php echo apply_filters( 'visualizer_pro_upsell', '', 'import-file' ); ?>
840 - </div>
841 - </div>
842 - </li>
843 717 <!-- import from url -->
844 - <li class="viz-group visualizer-import-url visualizer_source_csv_remote visualizer_source_json <?php echo apply_filters( 'visualizer_pro_upsell_class', 'only-pro-feature', 'import-url' ); ?> ">
845 - <h2 class="viz-group-title viz-sub-group visualizer-src-tab" role="button" tabindex="0"><?php _e( 'Import data from URL', 'visualizer' ); ?><span class="dashicons dashicons-lock"></span></h2>
718 + <li class="viz-group visualizer-import-url visualizer_source_csv_remote visualizer_source_json">
719 + <h2 class="viz-group-title viz-sub-group visualizer-src-tab"><?php _e( 'Import data from URL', 'visualizer' ); ?></h2>
846 720 <ul class="viz-group-content">
847 721 <!-- import from csv url -->
848 722 <li class="viz-subsection">
849 - <span class="viz-section-title" role="button" tabindex="0"><?php _e( 'Import from CSV / XLSX', 'visualizer' ); ?></span>
850 - <div class="only-pro-anchor">
851 - <div class="viz-section-items section-items">
852 - <p class="viz-group-description">
723 + <span class="viz-section-title"><?php _e( 'Import from CSV', 'visualizer' ); ?></span>
724 + <div class="viz-section-items section-items">
725 + <p class="viz-group-description"><?php echo sprintf( __( 'You can use this to import data from a remote CSV file or %1$sGoogle Spreadsheet%2$s.', 'visualizer' ), '<a href="https://docs.themeisle.com/article/607-how-can-i-populate-data-from-google-spreadsheet" target="_blank" >', '</a>' ); ?> </p>
726 + <p class="viz-group-description viz-info-msg"><b><?php echo sprintf( __( 'If you are unsure about how to format your data CSV then please take a look at this sample: %1$s %2$s%3$s. If you are using non-English characters, please make sure you save the file in UTF-8 encoding.', 'visualizer' ), '<a href="' . VISUALIZER_ABSURL . 'samples/' . $type . '.csv" target="_blank">', $type, '.csv</a>' ); ?></b></p>
727 + <form id="vz-one-time-import" action="<?php echo $upload_link; ?>" method="post"
728 + target="thehole" enctype="multipart/form-data">
729 + <div class="remote-file-section">
730 + <input type="url" id="vz-schedule-url" name="remote_data" value="<?php echo esc_attr( get_post_meta( $chart_id, Visualizer_Plugin::CF_CHART_URL, true ) ); ?>" placeholder="<?php esc_html_e( 'Please enter the URL of CSV file', 'visualizer' ); ?>" class="visualizer-input visualizer-remote-url">
731 + </div>
732 + <select name="vz-import-time" id="vz-import-time" class="visualizer-select">
733 + <?php
734 + $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_CHART_SCHEDULE, true );
735 + $schedules = apply_filters(
736 + 'visualizer_chart_schedules', array(
737 + '-1' => __( 'One-time', 'visualizer' ),
738 + ),
739 + 'csv',
740 + $chart_id
741 + );
742 + foreach ( $schedules as $num => $name ) {
743 + // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison
744 + $extra = $num == $hours ? 'selected' : '';
745 + ?>
746 + <option value="<?php echo $num; ?>" <?php echo $extra; ?>><?php echo $name; ?></option>
853 747 <?php
854 - echo sprintf(
855 - // translators: %1$s - HTML link tag, %2$s - HTML closing link tag.
856 - __( 'You can use this to import data from a remote CSV or Excel (XLSX) file, or %1$sGoogle Spreadsheet%2$s.', 'visualizer' ),
857 - '<a href="https://docs.themeisle.com/article/607-how-can-i-populate-data-from-google-spreadsheet" target="_blank" >',
858 - '</a>'
859 - );
748 + }
749 + do_action( 'visualizer_chart_schedules_spl', 'csv', $chart_id, 1 );
750 + ?>
751 + </select>
752 +
753 + <?php
754 + if ( ! Visualizer_Module::is_pro() ) {
860 755 ?>
861 - </p>
862 - <p class="viz-group-description viz-info-msg">
863 - <b>
864 - <?php
865 - echo sprintf(
866 - // translators: %s - the chart type with the link attached.
867 - __( 'If you are unsure about how to format your data CSV then please take a look at this sample: %s. If you are using non-English characters, please make sure you save the file in UTF-8 encoding.', 'visualizer' ),
868 - '<a href="' . VISUALIZER_ABSURL . 'samples/' . $type . '.csv" target="_blank">' . $type . '.csv</a>'
869 - );
870 - ?>
871 - </b>
872 - </p>
873 - <form id="vz-one-time-import" action="<?php echo $upload_link; ?>" method="post"
874 - target="thehole" enctype="multipart/form-data">
875 - <div class="remote-file-section">
876 - <input type="url" id="vz-schedule-url" name="remote_data" value="<?php echo esc_attr( get_post_meta( $chart_id, Visualizer_Plugin::CF_CHART_URL, true ) ); ?>" placeholder="<?php esc_html_e( 'Please enter the URL of a CSV or XLSX file', 'visualizer' ); ?>" class="visualizer-input visualizer-remote-url">
877 - </div>
878 - <select name="vz-import-time" id="vz-import-time" class="visualizer-select">
756 + <input type="button" id="view-remote-file" class="button button-primary" value="<?php _e( 'Import', 'visualizer' ); ?>">
879 757 <?php
880 - $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_CHART_SCHEDULE, true );
881 - $schedules = apply_filters(
882 - 'visualizer_chart_schedules', array(
883 - '-1' => __( 'One-time', 'visualizer' ),
884 - ),
885 - 'csv',
886 - $chart_id
887 - );
888 - foreach ( $schedules as $num => $name ) {
889 - // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison
890 - $extra = self::is_hour_selected( $hours, $num ) ? 'selected' : '';
891 - ?>
892 - <option value="<?php echo esc_attr( $num ); ?>" <?php echo esc_attr( $extra ); ?>><?php echo esc_html( $name ); ?></option>
893 - <?php
894 - }
895 - do_action( 'visualizer_chart_schedules_spl', 'csv', $chart_id, 1 );
758 + } else {
896 759 ?>
897 - </select>
898 -
760 + <input type="button" id="vz-save-schedule" class="button button-primary" value="<?php _e( 'Import & Save schedule', 'visualizer' ); ?>">
899 761 <?php
900 - if ( ! Visualizer_Module::is_pro() ) {
901 - ?>
902 - <input type="button" id="view-remote-file" class="button button-primary" value="<?php _e( 'Import', 'visualizer' ); ?>">
903 - <?php
904 - } else {
905 - ?>
906 - <input type="button" id="vz-save-schedule" class="button button-primary" value="<?php _e( 'Import & Save schedule', 'visualizer' ); ?>">
907 - <?php
908 - }
909 - ?>
910 - <?php echo apply_filters( 'visualizer_pro_upsell', '', 'import-url' ); ?>
911 - </form>
912 - </div>
762 + }
763 + ?>
764 + </form>
913 765 </div>
914 766 </li>
915 767 <!-- import from json url -->
916 768 <li class="viz-subsection">
917 - <span class="viz-section-title visualizer_source_json" role="button" tabindex="0"><?php _e( 'Import from JSON', 'visualizer' ); ?></span>
918 - <div class="only-pro-anchor">
919 - <div class="viz-section-items section-items">
920 - <p class="viz-group-description"><?php _e( 'You can choose here to import/synchronize your chart data with a remote JSON source. For more info check <a href="https://docs.themeisle.com/article/1052-how-to-generate-charts-from-json-data-rest-endpoints" target="_blank" >this</a> tutorial', 'visualizer' ); ?></p>
921 - <form id="vz-import-json" action="<?php echo $upload_link; ?>" method="post" target="thehole" enctype="multipart/form-data">
922 - <div class="remote-file-section">
769 + <span class="viz-section-title visualizer_source_json"><?php _e( 'Import from JSON', 'visualizer' ); ?></span>
770 + <div class="viz-section-items section-items">
771 + <p class="viz-group-description"><?php _e( 'You can choose here to import/synchronize your chart data with a remote JSON source. For more info check <a href="https://docs.themeisle.com/article/1052-how-to-generate-charts-from-json-data-rest-endpoints" target="_blank" >this</a> tutorial', 'visualizer' ); ?></p>
772 + <form id="vz-import-json" action="<?php echo $upload_link; ?>" method="post" target="thehole" enctype="multipart/form-data">
773 + <div class="remote-file-section">
774 + <?php
775 + $bttn_label = 'visualizer_source_json' === $source_of_chart ? __( 'Modify Parameters', 'visualizer' ) : __( 'Create Parameters', 'visualizer' );
776 + if ( Visualizer_Module::is_pro() ) {
777 + ?>
778 + <p class="viz-group-description"><?php _e( 'How often do you want to check the URL', 'visualizer' ); ?></p>
779 + <select name="time" id="vz-json-time" class="visualizer-select json-form-element" data-chart="<?php echo $chart_id; ?>">
923 780 <?php
924 - $bttn_label = 'visualizer_source_json' === $source_of_chart ? __( 'Modify Parameters', 'visualizer' ) : __( 'Create Parameters', 'visualizer' );
925 - if ( Visualizer_Module::is_pro() ) {
781 + $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_JSON_SCHEDULE, true );
782 + $schedules = apply_filters(
783 + 'visualizer_chart_schedules', array(
784 + '-1' => __( 'One-time', 'visualizer' ),
785 + ),
786 + 'json',
787 + $chart_id
788 + );
789 + foreach ( $schedules as $num => $name ) {
790 + // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison
791 + $extra = $num == $hours ? 'selected' : '';
926 792 ?>
927 - <p class="viz-group-description"><?php _e( 'How often do you want to check the URL', 'visualizer' ); ?></p>
928 - <select name="time" id="vz-json-time" class="visualizer-select json-form-element" data-chart="<?php echo $chart_id; ?>">
793 + <option value="<?php echo $num; ?>" <?php echo $extra; ?>><?php echo $name; ?></option>
929 794 <?php
930 - $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_JSON_SCHEDULE, true );
931 - $schedules = apply_filters(
932 - 'visualizer_chart_schedules', array(
933 - '-1' => __( 'One-time', 'visualizer' ),
934 - ),
935 - 'json',
936 - $chart_id
937 - );
938 - foreach ( $schedules as $num => $name ) {
939 - // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison
940 - $extra = self::is_hour_selected( $hours, $num ) ? 'selected' : '';
941 - ?>
942 - <option value="<?php echo esc_attr( $num ); ?>" <?php echo esc_attr( $extra ); ?>><?php echo esc_html( $name ); ?></option>
943 - <?php
944 - }
945 - do_action( 'visualizer_chart_schedules_spl', 'json', $chart_id, 1 );
946 - ?>
947 - </select>
948 - <?php
949 795 }
796 + do_action( 'visualizer_chart_schedules_spl', 'json', $chart_id, 1 );
950 797 ?>
951 - </div>
798 + </select>
799 + <?php
800 + }
801 + ?>
802 + </div>
952 803
953 - <input type="button" id="json-chart-button" class="button button-secondary show-chart-toggle"
954 - value="<?php echo $bttn_label; ?>" data-current="chart"
955 - data-t-filter="<?php _e( 'Show Chart', 'visualizer' ); ?>"
956 - data-t-chart="<?php echo $bttn_label; ?>">
804 + <input type="button" id="json-chart-button" class="button button-secondary show-chart-toggle"
805 + value="<?php echo $bttn_label; ?>" data-current="chart"
806 + data-t-filter="<?php _e( 'Show Chart', 'visualizer' ); ?>"
807 + data-t-chart="<?php echo $bttn_label; ?>">
808 + <?php
809 + if ( Visualizer_Module::is_pro() ) {
810 + ?>
811 + <input type="button" id="json-chart-save-button" class="button button-primary "
812 + value="<?php _e( 'Save Schedule', 'visualizer' ); ?>">
957 813 <?php
958 - if ( Visualizer_Module::is_pro() ) {
959 - ?>
960 - <input type="button" id="json-chart-save-button" class="button button-primary "
961 - value="<?php _e( 'Save Schedule', 'visualizer' ); ?>">
962 - <?php
963 - }
964 - ?>
965 - <?php echo apply_filters( 'visualizer_pro_upsell', '', 'import-url' ); ?>
966 - </form>
967 - </div>
814 + }
815 + ?>
816 + </form>
968 817 </div>
969 818 </li>
970 819 </ul>
971 820 </li>
@@ -971,9 +820,9 @@
971 820 </li>
972 821 <!-- import from chart -->
973 822 <li class="viz-group viz-import-from-other <?php echo apply_filters( 'visualizer_pro_upsell_class', 'only-pro-feature' ); ?>">
974 823 <h2 class="viz-group-title viz-sub-group"
975 - data-current="chart" role="button" tabindex="0"><?php _e( 'Import from other chart', 'visualizer' ); ?><span
824 + data-current="chart"><?php _e( 'Import from other chart', 'visualizer' ); ?><span
976 825 class="dashicons dashicons-lock"></span></h2>
977 826 <div class="viz-group-content edit-data-content">
978 827 <div>
979 828 <p class="viz-group-description"><?php _e( 'You can import here data from your previously created charts', 'visualizer' ); ?></p>
@@ -983,9 +832,9 @@
983 832 $fetch_link = esc_url(
984 833 add_query_arg(
985 834 array(
986 835 'action' => Visualizer_Module::is_pro() ? Visualizer_Pro::ACTION_FETCH_DATA : '',
987 - 'nonce' => Visualizer_Module::is_pro() ? wp_create_nonce( Visualizer_Pro::ACTION_FETCH_DATA ) : wp_create_nonce(),
836 + 'nonce' => wp_create_nonce(),
988 837 ),
989 838 admin_url( 'admin-ajax.php' )
990 839 )
991 840 );
@@ -1020,15 +869,11 @@
1020 869
1021 870 </select>
1022 871 </form>
1023 872 <input type="button" id="existing-chart" class="button button-primary"
1024 - value="<?php _e( 'Import Chart', 'visualizer' ); ?>"
1025 - data-viz-link="<?php echo $fetch_link; ?>">
1026 - <?php
1027 - if ( ! Visualizer_Module_Admin::proFeaturesEnabled() ) {
1028 - echo apply_filters( 'visualizer_pro_upsell', '', 'import-chart' );
1029 - }
1030 - ?>
873 + value="<?php _e( 'Import Chart', 'visualizer' ); ?>"
874 + data-viz-link="<?php echo $fetch_link; ?>">
875 + <?php echo apply_filters( 'visualizer_pro_upsell', '', 'import-chart' ); ?>
1031 876 </div>
1032 877 </div>
1033 878 </li>
1034 879
@@ -1043,54 +888,43 @@
1043 888 )
1044 889 );
1045 890 ?>
1046 891 <!-- import from WordPress -->
1047 - <li class="viz-group visualizer_source_query_wp <?php echo esc_attr( apply_filters( 'visualizer_pro_upsell_class', 'only-pro-feature', 'import-wp' ) ); ?> ">
1048 - <h2 class="viz-group-title viz-sub-group" role="button" tabindex="0"><?php _e( 'Import from WordPress', 'visualizer' ); ?><span
892 + <li class="viz-group visualizer_source_query_wp <?php echo apply_filters( 'visualizer_pro_upsell_class', 'only-pro-feature', 'import-wp' ); ?> ">
893 + <h2 class="viz-group-title viz-sub-group"><?php _e( 'Import from WordPress', 'visualizer' ); ?><span
1049 894 class="dashicons dashicons-lock"></span></h2>
1050 895 <div class="viz-group-content edit-data-content">
1051 896 <div>
1052 897 <p class="viz-group-description"><?php _e( 'You can import data from WordPress here.', 'visualizer' ); ?></p>
1053 - <form id="vz-filter-wizard" action="<?php echo esc_url( $save_filter ); ?>" method="post" target="thehole">
898 + <form id="vz-filter-wizard" action="<?php echo $save_filter; ?>" method="post" target="thehole">
899 + <p class="viz-group-description"><?php _e( 'How often do you want to refresh the data from WordPress.', 'visualizer' ); ?></p>
900 + <select name="refresh" id="vz-filter-import-time" class="visualizer-select">
1054 901 <?php
1055 - $is_wp_source = 'visualizer_source_query_wp' === $source_of_chart;
1056 - $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_DB_SCHEDULE, true );
1057 - $bttn_label = $is_wp_source ? '1. ' . __( 'Modify Data Source', 'visualizer' ) : '1. ' . __( 'Choose Data Source', 'visualizer' );
902 + $bttn_label = 'visualizer_source_query_wp' === $source_of_chart ? __( 'Modify Filter', 'visualizer' ) : __( 'Create Filter', 'visualizer' );
903 + $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_DB_SCHEDULE, true );
904 + $schedules = apply_filters(
905 + 'visualizer_chart_schedules', array(
906 + '-1' => __( 'One-time', 'visualizer' ),
907 + ),
908 + 'wp',
909 + $chart_id
910 + );
911 + foreach ( $schedules as $num => $name ) {
912 + // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison
913 + $extra = $num == $hours ? 'selected' : '';
914 + ?>
915 + <option value="<?php echo $num; ?>" <?php echo $extra; ?>><?php echo $name; ?></option>
916 + <?php
917 + }
918 + do_action( 'visualizer_chart_schedules_spl', 'wp', $chart_id, 1 );
1058 919 ?>
920 + </select>
1059 921
1060 - <!-- Step 1: Choose / modify data source -->
1061 - <input type="button" id="filter-chart-button" class="button button-secondary show-chart-toggle vz-import-step-btn" value="<?php echo esc_attr( $bttn_label ); ?>" data-current="chart" data-t-filter="<?php esc_attr_e( 'Show Chart', 'visualizer' ); ?>" data-t-chart="<?php echo esc_attr( $bttn_label ); ?>">
1062 -
1063 - <!-- Step 2: Sync schedule toggle -->
1064 - <div id="vz-wp-sync-step">
1065 - <button type="button" id="vz-wp-sync-btn" class="vz-import-step-toggle" aria-expanded="<?php echo $is_wp_source ? 'true' : 'false'; ?>">
1066 - <?php echo '2. ' . __( 'Set Sync Schedule', 'visualizer' ); ?>
1067 - <span class="dashicons dashicons-arrow-down-alt2"></span>
1068 - </button>
1069 - <div id="vz-wp-sync-options"<?php echo $is_wp_source ? '' : ' style="display:none"'; ?>>
1070 - <select name="refresh" id="vz-filter-import-time" class="visualizer-select">
1071 - <?php
1072 - $schedules = apply_filters(
1073 - 'visualizer_chart_schedules', array(
1074 - '-1' => __( 'One-time', 'visualizer' ),
1075 - ),
1076 - 'wp',
1077 - $chart_id
1078 - );
1079 - foreach ( $schedules as $num => $name ) {
1080 - $extra = self::is_hour_selected( $hours, $num ) ? 'selected' : '';
1081 - ?>
1082 - <option value="<?php echo esc_attr( $num ); ?>" <?php echo esc_attr( $extra ); ?>><?php echo esc_html( $name ); ?></option>
1083 - <?php
1084 - }
1085 - do_action( 'visualizer_chart_schedules_spl', 'wp', $chart_id, 1 );
1086 - ?>
1087 - </select>
1088 - <input type="button" id="db-filter-save-button" class="button button-primary" value="<?php _e( 'Save Schedule', 'visualizer' ); ?>">
1089 - </div>
1090 - </div>
922 + <input type="button" id="filter-chart-button" class="button button-secondary show-chart-toggle" value="<?php echo $bttn_label; ?>" data-current="chart" data-t-filter="<?php _e( 'Show Chart', 'visualizer' ); ?>" data-t-chart="<?php echo $bttn_label; ?>">
923 + <input type="button" id="db-filter-save-button" class="button button-primary" value="<?php _e( 'Save Schedule', 'visualizer' ); ?>">
924 + <?php echo apply_filters( 'visualizer_pro_upsell', '', 'db-query' ); ?>
1091 925 </form>
1092 - <?php echo apply_filters( 'visualizer_pro_upsell', '', 'import-wp', 'https://docs.themeisle.com/article/1278-how-to-import-data-from-wordpress' ); ?>
926 + <?php echo apply_filters( 'visualizer_pro_upsell', '', 'import-wp' ); ?>
1093 927 </div>
1094 928 </div>
1095 929 </li>
1096 930
@@ -1132,9 +966,9 @@
1132 966 )
1133 967 );
1134 968 ?>
1135 969 <li class="viz-group visualizer_woocommerce_source<?php echo 'visualizer_source_json_wc' === $source_of_chart ? ' open' : ''; ?> <?php echo apply_filters( 'visualizer_pro_upsell_class', 'only-pro-feature', 'import-wc-report' ); ?> ">
1136 - <h2 class="viz-group-title viz-sub-group" role="button" tabindex="0"><?php _e( 'Import from WooCommerce Reports', 'visualizer' ); ?><span class="dashicons dashicons-lock"></span></h2>
970 + <h2 class="viz-group-title viz-sub-group"><?php _e( 'Import from WooCommerce Reports', 'visualizer' ); ?><span class="dashicons dashicons-lock"></span></h2>
1137 971 <div class="viz-group-content edit-data-content">
1138 972 <div>
1139 973 <p class="viz-group-description"><?php _e( 'You can choose here to import/synchronize your chart data with a WooCommerce report API. For more info check <a href="https://woocommerce.github.io/woocommerce-rest-api-docs/?shell#reports" target="_blank" >this</a> tutorial', 'visualizer' ); ?></p>
1140 974 <form id="vz-import-woo-report" action="<?php echo $upload_link; ?>" method="post" target="thehole" enctype="multipart/form-data">
@@ -1153,11 +987,12 @@
1153 987 'json',
1154 988 $chart_id
1155 989 );
1156 990 foreach ( $schedules as $num => $name ) {
1157 - $extra = self::is_hour_selected( $hours, $num ) ? 'selected' : '';
991 + // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison
992 + $extra = $num == $hours ? 'selected' : '';
1158 993 ?>
1159 - <option value="<?php echo esc_attr( $num ); ?>" <?php echo esc_attr( $extra ); ?>><?php echo esc_html( $name ); ?></option>
994 + <option value="<?php echo $num; ?>" <?php echo $extra; ?>><?php echo $name; ?></option>
1160 995 <?php
1161 996 }
1162 997 do_action( 'visualizer_chart_schedules_spl', 'json', $chart_id, 1 );
1163 998 ?>
@@ -1202,57 +1037,97 @@
1202 1037 )
1203 1038 );
1204 1039 ?>
1205 1040 <!-- import from db -->
1206 - <li class="viz-group visualizer_source_query <?php echo esc_attr( apply_filters( 'visualizer_pro_upsell_class', 'only-pro-feature', 'db-query' ) ); ?>">
1207 - <h2 class="viz-group-title viz-sub-group" role="button" tabindex="0"><?php _e( 'Import from database', 'visualizer' ); ?><span
1041 + <li class="viz-group visualizer_source_query <?php echo apply_filters( 'visualizer_pro_upsell_class', 'only-pro-feature', 'db-query' ); ?>">
1042 + <h2 class="viz-group-title viz-sub-group"><?php _e( 'Import from database', 'visualizer' ); ?><span
1208 1043 class="dashicons dashicons-lock"></span></h2>
1209 1044 <div class="viz-group-content edit-data-content">
1210 1045 <div>
1211 1046 <p class="viz-group-description"><?php _e( 'You can import data from the database here.', 'visualizer' ); ?></p>
1212 - <form id="vz-db-wizard" action="<?php echo esc_url( $save_query ); ?>" method="post" target="thehole">
1047 + <form id="vz-db-wizard" action="<?php echo $save_query; ?>" method="post" target="thehole">
1048 + <p class="viz-group-description"><?php _e( 'How often do you want to refresh the data from the database.', 'visualizer' ); ?></p>
1049 + <select name="refresh" id="vz-db-import-time" class="visualizer-select">
1213 1050 <?php
1214 - $is_db_source = 'visualizer_source_query' === $source_of_chart;
1215 - $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_DB_SCHEDULE, true );
1216 - $bttn_label = $is_db_source ? __( '1. Modify Data Source', 'visualizer' ) : __( '1. Choose Data Source', 'visualizer' );
1051 + $bttn_label = 'visualizer_source_query' === $source_of_chart ? __( 'Modify Query', 'visualizer' ) : __( 'Create Query', 'visualizer' );
1052 + $hours = get_post_meta( $chart_id, Visualizer_Plugin::CF_DB_SCHEDULE, true );
1053 + $schedules = apply_filters(
1054 + 'visualizer_chart_schedules', array(
1055 + '-1' => __( 'One-time', 'visualizer' ),
1056 + ),
1057 + 'db',
1058 + $chart_id
1059 + );
1060 + foreach ( $schedules as $num => $name ) {
1061 + // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison
1062 + $extra = $num == $hours ? 'selected' : '';
1063 + ?>
1064 + <option value="<?php echo $num; ?>" <?php echo $extra; ?>><?php echo $name; ?></option>
1065 + <?php
1066 + }
1067 + do_action( 'visualizer_chart_schedules_spl', 'db', $chart_id, 1 );
1217 1068 ?>
1069 + </select>
1070 + <input type="hidden" name="params" id="viz-db-wizard-params">
1218 1071
1219 - <!-- Step 1: Choose / modify data source -->
1220 - <input type="hidden" name="params" id="viz-db-wizard-params">
1221 - <input type="button" id="db-chart-button" class="button button-secondary show-chart-toggle vz-import-step-btn" value="<?php echo esc_attr( $bttn_label ); ?>" data-current="chart" data-t-filter="<?php esc_attr_e( 'Show Chart', 'visualizer' ); ?>" data-t-chart="<?php echo esc_attr( $bttn_label ); ?>">
1072 + <input type="button" id="db-chart-button" class="button button-secondary show-chart-toggle" value="<?php echo $bttn_label; ?>" data-current="chart" data-t-filter="<?php _e( 'Show Chart', 'visualizer' ); ?>" data-t-chart="<?php echo $bttn_label; ?>">
1073 + <input type="button" id="db-chart-save-button" class="button button-primary" value="<?php _e( 'Save Schedule', 'visualizer' ); ?>">
1074 + <?php echo apply_filters( 'visualizer_pro_upsell', '', 'db-query' ); ?>
1075 + </form>
1076 + </div>
1077 + </div>
1078 + </li>
1222 1079
1223 - <!-- Step 2: Sync schedule toggle -->
1224 - <div id="vz-db-sync-step">
1225 - <button type="button" id="vz-db-sync-btn" class="vz-import-step-toggle" aria-expanded="<?php echo $is_db_source ? 'true' : 'false'; ?>">
1226 - <?php echo '2. ' . __( 'Set Sync Schedule', 'visualizer' ); ?>
1227 - <span class="dashicons dashicons-arrow-down-alt2"></span>
1228 - </button>
1229 - <div id="vz-db-sync-options"<?php echo $is_db_source ? '' : ' style="display:none"'; ?>>
1230 - <select name="refresh" id="vz-db-import-time" class="visualizer-select">
1080 + <!-- manual -->
1081 + <li class="viz-group visualizer_source_manual <?php echo ! Visualizer_Module_Admin::proFeaturesLocked() ? apply_filters( 'visualizer_pro_upsell_class', 'only-pro-feature', 'db-query' ) : ''; ?>">
1082 + <h2 class="viz-group-title viz-sub-group visualizer-editor-tab" data-current="chart"><?php _e( 'Manual Data', 'visualizer' ); ?>
1083 + <span class="dashicons dashicons-lock"></span>
1084 + </h2>
1085 + <div class="viz-group-content edit-data-content">
1086 + <form id="editor-form" action="<?php echo $upload_link; ?>" method="post" target="thehole">
1087 + <input type="hidden" id="chart-data" name="chart_data">
1088 + <input type="hidden" id="chart-data-src" name="chart_data_src">
1089 +
1090 + <?php if ( Visualizer_Module::can_show_feature( 'simple-editor' ) ) { ?>
1091 + <div>
1092 + <p class="viz-group-description viz-editor-selection">
1093 + <?php _e( 'Use the', 'visualizer' ); ?>
1094 + <select name="editor-type" id="viz-editor-type">
1095 + <?php
1096 + if ( empty( $editor_type ) ) {
1097 + $editor_type = Visualizer_Module::is_pro() ? 'excel' : 'text';
1098 + }
1099 + foreach ( apply_filters( 'visualizer_editors', array( 'text' => __( 'Text', 'visualizer' ), 'table' => __( 'Simple', 'visualizer' ) ) ) as $e_type => $e_label ) {
1100 + ?>
1101 + <option value="<?php echo $e_type; ?>" <?php selected( $editor_type, $e_type ); ?> ><?php echo $e_label; ?></option>
1102 + <?php } ?>
1103 + </select>
1104 + <?php _e( 'editor to manually edit the chart data.', 'visualizer' ); ?>
1105 + </p>
1106 + <input type="button" id="editor-undo" class="button button-secondary" style="display: none" value="<?php _e( 'Undo Changes', 'visualizer' ); ?>">
1107 + <input type="button" id="editor-button" class="button button-primary "
1108 + value="<?php _e( 'Edit Data', 'visualizer' ); ?>" data-current="chart"
1109 + data-t-editor="<?php _e( 'Show Chart', 'visualizer' ); ?>"
1110 + data-t-chart="<?php _e( 'Edit Data', 'visualizer' ); ?>"
1111 + >
1112 + <p class="viz-group-description viz-info-msg"><?php echo sprintf( __( 'Please make sure you click \'Show Chart\' before you save the chart.', 'visualizer' ) ); ?></p>
1113 + </div>
1114 + <?php } else { ?>
1115 + <input type="button" id="editor-undo" class="button button-secondary" style="display: none" value="<?php _e( 'Undo Changes', 'visualizer' ); ?>">
1116 + <input type="button" id="editor-chart-button" class="button button-primary "
1117 + value="<?php _e( 'View Editor', 'visualizer' ); ?>" data-current="chart"
1118 + data-t-editor="<?php _e( 'Show Chart', 'visualizer' ); ?>"
1119 + data-t-chart="<?php _e( 'View Editor', 'visualizer' ); ?>"
1120 + >
1121 + <p class="viz-group-description viz-info-msg"><?php echo sprintf( __( 'Please make sure you click \'Show Chart\' before you save the chart.', 'visualizer' ) ); ?></p>
1122 + <?php } ?>
1231 1123 <?php
1232 - $schedules = apply_filters(
1233 - 'visualizer_chart_schedules', array(
1234 - '-1' => __( 'One-time', 'visualizer' ),
1235 - ),
1236 - 'db',
1237 - $chart_id
1238 - );
1239 - foreach ( $schedules as $num => $name ) {
1240 - $extra = self::is_hour_selected( $hours, $num ) ? 'selected' : '';
1241 - ?>
1242 - <option value="<?php echo esc_attr( $num ); ?>" <?php echo esc_attr( $extra ); ?>><?php echo esc_html( $name ); ?></option>
1243 - <?php
1124 + if ( ! Visualizer_Module_Admin::proFeaturesLocked() ) {
1125 + echo apply_filters( 'visualizer_pro_upsell', '', 'manual-data' );
1244 1126 }
1245 - do_action( 'visualizer_chart_schedules_spl', 'db', $chart_id, 1 );
1246 1127 ?>
1247 - </select>
1248 - <input type="button" id="db-chart-save-button" class="button button-primary" value="<?php _e( 'Save Schedule', 'visualizer' ); ?>">
1249 - </div>
1250 - </div>
1251 - <?php echo apply_filters( 'visualizer_pro_upsell', '', 'db-query', 'https://docs.themeisle.com/article/1279-how-to-import-data-from-a-database' ); ?>
1252 - </form>
1253 - </div>
1254 - </div>
1128 + </form>
1129 + </div>
1255 1130 </li>
1256 1131 </ul>
1257 1132 </li>
1258 1133 </ul>
@@ -1260,41 +1135,6 @@
1260 1135
1261 1136 <span id="visualizer-chart-id" data-id="<?php echo $chart_id; ?>" data-chart-source="<?php echo esc_attr( $source_of_chart ); ?>" data-chart-type="<?php echo esc_attr( $type ); ?>" data-chart-lib="<?php echo esc_attr( $lib ); ?>"></span>
1262 1137 <iframe id="thehole" name="thehole"></iframe>
1263 1138 <?php
1264 - }
1265 -
1266 - /**
1267 - * Check if the given hour is selected.
1268 - *
1269 - * @param int|float|string $hour The hour.
1270 - * @param int|float|string $reference The number.
1271 - *
1272 - * @return bool
1273 - */
1274 - public static function is_hour_selected( $hour, $reference ) {
1275 -
1276 - if ( ! is_numeric( $hour ) || ! is_numeric( $reference ) ) {
1277 - return false;
1278 - }
1279 -
1280 - $hour = floatval( $hour );
1281 - $reference = floatval( $reference );
1282 -
1283 - if ( self::is_live_update_option( $reference ) ) {
1284 - $reference = self::$live_option_fallback_hour;
1285 - }
1286 -
1287 - return abs( $hour - $reference ) < 0.000001;
1288 - }
1289 -
1290 - /**
1291 - * Check if the reference option is deprecated live update option.
1292 - *
1293 - * @param float $reference_hour The reference hour.
1294 - *
1295 - * @return bool
1296 - */
1297 - public static function is_live_update_option( $reference_hour ) {
1298 - return abs( $reference_hour ) < 0.000001;
1299 1139 }
1300 1140 }