MDL-62342 privacy: Use singular/plural form in labels
[moodle.git] / admin / tool / policy / classes / policy_version_exporter.php
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/>.
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  */
25 namespace tool_policy;
27 defined('MOODLE_INTERNAL') || die();
29 use core\external\exporter;
30 use renderer_base;
31 use tool_policy\api;
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 {
44     /**
45      * Return the list of properties.
46      *
47      * @return array
48      */
49     protected static function define_properties() {
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     }
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     }
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     }
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) {
107         $othervalues = [
108             'typetext' => get_string('policydoctype'.$this->data->type, 'tool_policy'),
109             'audiencetext' => get_string('policydocaudience'.$this->data->audience, 'tool_policy'),
110         ];
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         }
119         $acceptancescount = empty($this->data->acceptancescount) ? 0 : $this->data->acceptancescount;
120         $acceptancesexpected = api::count_total_users();
122         $a = [
123             'agreedcount' => $acceptancescount,
124             'userscount' => $acceptancesexpected,
125             'percent' => min(100, round($acceptancescount * 100 / max($acceptancesexpected, 1))),
126         ];
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);
135         return $othervalues;
136     }
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     }
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     }