AutorÃa | Ultima modificación | Ver Log |
<?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/>.
namespace tool_courserating\external;
use core\external\persistent_exporter;
use core_user\external\user_summary_exporter;
use tool_courserating\api;
use tool_courserating\constants;
use tool_courserating\helper;
use tool_courserating\local\models\flag;
use tool_courserating\local\models\rating;
use tool_courserating\output\renderer;
use tool_courserating\permission;
use tool_dataprivacy\category;
use tool_dataprivacy\context_instance;
/**
* Class for exporting field data.
*
* @package tool_courserating
* @copyright 2022 Marina Glancy <marina.glancy@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class rating_exporter extends persistent_exporter {
/**
* Defines the persistent class.
*
* @return string
*/
protected static function define_class() {
return rating::class;
}
/**
* Returns a list of objects that are related.
*
* @return array
*/
protected static function define_related() {
return [
'context' => 'context?',
];
}
/**
* Get the formatting parameters for the review field.
*
* @return array
*/
protected function get_format_parameters_for_review() {
return [
'component' => 'tool_courserating',
'filearea' => 'review',
'itemid' => $this->data->id,
'context' => \context_course::instance($this->data->courseid),
];
}
/**
* Return a list of additional properties used only for display
*
* @return array
*/
protected static function define_other_properties(): array {
return [
'user' => ['type' => user_summary_exporter::read_properties_definition(), 'optional' => true],
'reviewtext' => ['type' => PARAM_RAW],
'reviewstars' => ['type' => stars_exporter::read_properties_definition()],
'reviewdate' => ['type' => PARAM_RAW],
'ratingflag' => [
'type' => 'array',
'optional' => true,
],
];
}
/**
* Get additional values to inject while exporting
*
* @param \renderer_base $output
* @return array
*/
protected function get_other_values(\renderer_base $output): array {
global $USER;
$result = [];
if ($user = \core_user::get_user($this->data->userid)) {
$userexporter = new user_summary_exporter($user);
$result['user'] = $userexporter->export($output);
} else {
$result['user'] = [];
}
$result['reviewtext'] = helper::format_review($this->data->review, $this->data);
$result['reviewstars'] = (new stars_exporter($this->data->rating))->export($output);
$result['reviewdate'] = helper::format_date($this->data->timemodified);
if (permission::can_delete_rating($this->data->id, $this->data->courseid)) {
$flags = flag::count_records(['ratingid' => $this->data->id]);
} else {
$flags = [];
}
$flagged = flag::get_records(['ratingid' => $this->data->id, 'userid' => $USER->id]) ? true : false;
$result['ratingflag'] = (object)[
'flagged' => $flagged,
'toggleflag' => api::get_flag_inplace_editable($this->data->id, $flagged)->export_for_template($output),
'flags' => $flags,
'candelete' => $flags > 0,
'ratingid' => $this->data->id,
];
return $result;
}
}