PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 4.0.7
Visualizer – Tables & Charts Manager with Built-in AI Generator v4.0.7
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 / Sidebar / Graph.php

Graph.php in Visualizer – Tables & Charts Manager with Built-in AI Generator 4.0.7, at classes/Visualizer/Render/Sidebar/Graph.php

527 lines 17.3 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 * Base class for sidebar settigns of graph based charts.
24 *
25 * @category Visualizer
26 * @package Render
27 * @subpackage Sidebar
28 *
29 * @since 1.0.0
30 * @abstract
31 */
32 abstract class Visualizer_Render_Sidebar_Graph extends Visualizer_Render_Sidebar_Google {
33
34 /**
35 * Determines whether we need to render vertical gridlines options or not.
36 *
37 * @since 1.0.0
38 *
39 * @access protected
40 * @var boolean
41 */
42 protected $_verticalGridLines;
43
44 /**
45 * Determines whether we need to render horizontal gridlines options or not.
46 *
47 * @since 1.0.0
48 *
49 * @access protected
50 * @var boolean
51 */
52 protected $_horizontalGridLines;
53
54 /**
55 * The array of available axis positions.
56 *
57 * @since 1.0.0
58 *
59 * @access protected
60 * @var array
61 */
62 protected $_positions;
63
64 /**
65 * Constructor.
66 *
67 * @since 1.0.0
68 *
69 * @access public
70 * @param array $data The data what has to be associated with this render.
71 */
72 public function __construct( $data = array() ) {
73 parent::__construct( $data );
74
75 $this->_verticalGridLines = true;
76 $this->_horizontalGridLines = true;
77
78 $this->_positions = array(
79 '' => '',
80 'in' => esc_html__( 'Inside the chart', 'visualizer' ),
81 'out' => esc_html__( 'Outside the chart', 'visualizer' ),
82 'none' => esc_html__( 'None', 'visualizer' ),
83 );
84 }
85
86 /**
87 * Renders chart title settings.
88 *
89 * @since 1.0.0
90 *
91 * @access protected
92 */
93 protected function _renderChartTitleSettings() {
94 self::_renderTextItem(
95 esc_html__( 'Chart Title', 'visualizer' ),
96 'title',
97 $this->title,
98 esc_html__( 'Text to display above the chart.', 'visualizer' )
99 );
100
101 self::_renderSelectItem(
102 esc_html__( 'Chart Title Position', 'visualizer' ),
103 'titlePosition',
104 $this->titlePosition,
105 $this->_positions,
106 esc_html__( 'Where to place the chart title, compared to the chart area.', 'visualizer' )
107 );
108
109 self::_renderColorPickerItem(
110 esc_html__( 'Chart Title Color', 'visualizer' ),
111 'titleTextStyle[color]',
112 isset( $this->titleTextStyle['color'] ) ? $this->titleTextStyle['color'] : null,
113 '#000'
114 );
115
116 echo '<div class="viz-section-delimiter"></div>';
117
118 self::_renderSelectItem(
119 esc_html__( 'Axes Titles Position', 'visualizer' ),
120 'axisTitlesPosition',
121 $this->axisTitlesPosition,
122 $this->_positions,
123 esc_html__( 'Determines where to place the axis titles, compared to the chart area.', 'visualizer' )
124 );
125
126 echo '<div class="viz-section-delimiter"></div>';
127
128 self::_renderTextAreaItem(
129 esc_html__( 'Chart Description', 'visualizer' ),
130 'description',
131 $this->description,
132 sprintf(
133 // translators: %1$s - HTML link tag, %2$s - HTML closing link tag.
134 esc_html__( 'Description to display in the structured data schema as explained %1$shere%2$s', 'visualizer' ),
135 '<a href="https://developers.google.com/search/docs/data-types/dataset#dataset" target="_blank">',
136 '</a>'
137 )
138 );
139 }
140
141 /**
142 * Renders general settings block for horizontal axis settings.
143 *
144 * @since 1.4.0
145 *
146 * @access protected
147 */
148 protected function _renderHorizontalAxisGeneralSettings() {
149 self::_renderTextItem(
150 esc_html__( 'Axis Title', 'visualizer' ),
151 'hAxis[title]',
152 isset( $this->hAxis['title'] ) ? $this->hAxis['title'] : '',
153 esc_html__( 'The title of the horizontal axis.', 'visualizer' )
154 );
155
156 self::_renderSelectItem(
157 esc_html__( 'Slanted Text', 'visualizer' ),
158 'hAxis[slantedText]',
159 isset( $this->hAxis['slantedText'] ) ? $this->hAxis['slantedText'] : false,
160 array(
161 false => 'False',
162 true => 'True',
163 ),
164 '',
165 false
166 );
167
168 self::_renderTextItem(
169 esc_html__( 'Slanted Text Angle', 'visualizer' ),
170 'hAxis[slantedTextAngle]',
171 isset( $this->hAxis['slantedTextAngle'] ) ? $this->hAxis['slantedTextAngle'] : 45,
172 '',
173 45,
174 'number',
175 array(
176 'min' => 1,
177 'step' => 15,
178 )
179 );
180
181 self::_renderSelectItem(
182 esc_html__( 'Text Position', 'visualizer' ),
183 'hAxis[textPosition]',
184 isset( $this->hAxis['textPosition'] ) ? $this->hAxis['textPosition'] : '',
185 $this->_positions,
186 esc_html__( 'Position of the horizontal axis text, relative to the chart area.', 'visualizer' )
187 );
188
189 self::_renderSelectItem(
190 esc_html__( 'Direction', 'visualizer' ),
191 'hAxis[direction]',
192 isset( $this->hAxis['direction'] ) ? $this->hAxis['direction'] : '',
193 array(
194 '' => '',
195 '1' => esc_html__( 'Default Direction', 'visualizer' ),
196 '-1' => esc_html__( 'Reverse Direction', 'visualizer' ),
197 ),
198 esc_html__( 'The direction in which the values along the horizontal axis grow.', 'visualizer' )
199 );
200
201 self::_renderColorPickerItem(
202 esc_html__( 'Base Line Color', 'visualizer' ),
203 'vAxis[baselineColor]',
204 isset( $this->vAxis['baselineColor'] ) ? $this->vAxis['baselineColor'] : null,
205 '#000'
206 );
207 }
208
209 /**
210 * Renders horizontal axis settings.
211 *
212 * @since 1.2.0
213 *
214 * @access protected
215 */
216 protected function _renderHorizontalAxisSettings() {
217 self::_renderGroupStart( esc_html__( 'Horizontal Axis Settings', 'visualizer' ) );
218 self::_renderSectionStart( esc_html__( 'General Settings', 'visualizer' ), false );
219 $this->_renderHorizontalAxisGeneralSettings();
220 self::_renderSectionEnd();
221 if ( $this->_horizontalGridLines ) {
222 self::_renderSectionStart( esc_html__( 'Grid Lines', 'visualizer' ), false );
223 self::_renderTextItem(
224 esc_html__( 'Count', 'visualizer' ),
225 'hAxis[gridlines][count]',
226 isset( $this->hAxis['gridlines']['count'] ) ? $this->hAxis['gridlines']['count'] : '',
227 esc_html__( 'The approximate number of horizontal gridlines inside the chart area. You can specify a value of -1 to automatically compute the number of gridlines, 0 or 1 to draw no gridlines, or 2 or more to only draw gridline. Any number greater than 2 will be used to compute the minSpacing between gridlines.', 'visualizer' ),
228 5,
229 'number',
230 array( 'min' => -1, 'max' => 1000, 'step' => 1 )
231 );
232
233 self::_renderColorPickerItem(
234 esc_html__( 'Color', 'visualizer' ),
235 'hAxis[gridlines][color]',
236 isset( $this->hAxis['gridlines']['color'] ) ? $this->hAxis['gridlines']['color'] : null,
237 '#ccc'
238 );
239 self::_renderSectionEnd();
240
241 self::_renderSectionStart( esc_html__( 'Minor Grid Lines', 'visualizer' ), false );
242 self::_renderTextItem(
243 esc_html__( 'Count', 'visualizer' ),
244 'hAxis[minorGridlines][count]',
245 isset( $this->hAxis['minorGridlines']['count'] ) ? $this->hAxis['minorGridlines']['count'] : '',
246 esc_html__( 'Specify 0 to disable the minor gridlines.', 'visualizer' ),
247 0,
248 'number',
249 array( 'min' => 0, 'step' => 1 )
250 );
251
252 self::_renderColorPickerItem(
253 esc_html__( 'Color', 'visualizer' ),
254 'hAxis[minorGridlines][color]',
255 isset( $this->hAxis['minorGridlines']['color'] ) ? $this->hAxis['minorGridlines']['color'] : null,
256 null
257 );
258 self::_renderSectionEnd();
259 }
260
261 if ( $this->_horizontalGridLines ) {
262 self::_renderSectionStart( esc_html__( 'View Window', 'visualizer' ), false );
263 self::_renderTextItem(
264 esc_html__( 'Maximum Value', 'visualizer' ),
265 'hAxis[viewWindow][max]',
266 isset( $this->hAxis['viewWindow']['max'] ) ? $this->hAxis['viewWindow']['max'] : '',
267 'The maximum vertical data value to render.'
268 );
269
270 self::_renderTextItem(
271 esc_html__( 'Minimum Value', 'visualizer' ),
272 'hAxis[viewWindow][min]',
273 isset( $this->hAxis['viewWindow']['min'] ) ? $this->hAxis['viewWindow']['min'] : '',
274 'The minimum vertical data value to render.'
275 );
276 self::_renderSectionEnd();
277 }
278 self::_renderGroupEnd();
279 }
280
281 /**
282 * Renders general settings block for vertical axis settings.
283 *
284 * @since 1.4.0
285 *
286 * @access protected
287 */
288 protected function _renderVerticalAxisGeneralSettings() {
289 self::_renderTextItem(
290 esc_html__( 'Axis Title', 'visualizer' ),
291 'vAxis[title]',
292 isset( $this->vAxis['title'] ) ? $this->vAxis['title'] : '',
293 esc_html__( 'The title of the vertical axis.', 'visualizer' )
294 );
295
296 self::_renderSelectItem(
297 esc_html__( 'Text Position', 'visualizer' ),
298 'vAxis[textPosition]',
299 isset( $this->vAxis['textPosition'] ) ? $this->vAxis['textPosition'] : '',
300 $this->_positions,
301 esc_html__( 'Position of the vertical axis text, relative to the chart area.', 'visualizer' )
302 );
303
304 self::_renderSelectItem(
305 esc_html__( 'Direction', 'visualizer' ),
306 'vAxis[direction]',
307 isset( $this->vAxis['direction'] ) ? $this->vAxis['direction'] : '',
308 array(
309 '' => '',
310 '1' => esc_html__( 'Default Direction', 'visualizer' ),
311 '-1' => esc_html__( 'Reverse Direction', 'visualizer' ),
312 ),
313 esc_html__( 'The direction in which the values along the vertical axis grow.', 'visualizer' )
314 );
315
316 self::_renderColorPickerItem(
317 esc_html__( 'Base Line Color', 'visualizer' ),
318 'hAxis[baselineColor]',
319 isset( $this->hAxis['baselineColor'] ) ? $this->hAxis['baselineColor'] : null,
320 '#000'
321 );
322 }
323
324 /**
325 * Renders vertical axis settings.
326 *
327 * @since 1.2.0
328 *
329 * @access protected
330 */
331 protected function _renderVerticalAxisSettings() {
332 self::_renderGroupStart( esc_html__( 'Vertical Axis Settings', 'visualizer' ) );
333 self::_renderSectionStart( esc_html__( 'General Settings', 'visualizer' ), false );
334 $this->_renderVerticalAxisGeneralSettings();
335 self::_renderSectionEnd();
336
337 if ( $this->_verticalGridLines ) {
338 self::_renderSectionStart( esc_html__( 'Grid Lines', 'visualizer' ), false );
339 self::_renderTextItem(
340 esc_html__( 'Count', 'visualizer' ),
341 'vAxis[gridlines][count]',
342 isset( $this->vAxis['gridlines']['count'] ) ? $this->vAxis['gridlines']['count'] : '',
343 esc_html__( 'The approximate number of vertical gridlines inside the chart area. You can specify a value of -1 to automatically compute the number of gridlines, 0 or 1 to draw no gridlines, or 2 or more to only draw gridline. Any number greater than 2 will be used to compute the minSpacing between gridlines.', 'visualizer' ),
344 5,
345 'number',
346 array( 'min' => -1, 'max' => 1000, 'step' => 1 )
347 );
348
349 self::_renderColorPickerItem(
350 esc_html__( 'Color', 'visualizer' ),
351 'vAxis[gridlines][color]',
352 isset( $this->vAxis['gridlines']['color'] ) ? $this->vAxis['gridlines']['color'] : null,
353 '#ccc'
354 );
355 self::_renderSectionEnd();
356
357 self::_renderSectionStart( esc_html__( 'Minor Grid Lines', 'visualizer' ), false );
358 self::_renderTextItem(
359 esc_html__( 'Count', 'visualizer' ),
360 'vAxis[minorGridlines][count]',
361 isset( $this->vAxis['minorGridlines']['count'] ) ? $this->vAxis['minorGridlines']['count'] : '',
362 esc_html__( 'Specify 0 to disable the minor gridlines.', 'visualizer' ),
363 0,
364 'number',
365 array( 'min' => 0, 'step' => 1 )
366 );
367
368 self::_renderColorPickerItem(
369 esc_html__( 'Color', 'visualizer' ),
370 'vAxis[minorGridlines][color]',
371 isset( $this->vAxis['minorGridlines']['color'] ) ? $this->vAxis['minorGridlines']['color'] : null,
372 null
373 );
374 self::_renderSectionEnd();
375 }
376
377 if ( $this->_verticalGridLines ) {
378 self::_renderSectionStart( esc_html__( 'View Window', 'visualizer' ), false );
379 self::_renderTextItem(
380 esc_html__( 'Maximum Value', 'visualizer' ),
381 'vAxis[viewWindow][max]',
382 isset( $this->vAxis['viewWindow']['max'] ) ? $this->vAxis['viewWindow']['max'] : '',
383 'The maximum vertical data value to render.'
384 );
385
386 self::_renderTextItem(
387 esc_html__( 'Minimum Value', 'visualizer' ),
388 'vAxis[viewWindow][min]',
389 isset( $this->vAxis['viewWindow']['min'] ) ? $this->vAxis['viewWindow']['min'] : '',
390 'The minimum vertical data value to render.'
391 );
392 self::_renderSectionEnd();
393 }
394 self::_renderGroupEnd();
395 }
396
397 /**
398 * Renders chart axes settings.
399 *
400 * @since 1.0.0
401 *
402 * @access protected
403 */
404 protected function _renderAxesSettings() {
405 $this->_renderHorizontalAxisSettings();
406 $this->_renderVerticalAxisSettings();
407 }
408
409 /**
410 * Renders series settings group.
411 *
412 * @since 1.0.0
413 *
414 * @access protected
415 */
416 protected function _renderSeriesSettings() {
417 self::_renderGroupStart( esc_html__( 'Series Settings', 'visualizer' ) );
418 self::_renderSectionStart();
419 self::_renderSectionDescription( esc_html__( 'If you have just updated/modified the chart data, you may need to save it before the new data reflects in the settings.', 'visualizer' ), 'viz-info-msg' );
420 self::_renderSectionEnd();
421
422 for ( $i = 1, $cnt = count( $this->__series ); $i < $cnt; $i++ ) {
423 if ( ! empty( $this->__series[ $i ]['label'] ) ) {
424 self::_renderSectionStart( esc_html( $this->__series[ $i ]['label'] ), false );
425 $this->_renderSeries( $i - 1 );
426 self::_renderSectionEnd();
427 }
428 }
429 self::_renderGroupEnd();
430 }
431
432 /**
433 * Renders concreate series settings.
434 *
435 * @since 1.0.0
436 *
437 * @access protected
438 * @param int $index The series index.
439 */
440 protected function _renderSeries( $index ) {
441 self::_renderSelectItem(
442 esc_html__( 'Visible In Legend', 'visualizer' ),
443 'series[' . $index . '][visibleInLegend]',
444 isset( $this->series[ $index ]['visibleInLegend'] ) ? $this->series[ $index ]['visibleInLegend'] : '',
445 array(
446 '' => '',
447 '0' => esc_html__( 'No', 'visualizer' ),
448 '1' => esc_html__( 'Yes', 'visualizer' ),
449 ),
450 esc_html__( 'Determines whether the series has to be presented in the legend or not.', 'visualizer' )
451 );
452
453 $this->_renderFormatField( $index );
454
455 self::_renderColorPickerItem(
456 esc_html__( 'Color', 'visualizer' ),
457 'series[' . $index . '][color]',
458 isset( $this->series[ $index ]['color'] ) ? $this->series[ $index ]['color'] : null,
459 null
460 );
461
462 $this->_renderRoleField( $index );
463 }
464
465 /**
466 * Renders format field for horizontal axis.
467 *
468 * @since 1.4.3
469 *
470 * @access protected
471 */
472 protected function _renderHorizontalAxisFormatField() {
473 self::_renderTextItem(
474 esc_html__( 'Number Format', 'visualizer' ),
475 'hAxis[format]',
476 isset( $this->hAxis['format'] ) ? $this->hAxis['format'] : '',
477 sprintf(
478 '%s<br><br>%s<br><br>%s',
479 esc_html__( 'Enter custom format pattern to apply to horizontal axis labels.', 'visualizer' ),
480 sprintf(
481 // translators: %1$s - HTML link tag, %2$s - HTML closing link tag.
482 esc_html__( 'For number axis labels, this is a subset of the decimal formatting %1$sICU pattern set%2$s. For instance, $#,###.## will display values $1,234.56 for value 1234.56. Note: Using the #&#37;&#37; percentage format will multiply your values by 100.', 'visualizer' ),
483 '<a href="http://icu-project.org/apiref/icu4c/classDecimalFormat.html#_details" target="_blank">',
484 '</a>'
485 ),
486 sprintf(
487 // translators: %1$s - HTML link tag, %2$s - HTML closing link tag.
488 esc_html__( 'For date axis labels, this is a subset of the date formatting %1$sICU date and time format%2$s.', 'visualizer' ),
489 '<a href="https://unicode-org.github.io/icu/userguide/format_parse/datetime/#datetime-format-syntax" target="_blank">',
490 '</a>'
491 )
492 )
493 );
494 }
495
496 /**
497 * Renders format field for vertical axis settings.
498 *
499 * @since 1.4.3
500 *
501 * @access protected
502 */
503 protected function _renderVerticalAxisFormatField() {
504 self::_renderTextItem(
505 esc_html__( 'Number Format', 'visualizer' ),
506 'vAxis[format]',
507 isset( $this->vAxis['format'] ) ? $this->vAxis['format'] : '',
508 sprintf(
509 '%s<br><br>%s<br><br>%s',
510 esc_html__( 'Enter custom format pattern to apply to vertical axis labels.', 'visualizer' ),
511 sprintf(
512 // translators: %1$s - HTML link tag, %2$s - HTML closing link tag.
513 esc_html__( 'For number axis labels, this is a subset of the decimal formatting %1$sICU pattern set%2$s. For instance, $#,###.## will display values $1,234.56 for value 1234.56. Note: Using the #&#37;&#37; percentage format will multiply your values by 100.', 'visualizer' ),
514 '<a href="http://icu-project.org/apiref/icu4c/classDecimalFormat.html#_details" target="_blank">',
515 '</a>'
516 ),
517 sprintf(
518 // translators: %1$s - HTML link tag, %2$s - HTML closing link tag.
519 esc_html__( 'For date axis labels, this is a subset of the date formatting %1$sICU date and time format%2$s.', 'visualizer' ),
520 '<a href="https://unicode-org.github.io/icu/userguide/format_parse/datetime/#datetime-format-syntax" target="_blank">',
521 '</a>'
522 )
523 )
524 );
525 }
526 }
527