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 Fill mode for area charts. See https://www.chartjs.org/docs/latest/charts/area.html */
48 protected $fill = null;
49 /** @var string Label for this series. */
51 /** @var string[] Labels for the values of the series. */
52 protected $labels = null;
53 /** @var bool Whether the line of the serie should be smooth or not. */
54 protected $smooth = null;
55 /** @var string Type of the series. */
56 protected $type = self
::TYPE_DEFAULT
;
57 /** @var float[] Values of the series. */
58 protected $values = [];
59 /** @var int Index of the X axis. */
60 protected $xaxis = null;
61 /** @var int Index of the Y axis. */
62 protected $yaxis = null;
67 * @param string $label The label of the series.
68 * @param float[] $values The values of this series.
70 public function __construct($label, $values) {
71 $this->values
= $values;
72 $this->label
= $label;
80 public function get_color() {
81 return isset($this->color
[0]) ?
$this->color
[0] : null;
85 * Get the colors for each value in the series.
89 public function get_colors() {
94 * Get the number of values in this series.
98 public function get_count() {
99 return count($this->values
);
103 * Get area fill mode for series.
105 public function get_fill() {
110 * Get the label of the series.
114 public function get_label() {
119 * Set labels for the values of the series.
123 public function get_labels() {
124 return $this->labels
;
128 * Get whether the line of the serie should be smooth or not.
132 public function get_smooth() {
133 return $this->smooth
;
137 * Get the type of series.
141 public function get_type() {
146 * Get the values of the series.
150 public function get_values() {
151 return $this->values
;
155 * Get the index of the X axis.
159 public function get_xaxis() {
164 * Get the index of the Y axis.
168 public function get_yaxis() {
173 * Whether there is a color per value.
177 public function has_colored_values() {
178 return count($this->colors
) == $this->get_count();
182 * Serialize the object.
186 public function jsonSerialize() { // @codingStandardsIgnoreLine (CONTRIB-6469).
188 'label' => $this->label
,
189 'labels' => $this->labels
,
190 'type' => $this->type
,
191 'values' => $this->values
,
192 'colors' => $this->colors
,
193 'fill' => $this->fill
,
198 'smooth' => $this->smooth
204 * Set the color of the series.
206 * @param string $color CSS compatible color.
208 public function set_color($color) {
209 $this->colors
= [$color];
213 * Set a color for each value in the series.
215 * @param string[] $colors CSS compatible colors.
217 public function set_colors(array $colors) {
218 $this->colors
= $colors;
222 * Set fill mode for the series.
223 * @param string $fill
225 public function set_fill($fill) {
230 * Set labels for the values of the series.
232 * @param array $labels The labels for the series values.
234 public function set_labels($labels) {
235 $this->labels
= $labels;
239 * Set whether the line of the serie should be smooth or not.
241 * Only applicable for line chart or a line series, if null it assumes the chart default (not smooth).
243 * @param bool $smooth True if the line should be smooth, false for tensioned lines.
245 public function set_smooth($smooth) {
246 $this->smooth
= $smooth;
250 * Set the type of the series.
252 * @param string $type Constant value from self::TYPE_*.
254 public function set_type($type) {
255 if (!in_array($type, [self
::TYPE_DEFAULT
, self
::TYPE_LINE
])) {
256 throw new coding_exception('Invalid serie type.');
262 * Set the index of the X axis.
264 * @param int $index The index.
266 public function set_xaxis($index) {
267 $this->xaxis
= $index;
271 * Set the index of the Y axis.
273 * @param int $index The index.
275 public function set_yaxis($index) {
276 $this->yaxis
= $index;