Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.3.x will end 7 October 2024 (12 months).
  • Bug fixes for security issues in 4.3.x will end 21 April 2025 (18 months).
  • PHP version: minimum PHP 8.0.0 Note: minimum PHP version has increased since Moodle 4.1. PHP 8.2.x is supported too.
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.

/**
 * Chart series.
 *
 * @package    core
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */

namespace core;
defined('MOODLE_INTERNAL') || die();

use coding_exception;
use JsonSerializable;

/**
 * Chart series class.
 *
 * @package    core
 * @copyright  2016 Frédéric Massart - FMCorz.net
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
class chart_series implements JsonSerializable {

    /** Default type for a series. */
    const TYPE_DEFAULT = null;
    /** Series of type line. */
    const TYPE_LINE = 'line';

    /** @var string[] Colors of the series. */
    protected $colors = [];
    /** @var string Fill mode for area charts. See https://www.chartjs.org/docs/latest/charts/area.html */
    protected $fill = null;
    /** @var string Label for this series. */
    protected $label;
    /** @var string[] Labels for the values of the series. */
    protected $labels = null;
    /** @var bool Whether the line of the serie should be smooth or not. */
    protected $smooth = null;
    /** @var string Type of the series. */
    protected $type = self::TYPE_DEFAULT;
    /** @var float[] Values of the series. */
    protected $values = [];
    /** @var int Index of the X axis. */
    protected $xaxis = null;
    /** @var int Index of the Y axis. */
    protected $yaxis = null;

    /**
     * Constructor.
     *
     * @param string $label The label of the series.
     * @param float[] $values The values of this series.
     */
    public function __construct($label, $values) {
        $this->values = $values;
        $this->label = $label;
    }

    /**
     * Get the color.
     *
     * @return string|null
     */
    public function get_color() {
< return isset($this->color[0]) ? $this->color[0] : null;
> return isset($this->colors[0]) ? $this->colors[0] : null;
} /** * Get the colors for each value in the series. * * @return string[] */ public function get_colors() { return $this->colors; } /** * Get the number of values in this series. * * @return int */ public function get_count() { return count($this->values); } /** * Get area fill mode for series. */ public function get_fill() { return $this->fill; } /** * Get the label of the series. * * @return string */ public function get_label() { return $this->label; } /** * Set labels for the values of the series. * * @return array */ public function get_labels() { return $this->labels; } /** * Get whether the line of the serie should be smooth or not. * * @return bool */ public function get_smooth() { return $this->smooth; } /** * Get the type of series. * * @return string */ public function get_type() { return $this->type; } /** * Get the values of the series. * * @return string[] */ public function get_values() { return $this->values; } /** * Get the index of the X axis. * * @return int */ public function get_xaxis() { return $this->xaxis; } /** * Get the index of the Y axis. * * @return int */ public function get_yaxis() { return $this->yaxis; } /** * Whether there is a color per value. * * @return bool */ public function has_colored_values() { return count($this->colors) == $this->get_count(); } /** * Serialize the object. * * @return array */ public function jsonSerialize(): array { $data = [ 'label' => $this->label, 'labels' => $this->labels, 'type' => $this->type, 'values' => $this->values, 'colors' => $this->colors, 'fill' => $this->fill, 'axes' => [ 'x' => $this->xaxis, 'y' => $this->yaxis, ], 'smooth' => $this->smooth ]; return $data; } /** * Set the color of the series. * * @param string $color CSS compatible color. */ public function set_color($color) { $this->colors = [$color]; } /** * Set a color for each value in the series. * * @param string[] $colors CSS compatible colors. */ public function set_colors(array $colors) { $this->colors = $colors; } /** * Set fill mode for the series. * @param string $fill */ public function set_fill($fill) { $this->fill = $fill; } /** * Set labels for the values of the series. * * @param array $labels The labels for the series values. */ public function set_labels($labels) { $this->labels = $labels; } /** * Set whether the line of the serie should be smooth or not. * * Only applicable for line chart or a line series, if null it assumes the chart default (not smooth). * * @param bool $smooth True if the line should be smooth, false for tensioned lines. */ public function set_smooth($smooth) { $this->smooth = $smooth; } /** * Set the type of the series. * * @param string $type Constant value from self::TYPE_*. */ public function set_type($type) { if (!in_array($type, [self::TYPE_DEFAULT, self::TYPE_LINE])) { throw new coding_exception('Invalid serie type.'); } $this->type = $type; } /** * Set the index of the X axis. * * @param int $index The index. */ public function set_xaxis($index) { $this->xaxis = $index; } /** * Set the index of the Y axis. * * @param int $index The index. */ public function set_yaxis($index) { $this->yaxis = $index; } }