2 // This file is part of Moodle - http://moodle.org/
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.
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/>.
21 * @copyright 2016 Frédéric Massart - FMCorz.net
22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
26 defined('MOODLE_INTERNAL') ||
die();
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. */
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;
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;
78 public function get_color() {
79 return isset($this->color
[0]) ?
$this->color
[0] : null;
83 * Get the colors for each value in the series.
87 public function get_colors() {
92 * Get the number of values in this series.
96 public function get_count() {
97 return count($this->values
);
101 * Get the label of the series.
105 public function get_label() {
110 * Set labels for the values of the series.
114 public function get_labels() {
115 return $this->labels
;
119 * Get whether the line of the serie should be smooth or not.
123 public function get_smooth() {
124 return $this->smooth
;
128 * Get the type of series.
132 public function get_type() {
137 * Get the values of the series.
141 public function get_values() {
142 return $this->values
;
146 * Get the index of the X axis.
150 public function get_xaxis() {
155 * Get the index of the Y axis.
159 public function get_yaxis() {
164 * Whether there is a color per value.
168 public function has_colored_values() {
169 return count($this->colors
) == $this->get_count();
173 * Serialize the object.
177 public function jsonSerialize() { // @codingStandardsIgnoreLine (CONTRIB-6469).
179 'label' => $this->label
,
180 'labels' => $this->labels
,
181 'type' => $this->type
,
182 'values' => $this->values
,
183 'colors' => $this->colors
,
188 'smooth' => $this->smooth
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.');
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;