weekly back-to-dev release 5.0dev
[moodle.git] / course / classes / external / course_summary_exporter.php
blob1fa2d7647617d68ff981012ee5711f98fb7c1bb2
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 * Class for exporting a course summary from an stdClass.
20 * @package core_course
21 * @copyright 2015 Damyon Wiese
22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24 namespace core_course\external;
25 defined('MOODLE_INTERNAL') || die();
27 use renderer_base;
28 use moodle_url;
30 /**
31 * Class for exporting a course summary from an stdClass.
33 * @copyright 2015 Damyon Wiese
34 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
36 class course_summary_exporter extends \core\external\exporter {
38 /**
39 * Constructor - saves the persistent object, and the related objects.
41 * @param mixed $data - Either an stdClass or an array of values.
42 * @param array $related - An optional list of pre-loaded objects related to this object.
44 public function __construct($data, $related = array()) {
45 if (!array_key_exists('isfavourite', $related)) {
46 $related['isfavourite'] = false;
48 parent::__construct($data, $related);
51 protected static function define_related() {
52 // We cache the context so it does not need to be retrieved from the course.
53 return array('context' => '\\context', 'isfavourite' => 'bool?');
56 protected function get_other_values(renderer_base $output) {
57 global $CFG;
58 $courseimage = self::get_course_image($this->data);
59 if (!$courseimage) {
60 $courseimage = $output->get_generated_image_for_id($this->data->id);
62 $progress = self::get_course_progress($this->data);
63 $hasprogress = false;
64 if ($progress === 0 || $progress > 0) {
65 $hasprogress = true;
67 $progress = floor($progress ?? 0);
68 $coursecategory = \core_course_category::get($this->data->category, MUST_EXIST, true);
69 return array(
70 'fullnamedisplay' => get_course_display_name_for_list($this->data),
71 'viewurl' => (new moodle_url('/course/view.php', array('id' => $this->data->id)))->out(false),
72 'courseimage' => $courseimage,
73 'progress' => $progress,
74 'hasprogress' => $hasprogress,
75 'isfavourite' => $this->related['isfavourite'],
76 'hidden' => boolval(get_user_preferences('block_myoverview_hidden_course_' . $this->data->id, 0)),
77 'showshortname' => $CFG->courselistshortnames ? true : false,
78 'coursecategory' => $coursecategory->name
82 public static function define_properties() {
83 return array(
84 'id' => array(
85 'type' => PARAM_INT,
87 'fullname' => array(
88 'type' => PARAM_TEXT,
90 'shortname' => array(
91 'type' => PARAM_TEXT,
93 'idnumber' => array(
94 'type' => PARAM_RAW,
96 'summary' => array(
97 'type' => PARAM_RAW,
98 'null' => NULL_ALLOWED,
99 'default' => null,
101 'summaryformat' => array(
102 'type' => PARAM_INT,
103 'default' => FORMAT_MOODLE,
105 'startdate' => array(
106 'type' => PARAM_INT,
108 'enddate' => array(
109 'type' => PARAM_INT,
111 'visible' => array(
112 'type' => PARAM_BOOL,
114 'showactivitydates' => [
115 'type' => PARAM_BOOL,
116 'null' => NULL_ALLOWED
118 'showcompletionconditions' => [
119 'type' => PARAM_BOOL,
120 'null' => NULL_ALLOWED
122 'pdfexportfont' => [
123 'type' => PARAM_TEXT,
124 'null' => NULL_ALLOWED,
125 'default' => null,
131 * Get the formatting parameters for the summary.
133 * @return array
135 protected function get_format_parameters_for_summary() {
136 return [
137 'component' => 'course',
138 'filearea' => 'summary',
142 public static function define_other_properties() {
143 return array(
144 'fullnamedisplay' => array(
145 'type' => PARAM_TEXT,
147 'viewurl' => array(
148 'type' => PARAM_URL,
150 'courseimage' => array(
151 'type' => PARAM_RAW,
153 'progress' => array(
154 'type' => PARAM_INT,
155 'optional' => true
157 'hasprogress' => array(
158 'type' => PARAM_BOOL
160 'isfavourite' => array(
161 'type' => PARAM_BOOL
163 'hidden' => array(
164 'type' => PARAM_BOOL
166 'timeaccess' => array(
167 'type' => PARAM_INT,
168 'optional' => true
170 'showshortname' => array(
171 'type' => PARAM_BOOL
173 'coursecategory' => array(
174 'type' => PARAM_TEXT
180 * Get the course image if added to course.
182 * @param object $course
183 * @return string|false url of course image or false if it's not exist.
185 public static function get_course_image($course) {
186 $image = \cache::make('core', 'course_image')->get($course->id);
188 if (is_null($image)) {
189 $image = false;
192 return $image;
196 * Get the course pattern datauri.
198 * The datauri is an encoded svg that can be passed as a url.
199 * @param object $course
200 * @return string datauri
201 * @deprecated 3.7
203 public static function get_course_pattern($course) {
204 global $OUTPUT;
205 debugging('course_summary_exporter::get_course_pattern() is deprecated. ' .
206 'Please use $OUTPUT->get_generated_image_for_id() instead.', DEBUG_DEVELOPER);
207 return $OUTPUT->get_generated_image_for_id($course->id);
211 * Get the course progress percentage.
213 * @param object $course
214 * @return int progress
216 public static function get_course_progress($course) {
217 return \core_completion\progress::get_course_progress_percentage($course);
221 * Get the course color.
223 * @param int $courseid
224 * @return string hex color code.
225 * @deprecated 3.7
227 public static function coursecolor($courseid) {
228 global $OUTPUT;
229 debugging('course_summary_exporter::coursecolor() is deprecated. ' .
230 'Please use $OUTPUT->get_generated_color_for_id() instead.', DEBUG_DEVELOPER);
231 return $OUTPUT->get_generated_color_for_id($courseid);