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 * Provides the {@link tool_policy\policy_version_exporter} class. 19 * 20 * @package tool_policy 21 * @copyright 2018 David Mudrak <david@moodle.com> 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25 namespace tool_policy; 26 27 defined('MOODLE_INTERNAL') || die(); 28 29 use core\external\exporter; 30 use renderer_base; 31 use tool_policy\api; 32 33 /** 34 * Exporter of a single policy document version. 35 * 36 * Note we cannot use the persistent_exporter as our super class because we want to add some properties not present in 37 * the persistent (e.g. acceptancescount). 38 * 39 * @copyright 2018 David Mudrak <david@moodle.com> 40 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 41 */ 42 class policy_version_exporter extends exporter { 43 44 /** 45 * Return the list of properties. 46 * 47 * @return array 48 */ 49 protected static function define_properties() { 50 51 return policy_version::properties_definition() + [ 52 'acceptancescount' => [ 53 'type' => PARAM_INT, 54 'default' => 0, 55 ], 56 'status' => [ 57 'type' => PARAM_INT, 58 ], 59 ]; 60 } 61 62 /** 63 * Returns a list of objects that are related. 64 * 65 * @return array 66 */ 67 protected static function define_related() { 68 return [ 69 'context' => 'context', 70 ]; 71 } 72 73 /** 74 * Return the list of additional (calculated and readonly) properties. 75 * 76 * @return array 77 */ 78 protected static function define_other_properties() { 79 return [ 80 // Human readable type of the policy document version. 81 'typetext' => [ 82 'type' => PARAM_TEXT, 83 ], 84 // Human readable audience of the policy document audience. 85 'audiencetext' => [ 86 'type' => PARAM_TEXT, 87 ], 88 // Detailed information about the number of policy acceptances. 89 'acceptancescounttext' => [ 90 'type' => PARAM_TEXT, 91 ], 92 // Link to view acceptances. 93 'acceptancescounturl' => [ 94 'type' => PARAM_LOCALURL, 95 ], 96 ]; 97 } 98 99 /** 100 * Get the additional values to inject while exporting. 101 * 102 * @param renderer_base $output The renderer. 103 * @return array Keys are the property names, values are their values. 104 */ 105 protected function get_other_values(renderer_base $output) { 106 107 $othervalues = [ 108 'typetext' => get_string('policydoctype'.$this->data->type, 'tool_policy'), 109 'audiencetext' => get_string('policydocaudience'.$this->data->audience, 'tool_policy'), 110 ]; 111 112 if (!isset($this->data->acceptancescount) || $this->data->status == policy_version::STATUS_DRAFT) { 113 // Return "N/A" for acceptances count. 114 $othervalues['acceptancescounttext'] = get_string('useracceptancecountna', 'tool_policy'); 115 $othervalues['acceptancescounturl'] = null; 116 return $othervalues; 117 } 118 119 $acceptancescount = empty($this->data->acceptancescount) ? 0 : $this->data->acceptancescount; 120 $acceptancesexpected = api::count_total_users(); 121 122 $a = [ 123 'agreedcount' => $acceptancescount, 124 'userscount' => $acceptancesexpected, 125 'percent' => min(100, round($acceptancescount * 100 / max($acceptancesexpected, 1))), 126 ]; 127 128 $othervalues['acceptancescounttext'] = get_string('useracceptancecount', 'tool_policy', $a); 129 $acceptancesurl = new \moodle_url('/admin/tool/policy/acceptances.php', ['policyid' => $this->data->policyid]); 130 if ($this->data->status != policy_version::STATUS_ACTIVE) { 131 $acceptancesurl->param('versionid', $this->data->id); 132 } 133 $othervalues['acceptancescounturl'] = $acceptancesurl->out(false); 134 135 return $othervalues; 136 } 137 138 /** 139 * Get the formatting parameters for the summary field. 140 * 141 * @return array 142 */ 143 protected function get_format_parameters_for_summary() { 144 return [ 145 'component' => 'tool_policy', 146 'filearea' => 'policydocumentsummary', 147 'itemid' => $this->data->id 148 ]; 149 } 150 151 /** 152 * Get the formatting parameters for the content field. 153 * 154 * @return array 155 */ 156 protected function get_format_parameters_for_content() { 157 return [ 158 'component' => 'tool_policy', 159 'filearea' => 'policydocumentcontent', 160 'itemid' => $this->data->id 161 ]; 162 } 163 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body