PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 2.0.3
Visualizer – Tables & Charts Manager with Built-in AI Generator v2.0.3
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 3.10.4 All 148 releases
← All changes | classes/Visualizer/Module/Admin.php +156 -864 3.10.42.0.3 View file →
@@ -52,255 +52,44 @@
52 52 public function __construct( Visualizer_Plugin $plugin ) {
53 53 parent::__construct( $plugin );
54 54 $this->_addAction( 'load-post.php', 'enqueueMediaScripts' );
55 55 $this->_addAction( 'load-post-new.php', 'enqueueMediaScripts' );
56 - $this->_addAction( 'admin_footer', 'renderTemplates' );
57 - $this->_addAction( 'admin_enqueue_scripts', 'enqueueLibraryScripts', null, 0 );
56 + $this->_addAction( 'admin_footer', 'renderTempaltes' );
57 + $this->_addAction( 'admin_enqueue_scripts', 'enqueueLibraryScripts', null, 9 );
58 58 $this->_addAction( 'admin_menu', 'registerAdminMenu' );
59 59 $this->_addFilter( 'media_view_strings', 'setupMediaViewStrings' );
60 60 $this->_addFilter( 'plugin_action_links', 'getPluginActionLinks', 10, 2 );
61 61 $this->_addFilter( 'plugin_row_meta', 'getPluginMetaLinks', 10, 2 );
62 - $this->_addFilter( 'visualizer_logger_data', 'getLoggerData' );
63 - $this->_addFilter( 'visualizer_feedback_review_trigger', 'feedbackReviewTrigger' );
64 -
65 - // screen pagination
66 - $this->_addFilter( 'set-screen-option', 'setScreenOptions', 10, 3 );
67 -
68 - // revision support.
69 - $this->_addFilter( 'wp_revisions_to_keep', 'limitRevisions', null, 10, 2 );
70 - $this->_addAction( '_wp_put_post_revision', 'addRevision', null, 10, 1 );
71 - $this->_addAction( 'wp_restore_post_revision', 'restoreRevision', null, 10, 2 );
72 -
73 - $this->_addAction( 'visualizer_chart_schedules_spl', 'addSplChartSchedules', null, 10, 3 );
74 -
75 - $this->_addAction( 'admin_init', 'init' );
76 -
77 - $this->_addAction( 'visualizer_chart_languages', 'addMultilingualSupport' );
78 -
79 - if ( defined( 'TI_CYPRESS_TESTING' ) ) {
80 - $this->load_cypress_hooks();
81 - }
82 -
62 + $this->_addFilter( 'visualizer_logger_flag', 'get_logger_flag', 10, 1 );
63 + $this->_addAjaxAction( Visualizer_Plugin::ACTION_TRACK, 'visualizer_enable_track' );
83 64 }
84 65
85 66 /**
86 - * Define the hooks that are needed for cypress.
87 - *
88 - * @since 3.4.0
89 - * @access private
67 + * Enable track ajax action.
90 68 */
91 - private function load_cypress_hooks() {
92 - // all charts should load on the same page without pagination.
93 - add_filter(
94 - 'visualizer_query_args', function( $args ) {
95 - $args['posts_per_page'] = 20;
96 - return $args;
97 - }, 10, 1
98 - );
99 - }
100 -
101 - /**
102 - * Add disabled `optgroup` schedules to the drop downs.
103 - *
104 - * @since ?
105 - *
106 - * @access public
107 - *
108 - * @param string $feature The feature for which to add schedules.
109 - * @param int $chart_id The chart ID.
110 - * @param int $plan The plan number.
111 - */
112 - public function addSplChartSchedules( $feature, $chart_id, $plan ) {
113 - if ( apply_filters( 'visualizer_is_business', false ) ) {
114 - return;
69 + public function visualizer_enable_track() {
70 + check_admin_referer( Visualizer_Plugin::ACTION_TRACK, 'nonce' );
71 + $status = $_GET['status'];
72 + if ( $status == 'yes' ) {
73 + update_option( 'visualizer_logger_flag', 'yes' );
74 + } else {
75 + update_option( 'visualizer_logger_flag', 'no' );
115 76 }
116 -
117 - $license = __( 'PRO', 'visualizer' );
118 - if ( Visualizer_Module::is_pro() ) {
119 - switch ( $plan ) {
120 - case 1:
121 - $license = __( 'Developer', 'visualizer' );
122 - break;
123 - }
124 - }
125 -
126 - $hours = array(
127 - '0' => __( 'Live', 'visualizer' ),
128 - '1' => __( 'Each hour', 'visualizer' ),
129 - '12' => __( 'Each 12 hours', 'visualizer' ),
130 - '24' => __( 'Each day', 'visualizer' ),
131 - '72' => __( 'Each 3 days', 'visualizer' ),
132 - );
133 -
134 - switch ( $feature ) {
135 - case 'json':
136 - case 'csv':
137 - // no more schedules if pro is already active.
138 - if ( Visualizer_Module::is_pro() ) {
139 - return;
140 - }
141 - break;
142 - case 'wp':
143 - // fall-through.
144 - case 'db':
145 - break;
146 - default:
147 - return;
148 - }
149 -
150 - echo '<optgroup disabled label="' . sprintf( __( 'More in the %s version', 'visualizer' ), $license ) . '">';
151 - foreach ( $hours as $hour => $desc ) {
152 - echo '<option disabled>' . $desc . '</option>';
153 - }
154 - echo '</optgroup>';
77 + wp_send_json_success( array( 'status' => $status ) );
155 78 }
156 79
157 80 /**
158 - * No limits on revisions.
159 - */
160 - public function limitRevisions( $num, $post ) {
161 - if ( Visualizer_Plugin::CPT_VISUALIZER === $post->post_type ) {
162 - return -1;
163 - }
164 - return $num;
165 - }
166 -
167 - /**
168 - * Add a revision.
169 - */
170 - public function addRevision( $revision_id ) {
171 - $parent_id = wp_is_post_revision( $revision_id );
172 - if ( Visualizer_Plugin::CPT_VISUALIZER === get_post_type( $parent_id ) ) {
173 - // add the meta data to this revision.
174 - $meta = get_post_meta( $parent_id, '', true );
175 -
176 - if ( $meta ) {
177 - foreach ( $meta as $key => $value ) {
178 - if ( 0 === strpos( $key, 'visualizer' ) ) {
179 - add_metadata( 'post', $revision_id, $key, maybe_unserialize( $value[0] ) );
180 - }
181 - }
182 - }
183 - }
184 - }
185 -
186 - /**
187 - * Restore a revision.
188 - */
189 - public function restoreRevision( $post_id, $revision_id ) {
190 - if ( Visualizer_Plugin::CPT_VISUALIZER === get_post_type( $post_id ) ) {
191 - // get the meta information from the revision.
192 - $meta = get_metadata( 'post', $revision_id, '', true );
193 -
194 - // delete all meta information from the post before adding.
195 - $post_meta = get_post_meta( $post_id, '', true );
196 - if ( $post_meta ) {
197 - foreach ( $meta as $key => $value ) {
198 - if ( 0 === strpos( $key, 'visualizer' ) ) {
199 - delete_post_meta( $post_id, $key );
200 - }
201 - }
202 - }
203 -
204 - if ( $meta ) {
205 - foreach ( $meta as $key => $value ) {
206 - if ( 0 === strpos( $key, 'visualizer' ) ) {
207 - add_post_meta( $post_id, $key, maybe_unserialize( $value[0] ) );
208 - }
209 - }
210 - }
211 - }
212 - }
213 -
214 - /**
215 - * Admin init.
81 + * Either the tracking is active or not.
216 82 *
217 - * @access public
83 + * @return bool The flag status.
218 84 */
219 - public function init() {
220 - // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison
221 - if ( current_user_can( 'edit_posts' ) && current_user_can( 'edit_pages' ) && 'true' == get_user_option( 'rich_editing' ) ) {
222 - $this->_addFilter( 'mce_external_languages', 'add_tinymce_lang', 10, 1 );
223 - $this->_addFilter( 'mce_external_plugins', 'tinymce_plugin', 10, 1 );
224 - $this->_addFilter( 'mce_buttons', 'register_mce_button', 10, 1 );
225 - $this->_addFilter( 'tiny_mce_before_init', 'get_strings_for_block', 10, 1 );
226 - }
227 - }
85 + public function get_logger_flag() {
86 + $flag = get_option( 'visualizer_logger_flag', 'no' );
228 87
229 - /**
230 - * Add the strings required for the TinyMCE buttons for the classic block (not the classic editor).
231 - *
232 - * @since ?
233 - * @access friendly
234 - */
235 - function get_strings_for_block( $settings ) {
236 - $class = new Visualizer_Module_Language();
237 - $strings = $class->get_strings();
238 - $array = array( 'visualizer_tinymce_plugin' => json_encode( $strings ) );
239 - return array_merge( $settings, $array );
88 + return ( $flag === 'yes' );
240 89 }
241 90
242 91 /**
243 - * Load plugin translation for - TinyMCE API
244 - *
245 - * @access public
246 - * @param array $arr The tinymce_lang array.
247 - * @return array
248 - */
249 - public function add_tinymce_lang( $arr ) {
250 - $ui_lang = VISUALIZER_ABSPATH . '/classes/Visualizer/Module/Language.php';
251 - $ui_lang = apply_filters( 'visualizer_ui_lang_filter', $ui_lang );
252 - $arr[] = $ui_lang;
253 - return $arr;
254 - }
255 -
256 - /**
257 - * Load custom js options - TinyMCE API
258 - *
259 - * @access public
260 - * @param array $plugin_array The tinymce plugin array.
261 - * @return array
262 - */
263 - public function tinymce_plugin( $plugin_array ) {
264 - $plugin_array['visualizer_mce_button'] = VISUALIZER_ABSURL . 'js/mce.js';
265 - return $plugin_array;
266 - }
267 -
268 - /**
269 - * Register new button in the editor
270 - *
271 - * @access public
272 - * @param array $buttons The tinymce buttons array.
273 - * @return array
274 - */
275 - public function register_mce_button( $buttons ) {
276 - array_push( $buttons, 'visualizer_mce_button' );
277 - return $buttons;
278 - }
279 -
280 - /**
281 - * Whether to show the feedback review or not.
282 - *
283 - * @access public
284 - */
285 - public function feedbackReviewTrigger( $dumb ) {
286 - $query = new WP_Query(
287 - array(
288 - 'posts_per_page' => 50,
289 - 'post_type' => Visualizer_Plugin::CPT_VISUALIZER,
290 - 'fields' => 'ids',
291 - 'update_post_meta_cache' => false,
292 - 'update_post_term_cache' => false,
293 - )
294 - );
295 -
296 - if ( $query->have_posts() && $query->post_count > 0 ) {
297 - return true;
298 - }
299 - return false;
300 - }
301 -
302 - /**
303 92 * Enqueues media scripts and styles.
304 93 *
305 94 * @since 1.0.0
306 95 * @uses wp_enqueue_style To enqueue style file.
@@ -311,28 +100,14 @@
311 100 public function enqueueMediaScripts() {
312 101 global $typenow;
313 102 if ( post_type_supports( $typenow, 'editor' ) ) {
314 103 wp_enqueue_style( 'visualizer-media', VISUALIZER_ABSURL . 'css/media.css', array( 'media-views' ), Visualizer_Plugin::VERSION );
315 -
316 - // Load all the assets for the different libraries we support.
317 - $deps = array(
318 - Visualizer_Render_Sidebar_Google::enqueue_assets( array( 'media-editor' ) ),
319 - Visualizer_Render_Sidebar_Type_DataTable_Tabular::enqueue_assets( array( 'media-editor' ) ),
320 - );
321 -
322 - wp_enqueue_script( 'visualizer-media-model', VISUALIZER_ABSURL . 'js/media/model.js', $deps, Visualizer_Plugin::VERSION, true );
104 + wp_enqueue_script( 'visualizer-google-jsapi-new', '//www.gstatic.com/charts/loader.js', array( 'media-editor' ), null, true );
105 + wp_enqueue_script( 'visualizer-google-jsapi-old', '//www.google.com/jsapi', array( 'visualizer-google-jsapi-new' ), null, true );
106 + wp_enqueue_script( 'visualizer-media-model', VISUALIZER_ABSURL . 'js/media/model.js', array( 'visualizer-google-jsapi-old' ), Visualizer_Plugin::VERSION, true );
323 107 wp_enqueue_script( 'visualizer-media-collection', VISUALIZER_ABSURL . 'js/media/collection.js', array( 'visualizer-media-model' ), Visualizer_Plugin::VERSION, true );
324 108 wp_enqueue_script( 'visualizer-media-controller', VISUALIZER_ABSURL . 'js/media/controller.js', array( 'visualizer-media-collection' ), Visualizer_Plugin::VERSION, true );
325 109 wp_enqueue_script( 'visualizer-media-view', VISUALIZER_ABSURL . 'js/media/view.js', array( 'visualizer-media-controller' ), Visualizer_Plugin::VERSION, true );
326 - wp_localize_script(
327 - 'visualizer-media-view',
328 - 'visualizer',
329 - array(
330 - 'i10n' => array(
331 - 'insert' => __( 'Insert', 'visualizer' ),
332 - ),
333 - )
334 - );
335 110 wp_enqueue_script( 'visualizer-media-toolbar', VISUALIZER_ABSURL . 'js/media/toolbar.js', array( 'visualizer-media-view' ), Visualizer_Plugin::VERSION, true );
336 111 wp_enqueue_script( 'visualizer-media', VISUALIZER_ABSURL . 'js/media.js', array( 'visualizer-media-toolbar' ), Visualizer_Plugin::VERSION, true );
337 112 }
338 113 }
@@ -348,9 +123,8 @@
348 123 *
349 124 * @return array The extended array of media view strings.
350 125 */
351 126 public function setupMediaViewStrings( $strings ) {
352 - $chart_types = self::_getChartTypesLocalized( true, true, true );
353 127 $strings['visualizer'] = array(
354 128 'actions' => array(
355 129 'get_charts' => Visualizer_Plugin::ACTION_GET_CHARTS,
356 130 'delete_chart' => Visualizer_Plugin::ACTION_DELETE_CHART,
@@ -362,13 +136,13 @@
362 136 'library' => esc_html__( 'From Library', 'visualizer' ),
363 137 'create' => esc_html__( 'Create New', 'visualizer' ),
364 138 ),
365 139 'library' => array(
366 - 'filters' => $chart_types,
367 - 'types' => array_keys( $chart_types ),
140 + 'filters' => self::_getChartTypesLocalized( true, true ),
141 + 'types' => array_keys( self::_getChartTypesLocalized( true, true ) ),
368 142 ),
369 143 'nonce' => wp_create_nonce(),
370 - 'buildurl' => esc_url( add_query_arg( 'action', Visualizer_Plugin::ACTION_CREATE_CHART, admin_url( 'admin-ajax.php' ) ) ),
144 + 'buildurl' => add_query_arg( 'action', Visualizer_Plugin::ACTION_CREATE_CHART, admin_url( 'admin-ajax.php' ) ),
371 145 );
372 146
373 147 return $strings;
374 148 }
@@ -381,101 +155,59 @@
381 155 * @static
382 156 * @access private
383 157 * @return array The associated array of chart types with localized names.
384 158 */
385 - public static function _getChartTypesLocalized( $enabledOnly = false, $get2Darray = false, $add_select = false, $where = null ) {
386 - $additional = array();
387 - if ( $add_select ) {
388 - $additional['select'] = array(
389 - 'name' => esc_html__( 'All', 'visualizer' ),
159 + public static function _getChartTypesLocalized( $enabledOnly = false, $get2Darray = false ) {
160 + $types = array(
161 + 'pie' => array(
162 + 'name' => esc_html__( 'Pie', 'visualizer' ),
390 163 'enabled' => true,
391 - );
392 - }
393 -
394 - $enabled = self::proFeaturesLocked();
395 -
396 - $types = array_merge(
397 - $additional,
398 - array(
399 - 'tabular' => array(
400 - 'name' => esc_html__( 'Table', 'visualizer' ),
401 - 'enabled' => true,
402 - 'supports' => $enabled ? array( 'Google Charts', 'DataTable' ) : array( 'DataTable' ),
403 - ),
404 - 'pie' => array(
405 - 'name' => esc_html__( 'Pie/Donut', 'visualizer' ),
406 - 'enabled' => true,
407 - 'supports' => $enabled ? array( 'Google Charts', 'ChartJS' ) : array( 'Google Charts' ),
408 - ),
409 - 'line' => array(
410 - 'name' => esc_html__( 'Line', 'visualizer' ),
411 - 'enabled' => true,
412 - 'supports' => $enabled ? array( 'Google Charts', 'ChartJS' ) : array( 'Google Charts' ),
413 - ),
414 - 'bar' => array(
415 - 'name' => esc_html__( 'Bar', 'visualizer' ),
416 - 'enabled' => true,
417 - 'supports' => $enabled ? array( 'Google Charts', 'ChartJS' ) : array( 'Google Charts' ),
418 - ),
419 - 'area' => array(
420 - 'name' => esc_html__( 'Area', 'visualizer' ),
421 - 'enabled' => $enabled,
422 - // in ChartJS, the fill option is used to make Line chart an area: https://www.chartjs.org/docs/latest/charts/area.html
423 - 'supports' => array( 'Google Charts' ),
424 - ),
425 - 'geo' => array(
426 - 'name' => esc_html__( 'Geo', 'visualizer' ),
427 - 'enabled' => $enabled,
428 - 'supports' => array( 'Google Charts' ),
429 - ),
430 - 'column' => array(
431 - 'name' => esc_html__( 'Column', 'visualizer' ),
432 - 'enabled' => $enabled,
433 - 'supports' => array( 'Google Charts', 'ChartJS' ),
434 - ),
435 - 'bubble' => array(
436 - 'name' => esc_html__( 'Bubble', 'visualizer' ),
437 - 'enabled' => $enabled,
438 - // chartjs' bubble is ugly looking (and it won't work off the default bubble.csv) so it is being excluded for the time being.
439 - 'supports' => array( 'Google Charts' ),
440 - ),
441 - 'scatter' => array(
442 - 'name' => esc_html__( 'Scatter', 'visualizer' ),
443 - 'enabled' => $enabled,
444 - 'supports' => array( 'Google Charts' ),
445 - ),
446 - 'gauge' => array(
447 - 'name' => esc_html__( 'Gauge', 'visualizer' ),
448 - 'enabled' => $enabled,
449 - 'supports' => array( 'Google Charts' ),
450 - ),
451 - 'candlestick' => array(
452 - 'name' => esc_html__( 'Candlestick', 'visualizer' ),
453 - 'enabled' => $enabled,
454 - 'supports' => array( 'Google Charts' ),
455 - ),
456 - // pro types
457 - 'timeline' => array(
458 - 'name' => esc_html__( 'Timeline', 'visualizer' ),
459 - 'enabled' => false,
460 - 'supports' => array( 'Google Charts', 'ChartJS' ),
461 - ),
462 - 'combo' => array(
463 - 'name' => esc_html__( 'Combo', 'visualizer' ),
464 - 'enabled' => false,
465 - 'supports' => array( 'Google Charts' ),
466 - ),
467 - 'polarArea' => array(
468 - 'name' => esc_html__( 'Polar Area', 'visualizer' ),
469 - 'enabled' => false,
470 - 'supports' => array( 'ChartJS' ),
471 - ),
472 - 'radar' => array(
473 - 'name' => esc_html__( 'Radar/Spider', 'visualizer' ),
474 - 'enabled' => false,
475 - 'supports' => array( 'ChartJS' ),
476 - ),
477 - )
164 + ),
165 + 'line' => array(
166 + 'name' => esc_html__( 'Line', 'visualizer' ),
167 + 'enabled' => true,
168 + ),
169 + 'area' => array(
170 + 'name' => esc_html__( 'Area', 'visualizer' ),
171 + 'enabled' => true,
172 + ),
173 + 'geo' => array(
174 + 'name' => esc_html__( 'Geo', 'visualizer' ),
175 + 'enabled' => true,
176 + ),
177 + 'bar' => array(
178 + 'name' => esc_html__( 'Bar', 'visualizer' ),
179 + 'enabled' => true,
180 + ),
181 + 'column' => array(
182 + 'name' => esc_html__( 'Column', 'visualizer' ),
183 + 'enabled' => true,
184 + ),
185 + 'gauge' => array(
186 + 'name' => esc_html__( 'Gauge', 'visualizer' ),
187 + 'enabled' => true,
188 + ),
189 + 'scatter' => array(
190 + 'name' => esc_html__( 'Scatter', 'visualizer' ),
191 + 'enabled' => true,
192 + ),
193 + 'candlestick' => array(
194 + 'name' => esc_html__( 'Candlestick', 'visualizer' ),
195 + 'enabled' => true,
196 + ),
197 + // pro types
198 + 'table' => array(
199 + 'name' => esc_html__( 'Table', 'visualizer' ),
200 + 'enabled' => false,
201 + ),
202 + 'timeline' => array(
203 + 'name' => esc_html__( 'Timeline', 'visualizer' ),
204 + 'enabled' => false,
205 + ),
206 + 'combo' => array(
207 + 'name' => esc_html__( 'Combo', 'visualizer' ),
208 + 'enabled' => false,
209 + ),
478 210 );
479 211 $types = apply_filters( 'visualizer_pro_chart_types', $types );
480 212 if ( $enabledOnly ) {
481 213 $filtered = array();
@@ -483,12 +215,8 @@
483 215 if ( ! is_array( $array ) ) {
484 216 // support for old pro
485 217 $array = array( 'enabled' => true, 'name' => $array );
486 218 }
487 - // backward compatibility for PRO before v1.9.0
488 - if ( ! array_key_exists( 'supports', $array ) ) {
489 - $array['supports'] = array( 'Google Charts' );
490 - }
491 219 if ( ! $array['enabled'] ) {
492 220 continue;
493 221 }
494 222 $filtered[ $type ] = $array;
@@ -501,74 +229,13 @@
501 229 if ( ! is_array( $array ) ) {
502 230 // support for old pro
503 231 $array = array( 'enabled' => true, 'name' => $array );
504 232 }
505 - // backward compatibility for PRO before v1.9.0
506 - if ( ! array_key_exists( 'supports', $array ) ) {
507 - $array['supports'] = array( 'Google Charts' );
508 - }
509 233 $doubleD[ $type ] = $array['name'];
510 234 }
511 235 $types = $doubleD;
512 236 }
513 237
514 - return self::handleDeprecatedCharts( $types, $enabledOnly, $get2Darray, $where );
515 - }
516 -
517 - /**
518 - * Handle (soon-to-be) deprecated charts.
519 - */
520 - private static function handleDeprecatedCharts( $types, $enabledOnly, $get2Darray, $where ) {
521 - $deprecated = array();
522 -
523 - switch ( $where ) {
524 - case 'types':
525 - // fall-through
526 - case 'library':
527 - // if a user has a Gauge/Candlestick chart, then let them keep using it.
528 - if ( ! Visualizer_Module::is_pro() ) {
529 - if ( ! self::hasChartType( 'gauge' ) ) {
530 - if ( $get2Darray ) {
531 - $deprecated[] = 'gauge';
532 - } else {
533 - $types['gauge']['enabled'] = false;
534 - }
535 - }
536 - if ( ! self::hasChartType( 'candlestick' ) ) {
537 - if ( $get2Darray ) {
538 - $deprecated[] = 'candlestick';
539 - } else {
540 - $types['candlestick']['enabled'] = false;
541 - }
542 - }
543 - }
544 - break;
545 - default:
546 - // if a user has a Gauge/Candlestick chart, then let them keep using it.
547 - if ( ! Visualizer_Module::is_pro() ) {
548 - if ( ! self::hasChartType( 'gauge' ) ) {
549 - if ( $get2Darray ) {
550 - $deprecated[] = 'gauge';
551 - } else {
552 - $types['gauge']['enabled'] = false;
553 - }
554 - }
555 - if ( ! self::hasChartType( 'candlestick' ) ) {
556 - if ( $get2Darray ) {
557 - $deprecated[] = 'candlestick';
558 - } else {
559 - $types['candlestick']['enabled'] = false;
560 - }
561 - }
562 - }
563 - }
564 -
565 - if ( $deprecated ) {
566 - foreach ( $deprecated as $type ) {
567 - unset( $types[ $type ] );
568 - }
569 - }
570 -
571 238 return $types;
572 239 }
573 240
574 241 /**
@@ -578,11 +245,11 @@
578 245 * @global string $pagenow The name of the current page.
579 246 *
580 247 * @access public
581 248 */
582 - public function renderTemplates() {
249 + public function renderTempaltes() {
583 250 global $pagenow;
584 - if ( 'post.php' !== $pagenow && 'post-new.php' !== $pagenow ) {
251 + if ( 'post.php' != $pagenow && 'post-new.php' != $pagenow ) {
585 252 return;
586 253 }
587 254 $render = new Visualizer_Render_Templates();
588 255 $render->render();
@@ -600,41 +267,22 @@
600 267 *
601 268 * @param string $suffix The current page suffix.
602 269 */
603 270 public function enqueueLibraryScripts( $suffix ) {
604 - if ( $suffix === $this->_libraryPage ) {
271 + if ( $suffix == $this->_libraryPage ) {
605 272 wp_enqueue_style( 'visualizer-library', VISUALIZER_ABSURL . 'css/library.css', array(), Visualizer_Plugin::VERSION );
606 273 $this->_addFilter( 'media_upload_tabs', 'setupVisualizerTab' );
607 274 wp_enqueue_media();
608 - wp_enqueue_script(
275 + wp_enqueue_script( 'visualizer-library', VISUALIZER_ABSURL . 'js/library.js', array(
276 + 'jquery',
277 + 'media-views',
278 + ), Visualizer_Plugin::VERSION, true );
279 + wp_enqueue_script( 'google-jsapi-new', '//www.gstatic.com/charts/loader.js', array(), null, true );
280 + wp_enqueue_script( 'google-jsapi-old', '//www.google.com/jsapi', array( 'google-jsapi-new' ), null, true );
281 + wp_enqueue_script( 'visualizer-render', VISUALIZER_ABSURL . 'js/render.js', array(
282 + 'google-jsapi-old',
609 283 'visualizer-library',
610 - VISUALIZER_ABSURL . 'js/library.js',
611 - array(
612 - 'jquery',
613 - 'media-views',
614 - 'clipboard',
615 - ),
616 - Visualizer_Plugin::VERSION,
617 - true
618 - );
619 -
620 - wp_enqueue_script( 'visualizer-customization', $this->get_user_customization_js(), array(), null, true );
621 -
622 - $query = $this->getQuery();
623 - while ( $query->have_posts() ) {
624 - $chart = $query->next_post();
625 - $library = $this->load_chart_type( $chart->ID );
626 - if ( is_null( $library ) ) {
627 - continue;
628 - }
629 - wp_enqueue_script(
630 - "visualizer-render-$library",
631 - VISUALIZER_ABSURL . 'js/render-facade.js',
632 - apply_filters( 'visualizer_assets_render', array( 'visualizer-library', 'visualizer-customization' ), true ),
633 - Visualizer_Plugin::VERSION,
634 - true
635 - );
636 - }
284 + ), Visualizer_Plugin::VERSION, true );
637 285 }
638 286 }
639 287
640 288 /**
@@ -661,223 +309,49 @@
661 309 *
662 310 * @access public
663 311 */
664 312 public function registerAdminMenu() {
665 - $svg_base64_icon = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNzdweCIgaGVpZ2h0PSI3N3B4IiB2aWV3Qm94PSIwIDAgNzcgNzciIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDUyLjYgKDY3NDkxKSAtIGh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaCAtLT4KICAgIDx0aXRsZT5Db21iaW5lZCBTaGFwZTwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxnIGlkPSJQcm9kdWN0LVBhZ2UiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSJXb3JkUHJlc3MtcGx1Z2lucyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTE5MC4wMDAwMDAsIC00MzUuMDAwMDAwKSIgZmlsbD0iIzM5QzNEMiI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMjguNSw1MTIgQzIwNy4yMzcwMzcsNTEyIDE5MCw0OTQuNzYyOTYzIDE5MCw0NzMuNSBDMTkwLDQ1Mi4yMzcwMzcgMjA3LjIzNzAzNyw0MzUgMjI4LjUsNDM1IEMyNDkuNzYyOTYzLDQzNSAyNjcsNDUyLjIzNzAzNyAyNjcsNDczLjUgQzI2Nyw0OTQuNzYyOTYzIDI0OS43NjI5NjMsNTEyIDIyOC41LDUxMiBaIE0yNDYuODQzNzUsNDgzLjU5MjA1OSBMMjE1LjYyNSw0ODMuNTkyMDU5IEwyMTUuNjI1LDQ2MC44MjY1NDQgQzIxNS42MjUsNDYwLjE2NDU0NyAyMTUuMTA3NTc4LDQ1OS42MjgzNTkgMjE0LjQ2ODc1LDQ1OS42MjgzNTkgTDIxMi4xNTYyNSw0NTkuNjI4MzU5IEMyMTEuNTE3NDIyLDQ1OS42MjgzNTkgMjExLDQ2MC4xNjQ1NDcgMjExLDQ2MC44MjY1NDQgTDIxMSw0ODUuOTg4NDI5IEMyMTEsNDg3LjMxMTY3NCAyMTIuMDM1NTY2LDQ4OC4zODQ3OTggMjEzLjMxMjUsNDg4LjM4NDc5OCBMMjQ2Ljg0Mzc1LDQ4OC4zODQ3OTggQzI0Ny40ODI1NzgsNDg4LjM4NDc5OCAyNDgsNDg3Ljg0ODYxMSAyNDgsNDg3LjE4NjYxMyBMMjQ4LDQ4NC43OTAyNDQgQzI0OCw0ODQuMTI4MjQ2IDI0Ny40ODI1NzgsNDgzLjU5MjA1OSAyNDYuODQzNzUsNDgzLjU5MjA1OSBaIE0yNDQuNTMxMjUsNDYyLjAyNDcyOSBMMjM1Ljk5OTU3LDQ2Mi4wMjQ3MjkgQzIzNC40NTQ1MzEsNDYyLjAyNDcyOSAyMzMuNjgwNTY2LDQ2My45NjA1NDcgMjM0Ljc3MzIyMyw0NjUuMDkyODMyIEwyMzcuMTE0NjI5LDQ2Ny41MTkxNTYgTDIzMS44MTI1LDQ3My4wMTQzMzIgTDIyNi41MTAzNzEsNDY3LjUxOTkwNSBDMjI1LjYwNzA1MSw0NjYuNTgzODIzIDIyNC4xNDI5NDksNDY2LjU4MzgyMyAyMjMuMjQwMzUyLDQ2Ny41MTk5MDUgTDIxOC4yNzY0MjYsNDcyLjY2Mzg2MyBDMjE3LjgyNDc2Niw0NzMuMTMxOTA0IDIxNy44MjQ3NjYsNDczLjg5MDUwNSAyMTguMjc2NDI2LDQ3NC4zNTg1NDYgTDIxOS45MTEwNzQsNDc2LjA1MjQ4IEMyMjAuMzYyNzM0LDQ3Ni41MjA1MjEgMjIxLjA5NDc4NSw0NzYuNTIwNTIxIDIyMS41NDY0NDUsNDc2LjA1MjQ4IEwyMjQuODc1LDQ3Mi42MDI0NTYgTDIzMC4xNzcxMjksNDc4LjA5Njg4MyBDMjMxLjA4MDQ0OSw0NzkuMDMyOTY1IDIzMi41NDQ1NTEsNDc5LjAzMjk2NSAyMzMuNDQ3MTQ4LDQ3OC4wOTY4ODMgTDI0MC4zODQ2NDgsNDcwLjkwNzc3MyBMMjQyLjcyNjA1NSw0NzMuMzM0MDk4IEMyNDMuODE4NzExLDQ3NC40NjYzODIgMjQ1LjY4Njc3Nyw0NzMuNjY0MzQ3IDI0NS42ODY3NzcsNDcyLjA2MzI3MyBMMjQ1LjY4Njc3Nyw0NjMuMjIyOTE0IEMyNDUuNjg3NSw0NjIuNTYwOTE3IDI0NS4xNzAwNzgsNDYyLjAyNDcyOSAyNDQuNTMxMjUsNDYyLjAyNDcyOSBaIiBpZD0iQ29tYmluZWQtU2hhcGUiPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==';
666 -
667 - $this->_libraryPage = add_menu_page( __( 'Visualizer', 'visualizer' ), __( 'Visualizer', 'visualizer' ), 'edit_posts', Visualizer_Plugin::NAME, array( $this, 'renderLibraryPage' ), $svg_base64_icon, 99.7666 );
668 -
669 - add_submenu_page(
670 - Visualizer_Plugin::NAME,
671 - __( 'Chart Library', 'visualizer' ),
672 - __( 'Chart Library', 'visualizer' ),
673 - 'edit_posts',
674 - admin_url( 'admin.php?page=' . Visualizer_Plugin::NAME )
675 - );
676 - add_submenu_page(
677 - Visualizer_Plugin::NAME,
678 - __( 'Add New Chart', 'visualizer' ),
679 - __( 'Add New Chart', 'visualizer' ),
680 - 'edit_posts',
681 - admin_url( 'admin.php?page=' . Visualizer_Plugin::NAME . '&vaction=addnew' )
682 - );
683 - add_submenu_page(
684 - Visualizer_Plugin::NAME,
685 - __( 'Support', 'visualizer' ),
686 - __( 'Support', 'visualizer' ) . '<span class="dashicons dashicons-editor-help more-features-icon" style="width: 17px; height: 17px; margin-left: 4px; color: #ffca54; font-size: 17px; vertical-align: -3px;"></span>',
687 - 'edit_posts',
688 - 'viz-support',
689 - array( $this, 'renderSupportPage' )
690 - );
691 -
692 - remove_submenu_page( Visualizer_Plugin::NAME, Visualizer_Plugin::NAME );
693 -
694 - add_action( "load-{$this->_libraryPage}", array( $this, 'addScreenOptions' ) );
695 - add_action( 'admin_footer', array( $this, 'handleGetProSubMenu' ) );
313 + $title = esc_html__( 'Visualizer Library', 'visualizer' );
314 + $callback = array( $this, 'renderLibraryPage' );
315 + $this->_libraryPage = add_submenu_page( 'upload.php', $title, $title, 'edit_posts', Visualizer_Plugin::NAME, $callback );
696 316 }
697 317
698 318 /**
699 - * Handle get pro plugin submenu.
319 + * Renders visualizer library page.
320 + *
321 + * @since 1.0.0
322 + *
323 + * @access public
700 324 */
701 - public function handleGetProSubMenu() {
702 - if ( ! Visualizer_Module::is_pro() ) {
703 - ?>
704 - <style type="text/css">
705 - #toplevel_page_visualizer ul.wp-submenu li:last-child {
706 - background: #FF7E65;
707 - font-size: 14px;
708 - font-weight: 600;
709 - color: #fff;
710 - }
711 - #toplevel_page_visualizer ul.wp-submenu li:last-child > a {
712 - color: #fff !important;
713 - }
714 - #toplevel_page_visualizer ul.wp-submenu li:last-child > a:hover {
715 - box-shadow: inherit;
716 - }
717 - </style>
718 - <?php
719 - if ( get_option( 'visualizer_fresh_install', false ) ) {
720 - ?>
721 - <style type="text/css">
722 - #toplevel_page_visualizer ul.wp-submenu li.wp-first-item + li + li + li {
723 - display: none;
724 - }
725 - </style>
726 - <?php
727 - }
728 - }
729 - }
730 -
731 - /**
732 - * Adds the screen options for pagination.
733 - */
734 - function addScreenOptions() {
735 - $screen = get_current_screen();
736 -
737 - // bail if it's some other page.
738 - if ( ! is_object( $screen ) || $screen->id !== $this->_libraryPage ) {
739 - return;
740 - }
741 -
742 - $args = array(
743 - 'label' => __( 'Number of charts per page:', 'visualizer' ),
744 - 'default' => 6,
745 - 'option' => 'visualizer_library_per_page',
746 - );
747 - add_screen_option( 'per_page', $args );
748 - }
749 -
750 - /**
751 - * Returns the screen option for pagination.
752 - */
753 - function setScreenOptions( $status, $option, $value ) {
754 - if ( 'visualizer_library_per_page' === $option ) {
755 - return $value;
756 - }
757 - }
758 -
759 - /**
760 - * Adds the display filters to be used in the meta_query while displaying the charts.
761 - */
762 - private function getDisplayFilters( &$query_args ) {
763 - $query = array();
764 - global $sitepress;
765 - if ( Visualizer_Module::is_pro() && ( function_exists( 'icl_get_languages' ) && $sitepress instanceof \SitePress ) ) {
766 - $current_lang = icl_get_current_language();
767 - if ( in_array( $current_lang, array( 'all', icl_get_default_language() ), true ) ) {
768 - $query[] = array(
769 - 'key' => 'chart_lang',
770 - 'compare' => 'NOT EXISTS',
771 - );
772 - } else {
773 - $query[] = array(
774 - 'key' => 'chart_lang',
775 - 'value' => $current_lang,
776 - 'compare' => '=',
777 - );
778 - }
779 - }
780 -
781 - // add chart type filter to the query arguments
782 - $type = filter_input( INPUT_GET, 'type' );
783 - if ( $type && in_array( $type, Visualizer_Plugin::getChartTypes(), true ) ) {
784 - $query[] = array(
785 - 'key' => Visualizer_Plugin::CF_CHART_TYPE,
786 - 'value' => $type,
787 - 'compare' => '=',
788 - );
789 - }
790 -
791 - // add chart library filter to the query arguments
792 - $library = filter_input( INPUT_GET, 'library' );
793 - if ( $library ) {
794 - $query[] = array(
795 - 'key' => Visualizer_Plugin::CF_CHART_LIBRARY,
796 - 'value' => $library,
797 - 'compare' => '=',
798 - );
799 - }
800 -
801 - // add date filter to the query arguments
802 - $date = filter_input( INPUT_GET, 'date' );
803 - $possible = array_keys( Visualizer_Plugin::getSupportedDateFilter() );
804 - if ( $date && in_array( $date, $possible, true ) ) {
805 - $query_args['date_query'] = array(
806 - 'after' => "$date -1 day",
807 - 'inclusive' => true,
808 - );
809 - }
810 -
811 - // add source filter to the query arguments
812 - $source = filter_input( INPUT_GET, 'source' );
813 - if ( $source ) {
814 - $source = ucwords( $source );
815 - $source = "Visualizer_Source_{$source}";
816 - $query[] = array(
817 - 'key' => Visualizer_Plugin::CF_SOURCE,
818 - 'value' => $source,
819 - 'compare' => '=',
820 - );
821 - }
822 -
823 - $query_args['meta_query'] = $query;
824 -
825 - $orderby = filter_input( INPUT_GET, 'orderby' );
826 - $order = filter_input( INPUT_GET, 'order' );
827 - if ( $orderby ) {
828 - $query_args['order_by'] = $orderby;
829 - }
830 - $query_args['order'] = empty( $order ) ? 'desc' : $order;
831 - }
832 -
833 - /**
834 - * Get the instance of WP_Query that fetches the charts as per the given criteria.
835 - */
836 - private function getQuery() {
837 - static $q;
838 - if ( ! is_null( $q ) ) {
839 - return $q;
840 - }
841 -
325 + public function renderLibraryPage() {
842 326 // get current page
843 - $page = filter_input(
844 - INPUT_GET,
845 - 'vpage',
846 - FILTER_VALIDATE_INT,
847 - array(
848 - 'options' => array(
849 - 'min_range' => 1,
850 - 'default' => 1,
851 - ),
852 - )
853 - );
854 -
855 - $per_page = 6;
856 - $screen = get_current_screen();
857 - if ( $screen ) {
858 - // retrieve the per_page option
859 - $screen_option = $screen->get_option( 'per_page', 'option' );
860 - // retrieve the value stored for the current user
861 - $user = get_current_user_id();
862 - $per_page = get_user_meta( $user, $screen_option, true );
863 - if ( empty( $per_page ) || $per_page < 1 ) {
864 - // nothing set, get the default value
865 - $per_page = $screen->get_option( 'per_page', 'default' );
866 - }
867 - }
868 -
327 + $page = filter_input( INPUT_GET, 'vpage', FILTER_VALIDATE_INT, array(
328 + 'options' => array(
329 + 'min_range' => 1,
330 + 'default' => 1,
331 + ),
332 + ) );
869 333 // the initial query arguments to fetch charts
870 334 $query_args = array(
871 335 'post_type' => Visualizer_Plugin::CPT_VISUALIZER,
872 - 'posts_per_page' => $per_page,
336 + 'posts_per_page' => 6,
873 337 'paged' => $page,
874 338 );
875 -
876 - $this->getDisplayFilters( $query_args );
877 -
339 + // add chart type filter to the query arguments
340 + $filter = filter_input( INPUT_GET, 'type' );
341 + if ( $filter && in_array( $filter, Visualizer_Plugin::getChartTypes() ) ) {
342 + $query_args['meta_query'] = array(
343 + array(
344 + 'key' => Visualizer_Plugin::CF_CHART_TYPE,
345 + 'value' => $filter,
346 + 'compare' => '=',
347 + ),
348 + );
349 + } else {
350 + $filter = 'all';
351 + }
878 352 // Added by Ash/Upwork
879 - $filterByMeta = ! empty( $_GET['s'] ) ? sanitize_text_field( wp_unslash( $_GET['s'] ) ) : null; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
353 + $filterByMeta = filter_input( INPUT_GET, 's', FILTER_SANITIZE_STRING );
880 354 if ( $filterByMeta ) {
881 355 $query = array(
882 356 'key' => Visualizer_Plugin::CF_SETTINGS,
883 357 'value' => $filterByMeta,
@@ -886,174 +360,62 @@
886 360 $meta = isset( $query_args['meta_query'] ) ? $query_args['meta_query'] : array();
887 361 $meta[] = $query;
888 362 $query_args['meta_query'] = $meta;
889 363 }
890 - $q = new WP_Query( apply_filters( 'visualizer_query_args', $query_args ) );
891 - return $q;
892 - }
893 -
894 - /**
895 - * Renders support page.
896 - *
897 - * @since 3.3.0
898 - *
899 - * @access public
900 - */
901 - public function renderSupportPage() {
902 - wp_enqueue_style( 'visualizer-upsell', VISUALIZER_ABSURL . 'css/upsell.css', array(), Visualizer_Plugin::VERSION );
903 - include_once VISUALIZER_ABSPATH . '/templates/support.php';
904 - }
905 -
906 - /**
907 - * Renders visualizer library page.
908 - *
909 - * @since 1.0.0
910 - *
911 - * @access public
912 - */
913 - public function renderLibraryPage() {
364 + // Added by Ash/Upwork
365 + // fetch charts
914 366 $charts = array();
915 - $query = $this->getQuery();
916 -
917 - // get current page
918 - $page = filter_input(
919 - INPUT_GET,
920 - 'vpage',
921 - FILTER_VALIDATE_INT,
922 - array(
923 - 'options' => array(
924 - 'min_range' => 1,
925 - 'default' => 1,
926 - ),
927 - )
928 - );
929 - // add chart type filter to the query arguments
930 - $filter = filter_input( INPUT_GET, 'type' );
931 - if ( ! ( $filter && in_array( $filter, Visualizer_Plugin::getChartTypes(), true ) ) ) {
932 - $filter = 'all';
933 - }
934 -
935 - $css = '';
367 + $query = new WP_Query( $query_args );
936 368 while ( $query->have_posts() ) {
937 369 $chart = $query->next_post();
938 -
939 - // 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.
940 - $chart = $this->handleExistingRevisions( $chart->ID, $chart );
941 - // refresh a "live" db query chart.
942 - $chart = apply_filters( 'visualizer_schedule_refresh_chart', $chart, $chart->ID, false );
943 -
944 - $type = get_post_meta( $chart->ID, Visualizer_Plugin::CF_CHART_TYPE, true );
945 -
946 370 // fetch and update settings
947 371 $settings = get_post_meta( $chart->ID, Visualizer_Plugin::CF_SETTINGS, true );
948 -
949 - $settings = apply_filters( Visualizer_Plugin::FILTER_GET_CHART_SETTINGS, $settings, $chart->ID, $type );
950 - if ( ! empty( $atts['settings'] ) ) {
951 - $settings = apply_filters( $atts['settings'], $settings, $chart->ID, $type );
952 - }
953 -
954 - if ( $settings ) {
955 - unset( $settings['height'], $settings['width'], $settings['chartArea'] );
956 - }
957 -
372 + unset( $settings['height'], $settings['width'] );
373 + $type = get_post_meta( $chart->ID, Visualizer_Plugin::CF_CHART_TYPE, true );
958 374 $series = apply_filters( Visualizer_Plugin::FILTER_GET_CHART_SERIES, get_post_meta( $chart->ID, Visualizer_Plugin::CF_SERIES, true ), $chart->ID, $type );
959 - $data = self::get_chart_data( $chart, $type );
960 -
961 - // Set default setting series when add manual chart data - Only during first creation.
962 - if ( isset( $settings['series'] ) && ! empty( $series ) ) {
963 - $count_series = count( $series ) - count( $settings['series'] );
964 - if ( $count_series > 1 ) {
965 - $clone_last_series = end( $settings['series'] );
966 - $clone_last_series = array_fill_keys( array_keys( $clone_last_series ), '' );
967 - foreach ( range( 1, $count_series ) as $item ) {
968 - $settings['series'][] = $clone_last_series;
969 - }
970 - }
971 - }
972 -
973 - $library = $this->load_chart_type( $chart->ID );
974 -
975 - $id = 'visualizer-' . $chart->ID;
976 - $arguments = $this->get_inline_custom_css( $id, $settings );
977 - if ( ! empty( $arguments ) ) {
978 - $css .= $arguments[0];
979 - $settings = $arguments[1];
980 - }
981 -
982 - if ( isset( $settings['controls']['ui']['labelStacking'] ) ) {
983 - unset( $settings['controls']['ui']['labelStacking'] );
984 - }
985 - if ( isset( $settings['controls']['ui']['orientation'] ) ) {
986 - unset( $settings['controls']['ui']['orientation'] );
987 - }
988 -
375 + $data = apply_filters( Visualizer_Plugin::FILTER_GET_CHART_DATA, unserialize( $chart->post_content ), $chart->ID, $type );
989 376 // add chart to the array
990 - $charts[ $id ] = array(
377 + $charts[ 'visualizer-' . $chart->ID ] = array(
991 378 'id' => $chart->ID,
992 379 'type' => $type,
993 380 'series' => $series,
994 381 'settings' => $settings,
995 382 'data' => $data,
996 - 'library' => $library,
997 383 );
998 384 }
999 385 // enqueue charts array
1000 386 $ajaxurl = admin_url( 'admin-ajax.php' );
1001 - wp_localize_script(
1002 - 'visualizer-library',
1003 - 'visualizer',
1004 - array(
1005 - 'language' => $this->get_language(),
1006 - 'map_api_key' => get_option( 'visualizer-map-api-key' ),
1007 - 'charts' => $charts,
1008 - 'urls' => array(
1009 - 'base' => esc_url( add_query_arg( array( 'vpage' => false, 'vaction' => false ) ) ),
1010 - 'create' => esc_url(
1011 - add_query_arg(
1012 - array(
1013 - 'action' => Visualizer_Plugin::ACTION_CREATE_CHART,
1014 - 'library' => 'yes',
1015 - 'type' => isset( $_GET['type'] ) ? $_GET['type'] : '',
1016 - 'chart-library' => isset( $_GET['chart-library'] ) ? $_GET['chart-library'] : '',
1017 - 'vaction' => false,
1018 - ),
1019 - $ajaxurl
1020 - )
1021 - ),
1022 - 'edit' => esc_url(
1023 - add_query_arg(
1024 - array(
1025 - 'action' => Visualizer_Plugin::ACTION_EDIT_CHART,
1026 - 'library' => 'yes',
1027 - 'vaction' => false,
1028 - ),
1029 - $ajaxurl
1030 - )
1031 - ),
1032 - ),
1033 - 'page_type' => 'library',
1034 - 'is_front' => false,
1035 - 'i10n' => array(
1036 - 'copied' => __( 'The shortcode has been copied to your clipboard. Hit Ctrl-V/Cmd-V to paste it.', 'visualizer' ),
1037 - 'conflict' => __( 'We have detected a potential conflict with another component that prevents Visualizer from functioning properly. Please disable any of the following components if they are activated on your instance: Modern Events Calendar plugin, Acronix plugin. In case the aforementioned components are not activated or you continue to see this error message, please disable all other plugins and enable them one by one to find out the component that is causing the conflict.', 'visualizer' ),
1038 - ),
1039 - )
1040 - );
387 + wp_localize_script( 'visualizer-library', 'visualizer', array(
388 + 'charts' => $charts,
389 + 'urls' => array(
390 + 'base' => add_query_arg( 'vpage', false ),
391 + 'create' => add_query_arg( array(
392 + 'action' => Visualizer_Plugin::ACTION_CREATE_CHART,
393 + 'library' => 'yes',
394 + ), $ajaxurl ),
395 + 'edit' => add_query_arg( array(
396 + 'action' => Visualizer_Plugin::ACTION_EDIT_CHART,
397 + 'library' => 'yes',
398 + ), $ajaxurl ),
399 + 'logger' => add_query_arg( array(
400 + 'action' => Visualizer_Plugin::ACTION_TRACK,
401 + 'library' => 'yes',
402 + 'nonce' => wp_create_nonce( Visualizer_Plugin::ACTION_TRACK ),
403 + ), $ajaxurl ),
404 + ),
405 + ) );
1041 406 // render library page
1042 407 $render = new Visualizer_Render_Library();
1043 408 $render->charts = $charts;
1044 409 $render->type = $filter;
1045 - $render->types = self::_getChartTypesLocalized( false, false, false, true );
1046 - $render->custom_css = $css;
1047 - $render->pagination = paginate_links(
1048 - array(
1049 - 'base' => add_query_arg( array( 'vpage' => '%#%', 'vaction' => false ) ),
1050 - 'format' => '',
1051 - 'current' => $page,
1052 - 'total' => $query->max_num_pages,
1053 - 'type' => 'array',
1054 - )
1055 - );
410 + $render->types = self::_getChartTypesLocalized();
411 + $render->pagination = paginate_links( array(
412 + 'base' => add_query_arg( 'vpage', '%#%' ),
413 + 'format' => '',
414 + 'current' => $page,
415 + 'total' => $query->max_num_pages,
416 + 'type' => 'array',
417 + ) );
1056 418 $render->render();
1057 419 }
1058 420
1059 421 /**
@@ -1068,14 +430,14 @@
1068 430 *
1069 431 * @return array Updated array of action links.
1070 432 */
1071 433 public function getPluginActionLinks( $links, $file ) {
1072 - if ( $file === plugin_basename( VISUALIZER_BASEFILE ) ) {
434 + if ( $file == plugin_basename( VISUALIZER_BASEFILE ) ) {
1073 435 array_unshift(
1074 436 $links,
1075 437 sprintf(
1076 438 '<a href="%s">%s</a>',
1077 - admin_url( 'admin.php?page=' . Visualizer_Plugin::NAME ),
439 + admin_url( 'upload.php?page=' . Visualizer_Plugin::NAME ),
1078 440 esc_html__( 'Library', 'visualizer' )
1079 441 )
1080 442 );
1081 443 }
@@ -1095,17 +457,17 @@
1095 457 *
1096 458 * @return array Updated array of plugin meta links.
1097 459 */
1098 460 public function getPluginMetaLinks( $plugin_meta, $plugin_file ) {
1099 - if ( $plugin_file === plugin_basename( VISUALIZER_BASEFILE ) ) {
461 + if ( $plugin_file == plugin_basename( VISUALIZER_BASEFILE ) ) {
1100 462 // knowledge base link
1101 463 $plugin_meta[] = sprintf(
1102 - '<a href="' . VISUALIZER_MAIN_DOC . '" target="_blank">%s</a>',
1103 - esc_html__( 'Docs', 'visualizer' )
464 + '<a href="https://github.com/codeinwp/visualizer/wiki" target="_blank">%s</a>',
465 + esc_html__( 'Knowledge Base', 'visualizer' )
1104 466 );
1105 467 // flattr link
1106 468 $plugin_meta[] = sprintf(
1107 - '<a style="color:red" href="' . tsdk_utmify( Visualizer_Plugin::PRO_TEASER_URL, 'pluginrow' ) . '" target="_blank">%s</a>',
469 + '<a style="color:red" href="https://themeisle.com/plugins/visualizer-charts-and-graphs-pro-addon/" target="_blank">%s</a>',
1108 470 esc_html__( 'Pro Addon', 'visualizer' )
1109 471 );
1110 472 }
1111 473
@@ -1111,75 +473,5 @@
1111 473
1112 474 return $plugin_meta;
1113 475 }
1114 476
1115 - /**
1116 - * If check is existing user.
1117 - *
1118 - * @return bool Default false
1119 - */
1120 - public static function proFeaturesLocked() {
1121 - if ( Visualizer_Module::is_pro() ) {
1122 - return true;
1123 - }
1124 - return 'yes' === get_option( 'visualizer-new-user', 'yes' ) ? false : true;
1125 - }
1126 -
1127 - /**
1128 - * Multilingual Support.
1129 - *
1130 - * @param int $chart_id Chart ID.
1131 - * @return bool Default false
1132 - */
1133 - public function addMultilingualSupport( $chart_id ) {
1134 - global $sitepress;
1135 - if ( Visualizer_Module::is_pro() ) {
1136 - return;
1137 - }
1138 - if ( function_exists( 'icl_get_languages' ) && $sitepress instanceof \SitePress ) {
1139 - $language = icl_get_languages();
1140 - $current_lang = icl_get_current_language();
1141 - $default_lang = icl_get_default_language();
1142 - $post_info = wpml_get_language_information( null, $chart_id );
1143 - $translations = array();
1144 - if ( ! empty( $post_info ) && ( $default_lang === $post_info['language_code'] ) ) {
1145 - $trid = $sitepress->get_element_trid( $chart_id, 'post_' . Visualizer_Plugin::CPT_VISUALIZER );
1146 - $translations = $sitepress->get_element_translations( $trid );
1147 - }
1148 - if ( empty( $translations ) ) {
1149 - return;
1150 - }
1151 - ?>
1152 - <hr><div class="visualizer-languages-list only-pro">
1153 - <?php
1154 - foreach ( $language as $lang ) {
1155 - $lang_code = $lang['code'];
1156 - if ( $current_lang !== $lang_code ) {
1157 - ?>
1158 - <a href="javascript:;">
1159 - <img src="<?php echo esc_url( $lang['country_flag_url'] ); ?>" alt="<?php echo esc_attr( $lang['translated_name'] ); ?>">
1160 - </a>
1161 - <?php
1162 - }
1163 - }
1164 - ?>
1165 - <a href="<?php echo tsdk_utmify( Visualizer_Plugin::PRO_TEASER_URL, 'wpml-support', 'visualizer_render_char' ); ?>"target="_blank"><?php esc_html_e( 'Upgrade to PRO to active this translation for charts', 'visualizer' ); ?></a>
1166 - </div>
1167 - <?php
1168 - }
1169 - }
1170 -
1171 - /**
1172 - * Check chart is enabled or not.
1173 - *
1174 - * @param string $type Chart ID.
1175 - *
1176 - * @return bool Default false
1177 - */
1178 - public static function checkChartStatus( $type ) {
1179 - $types = self::_getChartTypesLocalized( false, false, false, true );
1180 - if ( isset( $types[ $type ] ) ) {
1181 - return ! empty( $types[ $type ]['enabled'] );
1182 - }
1183 - return false;
1184 - }
1185 477 }