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

479 lines 16.5 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 private static function _getChartTypesLocalized() {
143 return 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__( 'Candelstick', Visualizer_Plugin::NAME ),
154 );
155 }
156
157 /**
158 * Enqueues media scripts and styles.
159 *
160 * @since 1.0.0
161 * @uses wp_enqueue_style To enqueue style file.
162 * @uses wp_enqueue_script To enqueue script file.
163 *
164 * @access public
165 */
166 public function enqueueMediaScripts() {
167 global $typenow;
168
169 if ( post_type_supports( $typenow, 'editor' ) ) {
170 wp_enqueue_style( 'visualizer-media', VISUALIZER_ABSURL . 'css/media.css', array( 'media-views' ), Visualizer_Plugin::VERSION );
171
172 wp_enqueue_script( 'visualizer-google-jsapi', '//www.google.com/jsapi', array( 'media-editor' ), null, true );
173 wp_enqueue_script( 'visualizer-media-model', VISUALIZER_ABSURL . 'js/media/model.js', array( 'visualizer-google-jsapi' ), Visualizer_Plugin::VERSION, true );
174 wp_enqueue_script( 'visualizer-media-collection', VISUALIZER_ABSURL . 'js/media/collection.js', array( 'visualizer-media-model' ), Visualizer_Plugin::VERSION, true );
175 wp_enqueue_script( 'visualizer-media-controller', VISUALIZER_ABSURL . 'js/media/controller.js', array( 'visualizer-media-collection' ), Visualizer_Plugin::VERSION, true );
176 wp_enqueue_script( 'visualizer-media-view', VISUALIZER_ABSURL . 'js/media/view.js', array( 'visualizer-media-controller' ), Visualizer_Plugin::VERSION, true );
177 wp_enqueue_script( 'visualizer-media-toolbar', VISUALIZER_ABSURL . 'js/media/toolbar.js', array( 'visualizer-media-view' ), Visualizer_Plugin::VERSION, true );
178 wp_enqueue_script( 'visualizer-media', VISUALIZER_ABSURL . 'js/media.js', array( 'visualizer-media-toolbar' ), Visualizer_Plugin::VERSION, true );
179 }
180 }
181
182 /**
183 * Extends media view strings with visualizer strings.
184 *
185 * @since 1.0.0
186 *
187 * @access public
188 * @param array $strings The array of media view strings.
189 * @return array The extended array of media view strings.
190 */
191 public function setupMediaViewStrings( $strings ) {
192 $strings['visualizer'] = array(
193 'actions' => array(
194 'get_charts' => Visualizer_Plugin::ACTION_GET_CHARTS,
195 'delete_chart' => Visualizer_Plugin::ACTION_DELETE_CHART,
196 ),
197 'controller' => array(
198 'title' => esc_html__( 'Visualizations', Visualizer_Plugin::NAME ),
199 ),
200 'routers' => array(
201 'library' => esc_html__( 'From Library', Visualizer_Plugin::NAME ),
202 'create' => esc_html__( 'Create New', Visualizer_Plugin::NAME ),
203 ),
204 'library' => array(
205 'filters' => self::_getChartTypesLocalized(),
206 ),
207 'nonce' => wp_create_nonce(),
208 'buildurl' => add_query_arg( 'action', Visualizer_Plugin::ACTION_CREATE_CHART, admin_url( 'admin-ajax.php' ) ),
209 );
210
211 return $strings;
212 }
213
214 /**
215 * Renders templates to use in media popup.
216 *
217 * @since 1.0.0
218 * @global string $pagenow The name of the current page.
219 *
220 * @access public
221 */
222 public function renderTempaltes() {
223 global $pagenow;
224
225 if ( 'post.php' != $pagenow && 'post-new.php' != $pagenow ) {
226 return;
227 }
228
229 $render = new Visualizer_Render_Templates();
230 $render->render();
231 }
232
233 /**
234 * Enqueues library scripts and styles.
235 *
236 * @since 1.0.0
237 * @uses wp_enqueue_style() To enqueue library stylesheet.
238 * @uses wp_enqueue_script() To enqueue javascript file.
239 * @uses wp_enqueue_media() To enqueue media stuff.
240 *
241 * @access public
242 * @param string $suffix The current page suffix.
243 */
244 public function enqueueLibraryScripts( $suffix ) {
245 if ( $suffix == $this->_libraryPage ) {
246 wp_enqueue_style( 'visualizer-library', VISUALIZER_ABSURL . 'css/library.css', array(), Visualizer_Plugin::VERSION );
247
248 $this->_addFilter( 'media_upload_tabs', 'setupVisualizerTab' );
249
250 wp_enqueue_media();
251 wp_enqueue_script( 'visualizer-library', VISUALIZER_ABSURL . 'js/library.js', array( 'jquery', 'media-views' ), Visualizer_Plugin::VERSION, true );
252 wp_enqueue_script( 'google-jsapi', '//www.google.com/jsapi', array(), null, true );
253 wp_enqueue_script( 'visualizer-render', VISUALIZER_ABSURL . 'js/render.js', array( 'google-jsapi', 'visualizer-library' ), Visualizer_Plugin::VERSION, true );
254 }
255 if ( get_bloginfo( 'version' ) < '3.3' )
256 return;
257
258
259 // Get pointers for this screen
260 $pointers = apply_filters( 'visualizer_admin_pointers', array() );
261
262 if ( ! $pointers || ! is_array( $pointers ) )
263 return;
264
265 // Get dismissed pointers
266 $dismissed = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) );
267 $valid_pointers =array();
268 // Check pointers and remove dismissed ones.
269 foreach ( $pointers as $pointer_id => $pointer ) {
270
271 // Sanity check
272 if ( in_array( $pointer_id, $dismissed ) || empty( $pointer ) || empty( $pointer_id ) || empty( $pointer['target'] ) || empty( $pointer['options'] ) )
273 continue;
274
275 $pointer['pointer_id'] = $pointer_id;
276
277 // Add the pointer to $valid_pointers array
278 $valid_pointers['pointers'][] = $pointer;
279 }
280
281 // No valid pointers? Stop here.
282 if ( empty( $valid_pointers ) )
283 return;
284
285 // Add pointers style to queue.
286 wp_enqueue_style( 'wp-pointer' );
287 // Add pointers script to queue. Add custom script.
288 wp_enqueue_script( 'visualizer-pointer', VISUALIZER_ABSURL."js/visualizer-pointer.js", array( 'wp-pointer' ),Visualizer_Plugin::VERSION );
289
290 // Add pointer options to script.
291 wp_localize_script( 'visualizer-pointer', 'visualizer', $valid_pointers );
292
293
294
295 }
296
297 /**
298 * Adds visualizer tab for media upload tabs array.
299 *
300 * @since 1.0.0
301 *
302 * @access public
303 * @param array $tabs The array of media upload tabs.
304 * @return array Extended array of media upload tabs.
305 */
306 public function setupVisualizerTab( $tabs ) {
307 $tabs['visualizer'] = 'Visualizer';
308 return $tabs;
309 }
310
311 /**
312 * Registers admin menu for visualizer library.
313 *
314 * @since 1.0.0
315 *
316 * @access public
317 */
318 public function registerAdminMenu() {
319 $title = esc_html__( 'Visualizer Library', Visualizer_Plugin::NAME );
320 $callback = array( $this, 'renderLibraryPage' );
321 $this->_libraryPage = add_submenu_page( 'upload.php', $title, $title, 'edit_posts', Visualizer_Plugin::NAME, $callback );
322 }
323
324 /**
325 * Renders visualizer library page.
326 *
327 * @since 1.0.0
328 *
329 * @access public
330 */
331 public function renderLibraryPage() {
332 // get current page
333 $page = filter_input( INPUT_GET, 'vpage', FILTER_VALIDATE_INT, array(
334 'options' => array(
335 'min_range' => 1,
336 'default' => 1,
337 )
338 ) );
339
340 // the initial query arguments to fetch charts
341 $query_args = array(
342 'post_type' => Visualizer_Plugin::CPT_VISUALIZER,
343 'posts_per_page' => 6,
344 'paged' => $page,
345 );
346
347 // add chart type filter to the query arguments
348 $filter = filter_input( INPUT_GET, 'type' );
349 if ( $filter && in_array( $filter, Visualizer_Plugin::getChartTypes() ) ) {
350 $query_args['meta_query'] = array(
351 array(
352 'key' => Visualizer_Plugin::CF_CHART_TYPE,
353 'value' => $filter,
354 'compare' => '=',
355 ),
356 );
357 } else {
358 $filter = 'all';
359 }
360
361 // Added by Ash/Upwork
362 $filterByMeta = filter_input( INPUT_GET, 'filter', FILTER_SANITIZE_STRING );
363 if($filterByMeta){
364 $query = array(
365 'key' => Visualizer_Plugin::CF_SETTINGS,
366 'value' => $filterByMeta,
367 'compare' => 'LIKE',
368 );
369 $meta = isset($query_args['meta_query']) ? $query_args['meta_query'] : array();
370 $meta[] = $query;
371 $query_args['meta_query'] = $meta;
372 }
373 // Added by Ash/Upwork
374
375 // fetch charts
376 $charts = array();
377 $query = new WP_Query( $query_args );
378 while( $query->have_posts() ) {
379 $chart = $query->next_post();
380
381 // fetch and update settings
382 $settings = get_post_meta( $chart->ID, Visualizer_Plugin::CF_SETTINGS, true );
383 unset( $settings['height'], $settings['width'] );
384
385 $type = get_post_meta( $chart->ID, Visualizer_Plugin::CF_CHART_TYPE, true );
386 $series = apply_filters( Visualizer_Plugin::FILTER_GET_CHART_SERIES, get_post_meta( $chart->ID, Visualizer_Plugin::CF_SERIES, true ), $chart->ID, $type );
387 $data = apply_filters( Visualizer_Plugin::FILTER_GET_CHART_DATA, unserialize( $chart->post_content ), $chart->ID, $type );
388
389 // add chart to the array
390 $charts['visualizer-' . $chart->ID] = array(
391 'id' => $chart->ID,
392 'type' => $type,
393 'series' => $series,
394 'settings' => $settings,
395 'data' => $data,
396 );
397 }
398
399 // enqueue charts array
400 $ajaxurl = admin_url( 'admin-ajax.php' );
401 wp_localize_script( 'visualizer-library', 'visualizer', array(
402 'charts' => $charts,
403 'urls' => array(
404 'base' => add_query_arg( 'vpage', false ),
405 'create' => add_query_arg( array( 'action' => Visualizer_Plugin::ACTION_CREATE_CHART, 'library' => 'yes' ), $ajaxurl ),
406 'edit' => add_query_arg( array( 'action' => Visualizer_Plugin::ACTION_EDIT_CHART, 'library' => 'yes' ), $ajaxurl ),
407 ),
408 ) );
409
410 // render library page
411 $render = new Visualizer_Render_Library();
412
413 $render->charts = $charts;
414 $render->type = $filter;
415 $render->types = self::_getChartTypesLocalized();
416 $render->pagination = paginate_links( 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 * @param array $links The array of original action links.
434 * @param string $file The plugin basename.
435 * @return array Updated array of action links.
436 */
437 public function getPluginActionLinks( $links, $file ) {
438 if ( $file == plugin_basename( VISUALIZER_BASEFILE ) ) {
439 array_unshift(
440 $links,
441 sprintf(
442 '<a href="%s">%s</a>',
443 admin_url( 'upload.php?page=' . Visualizer_Plugin::NAME ),
444 esc_html__( 'Library', Visualizer_Plugin::NAME )
445 )
446 );
447 }
448
449 return $links;
450 }
451
452 /**
453 * Updates the plugin's meta links, which will be rendered at the plugins table.
454 *
455 * @since 1.0.0
456 *
457 * @access public
458 * @param array $plugin_meta The array of a plugin meta links.
459 * @param string $plugin_file The plugin's basename.
460 * @return array Updated array of plugin meta links.
461 */
462 public function getPluginMetaLinks( $plugin_meta, $plugin_file ) {
463 if ( $plugin_file == plugin_basename( VISUALIZER_BASEFILE ) ) {
464 // knowledge base link
465 $plugin_meta[] = sprintf(
466 '<a href="https://github.com/codeinwp/visualizer/wiki" target="_blank">%s</a>',
467 esc_html__( 'Knowledge Base', Visualizer_Plugin::NAME )
468 );
469 // flattr link
470 $plugin_meta[] = sprintf(
471 '<a style="color:red" href="https://themeisle.com/plugins/visualizer-charts-and-graphs-pro-addon/" target="_blank">%s</a>',
472 esc_html__( 'Pro Addon', Visualizer_Plugin::NAME )
473 );
474 }
475
476 return $plugin_meta;
477 }
478
479 }