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