Merge branch 'MDL-58454-master' of git://github.com/junpataleta/moodle
[moodle.git] / lib / classes / chart_series.php
blobb3e79d8c1dad9c977f08c84ac32dfe3594b12739
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>.
17 /**
18 * Chart series.
20 * @package core
21 * @copyright 2016 Frédéric Massart - FMCorz.net
22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
25 namespace core;
26 defined('MOODLE_INTERNAL') || die();
28 use coding_exception;
29 use JsonSerializable;
31 /**
32 * Chart series class.
34 * @package core
35 * @copyright 2016 Frédéric Massart - FMCorz.net
36 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
38 class chart_series implements JsonSerializable {
40 /** Default type for a series. */
41 const TYPE_DEFAULT = null;
42 /** Series of type line. */
43 const TYPE_LINE = 'line';
45 /** @var string[] Colors of the series. */
46 protected $colors = [];
47 /** @var string Label for this series. */
48 protected $label;
49 /** @var string[] Labels for the values of the series. */
50 protected $labels = null;
51 /** @var bool Whether the line of the serie should be smooth or not. */
52 protected $smooth = null;
53 /** @var string Type of the series. */
54 protected $type = self::TYPE_DEFAULT;
55 /** @var float[] Values of the series. */
56 protected $values = [];
57 /** @var int Index of the X axis. */
58 protected $xaxis = null;
59 /** @var int Index of the Y axis. */
60 protected $yaxis = null;
62 /**
63 * Constructor.
65 * @param string $label The label of the series.
66 * @param float[] $values The values of this series.
68 public function __construct($label, $values) {
69 $this->values = $values;
70 $this->label = $label;
73 /**
74 * Get the color.
76 * @return string|null
78 public function get_color() {
79 return isset($this->color[0]) ? $this->color[0] : null;
82 /**
83 * Get the colors for each value in the series.
85 * @return string[]
87 public function get_colors() {
88 return $this->colors;
91 /**
92 * Get the number of values in this series.
94 * @return int
96 public function get_count() {
97 return count($this->values);
101 * Get the label of the series.
103 * @return string
105 public function get_label() {
106 return $this->label;
110 * Set labels for the values of the series.
112 * @return array
114 public function get_labels() {
115 return $this->labels;
119 * Get whether the line of the serie should be smooth or not.
121 * @return bool
123 public function get_smooth() {
124 return $this->smooth;
128 * Get the type of series.
130 * @return string
132 public function get_type() {
133 return $this->type;
137 * Get the values of the series.
139 * @return string[]
141 public function get_values() {
142 return $this->values;
146 * Get the index of the X axis.
148 * @return int
150 public function get_xaxis() {
151 return $this->xaxis;
155 * Get the index of the Y axis.
157 * @return int
159 public function get_yaxis() {
160 return $this->yaxis;
164 * Whether there is a color per value.
166 * @return bool
168 public function has_colored_values() {
169 return count($this->colors) == $this->get_count();
173 * Serialize the object.
175 * @return array
177 public function jsonSerialize() { // @codingStandardsIgnoreLine (CONTRIB-6469).
178 $data = [
179 'label' => $this->label,
180 'labels' => $this->labels,
181 'type' => $this->type,
182 'values' => $this->values,
183 'colors' => $this->colors,
184 'axes' => [
185 'x' => $this->xaxis,
186 'y' => $this->yaxis,
188 'smooth' => $this->smooth
190 return $data;
194 * Set the color of the series.
196 * @param string $color CSS compatible color.
198 public function set_color($color) {
199 $this->colors = [$color];
203 * Set a color for each value in the series.
205 * @param string[] $colors CSS compatible colors.
207 public function set_colors(array $colors) {
208 $this->colors = $colors;
212 * Set labels for the values of the series.
214 * @param array $labels The labels for the series values.
216 public function set_labels($labels) {
217 $this->labels = $labels;
221 * Set whether the line of the serie should be smooth or not.
223 * Only applicable for line chart or a line series, if null it assumes the chart default (not smooth).
225 * @param bool $smooth True if the line should be smooth, false for tensioned lines.
227 public function set_smooth($smooth) {
228 $this->smooth = $smooth;
232 * Set the type of the series.
234 * @param string $type Constant value from self::TYPE_*.
236 public function set_type($type) {
237 if (!in_array($type, [self::TYPE_DEFAULT, self::TYPE_LINE])) {
238 throw new coding_exception('Invalid serie type.');
240 $this->type = $type;
244 * Set the index of the X axis.
246 * @param int $index The index.
248 public function set_xaxis($index) {
249 $this->xaxis = $index;
253 * Set the index of the Y axis.
255 * @param int $index The index.
257 public function set_yaxis($index) {
258 $this->yaxis = $index;