1 | <?php |
||
2 | /* For licensing terms, see /license.txt */ |
||
3 | |||
4 | use Chamilo\CoreBundle\Entity\BranchSync; |
||
5 | use Chamilo\CoreBundle\Entity\Repository\BranchSyncRepository; |
||
6 | use GuzzleHttp\Client; |
||
7 | |||
8 | /** |
||
9 | * Responses to AJAX calls. |
||
10 | */ |
||
11 | require_once __DIR__.'/../global.inc.php'; |
||
12 | |||
13 | api_protect_admin_script(); |
||
14 | |||
15 | $action = isset($_REQUEST['a']) ? $_REQUEST['a'] : null; |
||
16 | |||
17 | switch ($action) { |
||
18 | case 'update_changeable_setting': |
||
19 | $url_id = api_get_current_access_url_id(); |
||
20 | |||
21 | if (api_is_global_platform_admin() && $url_id == 1) { |
||
22 | if (isset($_GET['id']) && !empty($_GET['id'])) { |
||
23 | $params = ['variable = ? ' => [$_GET['id']]]; |
||
24 | $data = api_get_settings_params($params); |
||
25 | if (!empty($data)) { |
||
26 | foreach ($data as $item) { |
||
27 | $params = ['id' => $item['id'], 'access_url_changeable' => $_GET['changeable']]; |
||
28 | api_set_setting_simple($params); |
||
29 | } |
||
30 | } |
||
31 | echo '1'; |
||
32 | } |
||
33 | } |
||
34 | break; |
||
35 | case 'version': |
||
36 | // Fix session block when loading admin/index.php and changing page |
||
37 | session_write_close(); |
||
38 | echo version_check(); |
||
39 | break; |
||
40 | case 'get_extra_content': |
||
41 | $blockName = isset($_POST['block']) ? Security::remove_XSS($_POST['block']) : null; |
||
42 | |||
43 | if (empty($blockName)) { |
||
44 | exit; |
||
45 | } |
||
46 | |||
47 | if (api_is_multiple_url_enabled()) { |
||
48 | $accessUrlId = api_get_current_access_url_id(); |
||
49 | |||
50 | if ($accessUrlId == -1) { |
||
51 | exit; |
||
52 | } |
||
53 | |||
54 | $urlInfo = api_get_access_url($accessUrlId); |
||
55 | $url = api_remove_trailing_slash(preg_replace('/https?:\/\//i', '', $urlInfo['url'])); |
||
56 | $cleanUrl = str_replace('/', '-', $url); |
||
57 | $newUrlDir = api_get_path(SYS_APP_PATH)."home/$cleanUrl/admin/"; |
||
58 | } else { |
||
59 | $newUrlDir = api_get_path(SYS_APP_PATH)."home/admin/"; |
||
60 | } |
||
61 | |||
62 | if (!file_exists($newUrlDir)) { |
||
63 | exit; |
||
64 | } |
||
65 | |||
66 | if (!Security::check_abs_path("{$newUrlDir}{$blockName}_extra.html", $newUrlDir)) { |
||
67 | exit; |
||
68 | } |
||
69 | |||
70 | if (!file_exists("{$newUrlDir}{$blockName}_extra.html")) { |
||
71 | exit; |
||
72 | } |
||
73 | |||
74 | echo file_get_contents("{$newUrlDir}{$blockName}_extra.html"); |
||
75 | break; |
||
76 | case 'get_latest_news': |
||
77 | if (api_get_configuration_value('admin_chamilo_announcements_disable') === true) { |
||
78 | break; |
||
79 | } |
||
80 | |||
81 | try { |
||
82 | $latestNews = getLatestNews(); |
||
83 | $latestNews = json_decode($latestNews, true); |
||
84 | |||
85 | echo Security::remove_XSS($latestNews['text'], COURSEMANAGER); |
||
86 | break; |
||
87 | } catch (Exception $e) { |
||
88 | break; |
||
89 | } |
||
90 | } |
||
91 | |||
92 | /** |
||
93 | * Displays either the text for the registration or the message that the installation is (not) up to date. |
||
94 | * |
||
95 | * @return string html code |
||
96 | * |
||
97 | * @author Patrick Cool <[email protected]>, Ghent University |
||
98 | * |
||
99 | * @version august 2006 |
||
100 | * |
||
101 | * @todo have a 6 monthly re-registration |
||
102 | */ |
||
103 | function version_check() |
||
104 | { |
||
105 | $tbl_settings = Database::get_main_table(TABLE_MAIN_SETTINGS_CURRENT); |
||
106 | $sql = 'SELECT selected_value FROM '.$tbl_settings.' WHERE variable = "registered" '; |
||
107 | $result = Database::query($sql); |
||
108 | $row = Database::fetch_array($result, 'ASSOC'); |
||
109 | |||
110 | // The site has not been registered yet. |
||
111 | $return = ''; |
||
112 | if ($row['selected_value'] == 'false') { |
||
113 | $return .= get_lang('VersionCheckExplanation'); |
||
114 | $return .= '<form class="version-checking" action="'.api_get_path(WEB_CODE_PATH).'admin/index.php" id="VersionCheck" name="VersionCheck" method="post">'; |
||
115 | $return .= '<label class="checkbox"><input type="checkbox" name="donotlistcampus" value="1" id="checkbox" />'.get_lang('HideCampusFromPublicPlatformsList'); |
||
116 | $return .= '</label><button type="submit" class="btn btn-primary btn-block" name="Register" value="'.get_lang('EnableVersionCheck').'" id="register" >'.get_lang('EnableVersionCheck').'</button>'; |
||
117 | $return .= '</form>'; |
||
118 | check_system_version(); |
||
119 | } else { |
||
120 | // site not registered. Call anyway |
||
121 | $return .= check_system_version(); |
||
122 | } |
||
123 | |||
124 | return $return; |
||
125 | } |
||
126 | |||
127 | /** |
||
128 | * Check if the current installation is up to date |
||
129 | * The code is borrowed from phpBB and slighlty modified. |
||
130 | * |
||
131 | * @throws \Exception |
||
132 | * @throws \InvalidArgumentException |
||
133 | * |
||
134 | * @return string language string with some layout (color) |
||
135 | */ |
||
136 | function check_system_version() |
||
137 | { |
||
138 | // Check if curl is available. |
||
139 | if (!in_array('curl', get_loaded_extensions())) { |
||
140 | return '<span style="color:red">'.get_lang('ImpossibleToContactVersionServerPleaseTryAgain').'</span>'; |
||
141 | } |
||
142 | |||
143 | $url = 'https://version.chamilo.org'; |
||
144 | $options = [ |
||
145 | 'verify' => false, |
||
146 | ]; |
||
147 | |||
148 | $urlValidated = false; |
||
149 | |||
150 | try { |
||
151 | $client = new GuzzleHttp\Client(); |
||
152 | $res = $client->request('GET', $url, $options); |
||
153 | if ($res->getStatusCode() == '200' || $res->getStatusCode() == '301') { |
||
154 | $urlValidated = true; |
||
155 | } |
||
156 | } catch (Exception $e) { |
||
0 ignored issues
–
show
Coding Style
Comprehensibility
introduced
by
![]() |
|||
157 | } |
||
158 | |||
159 | // the chamilo version of your installation |
||
160 | $system_version = trim(api_get_configuration_value('system_version')); |
||
161 | |||
162 | if ($urlValidated) { |
||
163 | // The number of courses |
||
164 | $number_of_courses = Statistics::countCourses(); |
||
165 | |||
166 | // The number of users |
||
167 | $number_of_users = Statistics::countUsers(); |
||
168 | $number_of_active_users = Statistics::countUsers( |
||
169 | null, |
||
170 | null, |
||
171 | null, |
||
172 | true |
||
173 | ); |
||
174 | |||
175 | // The number of sessions |
||
176 | $number_of_sessions = SessionManager::count_sessions(api_get_current_access_url_id()); |
||
177 | $packager = api_get_configuration_value('packager'); |
||
178 | if (empty($packager)) { |
||
179 | $packager = 'chamilo'; |
||
180 | } |
||
181 | |||
182 | $uniqueId = ''; |
||
183 | $entityManager = Database::getManager(); |
||
184 | /** @var BranchSyncRepository $branch */ |
||
185 | $repository = $entityManager->getRepository('ChamiloCoreBundle:BranchSync'); |
||
186 | /** @var BranchSync $branch */ |
||
187 | $branch = $repository->getTopBranch(); |
||
188 | if (is_a($branch, '\Chamilo\CoreBundle\Entity\BranchSync')) { |
||
189 | $uniqueId = $branch->getUniqueId(); |
||
190 | } |
||
191 | |||
192 | $data = [ |
||
193 | 'url' => api_get_path(WEB_PATH), |
||
194 | 'campus' => api_get_setting('siteName'), |
||
195 | 'contact' => api_get_setting('emailAdministrator'), // the admin's e-mail, with the only purpose of being able to contact admins to inform about critical security issues |
||
196 | 'version' => $system_version, |
||
197 | 'numberofcourses' => $number_of_courses, // to sum up into non-personal statistics - see https://version.chamilo.org/stats/ |
||
198 | 'numberofusers' => $number_of_users, // to sum up into non-personal statistics |
||
199 | 'numberofactiveusers' => $number_of_active_users, // to sum up into non-personal statistics |
||
200 | 'numberofsessions' => $number_of_sessions, |
||
201 | //The donotlistcampus setting recovery should be improved to make |
||
202 | // it true by default - this does not affect numbers counting |
||
203 | 'donotlistcampus' => api_get_setting('donotlistcampus'), |
||
204 | 'organisation' => api_get_setting('Institution'), |
||
205 | 'language' => api_get_setting('platformLanguage'), //helps us know the spread of language usage for campuses, by main language |
||
206 | 'adminname' => api_get_setting('administratorName').' '.api_get_setting('administratorSurname'), //not sure this is necessary... |
||
207 | 'ip' => $_SERVER['REMOTE_ADDR'], //the admin's IP address, with the only purpose of trying to geolocate portals around the globe to draw a map |
||
208 | // Reference to the packager system or provider through which |
||
209 | // Chamilo is installed/downloaded. Packagers can change this in |
||
210 | // the default config file (main/install/configuration.dist.php) |
||
211 | // or in the installed config file. The default value is 'chamilo' |
||
212 | 'packager' => $packager, |
||
213 | 'unique_id' => $uniqueId, |
||
214 | ]; |
||
215 | |||
216 | $version = null; |
||
217 | $client = new GuzzleHttp\Client(); |
||
218 | $url .= '?'; |
||
219 | foreach ($data as $k => $v) { |
||
220 | $url .= urlencode($k).'='.urlencode($v).'&'; |
||
221 | } |
||
222 | $res = $client->request('GET', $url, $options); |
||
223 | if ($res->getStatusCode() == '200') { |
||
224 | $versionData = $res->getHeader('X-Chamilo-Version'); |
||
225 | if (isset($versionData[0])) { |
||
226 | $version = trim($versionData[0]); |
||
227 | } |
||
228 | } |
||
229 | |||
230 | if (version_compare($system_version, $version, '<')) { |
||
231 | $output = '<span style="color:red">'.get_lang('YourVersionNotUpToDate').'<br /> |
||
232 | '.get_lang('LatestVersionIs').' <b>Chamilo '.$version.'</b>. <br /> |
||
233 | '.get_lang('YourVersionIs').' <b>Chamilo '.$system_version.'</b>. <br />'.str_replace('http://www.chamilo.org', '<a href="http://www.chamilo.org">http://www.chamilo.org</a>', get_lang('PleaseVisitOurWebsite')).'</span>'; |
||
234 | } else { |
||
235 | $output = '<span style="color:green">'.get_lang('VersionUpToDate').': Chamilo '.$version.'</span>'; |
||
236 | } |
||
237 | |||
238 | return $output; |
||
239 | } |
||
240 | |||
241 | return '<span style="color:red">'.get_lang('ImpossibleToContactVersionServerPleaseTryAgain').'</span>'; |
||
242 | } |
||
243 | |||
244 | /** |
||
245 | * Display the latest news from the Chamilo Association for admins. |
||
246 | * |
||
247 | * @throws \GuzzleHttp\Exception\GuzzleException |
||
248 | * @throws Exception |
||
249 | * |
||
250 | * @return string|void |
||
251 | */ |
||
252 | function getLatestNews() |
||
253 | { |
||
254 | $url = 'https://version.chamilo.org/news/latest.php'; |
||
255 | |||
256 | $client = new Client(); |
||
257 | $response = $client->request( |
||
258 | 'GET', |
||
259 | $url, |
||
260 | [ |
||
261 | 'query' => [ |
||
262 | 'language' => api_get_interface_language(), |
||
263 | ], |
||
264 | ] |
||
265 | ); |
||
266 | |||
267 | if ($response->getStatusCode() !== 200) { |
||
268 | throw new Exception(get_lang('DenyEntry')); |
||
269 | } |
||
270 | |||
271 | return $response->getBody()->getContents(); |
||
272 | } |
||
273 |