PluginProbe
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder / 51.1.49
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder v51.1.49
51.1.83 51.1.82 51.1.81 51.1.79 51.1.78 51.1.77 51.1.76 51.1.74 51.1.75 51.1.65 51.1.64 51.1.63 trunk 51.1.14 51.1.2 51.1.35 51.1.36 51.1.37 51.1.38 51.1.39 51.1.44 51.1.45 51.1.46 51.1.47 51.1.49 All 37 releases
king-addons / includes / widgets / Charts / Charts.php

Charts.php in King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder 51.1.49, at includes/widgets/Charts/Charts.php

2,796 lines 99.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace King_Addons;
4
5 use Elementor\Controls_Manager;
6 use Elementor\Widget_Base;
7 use Elementor\Repeater;
8
9 if (!defined('ABSPATH')) {
10 exit;
11 }
12
13 class Charts extends Widget_Base
14 {
15
16
17
18 public function get_name()
19 {
20 return 'king-addons-charts';
21 }
22
23 public function get_title()
24 {
25 return esc_html__('Charts', 'king-addons');
26 }
27
28 public function get_icon()
29 {
30 return 'king-addons-icon king-addons-charts';
31 }
32
33 public function get_script_depends()
34 {
35 return [KING_ADDONS_ASSETS_UNIQUE_KEY . '-charts-charts', KING_ADDONS_ASSETS_UNIQUE_KEY . '-charts-script'];
36 }
37
38 public function get_style_depends()
39 {
40 return [
41 KING_ADDONS_ASSETS_UNIQUE_KEY . '-animation-timing',
42 KING_ADDONS_ASSETS_UNIQUE_KEY . '-animation-loading',
43 KING_ADDONS_ASSETS_UNIQUE_KEY . '-charts-style'
44 ];
45 }
46
47 public function get_categories()
48 {
49 return ['king-addons'];
50 }
51
52 public function get_keywords()
53 {
54 return ['charts', 'chart', 'polar', 'linear', 'graph', 'pie', 'radar', 'king addons', 'line charts',
55 'radar charts', 'doughnut charts', 'pie charts', 'polararea charts', 'vertical', 'bar', 'polararea',
56 'polar charts', 'bar charts', 'horizontal charts', 'vertical charts', 'horizontal',
57 'king', 'addons', 'kingaddons', 'king-addons'];
58 }
59
60 public function get_custom_help_url()
61 {
62 return 'mailto:bug@kingaddons.com?subject=Bug Report - King Addons&body=Please describe the issue';
63 }
64
65 public function add_control_choose_chart_data_source()
66 {
67 $this->add_control(
68 'data_source',
69 [
70 'label' => esc_html__('Data Source', 'king-addons'),
71 'type' => Controls_Manager::SELECT,
72 'default' => 'custom',
73 'options' => [
74 'custom' => esc_html__('Custom', 'king-addons'),
75 'pro-csv' => 'CSV' . ' ' . esc_html__('File', 'king-addons') . ' (Pro)',
76 ],
77 'frontend_available' => true,
78 ]
79 );
80 }
81
82 protected function register_controls()
83 {
84
85 $this->start_controls_section(
86 'section_chart_general',
87 [
88 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('General', 'king-addons'),
89 'tab' => Controls_Manager::TAB_CONTENT,
90 ]
91 );
92
93 $this->add_control_choose_chart_data_source();
94
95 Core::renderUpgradeProNotice($this, Controls_Manager::RAW_HTML, 'charts', 'data_source', ['pro-csv']);
96
97 $this->add_control(
98 'csv_source',
99 [
100 'label' => esc_html__('CSV Source', 'king-addons'),
101 'type' => Controls_Manager::SELECT,
102 'default' => 'url',
103 'options' => [
104 'url' => esc_html__('Remote URL', 'king-addons'),
105 'file' => esc_html__('File', 'king-addons'),
106 ],
107 'condition' => [
108 'data_source' => 'csv',
109 ],
110 'frontend_available' => true,
111 ]
112 );
113
114 $this->add_control(
115 'data_csv_separator',
116 [
117 'label' => esc_html__('Separator', 'king-addons'),
118 'type' => Controls_Manager::TEXT,
119 'default' => ',',
120 'label_block' => true,
121 'condition' => [
122 'data_source' => 'csv',
123 ],
124 ]
125 );
126
127 $this->add_control(
128 'data_source_csv_url',
129 [
130 'label' => esc_html__('Remote URL', 'king-addons'),
131 'type' => Controls_Manager::TEXT,
132 'dynamic' => [
133 'active' => true,
134 ],
135 'label_block' => true,
136 'condition' => [
137 'data_source' => 'csv',
138 'csv_source' => 'url',
139 ],
140 ]
141 );
142
143 $this->add_control(
144 'data_source_csv_file',
145 [
146 'label' => esc_html__('Upload CSV File', 'king-addons'),
147 'type' => Controls_Manager::MEDIA,
148 'dynamic' => ['
149 active' => true,
150 ],
151 'media_type' => [],
152 'label_block' => true,
153 'condition' => [
154 'data_source' => 'csv',
155 'csv_source' => 'file',
156 ],
157 ]
158 );
159
160 $this->add_control(
161 'chart_type',
162 [
163 'label' => esc_html__('Chart Styles', 'king-addons'),
164 'type' => Controls_Manager::SELECT,
165 'description' => esc_html__('Doughnut, pie and polar area charts only work with custom data source', 'king-addons'),
166 'default' => 'bar',
167 'options' => [
168 'bar' => esc_html__('Bar Vertical', 'king-addons'),
169 'bar_horizontal' => esc_html__('Bar Horizontal', 'king-addons'),
170 'line' => esc_html__('Line', 'king-addons'),
171 'radar' => esc_html__('Radar', 'king-addons'),
172 'doughnut' => esc_html__('Doughnut', 'king-addons'),
173 'pie' => esc_html__('Pie', 'king-addons'),
174 'polarArea' => esc_html__('Polar Area', 'king-addons'),
175 ],
176 'separator' => 'before'
177 ]
178 );
179
180 $this->add_control(
181 'data_type',
182 [
183 'label' => esc_html__('Data Grid Type', 'king-addons'),
184 'type' => Controls_Manager::SELECT,
185 'options' => [
186 'linear' => esc_html__('Linear', 'king-addons'),
187 'logarithmic' => esc_html__('Logarithmic', 'king-addons'),
188 ],
189 'default' => 'linear',
190 'condition' => [
191 'chart_type' => ['bar', 'bar_horizontal', 'line']
192 ],
193 'frontend_available' => true,
194 ]
195 );
196
197 $this->add_control(
198 'column_width_x',
199 [
200 'label' => esc_html__('Column Width', 'king-addons'),
201 'type' => Controls_Manager::NUMBER,
202 'default' => 0.5,
203 'step' => 0.1,
204 'min' => 0,
205 'max' => 1,
206 'frontend_available' => true,
207 'separator' => 'before',
208 'condition' => [
209 'chart_type' => ['bar', 'bar_horizontal'],
210 ]
211 ]
212 );
213
214 $this->add_control(
215 'exclude_dataset_on_click',
216 [
217 'label' => esc_html__('Exclude Data on Legend Click', 'king-addons'),
218 'type' => Controls_Manager::SWITCHER,
219 'default' => 'yes',
220 'return_value' => 'yes',
221 'separator' => 'before'
222 ]
223 );
224
225 $this->add_control(
226 'stacked_bar_chart',
227 [
228 'label' => esc_html__('Enable Stacked Chart', 'king-addons'),
229 'type' => Controls_Manager::SWITCHER,
230 'default' => 'yes',
231 'return_value' => 'yes',
232 'condition' => [
233 'chart_type' => ['bar', 'bar_horizontal', 'radar', 'doughnut', 'pie']
234 ]
235 ]
236 );
237
238 $this->add_control(
239 'inner_datalabels',
240 [
241 'label' => esc_html__('Show Data Values', 'king-addons'),
242 'type' => Controls_Manager::SWITCHER,
243 'default' => 'false',
244 'return_value' => 'true',
245 'condition' => [
246 'chart_type' => ['bar', 'bar_horizontal', 'line', '']
247 ]
248 ]
249 );
250
251 $this->add_control(
252 'enable_min_max',
253 [
254 'label' => esc_html__('Min-Max Values', 'king-addons'),
255 'type' => Controls_Manager::SWITCHER,
256 'default' => 'no',
257 'return_value' => 'yes',
258 'separator' => 'before',
259 'condition' => [
260 'chart_type!' => ['doughnut', 'polarArea', 'pie'],
261 ]
262 ]
263 );
264
265 $this->add_control(
266 'min_value',
267 [
268 'label' => esc_html__('Min. Value', 'king-addons'),
269 'type' => Controls_Manager::NUMBER,
270 'default' => -100,
271 'condition' => [
272 'enable_min_max' => 'yes',
273 ]
274 ]
275 );
276
277 $this->add_control(
278 'max_value',
279 [
280 'label' => esc_html__('Max. Value', 'king-addons'),
281 'type' => Controls_Manager::NUMBER,
282 'default' => 100,
283 'condition' => [
284 'enable_min_max' => 'yes',
285 ]
286 ]
287 );
288
289 $this->add_control(
290 'animations_heading',
291 [
292 'label' => esc_html__('Animation', 'king-addons'),
293 'type' => Controls_Manager::HEADING,
294 'separator' => 'before',
295 ]
296 );
297
298 $this->add_control(
299 'chart_animation',
300 [
301 'label' => esc_html__('Animation', 'king-addons'),
302 'type' => Controls_Manager::SWITCHER,
303 'default' => 'yes',
304 'return_value' => 'yes',
305 'chart_type' => ['line', 'radar']
306 ]
307 );
308
309 $this->add_control(
310 'chart_animation_loop',
311 [
312 'label' => esc_html__('Loop', 'king-addons'),
313 'type' => Controls_Manager::SWITCHER,
314 'default' => 'yes',
315 'return_value' => 'yes',
316 'condition' => [
317 'chart_animation' => 'yes',
318 'chart_type' => ['line', 'radar']
319 ]
320 ]
321 );
322
323 $this->add_control(
324 'chart_animation_duration',
325 [
326 'label' => esc_html__('Animation Duration (ms)', 'king-addons'),
327 'type' => Controls_Manager::NUMBER,
328 'default' => 1000,
329 'min' => 1,
330 'condition' => [
331 'chart_animation' => 'yes',
332 'chart_type' => ['radar', 'line']
333 ]
334 ]
335 );
336
337 $this->add_control(
338 'animation_transition_type',
339 [
340 'label' => esc_html__('Animation Timing', 'king-addons'),
341 'type' => Controls_Manager::SELECT,
342 'default' => 'linear',
343 'options' => [
344 'linear' => 'linear',
345 'easeInBack' => 'easeInBack',
346 'easeInBounce' => 'easeInBounce',
347 'easeInCirc' => 'easeInCirc',
348 'easeInCubic' => 'easeInCubic',
349 'easeInElastic' => 'easeInElastic',
350 'easeInExpo' => 'easeInExpo',
351 'easeInOutBack' => 'easeInOutBack',
352 'easeInOutBounce' => 'easeInOutBounce',
353 'easeInOutCirc' => 'easeInOutCirc',
354 'easeInOutCubic' => 'easeInOutCubic',
355 'easeInOutElastic' => 'easeInOutElastic',
356 'easeInOutExpo' => 'easeInOutExpo',
357 'easeInOutQuad' => 'easeInOutQuad',
358 'easeInOutQuart' => 'easeInOutQuart',
359 'easeInOutQuint' => 'easeInOutQuint',
360 'easeInOutSine' => 'easeInOutSine',
361 'easeInQuad' => 'easeInQuad',
362 'easeInQuart' => 'easeInQuart',
363 'easeInQuint' => 'easeInQuint',
364 'easeInSine' => 'easeInSine',
365 'easeOutBack' => 'easeOutBack',
366 'easeOutBounce' => 'easeOutBounce',
367 'easeOutCirc' => 'easeOutCirc',
368 'easeOutCubic' => 'easeOutCubic',
369 'easeOutElastic' => 'easeOutElastic',
370 'easeOutExpo' => 'easeOutExpo',
371 'easeOutQuad' => 'easeOutQuad',
372 'easeOutQuart' => 'easeOutQuart',
373 'easeOutQuint' => 'easeOutQuint',
374 'easeOutSine' => 'easeOutSine',
375 ],
376 'condition' => [
377 'chart_animation' => 'yes',
378 'chart_type' => ['radar', 'line']
379 ]
380 ]
381 );
382
383 $this->end_controls_section();
384
385 $this->start_controls_section(
386 'section_chart_data',
387 [
388 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Data', 'king-addons'),
389 'tab' => Controls_Manager::TAB_CONTENT,
390 ]
391 );
392
393 $this->add_control(
394 'charts_labels_data', [
395 'label' => esc_html__('Data Labels', 'king-addons'),
396 'type' => Controls_Manager::TEXTAREA,
397 'dynamic' => [
398 'active' => true,
399 ],
400 'default' => esc_html__('January, February, March', 'king-addons'),
401 'description' => esc_html__('Enter the comma-separated list of values (Used only with custom data source)', 'king-addons'),
402 'label_block' => true,
403 'condition' => [
404 'data_source' => 'custom',
405
406 ],
407 ]
408 );
409
410 if (!king_addons_freemius()->can_use_premium_code__premium_only()) {
411 $this->add_control(
412 'charts_repeater_labels_data_pro_notice',
413 [
414 'type' => Controls_Manager::RAW_HTML,
415 'raw' => 'More than 3 Data Labels are available<br> in the <strong><a href="https://kingaddons.com/pricing/?utm_source=kng-module-charts-settings-upgrade-pro&utm_medium=plugin&utm_campaign=kng" target="_blank">Pro version</a></strong>',
416 'content_classes' => 'king-addons-pro-notice',
417 ]
418 );
419 }
420
421 $chart_repeater_labels = new Repeater();
422
423 $chart_repeater_labels->add_control(
424 'chart_data_label', [
425 'label' => esc_html__('Label', 'king-addons'),
426 'type' => Controls_Manager::TEXT,
427 'dynamic' => [
428 'active' => true,
429 ],
430 'default' => esc_html__('Label #1', 'king-addons'),
431 'label_block' => true,
432 ]
433 );
434
435 $chart_repeater_labels->add_control(
436 'chart_data_set', [
437 'label' => esc_html__('Data', 'king-addons'),
438 'type' => Controls_Manager::TEXT,
439 'dynamic' => [
440 'active' => true,
441 ],
442 'default' => '10,23,15',
443 'label_block' => true,
444 'description' => esc_html__("Only works with custom charts. Enter comma separated data values (Shouldn't Exceed number of values provided in Data Labels option).", 'king-addons'),
445 ]
446 );
447
448
449 $chart_repeater_labels->start_controls_tabs(
450 'chart_data_bar_background_tab'
451 );
452
453 $chart_repeater_labels->start_controls_tab(
454 'chart_data_bar_background_normal',
455 [
456 'label' => esc_html__('Normal', 'king-addons'),
457 ]
458 );
459
460 $chart_repeater_labels->add_control(
461 'chart_data_background_color', [
462 'label' => esc_html__('Background Color', 'king-addons'),
463 'type' => Controls_Manager::COLOR,
464 'default' => '#5B03FF',
465 ]
466 );
467
468 $chart_repeater_labels->add_control(
469 'chart_data_border_color', [
470 'label' => esc_html__('Border Color', 'king-addons'),
471 'type' => Controls_Manager::COLOR,
472 'default' => '#5B03FF',
473 ]
474 );
475
476 $chart_repeater_labels->end_controls_tab();
477
478
479 $chart_repeater_labels->start_controls_tab(
480 'chart_data_bar_background_hover',
481 [
482 'label' => esc_html__('Hover', 'king-addons'),
483 ]
484 );
485 $chart_repeater_labels->add_control(
486 'chart_data_background_color_hover', [
487 'label' => esc_html__('Background Color', 'king-addons'),
488 'type' => Controls_Manager::COLOR,
489 'default' => '#7A7A7ACC'
490 ]
491 );
492
493 $chart_repeater_labels->add_control(
494 'chart_data_border_color_hover', [
495 'label' => esc_html__('Border Color', 'king-addons'),
496 'type' => Controls_Manager::COLOR,
497 'default' => '#7A7A7ACC',
498 ]
499 );
500 $chart_repeater_labels->end_controls_tab();
501
502 $chart_repeater_labels->end_controls_tabs();
503
504
505 $chart_repeater_labels->add_control(
506 'chart_data_border_width', [
507 'label' => esc_html__('Border Width', 'king-addons'),
508 'type' => Controls_Manager::NUMBER,
509 'default' => '1',
510 ]
511 );
512
513 $this->add_control(
514 'charts_data_set',
515 [
516 'label' => esc_html__('Set Data', 'king-addons'),
517 'type' => Controls_Manager::REPEATER,
518 'default' => [
519 [
520 'chart_data_label' => esc_html__('Laptops', 'king-addons'),
521 'chart_data_set' => '13,20,15',
522 'chart_data_background_color' => '#5B03FFCC',
523 'chart_data_border_color' => '#5B03FFCC',
524 'chart_data_border_width' => 1,
525 ],
526 [
527 'chart_data_label' => esc_html__('Phones', 'king-addons'),
528 'chart_data_set' => '20,10,33',
529 'chart_data_background_color' => '#E5605BCC',
530 'chart_data_border_color' => '#E5605BCC',
531 'chart_data_border_width' => 1,
532 ],
533 [
534 'chart_data_label' => esc_html__('Other', 'king-addons'),
535 'chart_data_set' => '10,3,23',
536 'chart_data_background_color' => '#5BE560CC',
537 'chart_data_border_color' => '#5BE560CC',
538 'chart_data_border_width' => 1,
539 ],
540
541 ],
542
543 'fields' => $chart_repeater_labels->get_controls(),
544 'title_field' => '{{{ chart_data_label }}}',
545
546 ]
547 );
548
549 if (!king_addons_freemius()->can_use_premium_code__premium_only()) {
550 $this->add_control(
551 'charts_repeater_pro_notice',
552 [
553 'type' => Controls_Manager::RAW_HTML,
554 'raw' => 'More than 3 Items are available<br> in the <strong><a href="https://kingaddons.com/pricing/?utm_source=kng-module-charts-settings-upgrade-pro&utm_medium=plugin&utm_campaign=kng" target="_blank">Pro version</a></strong>',
555 'content_classes' => 'king-addons-pro-notice',
556 ]
557 );
558 }
559
560 $this->end_controls_section();
561
562 $this->start_controls_section(
563 'section_chart_axis_r',
564 [
565 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Axis', 'king-addons'),
566 'tab' => Controls_Manager::TAB_CONTENT,
567 'condition' => [
568 'chart_type' => ['radar', 'polarArea']
569 ],
570 ]
571 );
572
573 $this->add_control(
574 'r_axis_conditions',
575 [
576 'label' => esc_html__('Axis', 'king-addons'),
577 'type' => Controls_Manager::HEADING,
578 'separator' => 'before'
579 ]
580 );
581
582 $this->add_control(
583 'display_r_axis',
584 [
585 'label' => esc_html__('Grid Lines', 'king-addons'),
586 'type' => Controls_Manager::SWITCHER,
587 'default' => 'true',
588 'return_value' => 'true'
589 ]
590 );
591
592 $this->add_control(
593 'grid_line_width_r', [
594 'label' => esc_html__('Grid Line Width', 'king-addons'),
595 'type' => Controls_Manager::NUMBER,
596 'default' => '1',
597 'step' => 0.1,
598 'condition' => [
599 'display_r_axis' => 'true'
600 ]
601 ]
602 );
603
604 $this->add_control(
605 'display_r_ticks',
606 [
607 'label' => esc_html__('Ticks (Labels)', 'king-addons'),
608 'type' => Controls_Manager::SWITCHER,
609 'default' => 'true',
610 'return_value' => 'true'
611 ]
612 );
613
614 $this->add_control(
615 'r_step_size',
616 [
617 'label' => esc_html__('Step Size', 'king-addons'),
618 'type' => Controls_Manager::NUMBER,
619 'min' => 0,
620 'max' => 360,
621 'default' => 0,
622 'frontend_available' => true,
623 'condition' => [
624 'display_r_ticks' => 'true'
625 ]
626 ]
627 );
628
629 $this->add_control(
630 'border_dash_length_r', [
631 'label' => esc_html__('Border Dash length', 'king-addons'),
632 'type' => Controls_Manager::NUMBER,
633 'default' => '1',
634 'separator' => 'before',
635 ]
636 );
637
638 $this->add_control(
639 'border_dash_spacing_r', [
640 'label' => esc_html__('Border Dash spacing', 'king-addons'),
641 'type' => Controls_Manager::NUMBER,
642 'default' => '1'
643 ]
644 );
645
646 $this->add_control(
647 'border_dash_offset_r', [
648 'label' => esc_html__('Border Dash offset', 'king-addons'),
649 'type' => Controls_Manager::NUMBER,
650 'default' => '1'
651 ]
652 );
653
654 $this->end_controls_section();
655
656 $this->start_controls_section(
657 'section_chart_axis',
658 [
659 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Axis', 'king-addons'),
660 'tab' => Controls_Manager::TAB_CONTENT,
661 'condition' => [
662 'chart_type' => ['bar', 'bar_horizontal', 'line']
663 ],
664 ]
665 );
666
667 $this->add_control(
668 'x_axis_conditions',
669 [
670 'label' => esc_html__('X-Axis', 'king-addons'),
671 'type' => Controls_Manager::HEADING,
672 ]
673 );
674
675 $this->add_control(
676 'display_x_axis',
677 [
678 'label' => esc_html__('Grid Lines', 'king-addons'),
679 'type' => Controls_Manager::SWITCHER,
680 'default' => 'true',
681 'return_value' => 'true',
682 ]
683 );
684
685 $this->add_control(
686 'grid_line_width_x', [
687 'label' => esc_html__('Grid Line Width', 'king-addons'),
688 'type' => Controls_Manager::NUMBER,
689 'default' => '1',
690 'step' => 0.1,
691 'condition' => [
692 'display_x_axis' => 'true'
693 ]
694 ]
695 );
696
697 $this->add_control(
698 'display_x_ticks',
699 [
700 'label' => esc_html__('Ticks (Labels)', 'king-addons'),
701 'type' => Controls_Manager::SWITCHER,
702 'default' => 'true',
703 'return_value' => 'true'
704 ]
705 );
706
707 $this->add_control(
708 'x_step_size',
709 [
710 'label' => esc_html__('Step Size', 'king-addons'),
711 'type' => Controls_Manager::NUMBER,
712 'min' => 0,
713 'max' => 360,
714 'default' => 0,
715 'frontend_available' => true,
716 'condition' => [
717 'display_x_ticks' => 'true'
718 ]
719 ]
720 );
721
722 $this->add_control(
723 'display_x_axis_title',
724 [
725 'label' => esc_html__('Show Title', 'king-addons'),
726 'type' => Controls_Manager::SWITCHER,
727 'default' => 'true',
728 'return_value' => 'true'
729 ]
730 );
731
732 $this->add_control(
733 'x_axis_title',
734 [
735 'label' => esc_html__('Title', 'king-addons'),
736 'type' => Controls_Manager::TEXT,
737 'dynamic' => [
738 'active' => true,
739 ],
740 'placeholder' => esc_html__('X-Axis', 'king-addons'),
741 'default' => esc_html__('X-Axis', 'king-addons'),
742 'condition' => [
743 'display_x_axis_title' => 'true'
744 ]
745 ]
746 );
747
748 $this->add_control(
749 'labels_rotation_x_axis',
750 [
751 'label' => esc_html__('Ticks (Labels) Rotation', 'king-addons'),
752 'type' => Controls_Manager::NUMBER,
753 'min' => 0,
754 'max' => 360,
755 'default' => 0,
756 'frontend_available' => true
757 ]
758 );
759
760 $this->add_control(
761 'y_axis_conditions',
762 [
763 'label' => esc_html__('Y-Axis', 'king-addons'),
764 'type' => Controls_Manager::HEADING,
765 'separator' => 'before'
766 ]
767 );
768
769 $this->add_control(
770 'display_y_axis',
771 [
772 'label' => esc_html__('Grid Lines', 'king-addons'),
773 'type' => Controls_Manager::SWITCHER,
774 'default' => 'true',
775 'return_value' => 'true'
776 ]
777 );
778
779 $this->add_control(
780 'grid_line_width_y', [
781 'label' => esc_html__('Grid Line Width', 'king-addons'),
782 'type' => Controls_Manager::NUMBER,
783 'default' => '1',
784 'step' => 0.1,
785 'condition' => [
786 'display_y_axis' => 'true'
787 ]
788 ]
789 );
790
791 $this->add_control(
792 'display_y_ticks',
793 [
794 'label' => esc_html__('Ticks (Labels)', 'king-addons'),
795 'type' => Controls_Manager::SWITCHER,
796 'default' => 'true',
797 'return_value' => 'true'
798 ]
799 );
800
801 $this->add_control(
802 'y_step_size',
803 [
804 'label' => esc_html__('Step Size', 'king-addons'),
805 'type' => Controls_Manager::NUMBER,
806 'min' => 0,
807 'max' => 360,
808 'default' => 0,
809 'frontend_available' => true,
810 'condition' => [
811 'display_y_ticks' => 'true'
812 ]
813 ]
814 );
815
816 $this->add_control(
817 'display_y_axis_title',
818 [
819 'label' => esc_html__('Show Title', 'king-addons'),
820 'type' => Controls_Manager::SWITCHER,
821 'default' => 'true',
822 'return_value' => 'true'
823 ]
824 );
825
826 $this->add_control(
827 'y_axis_title',
828 [
829 'label' => esc_html__('Title', 'king-addons'),
830 'type' => Controls_Manager::TEXT,
831 'dynamic' => [
832 'active' => true,
833 ],
834 'placeholder' => esc_html__('Y-Axis', 'king-addons'),
835 'default' => esc_html__('Y-Axis', 'king-addons'),
836 'condition' => [
837 'display_y_axis_title' => 'true'
838 ]
839 ]
840 );
841
842 $this->add_control(
843 'labels_rotation_y_axis',
844 [
845 'label' => esc_html__('Ticks (Labels) Rotation', 'king-addons'),
846 'type' => Controls_Manager::NUMBER,
847 'min' => 0,
848 'max' => 360,
849 'default' => 0,
850 'frontend_available' => true
851 ]
852 );
853
854 $this->add_control(
855 'reverse_x',
856 [
857 'label' => esc_html__('Reverse Charts', 'king-addons'),
858 'type' => Controls_Manager::SWITCHER,
859 'default' => 'no',
860 'return_value' => 'yes',
861 'separator' => 'before',
862 'condition' => [
863 'show_chart_legend' => 'yes',
864 'chart_type' => 'bar_horizontal'
865 ]
866 ]
867 );
868
869 $this->add_control(
870 'reverse_y',
871 [
872 'label' => esc_html__('Reverse Charts', 'king-addons'),
873 'type' => Controls_Manager::SWITCHER,
874 'default' => 'no',
875 'return_value' => 'yes',
876 'separator' => 'before',
877 'condition' => [
878 'show_chart_legend' => 'yes',
879 'chart_type' => ['bar', 'line']
880 ]
881 ]
882 );
883
884 $this->add_control(
885 'border_dash_length', [
886 'label' => esc_html__('Border Dash length', 'king-addons'),
887 'type' => Controls_Manager::NUMBER,
888 'default' => '1',
889 'separator' => 'before',
890
891 'conditions' => [
892 'relation' => 'or',
893 'terms' => [
894 [
895 'name' => 'display_x_axis',
896 'operator' => '==',
897 'value' => 'true'
898 ],
899 [
900 'name' => 'display_y_axis',
901 'operator' => '==',
902 'value' => 'true'
903 ]
904 ]
905 ]
906 ]
907 );
908
909 $this->add_control(
910 'border_dash_spacing', [
911 'label' => esc_html__('Border Dash spacing', 'king-addons'),
912 'type' => Controls_Manager::NUMBER,
913 'default' => '1',
914
915 'conditions' => [
916 'relation' => 'or',
917 'terms' => [
918 [
919 'name' => 'display_x_axis',
920 'operator' => '==',
921 'value' => 'true'
922 ],
923 [
924 'name' => 'display_y_axis',
925 'operator' => '==',
926 'value' => 'true'
927 ]
928 ]
929 ]
930 ]
931 );
932
933 $this->add_control(
934 'border_dash_offset', [
935 'label' => esc_html__('Border Dash offset', 'king-addons'),
936 'type' => Controls_Manager::NUMBER,
937 'default' => '1',
938
939 'conditions' => [
940 'relation' => 'or',
941 'terms' => [
942 [
943 'name' => 'display_x_axis',
944 'operator' => '==',
945 'value' => 'true'
946 ],
947 [
948 'name' => 'display_y_axis',
949 'operator' => '==',
950 'value' => 'true'
951 ]
952 ]
953 ]
954 ]
955 );
956
957 $this->end_controls_section();
958
959 $this->start_controls_section(
960 'section_chart_title',
961 [
962 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Title', 'king-addons'),
963 'tab' => Controls_Manager::TAB_CONTENT,
964 ]
965 );
966
967 $this->add_control(
968 'show_chart_title',
969 [
970 'label' => esc_html__('Show Title', 'king-addons'),
971 'type' => Controls_Manager::SWITCHER,
972 'return_value' => 'yes'
973 ]
974 );
975
976 $this->add_control(
977 'chart_title',
978 [
979 'label' => esc_html__('Title', 'king-addons'),
980 'type' => Controls_Manager::TEXT,
981 'dynamic' => [
982 'active' => true,
983 ],
984 'placeholder' => esc_html__('To Be Applied', 'king-addons'),
985 'default' => esc_html__('To Be Applied', 'king-addons'),
986 'condition' => [
987 'show_chart_title' => 'yes',
988 ],
989 ]
990 );
991
992 $this->add_control(
993 'chart_title_position',
994 [
995 'label' => esc_html__('Position', 'king-addons'),
996 'type' => Controls_Manager::SELECT,
997 'default' => 'top',
998 'label_block' => false,
999 'options' => [
1000 'top' => esc_html__('Top', 'king-addons'),
1001 'right' => esc_html__('Right', 'king-addons'),
1002 'bottom' => esc_html__('Bottom', 'king-addons'),
1003 'left' => esc_html__('Left', 'king-addons'),
1004
1005 ],
1006 'condition' => [
1007 'show_chart_title' => 'yes',
1008 ]
1009 ]
1010 );
1011
1012 $this->add_control(
1013 'chart_title_align',
1014 [
1015 'label' => esc_html__('Align', 'king-addons'),
1016 'type' => Controls_Manager::SELECT,
1017 'default' => 'center',
1018 'label_block' => false,
1019 'options' => [
1020 'start' => esc_html__('Start', 'king-addons'),
1021 'center' => esc_html__('Center', 'king-addons'),
1022 'end' => esc_html__('End', 'king-addons'),
1023 ],
1024 'condition' => [
1025 'show_chart_title' => 'yes',
1026 ]
1027 ]
1028 );
1029
1030 $this->end_controls_section();
1031
1032 $this->start_controls_section(
1033 'section_chart_legend',
1034 [
1035 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Legends', 'king-addons'),
1036 'tab' => Controls_Manager::TAB_CONTENT,
1037 ]
1038 );
1039
1040 $this->add_control(
1041 'show_chart_legend',
1042 [
1043 'label' => esc_html__('Show Legends', 'king-addons'),
1044 'type' => Controls_Manager::SWITCHER,
1045 'default' => 'yes',
1046 'return_value' => 'yes',
1047 ]
1048 );
1049
1050 $this->add_control(
1051 'reverse_legend',
1052 [
1053 'label' => esc_html__('Reverse', 'king-addons'),
1054 'type' => Controls_Manager::SWITCHER,
1055 'default' => 'no',
1056 'return_value' => 'yes',
1057 'condition' => [
1058 'show_chart_legend' => 'yes',
1059 ]
1060 ]
1061 );
1062
1063 $this->add_control(
1064 'charts_legend_shape',
1065 [
1066 'label' => esc_html__('Shape', 'king-addons'),
1067 'type' => Controls_Manager::SELECT,
1068 'default' => 'rectangle',
1069 'label_block' => false,
1070 'render_type' => 'template',
1071 'options' => [
1072 'rectangle' => esc_html__('Rectangle', 'king-addons'),
1073 'point' => esc_html__('Point', 'king-addons'),
1074 ],
1075 'condition' => [
1076 'show_chart_legend' => 'yes',
1077 ]
1078 ]
1079 );
1080
1081 $this->add_control(
1082 'charts_legend_position',
1083 [
1084 'label' => esc_html__('Position', 'king-addons'),
1085 'type' => Controls_Manager::SELECT,
1086 'default' => 'top',
1087 'label_block' => false,
1088 'options' => [
1089 'top' => esc_html__('Top', 'king-addons'),
1090 'right' => esc_html__('Right', 'king-addons'),
1091 'bottom' => esc_html__('Bottom', 'king-addons'),
1092 'left' => esc_html__('Left', 'king-addons'),
1093 'chartArea' => esc_html__('chartArea', 'king-addons'),
1094 ],
1095 'condition' => [
1096 'show_chart_legend' => 'yes',
1097 ]
1098 ]
1099 );
1100
1101 $this->add_control(
1102 'charts_legend_align',
1103 [
1104 'label' => esc_html__('Align', 'king-addons'),
1105 'type' => Controls_Manager::SELECT,
1106 'default' => 'center',
1107 'label_block' => false,
1108 'options' => [
1109 'start' => esc_html__('Start', 'king-addons'),
1110 'center' => esc_html__('Center', 'king-addons'),
1111 'end' => esc_html__('End', 'king-addons'),
1112 ],
1113 'condition' => [
1114 'show_chart_legend' => 'yes',
1115 ]
1116 ]
1117 );
1118
1119 $this->end_controls_section();
1120
1121 $this->start_controls_section(
1122 'section_chart_tooltip',
1123 [
1124 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Tooltip', 'king-addons'),
1125 'tab' => Controls_Manager::TAB_CONTENT,
1126 ]
1127 );
1128
1129 $this->add_control(
1130 'show_chart_tooltip',
1131 [
1132 'label' => esc_html__('Show Tooltip', 'king-addons'),
1133 'type' => Controls_Manager::SWITCHER,
1134 'default' => 'yes',
1135 'return_value' => 'yes'
1136 ]
1137 );
1138
1139 $this->add_control(
1140 'tooltips_percent',
1141 [
1142 'label' => esc_html__('Convert Values to Percents', 'king-addons'),
1143 'type' => Controls_Manager::SWITCHER,
1144 'return_value' => 'true',
1145 'default' => 'true',
1146 'frontend_available' => true,
1147 'condition' => [
1148 'show_chart_tooltip' => 'yes'
1149 ]
1150 ]
1151 );
1152
1153 $this->add_control(
1154 'trigger_tooltip_on',
1155 [
1156 'label' => esc_html__('Show Tooltip On', 'king-addons'),
1157 'type' => Controls_Manager::SELECT,
1158 'default' => 'mousemove',
1159 'options' => [
1160 'mousemove' => esc_html__('Hover', 'king-addons'),
1161 'click' => esc_html__('Click', 'king-addons'),
1162 ],
1163 'condition' => [
1164 'show_chart_tooltip' => 'yes'
1165 ]
1166 ]
1167 );
1168
1169 $this->add_control(
1170 'chart_interaction_mode',
1171 [
1172 'label' => esc_html__('Interaction Mode', 'king-addons'),
1173 'type' => Controls_Manager::SELECT,
1174 'default' => 'point',
1175 'options' => [
1176
1177 'point' => esc_html__('Point', 'king-addons'),
1178 'index' => esc_html__('Index', 'king-addons'),
1179 'dataset' => esc_html__('Dataset', 'king-addons'),
1180 ],
1181 'condition' => [
1182 'show_chart_tooltip' => 'yes'
1183 ]
1184 ]
1185 );
1186
1187 $this->add_control(
1188 'chart_tooltip_position',
1189 [
1190 'label' => esc_html__('Position', 'king-addons'),
1191 'type' => Controls_Manager::SELECT,
1192 'default' => 'nearest',
1193 'options' => [
1194 'nearest' => esc_html__('Nearest', 'king-addons'),
1195 'average' => esc_html__('Average', 'king-addons'),
1196 ],
1197 'condition' => [
1198 'show_chart_tooltip' => 'yes'
1199 ]
1200 ]
1201 );
1202
1203 $this->end_controls_section();
1204
1205 $this->start_controls_section(
1206 'section_chart_lines',
1207 [
1208 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Lines', 'king-addons'),
1209 'tab' => Controls_Manager::TAB_CONTENT,
1210 'condition' => [
1211 'chart_type' => ['line', 'radar'],
1212 ]
1213 ]
1214 );
1215
1216 $this->add_control(
1217 'show_lines',
1218 [
1219 'label' => esc_html__('Show Lines', 'king-addons'),
1220 'type' => Controls_Manager::SWITCHER,
1221 'default' => 'yes',
1222 'return_value' => 'yes',
1223 'separator' => 'before',
1224 ]
1225 );
1226
1227 $this->add_control(
1228 'chart_type_line_fill',
1229 [
1230 'label' => esc_html__('Show Background Fill', 'king-addons'),
1231 'type' => Controls_Manager::SWITCHER,
1232 'default' => 'yes',
1233 'return_value' => 'yes',
1234 'condition' => [
1235 'chart_type!' => ['bar', 'bar_horizontal'],
1236 ]
1237 ]
1238 );
1239
1240 $this->add_control(
1241 'line_dots',
1242 [
1243 'label' => esc_html__('Show Dots', 'king-addons'),
1244 'type' => Controls_Manager::SWITCHER,
1245 'default' => 'yes',
1246 'return_value' => 'yes',
1247 'condition' => [
1248 'chart_type!' => ['bar', 'bar_horizontal'],
1249 ]
1250 ]
1251 );
1252
1253 $this->add_responsive_control(
1254 'line_dots_radius',
1255 [
1256 'label' => esc_html__('Dots Size', 'king-addons'),
1257 'type' => Controls_Manager::SLIDER,
1258 'devices' => ['desktop', 'mobile'],
1259 'exclude' => ['tablet'],
1260 'range' => [
1261 'px' => [
1262 'min' => 0,
1263 'max' => 50,
1264 ],
1265 ],
1266 'size_units' => ['px'],
1267 'default' => [
1268 'unit' => 'px',
1269 'size' => 10,
1270 ],
1271 'mobile_default' => [
1272 'unit' => 'px',
1273 'size' => 5
1274 ],
1275 'condition' => [
1276 'chart_type!' => ['bar', 'bar_horizontal'],
1277 'line_dots' => 'yes',
1278 ]
1279 ]
1280 );
1281
1282 $this->end_controls_section();
1283
1284 $this->start_controls_section(
1285 'chart_section_style_res',
1286 [
1287 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Responsive', 'king-addons'),
1288 'tab' => Controls_Manager::TAB_CONTENT,
1289 ]
1290 );
1291
1292 $this->add_control(
1293 'responsive_chart',
1294 [
1295 'label' => esc_html__('Responsive Layout', 'king-addons'),
1296 'description' => esc_html__('Enables scrollbar on tablet and mobile screens', 'king-addons'),
1297 'default' => 'yes',
1298 'type' => Controls_Manager::SWITCHER,
1299 'selectors' => [
1300 '{{WRAPPER}} .king-addons-charts-container' => 'overflow: auto;',
1301 '{{WRAPPER}} .king-addons-charts-wrapper' => 'position: relative; margin: 0 auto;',
1302 ],
1303 ]
1304 );
1305
1306
1307 $this->add_responsive_control(
1308 'chart_res_width',
1309 [
1310 'label' => esc_html__('Min Width (px)', 'king-addons'),
1311 'type' => Controls_Manager::SLIDER,
1312 'range' => [
1313 'px' => [
1314 'min' => 0,
1315 'max' => 1600
1316 ]
1317 ],
1318 'default' => [
1319 'size' => 800,
1320 ],
1321 'selectors' => [
1322 '{{WRAPPER}} .king-addons-charts-wrapper' => 'min-width: {{SIZE}}px;',
1323 ],
1324 'separator' => 'before',
1325 'condition' => [
1326 'responsive_chart' => 'yes',
1327 ],
1328 ]
1329 );
1330
1331
1332 $this->add_responsive_control(
1333 'chart_res_height',
1334 [
1335 'label' => esc_html__('Min Height (px)', 'king-addons'),
1336 'type' => Controls_Manager::SLIDER,
1337 'range' => [
1338 'px' => [
1339 'min' => 0,
1340 'max' => 1600
1341 ]
1342 ],
1343 'default' => [
1344 'size' => 400,
1345 ],
1346 'selectors' => [
1347 '{{WRAPPER}} .king-addons-charts-wrapper' => 'min-height: {{SIZE}}px;',
1348 ],
1349 'condition' => [
1350 'responsive_chart' => 'yes',
1351 ],
1352 ]
1353 );
1354
1355 $this->end_controls_section();
1356
1357 Core::renderProFeaturesSection($this, '', Controls_Manager::RAW_HTML, 'charts', [
1358 'Upload CSV File',
1359 'Import CSV File from URL',
1360 'Import Published Google Sheets',
1361 'Add Unlimited Chart Items',
1362 'Add Unlimited Data Labels'
1363 ]);
1364
1365 $this->start_controls_section(
1366 'section_datalabels_styles',
1367 [
1368 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Data Values', 'king-addons'),
1369 'tab' => Controls_Manager::TAB_STYLE,
1370 'condition' => [
1371 'inner_datalabels' => 'true'
1372 ]
1373 ]
1374 );
1375
1376 $this->add_control(
1377 'inner_datalabels_color', [
1378 'label' => esc_html__('Color', 'king-addons'),
1379 'type' => Controls_Manager::COLOR,
1380 'default' => '#FFF',
1381 ]
1382 );
1383
1384 $this->add_control(
1385 'inner_datalabels_font_family',
1386 [
1387 'label' => esc_html__('Font Family', 'king-addons'),
1388 'type' => Controls_Manager::FONT,
1389 'description' => esc_html__('Use only the fonts located under System options group', 'king-addons'),
1390 'default' => 'Arial',
1391 ]
1392 );
1393
1394 $this->add_control(
1395 'inner_datalabels_font_style',
1396 [
1397 'label' => esc_html__('Font Style', 'king-addons'),
1398 'type' => Controls_Manager::SELECT,
1399 'default' => 'normal',
1400 'options' => [
1401 'normal' => 'Normal',
1402 'italic' => 'Italic',
1403 'oblique' => 'Oblique',
1404 ],
1405
1406 ]
1407 );
1408
1409 $this->add_control(
1410 'inner_datalabels_font_weight',
1411 [
1412 'label' => esc_html__('Font Weight ', 'king-addons'),
1413 'type' => Controls_Manager::NUMBER,
1414 'min' => 0,
1415 'default' => 600,
1416 'frontend_available' => true
1417 ]
1418 );
1419
1420 $this->add_control(
1421 'inner_datalabels_font_size',
1422 [
1423 'label' => esc_html__('Font Size', 'king-addons'),
1424 'type' => Controls_Manager::SLIDER,
1425 'size_units' => ['px'],
1426 'range' => [
1427 'px' => [
1428 'min' => 10,
1429 'max' => 100,
1430 ],
1431 ],
1432 'default' => [
1433 'unit' => 'px',
1434 'size' => 14,
1435 ]
1436 ]
1437 );
1438
1439 $this->end_controls_section();
1440
1441 $this->start_controls_section(
1442 'section_styles_chart_axis_r',
1443 [
1444 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Axis', 'king-addons'),
1445 'tab' => Controls_Manager::TAB_STYLE,
1446 'condition' => [
1447 'chart_type' => ['radar', 'polarArea']
1448 ],
1449 ]
1450 );
1451
1452 $this->add_control(
1453 'r_axis_angle_lines_heading',
1454 [
1455 'label' => esc_html__('Angle Lines', 'king-addons'),
1456 'type' => Controls_Manager::HEADING,
1457 ]
1458 );
1459
1460 $this->add_control(
1461 'angle_lines_color', [
1462 'label' => esc_html__('Color', 'king-addons'),
1463 'type' => Controls_Manager::COLOR,
1464 'default' => '#E7E7E7'
1465 ]
1466 );
1467
1468 $this->add_control(
1469 'r_axis_grid_lines_heading',
1470 [
1471 'label' => esc_html__('Grid Lines', 'king-addons'),
1472 'type' => Controls_Manager::HEADING,
1473 'separator' => 'before',
1474 ]
1475 );
1476
1477 $this->add_control(
1478 'axis_grid_line_color_r', [
1479 'label' => esc_html__('Color', 'king-addons'),
1480 'type' => Controls_Manager::COLOR,
1481 'default' => '#E7E7E7'
1482 ]
1483 );
1484
1485 $this->add_control(
1486 'axis_labels_heading',
1487 [
1488 'label' => esc_html__('Axis Labels', 'king-addons'),
1489 'type' => Controls_Manager::HEADING,
1490 'separator' => 'before',
1491 ]
1492 );
1493
1494 $this->add_control(
1495 'axis_labels_color', [
1496 'label' => esc_html__('Color', 'king-addons'),
1497 'type' => Controls_Manager::COLOR,
1498 'default' => '#222222'
1499 ]
1500 );
1501
1502 $this->add_control(
1503 'axis_labels_bg_color', [
1504 'label' => esc_html__('Background Color', 'king-addons'),
1505 'type' => Controls_Manager::COLOR,
1506 'default' => '#B2B2B200'
1507 ]
1508 );
1509
1510 $this->add_control(
1511 'axis_labels_padding',
1512 [
1513 'label' => esc_html__('Padding', 'king-addons'),
1514 'type' => Controls_Manager::SLIDER,
1515 'size_units' => ['px'],
1516 'range' => [
1517 'px' => [
1518 'min' => 0,
1519 'max' => 100,
1520 ],
1521 ],
1522 'default' => [
1523 'unit' => 'px',
1524 'size' => 5,
1525 ],
1526 ]
1527 );
1528
1529 $this->add_control(
1530 'chart_point_labels_heading',
1531 [
1532 'label' => esc_html__('Ticks', 'king-addons'),
1533 'type' => Controls_Manager::HEADING,
1534 'separator' => 'before'
1535 ]
1536 );
1537
1538 $this->add_control(
1539 'chart_point_labels_color_r', [
1540 'label' => esc_html__('Color', 'king-addons'),
1541 'type' => Controls_Manager::COLOR,
1542 'default' => '#B2B2B2'
1543 ]
1544 );
1545
1546 $this->add_control(
1547 'point_labels_font_family_r',
1548 [
1549 'label' => esc_html__('Font Family', 'king-addons'),
1550 'type' => Controls_Manager::FONT,
1551 'description' => esc_html__('Use only the fonts located under System options group', 'king-addons'),
1552 'default' => 'Arial',
1553 ]
1554 );
1555
1556 $this->add_control(
1557 'point_labels_font_style_r',
1558 [
1559 'label' => esc_html__('Font Style', 'king-addons'),
1560 'type' => Controls_Manager::SELECT,
1561 'default' => 'normal',
1562 'options' => [
1563 'normal' => 'Normal',
1564 'italic' => 'Italic',
1565 'oblique' => 'Oblique',
1566 ],
1567
1568 ]
1569 );
1570
1571 $this->add_control(
1572 'point_labels_font_weight_r',
1573 [
1574 'label' => esc_html__('Font Weight ', 'king-addons'),
1575 'type' => Controls_Manager::NUMBER,
1576 'min' => 0,
1577 'default' => 600,
1578 'frontend_available' => true,
1579 ]
1580 );
1581
1582 $this->add_control(
1583 'point_labels_font_size_r',
1584 [
1585 'label' => esc_html__('Font Size', 'king-addons'),
1586 'type' => Controls_Manager::SLIDER,
1587 'size_units' => ['px'],
1588 'range' => [
1589 'px' => [
1590 'min' => 10,
1591 'max' => 100,
1592 ],
1593 ],
1594 'default' => [
1595 'unit' => 'px',
1596 'size' => 14,
1597 ],
1598 ]
1599 );
1600
1601 $this->end_controls_section();
1602
1603 $this->start_controls_section(
1604 'section_chart_axis_styles',
1605 [
1606 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Axis', 'king-addons'),
1607 'tab' => Controls_Manager::TAB_STYLE,
1608 'condition' => [
1609 'chart_type' => ['bar', 'bar_horizontal', 'line']
1610 ],
1611 ]
1612 );
1613
1614 $this->add_control(
1615 'x_axis_grid_lines_heading',
1616 [
1617 'label' => esc_html__('Grid Lines (X)', 'king-addons'),
1618 'type' => Controls_Manager::HEADING,
1619 'separator' => 'before',
1620 ]
1621 );
1622
1623 $this->add_control(
1624 'axis_grid_line_color_x', [
1625 'label' => esc_html__('Color (X)', 'king-addons'),
1626 'type' => Controls_Manager::COLOR,
1627 'default' => '#999999'
1628 ]
1629 );
1630
1631 $this->add_control(
1632 'y_axis_grid_lines_heading',
1633 [
1634 'label' => esc_html__('Grid Lines (Y)', 'king-addons'),
1635 'type' => Controls_Manager::HEADING,
1636 'separator' => 'before',
1637 ]
1638 );
1639
1640 $this->add_control(
1641 'axis_grid_line_color_y', [
1642 'label' => esc_html__('Color (Y)', 'king-addons'),
1643 'type' => Controls_Manager::COLOR,
1644 'default' => '#999999'
1645 ]
1646 );
1647
1648 $this->add_control(
1649 'x_axis_title_styles_heading',
1650 [
1651 'label' => esc_html__('X-Title', 'king-addons'),
1652 'type' => Controls_Manager::HEADING,
1653 'separator' => 'before',
1654 ]
1655 );
1656
1657 $this->add_control(
1658 'axis_title_color_x', [
1659 'label' => esc_html__('Color (X)', 'king-addons'),
1660 'type' => Controls_Manager::COLOR,
1661 'default' => '#C0C0C0'
1662 ]
1663 );
1664
1665 $this->add_control(
1666 'axis_title_font_family_x',
1667 [
1668 'label' => esc_html__('Font Family', 'king-addons'),
1669 'type' => Controls_Manager::FONT,
1670 'description' => esc_html__('Use only the fonts located under System options group', 'king-addons'),
1671 'default' => 'Arial',
1672 ]
1673 );
1674
1675 $this->add_control(
1676 'axis_title_font_style_x',
1677 [
1678 'label' => esc_html__('Font Style', 'king-addons'),
1679 'type' => Controls_Manager::SELECT,
1680 'default' => 'normal',
1681 'options' => [
1682 'normal' => 'Normal',
1683 'italic' => 'Italic',
1684 'oblique' => 'Oblique',
1685 ],
1686
1687 ]
1688 );
1689
1690 $this->add_control(
1691 'axis_title_font_weight_x',
1692 [
1693 'label' => esc_html__('Font Weight ', 'king-addons'),
1694 'type' => Controls_Manager::NUMBER,
1695 'min' => 0,
1696 'default' => 600,
1697 'frontend_available' => true,
1698 ]
1699 );
1700
1701 $this->add_control(
1702 'axis_title_font_size_x',
1703 [
1704 'label' => esc_html__('Font Size', 'king-addons'),
1705 'type' => Controls_Manager::SLIDER,
1706 'size_units' => ['px'],
1707 'range' => [
1708 'px' => [
1709 'min' => 10,
1710 'max' => 100,
1711 ],
1712 ],
1713 'default' => [
1714 'unit' => 'px',
1715 'size' => 14,
1716 ],
1717 ]
1718 );
1719
1720 $this->add_control(
1721 'y_axis_title_styles_heading',
1722 [
1723 'label' => esc_html__('Y-Title', 'king-addons'),
1724 'type' => Controls_Manager::HEADING,
1725 'separator' => 'before',
1726 ]
1727 );
1728
1729 $this->add_control(
1730 'axis_title_color_y', [
1731 'label' => esc_html__('Color (Y)', 'king-addons'),
1732 'type' => Controls_Manager::COLOR,
1733 'default' => '#C0C0C0'
1734 ]
1735 );
1736
1737 $this->add_control(
1738 'axis_title_font_family_y',
1739 [
1740 'label' => esc_html__('Font Family', 'king-addons'),
1741 'type' => Controls_Manager::FONT,
1742 'description' => esc_html__('Use only the fonts located under System options group', 'king-addons'),
1743 'default' => 'Arial',
1744 ]
1745 );
1746
1747 $this->add_control(
1748 'axis_title_font_style_y',
1749 [
1750 'label' => esc_html__('Font Style', 'king-addons'),
1751 'type' => Controls_Manager::SELECT,
1752 'default' => 'normal',
1753 'options' => [
1754 'normal' => 'Normal',
1755 'italic' => 'Italic',
1756 'oblique' => 'Oblique',
1757 ],
1758
1759 ]
1760 );
1761
1762 $this->add_control(
1763 'axis_title_font_weight_y',
1764 [
1765 'label' => esc_html__('Font Weight ', 'king-addons'),
1766 'type' => Controls_Manager::NUMBER,
1767 'min' => 0,
1768 'default' => 600,
1769 'frontend_available' => true,
1770 ]
1771 );
1772
1773 $this->add_control(
1774 'axis_title_font_size_y',
1775 [
1776 'label' => esc_html__('Font Size', 'king-addons'),
1777 'type' => Controls_Manager::SLIDER,
1778 'size_units' => ['px'],
1779 'range' => [
1780 'px' => [
1781 'min' => 10,
1782 'max' => 100,
1783 ],
1784 ],
1785 'default' => [
1786 'unit' => 'px',
1787 'size' => 14,
1788 ],
1789 ]
1790 );
1791
1792 $this->add_control(
1793 'x_ticks_styles_heading',
1794 [
1795 'label' => esc_html__('X-Ticks', 'king-addons'),
1796 'type' => Controls_Manager::HEADING,
1797 'separator' => 'before',
1798 ]
1799 );
1800
1801 $this->add_control(
1802 'chart_ticks_color_x', [
1803 'label' => esc_html__('Ticks Color (X)', 'king-addons'),
1804 'type' => Controls_Manager::COLOR,
1805 ]
1806 );
1807
1808 $this->add_control(
1809 'ticks_font_family_x',
1810 [
1811 'label' => esc_html__('Font Family', 'king-addons'),
1812 'type' => Controls_Manager::FONT,
1813 'description' => esc_html__('Use only the fonts located under System options group', 'king-addons'),
1814 'default' => 'Arial',
1815 ]
1816 );
1817
1818 $this->add_control(
1819 'ticks_font_style_x',
1820 [
1821 'label' => esc_html__('Font Style', 'king-addons'),
1822 'type' => Controls_Manager::SELECT,
1823 'default' => 'normal',
1824 'options' => [
1825 'normal' => 'Normal',
1826 'italic' => 'Italic',
1827 'oblique' => 'Oblique',
1828 ],
1829
1830 ]
1831 );
1832
1833 $this->add_control(
1834 'ticks_font_weight_x',
1835 [
1836 'label' => esc_html__('Font Weight ', 'king-addons'),
1837 'type' => Controls_Manager::NUMBER,
1838 'min' => 0,
1839 'default' => 600,
1840 'frontend_available' => true,
1841 ]
1842 );
1843
1844 $this->add_control(
1845 'ticks_font_size_x',
1846 [
1847 'label' => esc_html__('Font Size', 'king-addons'),
1848 'type' => Controls_Manager::SLIDER,
1849 'size_units' => ['px'],
1850 'range' => [
1851 'px' => [
1852 'min' => 10,
1853 'max' => 100,
1854 ],
1855 ],
1856 'default' => [
1857 'unit' => 'px',
1858 'size' => 17,
1859 ],
1860 ]
1861 );
1862
1863 $this->add_control(
1864 'ticks_padding_x',
1865 [
1866 'label' => esc_html__('Distance', 'king-addons'),
1867 'type' => Controls_Manager::SLIDER,
1868 'range' => [
1869 'px' => [
1870 'min' => 0,
1871 'max' => 50,
1872 ],
1873 ],
1874 'size_units' => ['px'],
1875 'default' => [
1876 'unit' => 'px',
1877 'size' => 10,
1878 ]
1879 ]
1880 );
1881
1882 $this->add_control(
1883 'y_ticks_styles_heading',
1884 [
1885 'label' => esc_html__('Y-Ticks', 'king-addons'),
1886 'type' => Controls_Manager::HEADING,
1887 'separator' => 'before',
1888 ]
1889 );
1890
1891 $this->add_control(
1892 'chart_ticks_color_y', [
1893 'label' => esc_html__('Ticks Color (Y)', 'king-addons'),
1894 'type' => Controls_Manager::COLOR,
1895 ]
1896 );
1897
1898 $this->add_control(
1899 'ticks_font_family_y',
1900 [
1901 'label' => esc_html__('Font Family', 'king-addons'),
1902 'type' => Controls_Manager::FONT,
1903 'description' => esc_html__('Use only the fonts located under System options group', 'king-addons'),
1904 'default' => 'Arial',
1905 ]
1906 );
1907
1908 $this->add_control(
1909 'ticks_font_style_y',
1910 [
1911 'label' => esc_html__('Font Style', 'king-addons'),
1912 'type' => Controls_Manager::SELECT,
1913 'default' => 'normal',
1914 'options' => [
1915 'normal' => 'Normal',
1916 'italic' => 'Italic',
1917 'oblique' => 'Oblique',
1918 ],
1919
1920 ]
1921 );
1922
1923 $this->add_control(
1924 'ticks_font_weight_y',
1925 [
1926 'label' => esc_html__('Font Weight ', 'king-addons'),
1927 'type' => Controls_Manager::NUMBER,
1928 'min' => 0,
1929 'default' => 600,
1930 'frontend_available' => true,
1931 ]
1932 );
1933
1934 $this->add_control(
1935 'ticks_font_size_y',
1936 [
1937 'label' => esc_html__('Font Size', 'king-addons'),
1938 'type' => Controls_Manager::SLIDER,
1939 'size_units' => ['px'],
1940 'range' => [
1941 'px' => [
1942 'min' => 10,
1943 'max' => 100,
1944 ],
1945 ],
1946 'default' => [
1947 'unit' => 'px',
1948 'size' => 14,
1949 ],
1950 ]
1951 );
1952
1953 $this->add_control(
1954 'ticks_padding_y',
1955 [
1956 'label' => esc_html__('Distance', 'king-addons'),
1957 'type' => Controls_Manager::SLIDER,
1958 'range' => [
1959 'px' => [
1960 'min' => 0,
1961 'max' => 50,
1962 ],
1963 ],
1964 'size_units' => ['px'],
1965 'default' => [
1966 'unit' => 'px',
1967 'size' => 10,
1968 ]
1969 ]
1970 );
1971
1972 $this->end_controls_section();
1973
1974 $this->start_controls_section(
1975 'section_chart_title_styles',
1976 [
1977 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Title', 'king-addons'),
1978 'tab' => Controls_Manager::TAB_STYLE,
1979 'condition' => [
1980 'show_chart_title' => 'yes'
1981 ]
1982 ]
1983 );
1984
1985 $this->add_control(
1986 'chart_title_color', [
1987 'label' => esc_html__('Color', 'king-addons'),
1988 'type' => Controls_Manager::COLOR,
1989 ]
1990 );
1991
1992 $this->add_control(
1993 'title_font_family',
1994 [
1995 'label' => esc_html__('Font Family', 'king-addons'),
1996 'type' => Controls_Manager::FONT,
1997 'description' => esc_html__('Use only the fonts located under System options group', 'king-addons'),
1998 'default' => 'Arial',
1999 ]
2000 );
2001
2002 $this->add_control(
2003 'title_font_style',
2004 [
2005 'label' => esc_html__('Font Style', 'king-addons'),
2006 'type' => Controls_Manager::SELECT,
2007 'default' => 'normal',
2008 'options' => [
2009 'normal' => 'Normal',
2010 'italic' => 'Italic',
2011 'oblique' => 'Oblique',
2012 ],
2013
2014 ]
2015 );
2016
2017 $this->add_control(
2018 'title_font_weight',
2019 [
2020 'label' => esc_html__('Font Weight ', 'king-addons'),
2021 'type' => Controls_Manager::NUMBER,
2022 'min' => 0,
2023 'default' => 600,
2024 'frontend_available' => true,
2025 ]
2026 );
2027
2028 $this->add_control(
2029 'title_font_size',
2030 [
2031 'label' => esc_html__('Font Size', 'king-addons'),
2032 'type' => Controls_Manager::SLIDER,
2033 'size_units' => ['px'],
2034 'range' => [
2035 'px' => [
2036 'min' => 10,
2037 'max' => 100,
2038 ],
2039 ],
2040 'default' => [
2041 'unit' => 'px',
2042 'size' => 14,
2043 ],
2044 ]
2045 );
2046
2047 $this->add_control(
2048 'chart_title_padding',
2049 [
2050 'label' => esc_html__('Padding', 'king-addons'),
2051 'type' => Controls_Manager::SLIDER,
2052 'range' => [
2053 'px' => [
2054 'min' => 0,
2055 'max' => 50,
2056 ],
2057 ],
2058 'size_units' => ['px'],
2059 'default' => [
2060 'unit' => 'px',
2061 'size' => 10,
2062 ],
2063 ]
2064 );
2065
2066 $this->end_controls_section();
2067
2068 $this->start_controls_section(
2069 'section_chart_legend_styles',
2070 [
2071 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Legend', 'king-addons'),
2072 'tab' => Controls_Manager::TAB_STYLE,
2073 ]
2074 );
2075
2076 $this->add_control(
2077 'chart_legend_text_color', [
2078 'label' => esc_html__('Color', 'king-addons'),
2079 'type' => Controls_Manager::COLOR,
2080 'default' => '#222222'
2081 ]
2082 );
2083
2084 $this->add_control(
2085 'legend_font_family',
2086 [
2087 'label' => esc_html__('Font Family', 'king-addons'),
2088 'type' => Controls_Manager::FONT,
2089 'description' => esc_html__('Use only the fonts located under System options group', 'king-addons'),
2090 'default' => 'Arial',
2091 ]
2092 );
2093
2094 $this->add_control(
2095 'legend_font_style',
2096 [
2097 'label' => esc_html__('Font Style', 'king-addons'),
2098 'type' => Controls_Manager::SELECT,
2099 'default' => 'normal',
2100 'options' => [
2101 'normal' => 'Normal',
2102 'italic' => 'Italic',
2103 'oblique' => 'Oblique',
2104 ],
2105
2106 ]
2107 );
2108
2109 $this->add_control(
2110 'legend_font_weight',
2111 [
2112 'label' => esc_html__('Font Weight ', 'king-addons'),
2113 'type' => Controls_Manager::NUMBER,
2114 'min' => 0,
2115 'default' => 600,
2116 'frontend_available' => true,
2117 ]
2118 );
2119
2120 $this->add_control(
2121 'legend_font_size',
2122 [
2123 'label' => esc_html__('Font Size', 'king-addons'),
2124 'type' => Controls_Manager::SLIDER,
2125 'size_units' => ['px'],
2126 'range' => [
2127 'px' => [
2128 'min' => 10,
2129 'max' => 100,
2130 ],
2131 ],
2132 'default' => [
2133 'unit' => 'px',
2134 'size' => 14,
2135 ],
2136 ]
2137 );
2138
2139 $this->add_control(
2140 'legend_box_width',
2141 [
2142 'label' => esc_html__('Box Size', 'king-addons'),
2143 'type' => Controls_Manager::SLIDER,
2144 'range' => [
2145 'px' => [
2146 'min' => 0,
2147 'max' => 200,
2148 ],
2149 ],
2150 'size_units' => ['px'],
2151 'default' => [
2152 'unit' => 'px',
2153 'size' => 40,
2154 ]
2155 ]
2156 );
2157
2158 $this->add_control(
2159 'chart_legend_padding',
2160 [
2161 'label' => esc_html__('Gutter', 'king-addons'),
2162 'type' => Controls_Manager::SLIDER,
2163 'range' => [
2164 'px' => [
2165 'min' => 0,
2166 'max' => 50,
2167 ],
2168 ],
2169 'size_units' => ['px'],
2170 'default' => [
2171 'unit' => 'px',
2172 'size' => 10,
2173 ],
2174 ]
2175 );
2176
2177 $this->end_controls_section();
2178
2179 $this->start_controls_section(
2180 'section_chart_tooltip_styles',
2181 [
2182 'label' => KING_ADDONS_ELEMENTOR_ICON . esc_html__('Tooltip', 'king-addons'),
2183 'tab' => Controls_Manager::TAB_STYLE,
2184 'condition' => [
2185 'show_chart_tooltip' => 'yes'
2186 ]
2187 ]
2188 );
2189
2190 $this->add_control(
2191 'chart_tooltip_bg_color', [
2192 'label' => esc_html__('Background Color', 'king-addons'),
2193 'type' => Controls_Manager::COLOR,
2194 ]
2195 );
2196
2197 $this->add_control(
2198 'tooltip_padding',
2199 [
2200 'label' => esc_html__('Padding', 'king-addons'),
2201 'type' => Controls_Manager::SLIDER,
2202 'size_units' => ['px'],
2203 'range' => [
2204 'px' => [
2205 'min' => 0,
2206 'max' => 100,
2207 ],
2208 ],
2209 'default' => [
2210 'unit' => 'px',
2211 'size' => 5,
2212 ],
2213 ]
2214 );
2215
2216 $this->add_responsive_control(
2217 'tooltip_caret_size',
2218 [
2219 'label' => esc_html__('Triangle Size', 'king-addons'),
2220 'type' => Controls_Manager::SLIDER,
2221 'devices' => ['desktop', 'mobile'],
2222 'size_units' => ['px'],
2223 'range' => [
2224 'px' => [
2225 'min' => 0,
2226 'max' => 100,
2227 ],
2228 ],
2229 'default' => [
2230 'unit' => 'px',
2231 'size' => 10,
2232 ],
2233 'mobile_default' => [
2234 'unit' => 'px',
2235 'size' => 6,
2236 ],
2237 ]
2238 );
2239
2240 $this->add_control(
2241 'tooltip_title_heading',
2242 [
2243 'label' => esc_html__('Tooltip Title', 'king-addons'),
2244 'type' => Controls_Manager::HEADING,
2245 'separator' => 'before',
2246 ]
2247 );
2248
2249 $this->add_control(
2250 'chart_tooltip_title_color', [
2251 'label' => esc_html__('Title Color', 'king-addons'),
2252 'type' => Controls_Manager::COLOR,
2253 'default' => '#FFF'
2254 ]
2255 );
2256
2257 $this->add_control(
2258 'chart_tooltip_title_font',
2259 [
2260 'label' => esc_html__('Font Family', 'king-addons'),
2261 'type' => Controls_Manager::FONT,
2262 'description' => esc_html__('Use only the fonts located under System options group', 'king-addons'),
2263 'default' => 'Arial',
2264 ]
2265 );
2266
2267 $this->add_control(
2268 'chart_tooltip_title_font_size',
2269 [
2270 'label' => esc_html__('Font Size', 'king-addons'),
2271 'type' => Controls_Manager::SLIDER,
2272 'size_units' => ['px'],
2273 'range' => [
2274 'px' => [
2275 'min' => 10,
2276 'max' => 100,
2277 ],
2278 ],
2279 'default' => [
2280 'unit' => 'px',
2281 'size' => 14,
2282 ],
2283 'separator' => 'before'
2284 ]
2285 );
2286
2287 $this->add_control(
2288 'chart_tooltip_title_margin_bottom',
2289 [
2290 'label' => esc_html__('Title Spacing', 'king-addons'),
2291 'type' => Controls_Manager::SLIDER,
2292 'range' => [
2293 'px' => [
2294 'min' => 0,
2295 'max' => 50,
2296 ],
2297 ],
2298 'size_units' => ['px'],
2299 'default' => [
2300 'unit' => 'px',
2301 'size' => 10,
2302 ],
2303 ]
2304 );
2305
2306 $this->add_control(
2307 'chart_tooltip_title_align',
2308 [
2309 'label' => esc_html__('Title Alignment', 'king-addons'),
2310 'type' => Controls_Manager::CHOOSE,
2311 'default' => 'center',
2312 'label_block' => false,
2313 'options' => [
2314 'left' => [
2315 'title' => esc_html__('Left', 'king-addons'),
2316 'icon' => 'eicon-text-align-left',
2317 ],
2318 'center' => [
2319 'title' => esc_html__('Center', 'king-addons'),
2320 'icon' => 'eicon-text-align-center',
2321 ],
2322 'right' => [
2323 'title' => esc_html__('Right', 'king-addons'),
2324 'icon' => 'eicon-text-align-right',
2325 ],
2326 ],
2327 'separator' => 'before'
2328 ]
2329 );
2330
2331 $this->add_control(
2332 'tooltip_item_heading',
2333 [
2334 'label' => esc_html__('Tooltip Item', 'king-addons'),
2335 'type' => Controls_Manager::HEADING,
2336 'separator' => 'before',
2337 ]
2338 );
2339
2340 $this->add_control(
2341 'chart_tooltip_item_color', [
2342 'label' => esc_html__('Item Color', 'king-addons'),
2343 'type' => Controls_Manager::COLOR,
2344 'default' => '#FFF'
2345 ]
2346 );
2347
2348 $this->add_control(
2349 'chart_tooltip_item_font',
2350 [
2351 'label' => esc_html__('Font Family', 'king-addons'),
2352 'type' => Controls_Manager::FONT,
2353 'description' => esc_html__('Use only the fonts located under System options group', 'king-addons'),
2354 'default' => 'Arial',
2355 ]
2356 );
2357
2358 $this->add_control(
2359 'chart_tooltip_item_font_size',
2360 [
2361 'label' => esc_html__('Font Size', 'king-addons'),
2362 'type' => Controls_Manager::SLIDER,
2363 'size_units' => ['px'],
2364 'range' => [
2365 'px' => [
2366 'min' => 10,
2367 'max' => 100,
2368 ],
2369 ],
2370 'default' => [
2371 'unit' => 'px',
2372 'size' => 14,
2373 ],
2374 'separator' => 'before'
2375 ]
2376 );
2377
2378 $this->add_control(
2379 'chart_tooltip_item_spacing',
2380 [
2381 'label' => esc_html__('Item Spacing', 'king-addons'),
2382 'type' => Controls_Manager::SLIDER,
2383 'range' => [
2384 'px' => [
2385 'min' => 0,
2386 'max' => 50,
2387 ],
2388 ],
2389 'size_units' => ['px'],
2390 'default' => [
2391 'unit' => 'px',
2392 'size' => 10,
2393 ],
2394 ]
2395 );
2396
2397 $this->add_control(
2398 'chart_tooltip_item_align',
2399 [
2400 'label' => esc_html__('Item Alignment', 'king-addons'),
2401 'type' => Controls_Manager::CHOOSE,
2402 'default' => 'center',
2403 'label_block' => false,
2404 'options' => [
2405 'left' => [
2406 'title' => esc_html__('Left', 'king-addons'),
2407 'icon' => 'eicon-text-align-left',
2408 ],
2409 'center' => [
2410 'title' => esc_html__('Center', 'king-addons'),
2411 'icon' => 'eicon-text-align-center',
2412 ],
2413 'right' => [
2414 'title' => esc_html__('Right', 'king-addons'),
2415 'icon' => 'eicon-text-align-right',
2416 ],
2417 ],
2418 'separator' => 'before'
2419 ]
2420 );
2421
2422
2423
2424
2425 $this->end_controls_section();
2426
2427
2428 }
2429
2430 protected function render()
2431 {
2432 $settings = $this->get_settings_for_display();
2433 // Security fix: Extract only specific safe settings to prevent variable injection
2434 $chart_type = $settings['chart_type'] ?? '';
2435 $charts_labels_data = $settings['charts_labels_data'] ?? '';
2436 $charts_datasets_data = $settings['charts_datasets_data'] ?? '';
2437 $chart_title = $settings['chart_title'] ?? '';
2438 $chart_title_show = $settings['chart_title_show'] ?? '';
2439 $chart_legend_show = $settings['chart_legend_show'] ?? '';
2440 $chart_tooltips_show = $settings['chart_tooltips_show'] ?? '';
2441 $chart_options = $settings['chart_options'] ?? '';
2442 $chart_height = $settings['chart_height'] ?? '';
2443 $chart_width = $settings['chart_width'] ?? '';
2444 $chart_responsive = $settings['chart_responsive'] ?? '';
2445 $chart_maintain_aspect_ratio = $settings['chart_maintain_aspect_ratio'] ?? '';
2446 $chart_animation_duration = $settings['chart_animation_duration'] ?? '';
2447 $chart_animation_easing = $settings['chart_animation_easing'] ?? '';
2448 $chart_show_labels = $settings['chart_show_labels'] ?? '';
2449 $chart_label_position = $settings['chart_label_position'] ?? '';
2450 $chart_label_color = $settings['chart_label_color'] ?? '';
2451 $chart_label_font_size = $settings['chart_label_font_size'] ?? '';
2452 $chart_label_font_family = $settings['chart_label_font_family'] ?? '';
2453 $chart_label_font_style = $settings['chart_label_font_style'] ?? '';
2454 $chart_label_font_weight = $settings['chart_label_font_weight'] ?? '';
2455 $chart_grid_lines = $settings['chart_grid_lines'] ?? '';
2456 $chart_grid_color = $settings['chart_grid_color'] ?? '';
2457 $chart_grid_line_width = $settings['chart_grid_line_width'] ?? '';
2458 $chart_point_radius = $settings['chart_point_radius'] ?? '';
2459 $chart_point_hover_radius = $settings['chart_point_hover_radius'] ?? '';
2460 $chart_point_background_color = $settings['chart_point_background_color'] ?? '';
2461 $chart_point_border_color = $settings['chart_point_border_color'] ?? '';
2462 $chart_point_border_width = $settings['chart_point_border_width'] ?? '';
2463 $chart_line_tension = $settings['chart_line_tension'] ?? '';
2464 $chart_line_border_width = $settings['chart_line_border_width'] ?? '';
2465 $chart_line_border_color = $settings['chart_line_border_color'] ?? '';
2466 $chart_line_background_color = $settings['chart_line_background_color'] ?? '';
2467 $chart_bar_border_width = $settings['chart_bar_border_width'] ?? '';
2468 $chart_bar_border_color = $settings['chart_bar_border_color'] ?? '';
2469 $chart_bar_background_color = $settings['chart_bar_background_color'] ?? '';
2470 $chart_doughnut_cutout = $settings['chart_doughnut_cutout'] ?? '';
2471 $chart_doughnut_circumference = $settings['chart_doughnut_circumference'] ?? '';
2472 $chart_doughnut_rotation = $settings['chart_doughnut_rotation'] ?? '';
2473 $chart_polar_area_start_angle = $settings['chart_polar_area_start_angle'] ?? '';
2474 $chart_polar_area_start_angle = $settings['chart_polar_area_start_angle'] ?? '';
2475 $chart_radar_point_labels = $settings['chart_radar_point_labels'] ?? '';
2476 $chart_radar_angle_lines = $settings['chart_radar_angle_lines'] ?? '';
2477 $chart_radar_grid_lines = $settings['chart_radar_grid_lines'] ?? '';
2478 $chart_radar_point_radius = $settings['chart_radar_point_radius'] ?? '';
2479 $chart_radar_point_hover_radius = $settings['chart_radar_point_hover_radius'] ?? '';
2480 $chart_radar_point_background_color = $settings['chart_radar_point_background_color'] ?? '';
2481 $chart_radar_point_border_color = $settings['chart_radar_point_border_color'] ?? '';
2482 $chart_radar_point_border_width = $settings['chart_radar_point_border_width'] ?? '';
2483 $chart_radar_line_tension = $settings['chart_radar_line_tension'] ?? '';
2484 $chart_radar_line_border_width = $settings['chart_radar_line_border_width'] ?? '';
2485 $chart_radar_line_border_color = $settings['chart_radar_line_border_color'] ?? '';
2486 $chart_radar_line_background_color = $settings['chart_radar_line_background_color'] ?? '';
2487
2488 // Additional chart settings
2489 $charts_data_set = $settings['charts_data_set'] ?? '';
2490 $animation_transition_type = $settings['animation_transition_type'] ?? '';
2491 $axis_grid_line_color_r = $settings['axis_grid_line_color_r'] ?? '';
2492 $axis_grid_line_color_x = $settings['axis_grid_line_color_x'] ?? '';
2493 $axis_grid_line_color_y = $settings['axis_grid_line_color_y'] ?? '';
2494 $axis_title_color_x = $settings['axis_title_color_x'] ?? '';
2495 $axis_title_color_y = $settings['axis_title_color_y'] ?? '';
2496 $axis_title_font_family_x = $settings['axis_title_font_family_x'] ?? '';
2497 $axis_title_font_family_y = $settings['axis_title_font_family_y'] ?? '';
2498 $axis_title_font_style_x = $settings['axis_title_font_style_x'] ?? '';
2499 $axis_title_font_style_y = $settings['axis_title_font_style_y'] ?? '';
2500 $axis_title_font_weight_x = $settings['axis_title_font_weight_x'] ?? '';
2501 $axis_title_font_weight_y = $settings['axis_title_font_weight_y'] ?? '';
2502 $border_dash_length = $settings['border_dash_length'] ?? '';
2503 $border_dash_length_r = $settings['border_dash_length_r'] ?? '';
2504 $border_dash_offset = $settings['border_dash_offset'] ?? '';
2505 $border_dash_offset_r = $settings['border_dash_offset_r'] ?? '';
2506 $border_dash_spacing = $settings['border_dash_spacing'] ?? '';
2507 $border_dash_spacing_r = $settings['border_dash_spacing_r'] ?? '';
2508 $chart_interaction_mode = $settings['chart_interaction_mode'] ?? '';
2509 $chart_tooltip_bg_color = $settings['chart_tooltip_bg_color'] ?? '';
2510 $chart_tooltip_item_align = $settings['chart_tooltip_item_align'] ?? '';
2511 $chart_tooltip_item_color = $settings['chart_tooltip_item_color'] ?? '';
2512 $chart_tooltip_item_font = $settings['chart_tooltip_item_font'] ?? '';
2513 $chart_tooltip_title_align = $settings['chart_tooltip_title_align'] ?? '';
2514 $chart_tooltip_title_color = $settings['chart_tooltip_title_color'] ?? '';
2515 $chart_tooltip_title_font = $settings['chart_tooltip_title_font'] ?? '';
2516 $data_source = $settings['data_source'] ?? '';
2517 $display_r_axis = $settings['display_r_axis'] ?? '';
2518 $display_r_ticks = $settings['display_r_ticks'] ?? '';
2519 $display_x_axis = $settings['display_x_axis'] ?? '';
2520 $display_x_axis_title = $settings['display_x_axis_title'] ?? '';
2521 $display_x_ticks = $settings['display_x_ticks'] ?? '';
2522 $display_y_axis = $settings['display_y_axis'] ?? '';
2523 $display_y_axis_title = $settings['display_y_axis_title'] ?? '';
2524 $display_y_ticks = $settings['display_y_ticks'] ?? '';
2525 $exclude_dataset_on_click = $settings['exclude_dataset_on_click'] ?? '';
2526 $grid_line_width_r = $settings['grid_line_width_r'] ?? '';
2527 $grid_line_width_x = $settings['grid_line_width_x'] ?? '';
2528 $grid_line_width_y = $settings['grid_line_width_y'] ?? '';
2529 $inner_datalabels = $settings['inner_datalabels'] ?? '';
2530 $inner_datalabels_color = $settings['inner_datalabels_color'] ?? '';
2531 $charts_legend_align = $settings['charts_legend_align'] ?? '';
2532 $legend_box_width = $settings['legend_box_width'] ?? '';
2533 $legend_font_family = $settings['legend_font_family'] ?? '';
2534 $legend_font_size = $settings['legend_font_size'] ?? '';
2535 $legend_font_style = $settings['legend_font_style'] ?? '';
2536 $legend_font_weight = $settings['legend_font_weight'] ?? '';
2537 $chart_legend_padding = $settings['chart_legend_padding'] ?? '';
2538 $charts_legend_position = $settings['charts_legend_position'] ?? '';
2539 $charts_legend_shape = $settings['charts_legend_shape'] ?? '';
2540 $chart_legend_text_color = $settings['chart_legend_text_color'] ?? '';
2541 $max_value = $settings['max_value'] ?? '';
2542 $min_value = $settings['min_value'] ?? '';
2543 $point_labels_font_family_r = $settings['point_labels_font_family_r'] ?? '';
2544 $point_labels_font_style_r = $settings['point_labels_font_style_r'] ?? '';
2545 $point_labels_font_weight_r = $settings['point_labels_font_weight_r'] ?? '';
2546 $r_step_size = $settings['r_step_size'] ?? '';
2547 $reverse_legend = $settings['reverse_legend'] ?? '';
2548 $reverse_x = $settings['reverse_x'] ?? '';
2549 $reverse_y = $settings['reverse_y'] ?? '';
2550 $labels_rotation_x_axis = $settings['labels_rotation_x_axis'] ?? '';
2551 $labels_rotation_y_axis = $settings['labels_rotation_y_axis'] ?? '';
2552 $data_csv_separator = $settings['data_csv_separator'] ?? '';
2553 $show_chart_legend = $settings['show_chart_legend'] ?? '';
2554 $show_chart_title = $settings['show_chart_title'] ?? '';
2555 $show_chart_tooltip = $settings['show_chart_tooltip'] ?? '';
2556 $chart_ticks_color_x = $settings['chart_ticks_color_x'] ?? '';
2557 $ticks_font_family_x = $settings['ticks_font_family_x'] ?? '';
2558 $ticks_font_family_y = $settings['ticks_font_family_y'] ?? '';
2559 $ticks_font_style_x = $settings['ticks_font_style_x'] ?? '';
2560 $ticks_font_style_y = $settings['ticks_font_style_y'] ?? '';
2561 $ticks_font_weight_x = $settings['ticks_font_weight_x'] ?? '';
2562 $ticks_font_weight_y = $settings['ticks_font_weight_y'] ?? '';
2563 $title_font_family = $settings['title_font_family'] ?? '';
2564 $title_font_weight = $settings['title_font_weight'] ?? '';
2565 $tooltips_percent = $settings['tooltips_percent'] ?? '';
2566 $chart_tooltip_position = $settings['chart_tooltip_position'] ?? '';
2567 $trigger_tooltip_on = $settings['trigger_tooltip_on'] ?? '';
2568 $data_source_csv_file = $settings['data_source_csv_file'] ?? '';
2569 $x_axis_title = $settings['x_axis_title'] ?? '';
2570 $x_step_size = $settings['x_step_size'] ?? '';
2571 $y_axis_title = $settings['y_axis_title'] ?? '';
2572 $y_step_size = $settings['y_step_size'] ?? '';
2573
2574 $premium = king_addons_freemius()->can_use_premium_code__premium_only();
2575 $data_charts_array = [];
2576
2577 if (in_array($chart_type, ['bar', 'bar_horizontal', 'line', 'radar'])) {
2578 if (!empty($charts_labels_data)) {
2579 $labels = explode(',', trim($charts_labels_data));
2580 if (!$premium && count($labels) > 3) {
2581 $labels = array_slice($labels, 0, 3);
2582 }
2583 $data_charts_array['labels'] = $labels;
2584 }
2585
2586 if (is_array($charts_data_set) && count($charts_data_set)) {
2587 foreach ($charts_data_set as $charts_counter => $chart_data) {
2588 if (!$premium && $charts_counter === 3) break;
2589 $data_charts_array['datasets'][] = [
2590 'label' => $chart_data['chart_data_label'],
2591 'data' => array_map('floatval', explode(',', trim($chart_data['chart_data_set'], ','))),
2592 'backgroundColor' => $chart_data['chart_data_background_color'],
2593 'hoverBackgroundColor' => $chart_data['chart_data_background_color_hover'],
2594 'borderColor' => $chart_data['chart_data_border_color'],
2595 'hoverBorderColor' => $chart_data['chart_data_border_color_hover'],
2596 'borderWidth' => $chart_data['chart_data_border_width'],
2597 'barPercentage' => $settings['column_width_x'] ?? '',
2598 'fill' => !empty($settings['chart_type_line_fill']) && 'yes' === $settings['chart_type_line_fill'],
2599 ];
2600 }
2601 }
2602 } else {
2603 if (is_array($charts_data_set) && count($charts_data_set) && $settings['data_source'] !== 'csv') {
2604 $chart_data_number_values = $chart_background_colors = $chart_background_hover_colors = [];
2605 $chart_data_border_colors = $chart_data_border_hover_colors = $chart_data_border_width = $chart_data_bar_percentage = [];
2606 $data_charts_array['labels'] = [];
2607
2608 foreach ($charts_data_set as $labels_data) {
2609 if (!$premium && count($data_charts_array['labels']) === 3) break;
2610 $data_charts_array['labels'][] = $labels_data['chart_data_label'];
2611 }
2612
2613 $data_charts_array_test = !empty($charts_labels_data) ? explode(',', trim($charts_labels_data)) : [];
2614
2615 foreach ($data_charts_array_test as $key => $test_data) {
2616 if (!$premium && $key === 3) break;
2617 $chart_data_number_values[$key] = [];
2618 foreach ($charts_data_set as $key_inner => $chart_data) {
2619 if (!$premium && $key_inner === 3) break;
2620 $numbers = array_map('floatval', explode(',', trim($chart_data['chart_data_set'], ',')));
2621 $chart_data_number_values[$key][] = $numbers[$key] ?? '0';
2622 }
2623 }
2624
2625 foreach ($charts_data_set as $key => $chart_data) {
2626 if (!$premium && $key === 3) break;
2627 $chart_background_colors[] = trim($chart_data['chart_data_background_color']);
2628 $chart_background_hover_colors[] = trim($chart_data['chart_data_background_color_hover']);
2629 $chart_data_border_colors[] = trim($chart_data['chart_data_border_color']);
2630 $chart_data_border_hover_colors[] = trim($chart_data['chart_data_border_color_hover']);
2631 $chart_data_border_width[] = trim($chart_data['chart_data_border_width']);
2632 if (!empty($settings['column_width_x'])) {
2633 $chart_data_bar_percentage[] = trim($chart_data['column_width_x']);
2634 }
2635 }
2636
2637 foreach ($data_charts_array_test as $key => $data_test) {
2638 if (!$premium && $key === 3) break;
2639 $data_charts_array['datasets'][] = [
2640 'label' => $data_test,
2641 'data' => $chart_data_number_values[$key],
2642 'backgroundColor' => $chart_background_colors,
2643 'hoverBackgroundColor' => $chart_background_hover_colors,
2644 'borderColor' => $chart_data_border_colors,
2645 'hoverBorderColor' => $chart_data_border_hover_colors,
2646 'borderWidth' => $chart_data_border_width,
2647 'barPercentage' => $chart_data_bar_percentage,
2648 ];
2649 }
2650 }
2651 }
2652
2653 $layout_settings = [
2654 'angle_lines_color' => $angle_lines_color ?? '',
2655 'animation_transition_type' => $animation_transition_type,
2656 'axis_grid_line_color_r' => $axis_grid_line_color_r,
2657 'axis_grid_line_color_x' => $axis_grid_line_color_x,
2658 'axis_grid_line_color_y' => $axis_grid_line_color_y,
2659 'axis_labels_bg_color' => $axis_labels_bg_color ?? '',
2660 'axis_labels_color' => $axis_labels_color ?? '',
2661 'axis_labels_padding' => $axis_labels_padding['size'] ?? '',
2662 'axis_title_color_x' => $axis_title_color_x,
2663 'axis_title_color_y' => $axis_title_color_y,
2664 'axis_title_font_family_x' => $axis_title_font_family_x,
2665 'axis_title_font_family_y' => $axis_title_font_family_y,
2666 'axis_title_font_size_x' => $axis_title_font_size_x['size'] ?? '',
2667 'axis_title_font_size_y' => $axis_title_font_size_y['size'] ?? '',
2668 'axis_title_font_style_x' => $axis_title_font_style_x,
2669 'axis_title_font_style_y' => $axis_title_font_style_y,
2670 'axis_title_font_weight_x' => $axis_title_font_weight_x,
2671 'axis_title_font_weight_y' => $axis_title_font_weight_y,
2672 'border_dash_length' => $border_dash_length,
2673 'border_dash_length_r' => $border_dash_length_r,
2674 'border_dash_offset' => $border_dash_offset,
2675 'border_dash_offset_r' => $border_dash_offset_r,
2676 'border_dash_spacing' => $border_dash_spacing,
2677 'border_dash_spacing_r' => $border_dash_spacing_r,
2678 'chart_animation' => $chart_animation ?? '',
2679 'chart_animation_duration' => $chart_animation_duration ?? '',
2680 'chart_animation_loop' => $chart_animation_loop ?? '',
2681 'chart_datasets' => !empty($data_charts_array['datasets']) ? wp_json_encode($data_charts_array['datasets']) : '',
2682 'chart_interaction_mode' => $chart_interaction_mode,
2683 'chart_labels' => $data_charts_array['labels'] ?? '',
2684 'chart_title' => $chart_title ?? '',
2685 'chart_title_align' => $chart_title_align ?? '',
2686 'chart_title_color' => $chart_title_color ?? '',
2687 'chart_title_position' => $chart_title_position ?? '',
2688 'chart_tooltip_bg_color' => $chart_tooltip_bg_color,
2689 'chart_tooltip_item_align' => $chart_tooltip_item_align,
2690 'chart_tooltip_item_color' => $chart_tooltip_item_color,
2691 'chart_tooltip_item_font' => $chart_tooltip_item_font,
2692 'chart_tooltip_item_font_size' => $chart_tooltip_item_font_size['size'] ?? 1,
2693 'chart_tooltip_item_spacing' => $chart_tooltip_item_spacing['size'] ?? 1,
2694 'chart_tooltip_title_align' => $chart_tooltip_title_align,
2695 'chart_tooltip_title_color' => $chart_tooltip_title_color,
2696 'chart_tooltip_title_font' => $chart_tooltip_title_font,
2697 'chart_tooltip_title_font_size' => $chart_tooltip_title_font_size['size'] ?? 1,
2698 'chart_tooltip_title_margin_bottom' => $chart_tooltip_title_margin_bottom['size'] ?? 1,
2699 'chart_type' => $chart_type,
2700 'data_source' => $data_source,
2701 'data_type' => $settings['data_type'] ?? 'linear',
2702 'display_r_axis' => $display_r_axis,
2703 'display_r_ticks' => $display_r_ticks,
2704 'display_x_axis' => $display_x_axis,
2705 'display_x_axis_title' => $display_x_axis_title,
2706 'display_x_ticks' => $display_x_ticks,
2707 'display_y_axis' => $display_y_axis,
2708 'display_y_axis_title' => $display_y_axis_title,
2709 'display_y_ticks' => $display_y_ticks,
2710 'exclude_dataset_on_click' => $exclude_dataset_on_click,
2711 'grid_line_width_r' => $grid_line_width_r,
2712 'grid_line_width_x' => $grid_line_width_x,
2713 'grid_line_width_y' => $grid_line_width_y,
2714 'inner_datalabels' => $inner_datalabels,
2715 'inner_datalabels_color' => $inner_datalabels_color,
2716 'inner_datalabels_font_family' => $inner_datalabels_font_family ?? '',
2717 'inner_datalabels_font_size' => $inner_datalabels_font_size['size'] ?? '',
2718 'inner_datalabels_font_style' => $inner_datalabels_font_style ?? '',
2719 'inner_datalabels_font_weight' => $inner_datalabels_font_weight ?? '',
2720 'legend_align' => $charts_legend_align,
2721 'legend_box_width' => $legend_box_width['size'],
2722 'legend_font_family' => $legend_font_family,
2723 'legend_font_size' => $legend_font_size['size'],
2724 'legend_font_style' => $legend_font_style,
2725 'legend_font_weight' => $legend_font_weight,
2726 'legend_padding' => $chart_legend_padding['size'],
2727 'legend_position' => $charts_legend_position,
2728 'legend_shape' => $charts_legend_shape,
2729 'legend_text_color' => $chart_legend_text_color,
2730 'line_dots' => $line_dots ?? '',
2731 'line_dots_radius' => $line_dots_radius['size'] ?? '',
2732 'line_dots_radius_mobile' => $line_dots_radius_mobile['size'] ?? 0,
2733 'max_value' => $max_value,
2734 'min_value' => $min_value,
2735 'point_labels_color_r' => $chart_point_labels_color_r ?? '',
2736 'point_labels_font_family_r' => $point_labels_font_family_r,
2737 'point_labels_font_size_r' => $point_labels_font_size_r['size'] ?? '',
2738 'point_labels_font_style_r' => $point_labels_font_style_r,
2739 'point_labels_font_weight_r' => $point_labels_font_weight_r,
2740 'r_step_size' => $r_step_size,
2741 'reverse_legend' => $reverse_legend,
2742 'reverse_x' => $reverse_x,
2743 'reverse_y' => $reverse_y,
2744 'rotation_x' => $labels_rotation_x_axis,
2745 'rotation_y' => $labels_rotation_y_axis,
2746 'separator' => $data_csv_separator,
2747 'show_chart_legend' => $show_chart_legend,
2748 'show_chart_title' => $show_chart_title,
2749 'show_chart_tooltip' => $show_chart_tooltip,
2750 'show_lines' => $show_lines ?? '',
2751 'stacked_bar_chart' => $stacked_bar_chart ?? '',
2752 'ticks_color_x' => $chart_ticks_color_x,
2753 'ticks_color_y' => $chart_ticks_color_y ?? '',
2754 'ticks_font_family_x' => $ticks_font_family_x,
2755 'ticks_font_family_y' => $ticks_font_family_y,
2756 'ticks_font_size_x' => $ticks_font_size_x['size'] ?? '',
2757 'ticks_font_size_y' => $ticks_font_size_y['size'] ?? '',
2758 'ticks_font_style_x' => $ticks_font_style_x,
2759 'ticks_font_style_y' => $ticks_font_style_y,
2760 'ticks_font_weight_x' => $ticks_font_weight_x,
2761 'ticks_font_weight_y' => $ticks_font_weight_y,
2762 'ticks_padding_x' => $ticks_padding_x['size'] ?? '',
2763 'ticks_padding_y' => $ticks_padding_y['size'] ?? '',
2764 'title_font_family' => $title_font_family,
2765 'title_font_size' => $title_font_size['size'] ?? '',
2766 'title_font_style' => $title_font_style ?? '',
2767 'title_font_weight' => $title_font_weight,
2768 'title_padding' => $chart_title_padding['size'] ?? '',
2769 'tooltips_percent' => $tooltips_percent,
2770 'tooltip_caret_size' => $tooltip_caret_size['size'] ?? 1,
2771 'tooltip_caret_size_mobile' => $tooltip_caret_size_mobile['size'] ?? 0,
2772 'tooltip_padding' => $tooltip_padding['size'] ?? 1,
2773 'tooltip_position' => $chart_tooltip_position,
2774 'trigger_tooltip_on' => $trigger_tooltip_on,
2775 'url' => !empty($data_source_csv_url) ? $data_source_csv_url : (!empty($data_source_csv_file['url']) ? $data_source_csv_file['url'] : ''),
2776 'x_axis_title' => $x_axis_title,
2777 'x_step_size' => $x_step_size,
2778 'y_axis_title' => $y_axis_title,
2779 'y_step_size' => $y_step_size,
2780 ];
2781
2782 $this->add_render_attribute('chart-settings', [
2783 'class' => 'king-addons-charts-container',
2784 'data-settings' => wp_json_encode($layout_settings),
2785 ]);
2786
2787 echo '<div ' . $this->get_render_attribute_string('chart-settings') . '>';
2788 if ($data_source === 'csv') {
2789 echo '<span class="king-addons-rotating-plane"></span>';
2790 }
2791 echo '<div class="king-addons-charts-wrapper">';
2792 echo '<canvas class="king-addons-chart"></canvas>';
2793 echo '</div></div>';
2794 }
2795
2796 }