1 |
efrain |
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':
|
|
|
118 |
$custommenuitems = [];
|
|
|
119 |
$els = rtrim($ms->custommenuitems, "\n");
|
|
|
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);
|
|
|
130 |
break;
|
|
|
131 |
// Check language strings.
|
|
|
132 |
case 'customlanguagestrings':
|
|
|
133 |
$langstrings = [];
|
|
|
134 |
$els = rtrim($ms->customlangstrings, "\n");
|
|
|
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);
|
|
|
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;
|
|
|
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;
|
|
|
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 |
}
|