PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.0.4
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.0.4
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
visualizer / classes / Visualizer / Module / Admin.php

Admin.php in Visualizer – Tables & Charts Manager with Built-in AI Generator 3.0.4, at classes/Visualizer/Module/Admin.php

484 lines 15.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 // +----------------------------------------------------------------------+
3 // | Copyright 2013 Madpixels (email : visualizer@madpixels.net) |
4 // +----------------------------------------------------------------------+
5 // | This program is free software; you can redistribute it and/or modify |
6 // | it under the terms of the GNU General Public License, version 2, as |
7 // | published by the Free Software Foundation. |
8 // | |
9 // | This program is distributed in the hope that it will be useful, |
10 // | but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 // | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 // | GNU General Public License for more details. |
13 // | |
14 // | You should have received a copy of the GNU General Public License |
15 // | along with this program; if not, write to the Free Software |
16 // | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, |
17 // | MA 02110-1301 USA |
18 // +----------------------------------------------------------------------+
19 // | Author: Eugene Manuilov <eugene@manuilov.org> |
20 // +----------------------------------------------------------------------+
21 /**
22 * The module for all admin stuff.
23 *
24 * @category Visualizer
25 * @package Module
26 *
27 * @since 1.0.0
28 */
29 class Visualizer_Module_Admin extends Visualizer_Module {
30
31 const NAME = __CLASS__;
32
33 /**
34 * Library page suffix.
35 *
36 * @since 1.0.0
37 *
38 * @access private
39 * @var string
40 */
41 private $_libraryPage;
42
43 /**
44 * Constructor.
45 *
46 * @since 1.0.0
47 *
48 * @access public
49 *
50 * @param Visualizer_Plugin $plugin The instance of the plugin.
51 */
52 public function __construct( Visualizer_Plugin $plugin ) {
53 parent::__construct( $plugin );
54 $this->_addAction( 'load-post.php', 'enqueueMediaScripts' );
55 $this->_addAction( 'load-post-new.php', 'enqueueMediaScripts' );
56 $this->_addAction( 'admin_footer', 'renderTempaltes' );
57 $this->_addAction( 'admin_enqueue_scripts', 'enqueueLibraryScripts', null, 8 );
58 $this->_addAction( 'admin_menu', 'registerAdminMenu' );
59 $this->_addFilter( 'media_view_strings', 'setupMediaViewStrings' );
60 $this->_addFilter( 'plugin_action_links', 'getPluginActionLinks', 10, 2 );
61 $this->_addFilter( 'visualizer_logger_data', 'getLoggerData' );
62 $this->_addFilter( 'visualizer_get_chart_counts', 'getChartCountsByTypeAndMeta' );
63 $this->_addFilter( 'visualizer_feedback_review_trigger', 'feedbackReviewTrigger' );
64 }
65
66 /**
67 * Whether to show the feedback review or not.
68 *
69 * @access public
70 */
71 public function feedbackReviewTrigger( $dumb ) {
72 $query = new WP_Query(
73 array(
74 'posts_per_page' => 50,
75 'post_type' => Visualizer_Plugin::CPT_VISUALIZER,
76 'fields' => 'ids',
77 'update_post_meta_cache' => false,
78 'update_post_term_cache' => false,
79 )
80 );
81
82 if ( $query->have_posts() && $query->post_count > 0 ) {
83 return true;
84 }
85 return false;
86 }
87
88 /**
89 * Enqueues media scripts and styles.
90 *
91 * @since 1.0.0
92 * @uses wp_enqueue_style To enqueue style file.
93 * @uses wp_enqueue_script To enqueue script file.
94 *
95 * @access public
96 */
97 public function enqueueMediaScripts() {
98 global $typenow;
99 if ( post_type_supports( $typenow, 'editor' ) ) {
100 wp_enqueue_style( 'visualizer-media', VISUALIZER_ABSURL . 'css/media.css', array( 'media-views' ), Visualizer_Plugin::VERSION );
101 wp_enqueue_script( 'visualizer-google-jsapi-new', '//www.gstatic.com/charts/loader.js', array( 'media-editor' ), null, true );
102 wp_enqueue_script( 'visualizer-google-jsapi-old', '//www.google.com/jsapi', array( 'visualizer-google-jsapi-new' ), null, true );
103 wp_enqueue_script( 'visualizer-media-model', VISUALIZER_ABSURL . 'js/media/model.js', array( 'visualizer-google-jsapi-old' ), Visualizer_Plugin::VERSION, true );
104 wp_enqueue_script( 'visualizer-media-collection', VISUALIZER_ABSURL . 'js/media/collection.js', array( 'visualizer-media-model' ), Visualizer_Plugin::VERSION, true );
105 wp_enqueue_script( 'visualizer-media-controller', VISUALIZER_ABSURL . 'js/media/controller.js', array( 'visualizer-media-collection' ), Visualizer_Plugin::VERSION, true );
106 wp_enqueue_script( 'visualizer-media-view', VISUALIZER_ABSURL . 'js/media/view.js', array( 'visualizer-media-controller' ), Visualizer_Plugin::VERSION, true );
107 wp_enqueue_script( 'visualizer-media-toolbar', VISUALIZER_ABSURL . 'js/media/toolbar.js', array( 'visualizer-media-view' ), Visualizer_Plugin::VERSION, true );
108 wp_enqueue_script( 'visualizer-media', VISUALIZER_ABSURL . 'js/media.js', array( 'visualizer-media-toolbar' ), Visualizer_Plugin::VERSION, true );
109 }
110 }
111
112 /**
113 * Extends media view strings with visualizer strings.
114 *
115 * @since 1.0.0
116 *
117 * @access public
118 *
119 * @param array $strings The array of media view strings.
120 *
121 * @return array The extended array of media view strings.
122 */
123 public function setupMediaViewStrings( $strings ) {
124 $strings['visualizer'] = array(
125 'actions' => array(
126 'get_charts' => Visualizer_Plugin::ACTION_GET_CHARTS,
127 'delete_chart' => Visualizer_Plugin::ACTION_DELETE_CHART,
128 ),
129 'controller' => array(
130 'title' => esc_html__( 'Visualizations', 'visualizer' ),
131 ),
132 'routers' => array(
133 'library' => esc_html__( 'From Library', 'visualizer' ),
134 'create' => esc_html__( 'Create New', 'visualizer' ),
135 ),
136 'library' => array(
137 'filters' => self::_getChartTypesLocalized( true, true ),
138 'types' => array_keys( self::_getChartTypesLocalized( true, true ) ),
139 ),
140 'nonce' => wp_create_nonce(),
141 'buildurl' => add_query_arg( 'action', Visualizer_Plugin::ACTION_CREATE_CHART, admin_url( 'admin-ajax.php' ) ),
142 );
143
144 return $strings;
145 }
146
147 /**
148 * Returns associated array of chart types and localized names.
149 *
150 * @since 1.0.0
151 *
152 * @static
153 * @access private
154 * @return array The associated array of chart types with localized names.
155 */
156 public static function _getChartTypesLocalized( $enabledOnly = false, $get2Darray = false ) {
157 $types = array(
158 'pie' => array(
159 'name' => esc_html__( 'Pie', 'visualizer' ),
160 'enabled' => true,
161 ),
162 'line' => array(
163 'name' => esc_html__( 'Line', 'visualizer' ),
164 'enabled' => true,
165 ),
166 'area' => array(
167 'name' => esc_html__( 'Area', 'visualizer' ),
168 'enabled' => true,
169 ),
170 'geo' => array(
171 'name' => esc_html__( 'Geo', 'visualizer' ),
172 'enabled' => true,
173 ),
174 'bar' => array(
175 'name' => esc_html__( 'Bar', 'visualizer' ),
176 'enabled' => true,
177 ),
178 'column' => array(
179 'name' => esc_html__( 'Column', 'visualizer' ),
180 'enabled' => true,
181 ),
182 'gauge' => array(
183 'name' => esc_html__( 'Gauge', 'visualizer' ),
184 'enabled' => true,
185 ),
186 'scatter' => array(
187 'name' => esc_html__( 'Scatter', 'visualizer' ),
188 'enabled' => true,
189 ),
190 'candlestick' => array(
191 'name' => esc_html__( 'Candlestick', 'visualizer' ),
192 'enabled' => true,
193 ),
194 // pro types
195 'table' => array(
196 'name' => esc_html__( 'Table', 'visualizer' ),
197 'enabled' => false,
198 ),
199 'timeline' => array(
200 'name' => esc_html__( 'Timeline', 'visualizer' ),
201 'enabled' => false,
202 ),
203 'combo' => array(
204 'name' => esc_html__( 'Combo', 'visualizer' ),
205 'enabled' => false,
206 ),
207 );
208 $types = apply_filters( 'visualizer_pro_chart_types', $types );
209 if ( $enabledOnly ) {
210 $filtered = array();
211 foreach ( $types as $type => $array ) {
212 if ( ! is_array( $array ) ) {
213 // support for old pro
214 $array = array( 'enabled' => true, 'name' => $array );
215 }
216 if ( ! $array['enabled'] ) {
217 continue;
218 }
219 $filtered[ $type ] = $array;
220 }
221 $types = $filtered;
222 }
223 if ( $get2Darray ) {
224 $doubleD = array();
225 foreach ( $types as $type => $array ) {
226 if ( ! is_array( $array ) ) {
227 // support for old pro
228 $array = array( 'enabled' => true, 'name' => $array );
229 }
230 $doubleD[ $type ] = $array['name'];
231 }
232 $types = $doubleD;
233 }
234
235 return $types;
236 }
237
238 /**
239 * Renders templates to use in media popup.
240 *
241 * @since 1.0.0
242 * @global string $pagenow The name of the current page.
243 *
244 * @access public
245 */
246 public function renderTempaltes() {
247 global $pagenow;
248 if ( 'post.php' != $pagenow && 'post-new.php' != $pagenow ) {
249 return;
250 }
251 $render = new Visualizer_Render_Templates();
252 $render->render();
253 }
254
255 /**
256 * Enqueues library scripts and styles.
257 *
258 * @since 1.0.0
259 * @uses wp_enqueue_style() To enqueue library stylesheet.
260 * @uses wp_enqueue_script() To enqueue javascript file.
261 * @uses wp_enqueue_media() To enqueue media stuff.
262 *
263 * @access public
264 *
265 * @param string $suffix The current page suffix.
266 */
267 public function enqueueLibraryScripts( $suffix ) {
268 if ( $suffix == $this->_libraryPage ) {
269 wp_enqueue_style( 'visualizer-library', VISUALIZER_ABSURL . 'css/library.css', array(), Visualizer_Plugin::VERSION );
270 $this->_addFilter( 'media_upload_tabs', 'setupVisualizerTab' );
271 wp_enqueue_media();
272 wp_enqueue_script(
273 'visualizer-library', VISUALIZER_ABSURL . 'js/library.js', array(
274 'jquery',
275 'media-views',
276 ), Visualizer_Plugin::VERSION, true
277 );
278 wp_enqueue_script( 'google-jsapi-new', '//www.gstatic.com/charts/loader.js', array(), null, true );
279 wp_enqueue_script( 'google-jsapi-old', '//www.google.com/jsapi', array( 'google-jsapi-new' ), null, true );
280 wp_enqueue_script(
281 'visualizer-render', VISUALIZER_ABSURL . 'js/render.js', array(
282 'google-jsapi-old',
283 'visualizer-library',
284 ), Visualizer_Plugin::VERSION, true
285 );
286 }
287 }
288
289 /**
290 * Adds visualizer tab for media upload tabs array.
291 *
292 * @since 1.0.0
293 *
294 * @access public
295 *
296 * @param array $tabs The array of media upload tabs.
297 *
298 * @return array Extended array of media upload tabs.
299 */
300 public function setupVisualizerTab( $tabs ) {
301 $tabs['visualizer'] = 'Visualizer';
302
303 return $tabs;
304 }
305
306 /**
307 * Registers admin menu for visualizer library.
308 *
309 * @since 1.0.0
310 *
311 * @access public
312 */
313 public function registerAdminMenu() {
314 $title = esc_html__( 'Visualizer Library', 'visualizer' );
315 $callback = array( $this, 'renderLibraryPage' );
316 $this->_libraryPage = add_submenu_page( 'upload.php', $title, $title, 'edit_posts', Visualizer_Plugin::NAME, $callback );
317 }
318
319 /**
320 * Renders visualizer library page.
321 *
322 * @since 1.0.0
323 *
324 * @access public
325 */
326 public function renderLibraryPage() {
327 // get current page
328 $page = filter_input(
329 INPUT_GET, 'vpage', FILTER_VALIDATE_INT, array(
330 'options' => array(
331 'min_range' => 1,
332 'default' => 1,
333 ),
334 )
335 );
336 // the initial query arguments to fetch charts
337 $query_args = array(
338 'post_type' => Visualizer_Plugin::CPT_VISUALIZER,
339 'posts_per_page' => 6,
340 'paged' => $page,
341 );
342 // add chart type filter to the query arguments
343 $filter = filter_input( INPUT_GET, 'type' );
344 if ( $filter && in_array( $filter, Visualizer_Plugin::getChartTypes() ) ) {
345 $query_args['meta_query'] = array(
346 array(
347 'key' => Visualizer_Plugin::CF_CHART_TYPE,
348 'value' => $filter,
349 'compare' => '=',
350 ),
351 );
352 } else {
353 $filter = 'all';
354 }
355 // Added by Ash/Upwork
356 $filterByMeta = filter_input( INPUT_GET, 's', FILTER_SANITIZE_STRING );
357 if ( $filterByMeta ) {
358 $query = array(
359 'key' => Visualizer_Plugin::CF_SETTINGS,
360 'value' => $filterByMeta,
361 'compare' => 'LIKE',
362 );
363 $meta = isset( $query_args['meta_query'] ) ? $query_args['meta_query'] : array();
364 $meta[] = $query;
365 $query_args['meta_query'] = $meta;
366 }
367 // Added by Ash/Upwork
368 // fetch charts
369 $charts = array();
370 $query = new WP_Query( $query_args );
371 while ( $query->have_posts() ) {
372 $chart = $query->next_post();
373 // fetch and update settings
374 $settings = get_post_meta( $chart->ID, Visualizer_Plugin::CF_SETTINGS, true );
375 unset( $settings['height'], $settings['width'] );
376 $type = get_post_meta( $chart->ID, Visualizer_Plugin::CF_CHART_TYPE, true );
377 $series = apply_filters( Visualizer_Plugin::FILTER_GET_CHART_SERIES, get_post_meta( $chart->ID, Visualizer_Plugin::CF_SERIES, true ), $chart->ID, $type );
378 $data = apply_filters( Visualizer_Plugin::FILTER_GET_CHART_DATA, unserialize( html_entity_decode( $chart->post_content ) ), $chart->ID, $type );
379 // add chart to the array
380 $charts[ 'visualizer-' . $chart->ID ] = array(
381 'id' => $chart->ID,
382 'type' => $type,
383 'series' => $series,
384 'settings' => $settings,
385 'data' => $data,
386 );
387 }
388 // enqueue charts array
389 $ajaxurl = admin_url( 'admin-ajax.php' );
390 wp_localize_script(
391 'visualizer-library', 'visualizer', array(
392 'charts' => $charts,
393 'urls' => array(
394 'base' => add_query_arg( 'vpage', false ),
395 'create' => add_query_arg(
396 array(
397 'action' => Visualizer_Plugin::ACTION_CREATE_CHART,
398 'library' => 'yes',
399 ), $ajaxurl
400 ),
401 'edit' => add_query_arg(
402 array(
403 'action' => Visualizer_Plugin::ACTION_EDIT_CHART,
404 'library' => 'yes',
405 ), $ajaxurl
406 ),
407 ),
408 )
409 );
410 // render library page
411 $render = new Visualizer_Render_Library();
412 $render->charts = $charts;
413 $render->type = $filter;
414 $render->types = self::_getChartTypesLocalized();
415 $render->pagination = paginate_links(
416 array(
417 'base' => add_query_arg( 'vpage', '%#%' ),
418 'format' => '',
419 'current' => $page,
420 'total' => $query->max_num_pages,
421 'type' => 'array',
422 )
423 );
424 $render->render();
425 }
426
427 /**
428 * Updates the plugin's action links, which will be rendered at the plugins table.
429 *
430 * @since 1.0.0
431 *
432 * @access public
433 *
434 * @param array $links The array of original action links.
435 * @param string $file The plugin basename.
436 *
437 * @return array Updated array of action links.
438 */
439 public function getPluginActionLinks( $links, $file ) {
440 if ( $file == plugin_basename( VISUALIZER_BASEFILE ) ) {
441 array_unshift(
442 $links,
443 sprintf(
444 '<a href="%s">%s</a>',
445 admin_url( 'upload.php?page=' . Visualizer_Plugin::NAME ),
446 esc_html__( 'Library', 'visualizer' )
447 )
448 );
449 }
450
451 return $links;
452 }
453
454 /**
455 * Updates the plugin's meta links, which will be rendered at the plugins table.
456 *
457 * @since 1.0.0
458 *
459 * @access public
460 *
461 * @param array $plugin_meta The array of a plugin meta links.
462 * @param string $plugin_file The plugin's basename.
463 *
464 * @return array Updated array of plugin meta links.
465 */
466 public function getPluginMetaLinks( $plugin_meta, $plugin_file ) {
467 if ( $plugin_file == plugin_basename( VISUALIZER_BASEFILE ) ) {
468 // knowledge base link
469 $plugin_meta[] = sprintf(
470 '<a href="https://github.com/codeinwp/visualizer/wiki" target="_blank">%s</a>',
471 esc_html__( 'Knowledge Base', 'visualizer' )
472 );
473 // flattr link
474 $plugin_meta[] = sprintf(
475 '<a style="color:red" href="https://themeisle.com/plugins/visualizer-charts-and-graphs-pro-addon/" target="_blank">%s</a>',
476 esc_html__( 'Pro Addon', 'visualizer' )
477 );
478 }
479
480 return $plugin_meta;
481 }
482
483 }
484