PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 1.5.6
Visualizer – Tables & Charts Manager with Built-in AI Generator v1.5.6
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.6, at classes/Visualizer/Module/Admin.php

485 lines 16.9 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 // Added by Ash/Upwork for feedback
62 $this->_addAction( 'admin_init', 'visualizerInitFeedback' );
63 // Added by Ash/Upwork for feedback
64
65 $this->_addFilter( 'media_view_strings', 'setupMediaViewStrings' );
66 $this->_addFilter( 'plugin_action_links', 'getPluginActionLinks', 10, 2 );
67 $this->_addFilter( 'plugin_row_meta', 'getPluginMetaLinks', 10, 2 );
68 $this->_addFilter( 'visualizer_admin_pointers', 'visualizerAdminPointers', 10, 2 );
69 // Added by Ash/Upwork for feedback
70 $this->_addFilter( 'visualizer_feedback_enqueue', 'visualizerFeedbackEnqueue', 10, 2 );
71 $this->_addFilter( 'visualizer_feedback', 'visualizerFeedback', 10, 2 );
72 $this->_addFilter( 'visualizer_feedback_config', 'visualizerFeedbackConfig', 10, 2 );
73 $this->_addFilter( 'visualizer_feedback_action', 'visualizerFeedbackAction', 10, 2 );
74 // Added by Ash/Upwork for feedback
75 }
76
77 // Added by Ash/Upwork for feedback
78 function visualizerFeedbackConfig(){
79 return array(
80 "title" => "TITLE",
81 "description" => "Message that will ask the user for review",
82 "yes_btn_txt" => "Text to show on yes btn ",
83 "no_btn_txt" => "txt to show on no btn",
84 "yes_btn_link" => "link to redirect when click on the yes btn",
85 );
86 }
87
88 function visualizerFeedbackAction(){
89 return array("type"=>"splash","action"=>array("type"=>"click","target"=>".add-new-h2"));
90 }
91
92 function visualizerFeedback(){
93 return true;
94 }
95
96 function visualizerInitFeedback(){
97 $file = trailingslashit(VISUALIZER_ABSPATH) . "feedback/PluginFeedbackTI.php";
98 if (file_exists($file)) {
99 include_once $file;
100 new PluginFeedbackTI(Visualizer_Plugin::NAME, 1, Visualizer_Plugin::VERSION, "visualizer_feedback", "visualizer_feedback_config", "visualizer_feedback_action", "visualizer_feedback_enqueue");
101 }
102 }
103
104 function visualizerFeedbackEnqueue(){
105 wp_register_script("ti-feedback-func", VISUALIZER_ABSURL . 'js/feedback-func.js');
106 wp_enqueue_script("ti-feedback-func");
107 }
108 // Added by Ash/Upwork for feedback
109
110 /**
111 * Returns wp pointers for visualizer
112 *
113 * @since 1.5
114 *
115 * @static
116 * @access private
117 * @return array The associated array of pointer
118 */
119 function visualizerAdminPointers( $p ) {
120 $p['visualizer'] = array(
121 'target' => '#menu-media',
122 'options' => array(
123 'content' => sprintf( '<h3> %s </h3> <p> %s </p>',
124 __( 'Visualizer New Features ' , Visualizer_Plugin::NAME),
125 __( 'Right now the Visualizer Charts and Graphics plugin integrates a live editor and a new importing option for your charts. ',Visualizer_Plugin::NAME)
126 ),
127 'position' => array( 'edge' => 'top', 'align' => 'middle' )
128 )
129 );
130 return $p;
131 }
132
133 /**
134 * Returns associated array of chart types and localized names.
135 *
136 * @since 1.0.0
137 *
138 * @static
139 * @access private
140 * @return array The associated array of chart types with localized names.
141 */
142 public static function _getChartTypesLocalized() {
143 $types = array(
144 'all' => esc_html__( 'All', Visualizer_Plugin::NAME ),
145 'pie' => esc_html__( 'Pie', Visualizer_Plugin::NAME ),
146 'line' => esc_html__( 'Line', Visualizer_Plugin::NAME ),
147 'area' => esc_html__( 'Area', Visualizer_Plugin::NAME ),
148 'geo' => esc_html__( 'Geo', Visualizer_Plugin::NAME ),
149 'bar' => esc_html__( 'Bar', Visualizer_Plugin::NAME ),
150 'column' => esc_html__( 'Column', Visualizer_Plugin::NAME ),
151 'gauge' => esc_html__( 'Gauge', Visualizer_Plugin::NAME ),
152 'scatter' => esc_html__( 'Scatter', Visualizer_Plugin::NAME ),
153 'candlestick' => esc_html__( 'Candlestick', Visualizer_Plugin::NAME ),
154 );
155
156 $types = apply_filters("visualizer_pro_chart_types", $types);
157
158 return $types;
159 }
160
161 /**
162 * Enqueues media scripts and styles.
163 *
164 * @since 1.0.0
165 * @uses wp_enqueue_style To enqueue style file.
166 * @uses wp_enqueue_script To enqueue script file.
167 *
168 * @access public
169 */
170 public function enqueueMediaScripts() {
171 global $typenow;
172
173 if ( post_type_supports( $typenow, 'editor' ) ) {
174 wp_enqueue_style( 'visualizer-media', VISUALIZER_ABSURL . 'css/media.css', array( 'media-views' ), Visualizer_Plugin::VERSION );
175
176 wp_enqueue_script( 'visualizer-google-jsapi-new', '//www.gstatic.com/charts/loader.js', array( 'media-editor' ), null, true );
177 wp_enqueue_script( 'visualizer-google-jsapi-old', '//www.google.com/jsapi', array( 'visualizer-google-jsapi-new' ), null, true );
178 wp_enqueue_script( 'visualizer-media-model', VISUALIZER_ABSURL . 'js/media/model.js', array( 'visualizer-google-jsapi' ), Visualizer_Plugin::VERSION, true );
179 wp_enqueue_script( 'visualizer-media-collection', VISUALIZER_ABSURL . 'js/media/collection.js', array( 'visualizer-media-model' ), Visualizer_Plugin::VERSION, true );
180 wp_enqueue_script( 'visualizer-media-controller', VISUALIZER_ABSURL . 'js/media/controller.js', array( 'visualizer-media-collection' ), Visualizer_Plugin::VERSION, true );
181 wp_enqueue_script( 'visualizer-media-view', VISUALIZER_ABSURL . 'js/media/view.js', array( 'visualizer-media-controller' ), Visualizer_Plugin::VERSION, true );
182 wp_enqueue_script( 'visualizer-media-toolbar', VISUALIZER_ABSURL . 'js/media/toolbar.js', array( 'visualizer-media-view' ), Visualizer_Plugin::VERSION, true );
183 wp_enqueue_script( 'visualizer-media', VISUALIZER_ABSURL . 'js/media.js', array( 'visualizer-media-toolbar' ), Visualizer_Plugin::VERSION, true );
184 }
185 }
186
187 /**
188 * Extends media view strings with visualizer strings.
189 *
190 * @since 1.0.0
191 *
192 * @access public
193 * @param array $strings The array of media view strings.
194 * @return array The extended array of media view strings.
195 */
196 public function setupMediaViewStrings( $strings ) {
197 $strings['visualizer'] = array(
198 'actions' => array(
199 'get_charts' => Visualizer_Plugin::ACTION_GET_CHARTS,
200 'delete_chart' => Visualizer_Plugin::ACTION_DELETE_CHART,
201 ),
202 'controller' => array(
203 'title' => esc_html__( 'Visualizations', Visualizer_Plugin::NAME ),
204 ),
205 'routers' => array(
206 'library' => esc_html__( 'From Library', Visualizer_Plugin::NAME ),
207 'create' => esc_html__( 'Create New', Visualizer_Plugin::NAME ),
208 ),
209 'library' => array(
210 'filters' => self::_getChartTypesLocalized(),
211 ),
212 'nonce' => wp_create_nonce(),
213 'buildurl' => add_query_arg( 'action', Visualizer_Plugin::ACTION_CREATE_CHART, admin_url( 'admin-ajax.php' ) ),
214 );
215
216 return $strings;
217 }
218
219 /**
220 * Renders templates to use in media popup.
221 *
222 * @since 1.0.0
223 * @global string $pagenow The name of the current page.
224 *
225 * @access public
226 */
227 public function renderTempaltes() {
228 global $pagenow;
229
230 if ( 'post.php' != $pagenow && 'post-new.php' != $pagenow ) {
231 return;
232 }
233
234 $render = new Visualizer_Render_Templates();
235 $render->render();
236 }
237
238 /**
239 * Enqueues library scripts and styles.
240 *
241 * @since 1.0.0
242 * @uses wp_enqueue_style() To enqueue library stylesheet.
243 * @uses wp_enqueue_script() To enqueue javascript file.
244 * @uses wp_enqueue_media() To enqueue media stuff.
245 *
246 * @access public
247 * @param string $suffix The current page suffix.
248 */
249 public function enqueueLibraryScripts( $suffix ) {
250 if ( $suffix == $this->_libraryPage ) {
251 wp_enqueue_style( 'visualizer-library', VISUALIZER_ABSURL . 'css/library.css', array(), Visualizer_Plugin::VERSION );
252
253 $this->_addFilter( 'media_upload_tabs', 'setupVisualizerTab' );
254
255 wp_enqueue_media();
256 wp_enqueue_script( 'visualizer-library', VISUALIZER_ABSURL . 'js/library.js', array( 'jquery', 'media-views' ), Visualizer_Plugin::VERSION, true );
257 wp_enqueue_script( 'google-jsapi-new', '//www.gstatic.com/charts/loader.js', array(), null, true );
258 wp_enqueue_script( 'google-jsapi-old', '//www.google.com/jsapi', array('google-jsapi-new'), null, true );
259 wp_enqueue_script( 'visualizer-render', VISUALIZER_ABSURL . 'js/render.js', array( 'google-jsapi-old', 'visualizer-library' ), Visualizer_Plugin::VERSION, true );
260 }
261 if ( get_bloginfo( 'version' ) < '3.3' )
262 return;
263
264
265 // Get pointers for this screen
266 $pointers = apply_filters( 'visualizer_admin_pointers', array() );
267
268 if ( ! $pointers || ! is_array( $pointers ) )
269 return;
270
271 // Get dismissed pointers
272 $dismissed = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) );
273 $valid_pointers =array();
274 // Check pointers and remove dismissed ones.
275 foreach ( $pointers as $pointer_id => $pointer ) {
276
277 // Sanity check
278 if ( in_array( $pointer_id, $dismissed ) || empty( $pointer ) || empty( $pointer_id ) || empty( $pointer['target'] ) || empty( $pointer['options'] ) )
279 continue;
280
281 $pointer['pointer_id'] = $pointer_id;
282
283 // Add the pointer to $valid_pointers array
284 $valid_pointers['pointers'][] = $pointer;
285 }
286
287 // No valid pointers? Stop here.
288 if ( empty( $valid_pointers ) )
289 return;
290
291 // Add pointers style to queue.
292 wp_enqueue_style( 'wp-pointer' );
293 // Add pointers script to queue. Add custom script.
294 wp_enqueue_script( 'visualizer-pointer', VISUALIZER_ABSURL."js/visualizer-pointer.js", array( 'wp-pointer' ),Visualizer_Plugin::VERSION );
295
296 // Add pointer options to script.
297 wp_localize_script( 'visualizer-pointer', 'visualizer', $valid_pointers );
298
299
300
301 }
302
303 /**
304 * Adds visualizer tab for media upload tabs array.
305 *
306 * @since 1.0.0
307 *
308 * @access public
309 * @param array $tabs The array of media upload tabs.
310 * @return array Extended array of media upload tabs.
311 */
312 public function setupVisualizerTab( $tabs ) {
313 $tabs['visualizer'] = 'Visualizer';
314 return $tabs;
315 }
316
317 /**
318 * Registers admin menu for visualizer library.
319 *
320 * @since 1.0.0
321 *
322 * @access public
323 */
324 public function registerAdminMenu() {
325 $title = esc_html__( 'Visualizer Library', Visualizer_Plugin::NAME );
326 $callback = array( $this, 'renderLibraryPage' );
327 $this->_libraryPage = add_submenu_page( 'upload.php', $title, $title, 'edit_posts', Visualizer_Plugin::NAME, $callback );
328 }
329
330 /**
331 * Renders visualizer library page.
332 *
333 * @since 1.0.0
334 *
335 * @access public
336 */
337 public function renderLibraryPage() {
338 // get current page
339 $page = filter_input( INPUT_GET, 'vpage', FILTER_VALIDATE_INT, array(
340 'options' => array(
341 'min_range' => 1,
342 'default' => 1,
343 )
344 ) );
345
346 // the initial query arguments to fetch charts
347 $query_args = array(
348 'post_type' => Visualizer_Plugin::CPT_VISUALIZER,
349 'posts_per_page' => 6,
350 'paged' => $page,
351 );
352
353 // add chart type filter to the query arguments
354 $filter = filter_input( INPUT_GET, 'type' );
355 if ( $filter && in_array( $filter, Visualizer_Plugin::getChartTypes() ) ) {
356 $query_args['meta_query'] = array(
357 array(
358 'key' => Visualizer_Plugin::CF_CHART_TYPE,
359 'value' => $filter,
360 'compare' => '=',
361 ),
362 );
363 } else {
364 $filter = 'all';
365 }
366
367 // Added by Ash/Upwork
368 $filterByMeta = filter_input( INPUT_GET, 'filter', FILTER_SANITIZE_STRING );
369 if($filterByMeta){
370 $query = array(
371 'key' => Visualizer_Plugin::CF_SETTINGS,
372 'value' => $filterByMeta,
373 'compare' => 'LIKE',
374 );
375 $meta = isset($query_args['meta_query']) ? $query_args['meta_query'] : array();
376 $meta[] = $query;
377 $query_args['meta_query'] = $meta;
378 }
379 // Added by Ash/Upwork
380
381 // fetch charts
382 $charts = array();
383 $query = new WP_Query( $query_args );
384 while( $query->have_posts() ) {
385 $chart = $query->next_post();
386
387 // fetch and update settings
388 $settings = get_post_meta( $chart->ID, Visualizer_Plugin::CF_SETTINGS, true );
389 unset( $settings['height'], $settings['width'] );
390
391 $type = get_post_meta( $chart->ID, Visualizer_Plugin::CF_CHART_TYPE, true );
392 $series = apply_filters( Visualizer_Plugin::FILTER_GET_CHART_SERIES, get_post_meta( $chart->ID, Visualizer_Plugin::CF_SERIES, true ), $chart->ID, $type );
393 $data = apply_filters( Visualizer_Plugin::FILTER_GET_CHART_DATA, unserialize( $chart->post_content ), $chart->ID, $type );
394
395 // add chart to the array
396 $charts['visualizer-' . $chart->ID] = array(
397 'id' => $chart->ID,
398 'type' => $type,
399 'series' => $series,
400 'settings' => $settings,
401 'data' => $data,
402 );
403 }
404
405 // enqueue charts array
406 $ajaxurl = admin_url( 'admin-ajax.php' );
407 wp_localize_script( 'visualizer-library', 'visualizer', array(
408 'charts' => $charts,
409 'urls' => array(
410 'base' => add_query_arg( 'vpage', false ),
411 'create' => add_query_arg( array( 'action' => Visualizer_Plugin::ACTION_CREATE_CHART, 'library' => 'yes' ), $ajaxurl ),
412 'edit' => add_query_arg( array( 'action' => Visualizer_Plugin::ACTION_EDIT_CHART, 'library' => 'yes' ), $ajaxurl ),
413 ),
414 ) );
415
416 // render library page
417 $render = new Visualizer_Render_Library();
418
419 $render->charts = $charts;
420 $render->type = $filter;
421 $render->types = self::_getChartTypesLocalized();
422 $render->pagination = paginate_links( array(
423 'base' => add_query_arg( 'vpage', '%#%' ),
424 'format' => '',
425 'current' => $page,
426 'total' => $query->max_num_pages,
427 'type' => 'array',
428 ) );
429
430 $render->render();
431 }
432
433 /**
434 * Updates the plugin's action links, which will be rendered at the plugins table.
435 *
436 * @since 1.0.0
437 *
438 * @access public
439 * @param array $links The array of original action links.
440 * @param string $file The plugin basename.
441 * @return array Updated array of action links.
442 */
443 public function getPluginActionLinks( $links, $file ) {
444 if ( $file == plugin_basename( VISUALIZER_BASEFILE ) ) {
445 array_unshift(
446 $links,
447 sprintf(
448 '<a href="%s">%s</a>',
449 admin_url( 'upload.php?page=' . Visualizer_Plugin::NAME ),
450 esc_html__( 'Library', Visualizer_Plugin::NAME )
451 )
452 );
453 }
454
455 return $links;
456 }
457
458 /**
459 * Updates the plugin's meta links, which will be rendered at the plugins table.
460 *
461 * @since 1.0.0
462 *
463 * @access public
464 * @param array $plugin_meta The array of a plugin meta links.
465 * @param string $plugin_file The plugin's basename.
466 * @return array Updated array of plugin meta links.
467 */
468 public function getPluginMetaLinks( $plugin_meta, $plugin_file ) {
469 if ( $plugin_file == plugin_basename( VISUALIZER_BASEFILE ) ) {
470 // knowledge base link
471 $plugin_meta[] = sprintf(
472 '<a href="https://github.com/codeinwp/visualizer/wiki" target="_blank">%s</a>',
473 esc_html__( 'Knowledge Base', Visualizer_Plugin::NAME )
474 );
475 // flattr link
476 $plugin_meta[] = sprintf(
477 '<a style="color:red" href="https://themeisle.com/plugins/visualizer-charts-and-graphs-pro-addon/" target="_blank">%s</a>',
478 esc_html__( 'Pro Addon', Visualizer_Plugin::NAME )
479 );
480 }
481
482 return $plugin_meta;
483 }
484
485 }