PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.1.1
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.1.1
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/Page/Data.php +115 -19 3.0.73.1.1 View file →
@@ -43,13 +43,19 @@
43 43 $Visualizer_Pro->_addEditor( $this->chart->ID );
44 44 if ( method_exists( $Visualizer_Pro, '_addFilterWizard' ) ) {
45 45 $Visualizer_Pro->_addFilterWizard( $this->chart->ID );
46 46 }
47 + } else {
48 + Visualizer_Render_Layout::show( 'faux-editor' );
47 49 }
50 +
51 + $this->add_additional_content();
52 +
48 53 // Added by Ash/Upwork
49 54 echo '<div id="canvas">';
50 55 echo '<img src="', VISUALIZER_ABSURL, 'images/ajax-loader.gif" class="loader">';
51 56 echo '</div>';
57 + echo $this->custom_css;
52 58 }
53 59
54 60 /**
55 61 * Renders sidebar content.
@@ -63,12 +69,17 @@
63 69 array(
64 70 'action' => Visualizer_Plugin::ACTION_UPLOAD_DATA,
65 71 'nonce' => wp_create_nonce(),
66 72 'chart' => $this->chart->ID,
67 - ), admin_url( 'admin-ajax.php' )
73 + ),
74 + admin_url( 'admin-ajax.php' )
68 75 );
76 +
77 + // this will allow us to open the correct source tab by default.
78 + $source_of_chart = strtolower( get_post_meta( $this->chart->ID, Visualizer_Plugin::CF_SOURCE, true ) );
79 + $type = get_post_meta( $this->chart->ID, Visualizer_Plugin::CF_CHART_TYPE, true );
69 80 ?>
70 - <span id="visualizer-chart-id" data-id="<?php echo $this->chart->ID; ?>"></span>
81 + <span id="visualizer-chart-id" data-id="<?php echo $this->chart->ID; ?>" data-chart-source="<?php echo $source_of_chart; ?>" data-chart-type="<?php echo $type; ?>"></span>
71 82 <iframe id="thehole" name="thehole"></iframe>
72 83 <ul class="viz-group-wrapper full-height">
73 84 <li class="viz-group viz-group-category open" id="vz-chart-source">
74 85 <div class="viz-group-header">
@@ -75,9 +86,9 @@
75 86 <h2 class="viz-group-title viz-main-group"><?php _e( 'Chart Data', 'visualizer' ); ?></h2>
76 87 </div>
77 88 <ul class="viz-group-content">
78 89 <ul class="viz-group-wrapper">
79 - <li class="viz-group">
90 + <li class="viz-group visualizer_source_csv">
80 91 <h2 class="viz-group-title viz-sub-group visualizer-src-tab"><?php _e( 'Import data from file', 'visualizer' ); ?></h2>
81 92 <div class="viz-group-content">
82 93 <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>
83 94 <p class="viz-group-description"><?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', 'visualizer' ), '<a href="' . VISUALIZER_ABSURL . 'samples/' . $this->type . '.csv" target="_blank">', $this->type, '.csv</a>' ); ?></p>
@@ -91,9 +102,9 @@
91 102 value="<?php _e( 'Import', 'visualizer' ); ?>">
92 103 </form>
93 104 </div>
94 105 </li>
95 - <li class="viz-group visualizer-import-url">
106 + <li class="viz-group visualizer-import-url visualizer_source_csv_remote">
96 107 <h2 class="viz-group-title viz-sub-group visualizer-src-tab"><?php _e( 'Import data from URL', 'visualizer' ); ?></h2>
97 108 <ul class="viz-group-content">
98 109 <li class="viz-subsection">
99 110 <span class="viz-section-title"><?php _e( 'One time import', 'visualizer' ); ?></span>
@@ -134,13 +145,15 @@
134 145 <select name="vz-import-time" id="vz-import-time"
135 146 class="visualizer-select">
136 147 <?php
137 148 $hours = get_post_meta( $this->chart->ID, Visualizer_Plugin::CF_CHART_SCHEDULE, true );
138 - $schedules = array(
139 - '1' => __( 'Each hour', 'visualizer' ),
140 - '12' => __( 'Each 12 hours', 'visualizer' ),
141 - '24' => __( 'Each day', 'visualizer' ),
142 - '36' => __( 'Each 3 days', 'visualizer' ),
149 + $schedules = apply_filters(
150 + 'visualizer_chart_schedules', array(
151 + '1' => __( 'Each hour', 'visualizer' ),
152 + '12' => __( 'Each 12 hours', 'visualizer' ),
153 + '24' => __( 'Each day', 'visualizer' ),
154 + '72' => __( 'Each 3 days', 'visualizer' ),
155 + )
143 156 );
144 157 foreach ( $schedules as $num => $name ) {
145 158 $extra = $num == $hours ? 'selected' : '';
146 159 ?>
@@ -172,9 +185,10 @@
172 185 $fetch_link = add_query_arg(
173 186 array(
174 187 'action' => ( VISUALIZER_PRO ) ? Visualizer_Pro::ACTION_FETCH_DATA : '',
175 188 'nonce' => wp_create_nonce(),
176 - ), admin_url( 'admin-ajax.php' )
189 + ),
190 + admin_url( 'admin-ajax.php' )
177 191 );
178 192 $query_args_charts = array(
179 193 'post_type' => Visualizer_Plugin::CPT_VISUALIZER,
180 194 'posts_per_page' => 300,
@@ -205,9 +219,9 @@
205 219 <h2 class="viz-group-title viz-sub-group"><?php _e( 'Import from WordPress', 'visualizer' ); ?><span
206 220 class="dashicons dashicons-lock"></span></h2>
207 221 <div class="viz-group-content edit-data-content">
208 222 <div>
209 - <p class="viz-group-description"><?php _e( 'You can import here data from WordPress', 'visualizer' ); ?></p>
223 + <p class="viz-group-description"><?php _e( 'You can import data from WordPress here.', 'visualizer' ); ?></p>
210 224 <input type="button" id="filter-chart-button" class="button button-primary "
211 225 value="<?php _e( 'Create Filters', 'visualizer' ); ?>" data-current="chart"
212 226 data-t-filter="<?php _e( 'Show Chart', 'visualizer' ); ?>"
213 227 data-t-chart="<?php _e( 'Create Filters', 'visualizer' ); ?>">
@@ -216,12 +230,64 @@
216 230 </div>
217 231 </li>
218 232
219 233 <?php
220 - // we will auto-open the manual data feature but only when pro is active.
234 + $save_query = add_query_arg(
235 + array(
236 + 'action' => Visualizer_Plugin::ACTION_SAVE_DB_QUERY,
237 + 'security' => wp_create_nonce( Visualizer_Plugin::ACTION_SAVE_DB_QUERY . Visualizer_Plugin::VERSION ),
238 + 'chart' => $this->chart->ID,
239 + ), admin_url( 'admin-ajax.php' )
240 + );
241 + ?>
242 + <li class="viz-group visualizer_source_query <?php echo apply_filters( 'visualizer_pro_upsell_class', 'only-pro-feature', 'db-query' ); ?>">
243 + <h2 class="viz-group-title viz-sub-group"><?php _e( 'Import from database', 'visualizer' ); ?><span
244 + class="dashicons dashicons-lock"></span></h2>
245 + <div class="viz-group-content edit-data-content">
246 + <div>
247 + <p class="viz-group-description"><?php _e( 'You can import data from the database here.', 'visualizer' ); ?></p>
248 + <form id="vz-db-wizard" action="<?php echo $save_query; ?>" method="post" target="thehole">
249 + <p class="viz-group-description"><?php _e( 'How often do you want to refresh the data from the database.', 'visualizer' ); ?></p>
250 + <select name="refresh" id="vz-db-import-time" class="visualizer-select">
251 + <?php
252 + $bttn_label = 'visualizer_source_query' === $source_of_chart ? __( 'Modify Query', 'visualizer' ) : __( 'Create Query', 'visualizer' );
253 + $hours = get_post_meta( $this->chart->ID, Visualizer_Plugin::CF_DB_SCHEDULE, true );
254 + $schedules = apply_filters(
255 + 'visualizer_schedules', array(
256 + '0' => __( 'Live', 'visualizer' ),
257 + '1' => __( 'Each hour', 'visualizer' ),
258 + '12' => __( 'Each 12 hours', 'visualizer' ),
259 + '24' => __( 'Each day', 'visualizer' ),
260 + '72' => __( 'Each 3 days', 'visualizer' ),
261 + )
262 + );
263 + foreach ( $schedules as $num => $name ) {
264 + $extra = $num == $hours ? 'selected' : '';
265 + ?>
266 + <option value="<?php echo $num; ?>" <?php echo $extra; ?>><?php echo $name; ?></option>
267 + <?php
268 + }
269 + ?>
270 + </select>
271 + <input type="hidden" name="params" id="viz-db-wizard-params">
272 +
273 + <input type="button" id="db-chart-button" class="button button-secondary "
274 + value="<?php echo $bttn_label; ?>" data-current="chart"
275 + data-t-filter="<?php _e( 'Show Chart', 'visualizer' ); ?>"
276 + data-t-chart="<?php echo $bttn_label; ?>">
277 + <input type="button" id="db-chart-save-button" class="button button-primary "
278 + value="<?php _e( 'Save Schedule', 'visualizer' ); ?>">
279 + <?php echo apply_filters( 'visualizer_pro_upsell', '', 'db-query' ); ?>
280 + </form>
281 + </div>
282 + </div>
283 + </li>
284 +
285 + <?php
286 + // we will auto-open the manual data feature but only when pro is active and source is empty.
221 287 $pro_class = apply_filters( 'visualizer_pro_upsell_class', 'only-pro-feature' );
222 288 ?>
223 - <li class="viz-group <?php echo $pro_class; ?> <?php echo empty( $pro_class ) ? 'open' : ''; ?> ">
289 + <li class="viz-group <?php echo $pro_class; ?> <?php echo empty( $source_of_chart ) && empty( $pro_class ) ? 'open' : ''; ?> ">
224 290 <h2 class="viz-group-title viz-sub-group visualizer-editor-tab"
225 291 data-current="chart"><?php _e( 'Manual Data', 'visualizer' ); ?><span
226 292 class="dashicons dashicons-lock"></span></h2>
227 293 <form id="editor-form" action="<?php echo $upload_link; ?>" method="post" target="thehole">
@@ -253,9 +319,13 @@
253 319 <ul class="viz-group-content">
254 320 <form id="settings-form" action="<?php echo add_query_arg( 'nonce', wp_create_nonce() ); ?>"
255 321 method="post">
256 322 <?php echo $this->sidebar; ?>
323 + <input type="hidden" name="save" value="1">
257 324 </form>
325 + <form id="cancel-form" action="<?php echo add_query_arg( 'nonce', wp_create_nonce() ); ?>" method="post">
326 + <input type="hidden" name="cancel" value="1">
327 + </form>
258 328 </ul>
259 329 </li>
260 330
261 331 <?php $this->getPermissionsLink( $this->chart->ID ); ?>
@@ -278,9 +348,9 @@
278 348 foreach ( $permissions as $k => $v ) {
279 349 $this->$k = $v;
280 350 }
281 351 }
282 -?>
352 + ?>
283 353 <li class="viz-group viz-group-category bottom-fixed sidebar-footer-link" id="vz-chart-permissions">
284 354 <h2><span class="dashicons dashicons-admin-users"></span><?php _e( 'Permissions', 'visualizer' ); ?></h2>
285 355 <div class="viz-group-header">
286 356 <button class="customize-section-back" tabindex="0"></button>
@@ -292,17 +362,18 @@
292 362 echo add_query_arg(
293 363 array(
294 364 'nonce' => wp_create_nonce(),
295 365 'tab' => 'permissions',
296 - ), remove_query_arg( 'tab', $_SERVER['REQUEST_URI'] )
366 + ),
367 + remove_query_arg( 'tab', $_SERVER['REQUEST_URI'] )
297 368 );
298 -?>
369 + ?>
299 370 " method="post">
300 371 <?php $this->permissionsSidebar(); ?>
301 372 </form>
302 373 </ul>
303 374 </li>
304 -<?php
375 + <?php
305 376 }
306 377
307 378 /**
308 379 * Generates the permissions form.
@@ -309,11 +380,17 @@
309 380 *
310 381 * @access private
311 382 */
312 383 private function permissionsSidebar() {
384 + // ignore for unit tests because Travis throws the error "Indirect modification of overloaded property Visualizer_Render_Page_Data::$permissions has no effect".
385 + if ( defined( 'WP_TESTS_DOMAIN' ) ) {
386 + return;
387 + }
313 388 Visualizer_Render_Sidebar::_renderGroupStart(
314 389 esc_html__( 'Who can see this chart?', 'visualizer' ) . '<span
315 - class="dashicons dashicons-lock"></span>', '', apply_filters( 'visualizer_pro_upsell_class', 'only-pro-feature', 'chart-permissions' )
390 + class="dashicons dashicons-lock"></span>',
391 + '',
392 + apply_filters( 'visualizer_pro_upsell_class', 'only-pro-feature', 'chart-permissions' )
316 393 );
317 394 Visualizer_Render_Sidebar::_renderSectionStart();
318 395 Visualizer_Render_Sidebar::_renderSectionDescription( esc_html__( 'Select who can view the chart on the front-end.', 'visualizer' ) );
319 396
@@ -353,9 +430,11 @@
353 430 Visualizer_Render_Sidebar::_renderGroupEnd();
354 431
355 432 Visualizer_Render_Sidebar::_renderGroupStart(
356 433 esc_html__( 'Who can edit this chart?', 'visualizer' ) . '<span
357 - class="dashicons dashicons-lock"></span>', '', apply_filters( 'visualizer_pro_upsell_class', 'only-pro-feature', 'chart-permissions' )
434 + class="dashicons dashicons-lock"></span>',
435 + '',
436 + apply_filters( 'visualizer_pro_upsell_class', 'only-pro-feature', 'chart-permissions' )
358 437 );
359 438 Visualizer_Render_Sidebar::_renderSectionStart();
360 439 Visualizer_Render_Sidebar::_renderSectionDescription( esc_html__( 'Select who can edit the chart on the front-end.', 'visualizer' ) );
361 440
@@ -414,7 +493,24 @@
414 493 echo '</a>';
415 494 echo '</div>';
416 495 }
417 496 echo '<input type="submit" id="settings-button" class="button button-primary button-large push-right" value="', $this->button, '">';
497 + if ( isset( $this->cancel_button ) ) {
498 + echo '<input type="submit" id="cancel-button" class="button button-secondary button-large push-left" value="', $this->cancel_button, '">';
499 + }
500 + }
501 +
502 + /**
503 + * Renders the additional content.
504 + *
505 + * @access private
506 + */
507 + private function add_additional_content() {
508 + $source = strtolower( get_post_meta( $this->chart->ID, Visualizer_Plugin::CF_SOURCE, true ) );
509 + $query = '';
510 + if ( 'visualizer_source_query' === $source ) {
511 + $query = get_post_meta( $this->chart->ID, Visualizer_Plugin::CF_DB_QUERY, true );
512 + }
513 + Visualizer_Render_Layout::show( 'db-query', $query );
418 514 }
419 515
420 516 }