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. 13 // 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/>. 16 17 /** 18 * Class for exporting evidence data. 19 * 20 * @package core_competency 21 * @copyright 2015 Damyon Wiese 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 namespace core_competency\external; 25 defined('MOODLE_INTERNAL') || die(); 26 27 use context_system; 28 use renderer_base; 29 use core_competency\evidence; 30 use core_competency\user_competency; 31 use core_user\external\user_summary_exporter; 32 33 /** 34 * Class for exporting evidence data. 35 * 36 * @copyright 2015 Damyon Wiese 37 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 38 */ 39 class evidence_exporter extends \core\external\persistent_exporter { 40 41 /** 42 * Constructor. 43 * 44 * @param mixed $data The data. 45 * @param array $related Array of relateds. 46 */ 47 public function __construct($data, $related = array()) { 48 if (!isset($related['context'])) { 49 // Previous code was automatically using the system context which was not correct. 50 // We let developers know that they must fix their code without breaking anything, and 51 // fallback on the previous behaviour. This should be removed at a later stage: Moodle 3.5. 52 debugging('Missing related context in evidence_exporter.', DEBUG_DEVELOPER); 53 $related['context'] = context_system::instance(); 54 } 55 parent::__construct($data, $related); 56 } 57 58 protected static function define_related() { 59 return array( 60 'actionuser' => 'stdClass?', 61 'context' => 'context', 62 'scale' => 'grade_scale', 63 'usercompetency' => 'core_competency\\user_competency?', 64 'usercompetencyplan' => 'core_competency\\user_competency_plan?', 65 ); 66 } 67 68 protected static function define_class() { 69 return evidence::class; 70 } 71 72 protected function get_other_values(renderer_base $output) { 73 $other = array(); 74 75 if (!empty($this->related['actionuser'])) { 76 $exporter = new user_summary_exporter($this->related['actionuser']); 77 $actionuser = $exporter->export($output); 78 $other['actionuser'] = $actionuser; 79 } 80 81 $other['description'] = $this->persistent->get_description(); 82 83 $other['userdate'] = userdate($this->persistent->get('timecreated')); 84 85 if ($this->persistent->get('grade') === null) { 86 $gradename = '-'; 87 } else { 88 $gradename = $this->related['scale']->scale_items[$this->persistent->get('grade') - 1]; 89 } 90 $other['gradename'] = $gradename; 91 92 // Try to guess the user from the user competency. 93 $userid = null; 94 if ($this->related['usercompetency']) { 95 $userid = $this->related['usercompetency']->get('userid'); 96 } else if ($this->related['usercompetencyplan']) { 97 $userid = $this->related['usercompetencyplan']->get('userid'); 98 } else { 99 $uc = user_competency::get_record(['id' => $this->persistent->get('usercompetencyid')]); 100 $userid = $uc->get('userid'); 101 } 102 $other['candelete'] = evidence::can_delete_user($userid); 103 104 return $other; 105 } 106 107 /** 108 * Get the format parameters for gradename. 109 * 110 * @return array 111 */ 112 protected function get_format_parameters_for_gradename() { 113 return [ 114 'context' => context_system::instance(), // The system context is cached, so we can get it right away. 115 ]; 116 } 117 118 public static function define_other_properties() { 119 return array( 120 'actionuser' => array( 121 'type' => user_summary_exporter::read_properties_definition(), 122 'optional' => true 123 ), 124 'description' => array( 125 'type' => PARAM_TEXT, // The description may contain course names, etc.. which may need filtering. 126 ), 127 'gradename' => array( 128 'type' => PARAM_TEXT, 129 ), 130 'userdate' => array( 131 'type' => PARAM_NOTAGS 132 ), 133 'candelete' => array( 134 'type' => PARAM_BOOL 135 ) 136 ); 137 } 138 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body