PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.5.0
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.5.0
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 / Render / Library.php

Library.php in Visualizer – Tables & Charts Manager with Built-in AI Generator 3.5.0, at classes/Visualizer/Render/Library.php

372 lines 15.1 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 * Renders visualizer library page.
23 *
24 * @category Visualizer
25 * @package Render
26 *
27 * @since 1.0.0
28 */
29 class Visualizer_Render_Library extends Visualizer_Render {
30
31 /**
32 * Renders library page.
33 *
34 * @since 1.0.0
35 *
36 * @access protected
37 */
38 protected function _toHTML() {
39 echo '<div class="wrap">';
40 echo '<div id="visualizer-icon" class="icon32"><br></div>';
41 echo '<h2>';
42 esc_html_e( 'Visualizer Library', 'visualizer' );
43 echo ' <a href="javascript:;" class="add-new-h2 add-new-chart">', esc_html__( 'Add New', 'visualizer' ), '</a>';
44 if ( Visualizer_Module::is_pro() ) {
45 echo ' <a href="' . admin_url( 'options-general.php' ) . '" class="page-title-action">', esc_html__( 'License Settings', 'visualizer' ), '</a>';
46 }
47 echo '</h2>';
48 $this->_renderMessages();
49 $this->_renderLibrary();
50 echo '</div>';
51 }
52
53 /**
54 * Renders notification messages if need be.
55 *
56 * @since 1.4.2
57 *
58 * @access private
59 */
60 private function _renderMessages() {
61 if ( ! filter_var( ini_get( 'allow_url_fopen' ), FILTER_VALIDATE_BOOLEAN ) ) {
62 echo '<div class="updated error">';
63 echo '<p>';
64 printf( esc_html__( '%s option is disabled in your php.ini config. Please, enable it by change its value to 1. This option increases the speed of remote CSV uploading.', 'visualizer' ), '<b>allow_url_fopen</b>' );
65 echo '</p>';
66 echo '</div>';
67 }
68 }
69
70 /**
71 * Displays the search form.
72 */
73 private function getDisplayForm() {
74 echo '<div class="visualizer-library-form">
75 <form action="' . admin_url( 'admin.php' ) . '">
76 <input type="hidden" name="page" value="' . Visualizer_Plugin::NAME . '"/>
77 <select class="viz-filter" name="type">
78 ';
79
80 echo '<option value="" selected>' . __( 'All types', 'visualizer' ) . '</option>';
81
82 $type = isset( $_GET['type'] ) ? $_GET['type'] : '';
83 $enabled = array();
84 $disabled = array();
85 foreach ( $this->types as $id => $array ) {
86 if ( ! is_array( $array ) ) {
87 // support for old pro
88 $array = array( 'enabled' => true, 'name' => $array );
89 }
90 if ( ! $array['enabled'] ) {
91 $disabled[ $id ] = $array['name'];
92 continue;
93 }
94 $enabled[ $id ] = $array['name'];
95 }
96
97 asort( $enabled );
98 asort( $disabled );
99
100 foreach ( $enabled as $id => $name ) {
101 echo '<option value="' . esc_attr( $id ) . '" ' . selected( $type, $id ) . '>' . $name . '</option>';
102 }
103
104 if ( $disabled ) {
105 echo '<optgroup label="' . __( 'Not available', 'visualizer' ) . '">';
106 foreach ( $disabled as $id => $name ) {
107 echo '<option value="' . esc_attr( $id ) . '" ' . selected( $type, $id ) . ' disabled>' . $name . '</option>';
108 }
109 echo '</optgroup>';
110 }
111
112 echo '
113 </select>
114 <select class="viz-filter" name="library">
115 ';
116
117 $libraries = array( '', 'ChartJS', 'DataTable', 'GoogleCharts' );
118 $library = isset( $_GET['library'] ) ? $_GET['library'] : '';
119 foreach ( $libraries as $lib ) {
120 echo '<option value="' . esc_attr( $lib ) . '" ' . selected( $library, $lib ) . '>' . ( $lib === '' ? __( 'All libraries', 'visualizer' ) : $lib ) . '</option>';
121 }
122
123 echo '
124 </select>
125 <select class="viz-filter" name="date">
126 ';
127
128 $dates = Visualizer_Plugin::getSupportedDateFilter();
129 $date = isset( $_GET['date'] ) ? $_GET['date'] : '';
130 foreach ( Visualizer_Plugin::getSupportedDateFilter() as $dt => $label ) {
131 echo '<option value="' . esc_attr( $dt ) . '" ' . selected( $date, $dt ) . '>' . $label . '</option>';
132 }
133
134 echo '
135 </select>
136 <select class="viz-filter" name="source">
137 ';
138
139 $disabled = array();
140 $sources = array( 'json' => __( 'JSON', 'visualizer' ), 'csv' => __( 'Local CSV', 'visualizer' ), 'csv_remote' => __( 'Remote CSV', 'visualizer' ), 'query' => __( 'Database', 'visualizer' ), 'query_wp' => __( 'WordPress', 'visualizer' ) );
141 if ( ! Visualizer_Module::is_pro() ) {
142 $disabled['query'] = $sources['query'];
143 unset( $sources['query'] );
144 }
145 if ( ! apply_filters( 'visualizer_is_business', false ) ) {
146 $disabled['query_wp'] = $sources['query_wp'];
147 unset( $sources['query_wp'] );
148 }
149 $sources = array_filter( $sources );
150 uasort(
151 $sources, function( $a, $b ) {
152 if ( $a === $b ) {
153 return 0;
154 }
155 return ( $a < $b ) ? -1 : 1;
156 }
157 );
158
159 $source = isset( $_GET['source'] ) ? $_GET['source'] : '';
160 echo '<option value="">' . __( 'All sources', 'visualizer' ) . '</option>';
161 foreach ( $sources as $field => $label ) {
162 echo '<option value="' . esc_attr( $field ) . '" ' . selected( $source, $field ) . '>' . $label . '</option>';
163 }
164
165 if ( $disabled ) {
166 echo '<optgroup label="' . __( 'Not available', 'visualizer' ) . '">';
167 foreach ( $disabled as $id => $name ) {
168 echo '<option value="' . esc_attr( $id ) . '" ' . selected( $type, $id ) . ' disabled>' . $name . '</option>';
169 }
170 echo '</optgroup>';
171 }
172
173 $name = isset( $_GET['s'] ) ? $_GET['s'] : '';
174 echo '
175 </select>
176 <input class="viz-filter" type="text" name="s" placeholder="' . __( 'Enter title', 'visualizer' ) . '" value="' . esc_attr( $name ) . '">
177 ';
178
179 echo '
180 <span class="viz-filter">|</span>
181 <select class="viz-filter" name="orderby">
182 ';
183
184 $order_by_fields = apply_filters( 'visualizer_filter_order_by', array( 'date' => __( 'Date', 'visualizer' ), 's' => __( 'Title', 'visualizer' ) ) );
185 $order_by = isset( $_GET['orderby'] ) ? $_GET['orderby'] : '';
186 echo '<option value="">' . __( 'Order By', 'visualizer' ) . '</option>';
187 foreach ( $order_by_fields as $field => $label ) {
188 echo '<option value="' . esc_attr( $field ) . '" ' . selected( $order_by, $field ) . '>' . $label . '</option>';
189 }
190
191 echo '
192 </select>
193 <select class="viz-filter" name="order">
194 ';
195
196 $order_type = array( 'desc' => __( 'Descending', 'visualizer' ), 'asc' => __( 'Ascending', 'visualizer' ) );
197 $order = isset( $_GET['order'] ) ? $_GET['order'] : 'desc';
198 foreach ( $order_type as $field => $label ) {
199 echo '<option value="' . esc_attr( $field ) . '" ' . selected( $order, $field ) . '>' . $label . '</option>';
200 }
201
202 echo '
203 </select>
204 <input type="submit" class="viz-filter button button-secondary" value="' . __( 'Apply Filters', 'visualizer' ) . '">
205 <input type="button" id="viz-lib-reset" class="viz-filter button button-secondary" value="' . __( 'Clear Filters', 'visualizer' ) . '">
206 </form>
207 </div>';
208 }
209
210 /**
211 * Renders library content.
212 *
213 * @since 1.0.0
214 *
215 * @access private
216 */
217 private function _renderLibrary() {
218 // Added by Ash/Upwork
219 $filterBy = null;
220 if ( isset( $_GET['s'] ) && strlen( $_GET['s'] ) > 0 ) {
221 $filterBy = filter_input( INPUT_GET, 's', FILTER_SANITIZE_STRING );
222 }
223 // Added by Ash/Upwork
224 echo $this->custom_css;
225 echo '<div id="visualizer-types" class="visualizer-clearfix">';
226 $this->getDisplayForm();
227 echo '</div>';
228 echo '<div id="visualizer-content-wrapper">';
229 if ( ! empty( $this->charts ) ) {
230 echo '<div id="visualizer-library" class="visualizer-clearfix">';
231 $count = 0;
232 foreach ( $this->charts as $placeholder_id => $chart ) {
233 $this->_renderChartBox( $placeholder_id, $chart['id'] );
234 // show the sidebar after the first 3 charts.
235 if ( $count++ === 2 ) {
236 $this->_renderSidebar();
237 }
238 }
239 // show the sidebar if there are less than 3 charts.
240 if ( $count < 3 ) {
241 $this->_renderSidebar();
242 }
243 echo '</div>';
244 } else {
245 echo '<div id="visualizer-library" class="visualizer-clearfix">';
246 echo '<div class="visualizer-chart">';
247 echo '<div class="visualizer-chart-canvas visualizer-nochart-canvas">';
248 echo '<div class="visualizer-notfound">', esc_html__( 'No charts found', 'visualizer' ), '<p><h2><a href="javascript:;" class="add-new-h2 add-new-chart">', esc_html__( 'Add New', 'visualizer' ), '</a></h2></p></div>';
249 echo '</div>';
250 echo '<div class="visualizer-chart-footer visualizer-clearfix">';
251 echo '<span class="visualizer-chart-action visualizer-nochart-delete"></span>';
252 echo '<span class="visualizer-chart-action visualizer-nochart-clone"></span>';
253 echo '<span class="visualizer-chart-action visualizer-nochart-edit"></span>';
254 echo '<span class="visualizer-chart-action visualizer-nochart-export"></span>';
255 echo '<span class="visualizer-chart-action visualizer-nochart-shortcode"></span>';
256 echo '</div>';
257 echo '</div>';
258 $this->_renderSidebar();
259 echo '</div>';
260 }
261 echo '</div>';
262 if ( is_array( $this->pagination ) ) {
263 echo '<ul class=" subsubsub">';
264 foreach ( $this->pagination as $page ) {
265 echo '<li class="all">', $page, '</li>';
266 }
267 echo '</ul>';
268 }
269 }
270
271 /**
272 * Renders chart's box block.
273 *
274 * @since 1.0.0
275 *
276 * @access private
277 *
278 * @param string $placeholder_id The placeholder's id for the chart.
279 * @param int $chart_id The id of the chart.
280 */
281 private function _renderChartBox( $placeholder_id, $chart_id ) {
282 $settings = get_post_meta( $chart_id, Visualizer_Plugin::CF_SETTINGS );
283 $title = '#' . $chart_id;
284 if ( ! empty( $settings[0]['title'] ) ) {
285 $title = $settings[0]['title'];
286 }
287 // for ChartJS, title is an array.
288 if ( is_array( $title ) && isset( $title['text'] ) ) {
289 $title = $title['text'];
290 }
291 if ( empty( $title ) ) {
292 $title = '#' . $chart_id;
293 }
294
295 $ajax_url = admin_url( 'admin-ajax.php' );
296 $delete_url = add_query_arg(
297 array(
298 'action' => Visualizer_Plugin::ACTION_DELETE_CHART,
299 'nonce' => wp_create_nonce(),
300 'chart' => $chart_id,
301 ),
302 $ajax_url
303 );
304 $clone_url = add_query_arg(
305 array(
306 'action' => Visualizer_Plugin::ACTION_CLONE_CHART,
307 'nonce' => wp_create_nonce( Visualizer_Plugin::ACTION_CLONE_CHART ),
308 'chart' => $chart_id,
309 'type' => $this->type,
310 ),
311 $ajax_url
312 );
313 $export_link = add_query_arg(
314 array(
315 'action' => Visualizer_Plugin::ACTION_EXPORT_DATA,
316 'chart' => $chart_id,
317 'security' => wp_create_nonce( Visualizer_Plugin::ACTION_EXPORT_DATA . Visualizer_Plugin::VERSION ),
318 ),
319 admin_url( 'admin-ajax.php' )
320 );
321
322 $chart_status = array( 'date' => get_the_modified_date( get_option( 'date_format' ) . ' ' . get_option( 'time_format' ), $chart_id ), 'error' => get_post_meta( $chart_id, Visualizer_Plugin::CF_ERROR, true ), 'icon' => 'dashicons-yes-alt', 'title' => 'A-OK!' );
323 if ( ! empty( $chart_status['error'] ) ) {
324 $chart_status['icon'] = 'error dashicons-dismiss';
325 $chart_status['title'] = __( 'Click to view the error', 'visualizer' );
326 }
327 $shortcode = sprintf( '[visualizer id="%s" lazy="no" class=""]', $chart_id );
328 echo '<div class="visualizer-chart"><div class="visualizer-chart-title">', esc_html( $title ), '</div>';
329 echo '<div id="', $placeholder_id, '" class="visualizer-chart-canvas">';
330 echo '<img src="', VISUALIZER_ABSURL, 'images/ajax-loader.gif" class="loader">';
331 echo '</div>';
332 echo '<div class="visualizer-chart-footer visualizer-clearfix">';
333 echo '<a class="visualizer-chart-action visualizer-chart-delete" href="', $delete_url, '" title="', esc_attr__( 'Delete', 'visualizer' ), '" onclick="return showNotice.warn();"></a>';
334 echo '<a class="visualizer-chart-action visualizer-chart-clone" href="', $clone_url, '" title="', esc_attr__( 'Clone', 'visualizer' ), '"></a>';
335 echo '<a class="visualizer-chart-action visualizer-chart-edit" href="javascript:;" title="', esc_attr__( 'Edit', 'visualizer' ), '" data-chart="', $chart_id, '"></a>';
336 echo '<a class="visualizer-chart-action visualizer-chart-export" href="javascript:;" title="', esc_attr__( 'Export', 'visualizer' ), '" data-chart="', $export_link, '"></a>';
337 if ( $this->can_chart_have_action( 'image', $chart_id ) ) {
338 echo '<a class="visualizer-chart-action visualizer-chart-image" href="javascript:;" title="', esc_attr__( 'Download as image', 'visualizer' ), '" data-chart="visualizer-', $chart_id, '" data-chart-title="', $title, '"></a>';
339 }
340 echo '<a class="visualizer-chart-action visualizer-chart-shortcode" href="javascript:;" title="', esc_attr__( 'Click to copy shortcode', 'visualizer' ), '" data-clipboard-text="', esc_attr( $shortcode ), '"></a>';
341 echo '<span>&nbsp;</span>';
342 echo '<hr><div class="visualizer-chart-status"><span title="' . __( 'Chart ID', 'visualizer' ) . '">(' . $chart_id . '):</span> <span class="visualizer-date" title="' . __( 'Last Updated', 'visualizer' ) . '">' . $chart_status['date'] . '</span><span class="visualizer-error"><i class="dashicons ' . $chart_status['icon'] . '" data-viz-error="' . esc_attr( str_replace( '"', "'", $chart_status['error'] ) ) . '" title="' . esc_attr( $chart_status['title'] ) . '"></i></span></div>';
343 echo '</div>';
344 echo '</div>';
345 }
346
347 /**
348 * Render sidebar.
349 */
350 private function _renderSidebar() {
351 if ( ! Visualizer_Module::is_pro() ) {
352 echo '<div id="visualizer-sidebar">';
353 echo '<div class="visualizer-sidebar-box">';
354 echo '<h3>' . __( 'Discover the power of PRO!', 'visualizer' ) . '</h3><ul>';
355 echo '<li>' . __( 'Spreadsheet like editor', 'visualizer' ) . '</li>';
356 echo '<li>' . __( 'Import from other charts', 'visualizer' ) . '</li>';
357 echo '<li>' . __( 'Use database query to create charts', 'visualizer' ) . '</li>';
358 echo '<li>' . __( 'Create charts from WordPress tables', 'visualizer' ) . '</li>';
359 echo '<li>' . __( 'Frontend editor', 'visualizer' ) . '</li>';
360 echo '<li>' . __( 'Private charts', 'visualizer' ) . '</li>';
361 echo '<li>' . __( 'Auto-sync with online files', 'visualizer' ) . '</li>';
362 echo '<li>' . __( '6 more chart types', 'visualizer' ) . '</li></ul>';
363 echo '<p><a href="' . Visualizer_Plugin::PRO_TEASER_URL . '" target="_blank" class="button button-primary">' . __( 'View more features', 'visualizer' ) . '</a></p>';
364 echo '<p style="background-color: #0073aac7; color: #ffffff; padding: 2px; font-weight: bold;">' . __( 'We offer a 30-day no-questions-asked money back guarantee!', 'visualizer' ) . '</p>';
365 echo '<p><a href="' . VISUALIZER_SURVEY . '" target="_blank" class="">' . __( 'Don\'t see the features you need? Help us improve!', 'visualizer' ) . '</a></p>';
366 echo '</div>';
367 echo '</div>';
368 }
369 }
370
371 }
372