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

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

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