Commit | Line | Data |
---|---|---|
33dbc582 JL |
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 | * Subscription page. | |
19 | * | |
20 | * @package tool_mobile | |
21 | * @copyright 2020 Moodle Pty Ltd | |
22 | * @author <juan@moodle.com> | |
23 | * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | |
24 | */ | |
25 | ||
26 | namespace tool_mobile\output; | |
27 | ||
28 | /** | |
29 | * Subscription page. | |
30 | * | |
31 | * @package tool_mobile | |
32 | * @copyright 2020 Moodle Pty Ltd | |
33 | * @author <juan@moodle.com> | |
34 | * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | |
35 | */ | |
36 | class subscription implements \renderable, \templatable { | |
37 | ||
38 | /** | |
39 | * Subscription data. | |
40 | * | |
41 | * @var array subscription data | |
42 | */ | |
43 | protected $subscriptiondata; | |
44 | ||
45 | /** | |
46 | * Constructor for the class, sets the subscription data. | |
47 | * | |
48 | * @param array $subscriptiondata subscription data | |
49 | * @return void | |
50 | */ | |
51 | public function __construct(array $subscriptiondata) { | |
52 | $this->subscriptiondata = $subscriptiondata; | |
53 | } | |
54 | ||
55 | /** | |
56 | * Exports the data. | |
57 | * | |
58 | * @param \renderer_base $output | |
59 | * @return array with the subscription information | |
60 | */ | |
61 | public function export_for_template(\renderer_base $output): array { | |
62 | global $CFG; | |
63 | ||
64 | $ms = get_config('tool_mobile'); // Get mobile settings. | |
65 | ||
66 | $data = $this->subscriptiondata; | |
67 | $data['appsportalurl'] = \tool_mobile\api::MOODLE_APPS_PORTAL_URL; | |
68 | ||
69 | // First prepare messages that may come from the WS. | |
70 | if (!empty($data['messages'])) { | |
71 | foreach ($data['messages'] as $msg) { | |
72 | $data['messages' . $msg['type']][] = ['message' => $msg['message']]; | |
73 | } | |
74 | } | |
75 | unset($data['messages']); | |
76 | ||
77 | // Now prepare statistics information. | |
78 | if (isset($data['statistics']['notifications'])) { | |
79 | $data['notifications'] = $data['statistics']['notifications']; | |
80 | unset($data['statistics']['notifications']); | |
81 | ||
82 | // Find current month data. | |
83 | $data['notifications']['currentactivedevices'] = 0; | |
84 | ||
85 | if (isset($data['notifications']['monthly'][0])) { | |
86 | $currentmonth = $data['notifications']['monthly'][0]; | |
87 | $data['notifications']['currentactivedevices'] = $currentmonth['activedevices']; | |
88 | if (!empty($currentmonth['limitreachedtime'])) { | |
89 | $data['notifications']['limitreachedtime'] = $currentmonth['limitreachedtime']; | |
90 | $data['notifications']['ignorednotificationswarning'] = [ | |
91 | 'message' => get_string('notificationslimitreached', 'tool_mobile', $data['appsportalurl']) | |
92 | ]; | |
93 | } | |
94 | } | |
95 | } | |
96 | ||
97 | // Review features. | |
98 | foreach ($data['subscription']['features'] as &$feature) { | |
99 | ||
100 | // Check the type of features, if it is a limitation or functionality feature. | |
101 | if (array_key_exists('limit', $feature)) { | |
102 | ||
103 | if (empty($feature['limit'])) { // Unlimited, no need to calculate current values. | |
104 | $feature['humanstatus'] = get_string('unlimited'); | |
105 | $feature['showbar'] = 0; | |
106 | continue; | |
107 | } | |
108 | ||
109 | switch ($feature['name']) { | |
110 | // Check active devices. | |
111 | case 'pushnotificationsdevices': | |
112 | if (isset($data['notifications']['currentactivedevices'])) { | |
113 | $feature['status'] = $data['notifications']['currentactivedevices']; | |
114 | } | |
115 | break; | |
116 | // Check menu items. | |
117 | case 'custommenuitems': | |
82d5547b | 118 | $custommenuitems = []; |
33dbc582 | 119 | $els = rtrim($ms->custommenuitems, "\n"); |
82d5547b JL |
120 | if (!empty($els)) { |
121 | $custommenuitems = explode("\n", $els); | |
122 | // Get unique custom menu urls. | |
123 | $custommenuitems = array_flip( | |
124 | array_map(function($val) { | |
125 | return explode('|', $val)[1]; | |
126 | }, $custommenuitems) | |
127 | ); | |
128 | } | |
129 | $feature['status'] = count($custommenuitems); | |
33dbc582 JL |
130 | break; |
131 | // Check language strings. | |
132 | case 'customlanguagestrings': | |
82d5547b | 133 | $langstrings = []; |
33dbc582 | 134 | $els = rtrim($ms->customlangstrings, "\n"); |
82d5547b JL |
135 | if (!empty($els)) { |
136 | $langstrings = explode("\n", $els); | |
137 | // Get unique language string ids. | |
138 | $langstrings = array_flip( | |
139 | array_map(function($val) { | |
140 | return explode('|', $val)[0]; | |
141 | }, $langstrings) | |
142 | ); | |
143 | } | |
144 | $feature['status'] = count($langstrings); | |
33dbc582 JL |
145 | break; |
146 | // Check disabled features strings. | |
147 | case 'disabledfeatures': | |
148 | $feature['status'] = empty($ms->disabledfeatures) ? 0 : count(explode(',', $ms->disabledfeatures)); | |
149 | break; | |
150 | } | |
151 | ||
152 | $feature['humanstatus'] = '?/' . $feature['limit']; | |
153 | // Check if we should display the bar and how. | |
154 | if (isset($feature['status']) && is_int($feature['status'])) { | |
155 | $feature['humanstatus'] = $feature['status'] . '/' . $feature['limit']; | |
156 | $feature['showbar'] = 1; | |
157 | ||
158 | if ($feature['status'] == $feature['limit']) { | |
159 | $feature['barclass'] = 'bg-warning'; | |
160 | } | |
161 | ||
162 | if ($feature['status'] > $feature['limit']) { | |
163 | $feature['barclass'] = 'bg-danger'; | |
164 | $feature['humanstatus'] .= ' - ' . get_string('subscriptionlimitsurpassed', 'tool_mobile'); | |
165 | } | |
166 | } | |
167 | ||
168 | } else { | |
169 | $feature['humanstatus'] = empty($feature['enabled']) ? get_string('notincluded') : get_string('included'); | |
170 | ||
171 | if (empty($feature['enabled'])) { | |
172 | switch ($feature['name']) { | |
173 | // Check remote themes. | |
174 | case 'remotethemes': | |
175 | if (!empty($CFG->mobilecssurl)) { | |
176 | $feature['message'] = [ | |
177 | 'type' => 'danger', 'message' => get_string('subscriptionfeaturenotapplied', 'tool_mobile')]; | |
178 | } | |
179 | break; | |
180 | // Check site logo. | |
181 | case 'sitelogo': | |
182 | if ($output->get_logo_url() || $output->get_compact_logo_url()) { | |
183 | $feature['message'] = [ | |
184 | 'type' => 'danger', 'message' => get_string('subscriptionfeaturenotapplied', 'tool_mobile')]; | |
185 | } | |
186 | break; | |
d58b3df9 JL |
187 | // Check QR automatic login. |
188 | case 'qrautomaticlogin': | |
189 | if ($ms->qrcodetype == \tool_mobile\api::QR_CODE_LOGIN) { | |
190 | $feature['message'] = [ | |
191 | 'type' => 'danger', 'message' => get_string('subscriptionfeaturenotapplied', 'tool_mobile')]; | |
192 | } | |
193 | break; | |
33dbc582 JL |
194 | } |
195 | } | |
196 | } | |
197 | } | |
198 | ||
199 | usort($data['subscription']['features'], | |
200 | function (array $featurea, array $featureb) { | |
201 | $isfeaturea = !array_key_exists('limit', $featurea); | |
202 | $isfeatureb = !array_key_exists('limit', $featureb); | |
203 | ||
204 | if (!$isfeaturea && $isfeatureb) { | |
205 | return 1; | |
206 | } | |
207 | return 0; | |
208 | } | |
209 | ); | |
210 | ||
211 | return $data; | |
212 | } | |
213 | } |