MDL-55030 core: Support setting defaults in charts
[moodle.git] / lib / classes / chart_base.php
index 38c3bf2..6abbcf5 100644 (file)
@@ -40,8 +40,12 @@ class chart_base implements JsonSerializable, renderable {
 
     protected $series = [];
     protected $labels = [];
+    protected $title = null;
+    protected $xaxes = [];
+    protected $yaxes = [];
 
     public function __construct() {
+        $this->set_defaults();
     }
 
     public function add_series(chart_series $serie) {
@@ -52,10 +56,32 @@ class chart_base implements JsonSerializable, renderable {
         return [
             'type' => $this->get_type(),
             'series' => $this->series,
-            'labels' => $this->labels
+            'labels' => $this->labels,
+            'title' => $this->title,
+            'axes' => [
+                'x' => $this->xaxes,
+                'y' => $this->yaxes,
+            ]
         ];
     }
 
+    private function get_axis($type, $index, $createifnotexists) {
+        if ($type === 'x') {
+            $axes = &$this->xaxes;
+        } else {
+            $axes = &$this->yaxes;
+        }
+
+        if (!isset($axes[$index])) {
+            if (!$createifnotexists) {
+                throw new coding_exception('Unknown axis.');
+            }
+            $axes[$index] = new chart_axis();
+        }
+
+        return $axes[$index];
+    }
+
     public function get_labels() {
         return $this->labels;
     }
@@ -64,13 +90,49 @@ class chart_base implements JsonSerializable, renderable {
         return $this->series;
     }
 
+    public function get_title() {
+        return $this->title;
+    }
+
     public function get_type() {
         $classname = get_class($this);
         return substr($classname, strpos($classname, '_') + 1);
     }
 
+    public function get_xaxes() {
+        return $this->xaxes;
+    }
+
+    public function get_xaxis($index = 0, $createifnotexists = false) {
+        return $this->get_axis('x', $index, $createifnotexists);
+    }
+
+    public function get_yaxes() {
+        return $this->yaxes;
+    }
+
+    public function get_yaxis($index = 0, $createifnotexists = false) {
+        return $this->get_axis('y', $index, $createifnotexists);
+    }
+
+    protected function set_defaults() {
+        // For the child classes to extend.
+    }
+
     public function set_labels(array $labels) {
         $this->labels = $labels;
     }
 
+    public function set_title($title) {
+        $this->title = $title;
+    }
+
+    public function set_xaxis(chart_axis $axis, $index = 0) {
+        return $this->xaxes[$index] = $axis;
+    }
+
+    public function set_yaxis(chart_axis $axis, $index = 0) {
+        return $this->yaxes[$index] = $axis;
+    }
+
 }