1 | <?php |
||
2 | /* For licensing terms, see /license.txt */ |
||
3 | |||
4 | /** |
||
5 | * Course request manager. |
||
6 | * |
||
7 | * @author José Manuel Abuin Mosquera <[email protected]>, 2010 |
||
8 | * @author Bruno Rubio Gayo <[email protected]>, 2010 |
||
9 | * Centro de Supercomputacion de Galicia (CESGA) |
||
10 | * @author Ivan Tcholakov <[email protected]> (technical adaptation for Chamilo 1.8.8), 2010 |
||
11 | */ |
||
12 | class CourseRequestManager |
||
13 | { |
||
14 | /** |
||
15 | * Checks whether a given course code has been already occupied. |
||
16 | * |
||
17 | * @param string $wanted_course_code the code to be checked |
||
18 | * |
||
19 | * @return bool |
||
20 | * Returns TRUE if there is created: |
||
21 | * - a course with the same code OR visual_code (visualcode). |
||
22 | * - a course request with the same code as the given one, or |
||
23 | * Othewise returns FALSE. |
||
24 | */ |
||
25 | public static function course_code_exists($wanted_course_code) |
||
26 | { |
||
27 | if ($code_exists = CourseManager::course_code_exists($wanted_course_code)) { |
||
28 | return $code_exists; |
||
29 | } |
||
30 | $table_course_request = Database::get_main_table(TABLE_MAIN_COURSE_REQUEST); |
||
31 | $wanted_course_code = Database::escape_string($wanted_course_code); |
||
32 | $sql = sprintf( |
||
33 | 'SELECT COUNT(id) AS number FROM %s WHERE visual_code = "%s"', |
||
34 | $table_course_request, |
||
35 | $wanted_course_code |
||
36 | ); |
||
37 | $result = Database::fetch_array(Database::query($sql)); |
||
38 | |||
39 | return $result['number'] > 0; |
||
40 | } |
||
41 | |||
42 | /** |
||
43 | * Creates a new course request within the database. |
||
44 | * |
||
45 | * @param string $wanted_code the code for the created in the future course |
||
46 | * @param string $title |
||
47 | * @param string $description |
||
48 | * @param string $category_code |
||
49 | * @param string $course_language |
||
50 | * @param string $objectives |
||
51 | * @param string $target_audience |
||
52 | * @param int $user_id |
||
53 | * |
||
54 | * @return mixed the database id of the newly created course request or FALSE on failure |
||
55 | */ |
||
56 | public static function create_course_request( |
||
57 | $wanted_code, |
||
58 | $title, |
||
59 | $description, |
||
60 | $category_code, |
||
61 | $course_language, |
||
62 | $objectives, |
||
63 | $target_audience, |
||
64 | $user_id, |
||
65 | $exemplary_content |
||
66 | ) { |
||
67 | $wanted_code = trim($wanted_code); |
||
68 | $user_id = (int) $user_id; |
||
69 | $exemplary_content = (bool) $exemplary_content ? 1 : 0; |
||
70 | |||
71 | if ('' == $wanted_code) { |
||
72 | return false; |
||
73 | } |
||
74 | |||
75 | if (self::course_code_exists($wanted_code)) { |
||
76 | return false; |
||
77 | } |
||
78 | |||
79 | if ($user_id <= 0) { |
||
80 | return false; |
||
81 | } |
||
82 | |||
83 | $user_info = api_get_user_info($user_id); |
||
84 | if (!is_array($user_info)) { |
||
85 | return false; |
||
86 | } |
||
87 | |||
88 | $tutor_name = api_get_person_name($user_info['firstname'], $user_info['lastname'], null, null, $course_language); |
||
89 | |||
90 | $request_date = api_get_utc_datetime(); |
||
91 | $status = COURSE_REQUEST_PENDING; |
||
92 | $info = 0; |
||
93 | $keys = AddCourse::define_course_keys($wanted_code, ''); |
||
94 | if (!count($keys)) { |
||
95 | return false; |
||
96 | } |
||
97 | $visual_code = $keys['currentCourseCode']; |
||
98 | $code = $keys['currentCourseId']; |
||
99 | $db_name = isset($keys['currentCourseDbName']) ? $keys['currentCourseDbName'] : null; |
||
100 | $directory = $keys['currentCourseRepository']; |
||
101 | // @todo user entity |
||
102 | $sql = sprintf( |
||
103 | 'INSERT INTO %s ( |
||
104 | code, user_id, directory, db_name, |
||
105 | course_language, title, description, category_code, |
||
106 | tutor_name, visual_code, request_date, |
||
107 | objetives, target_audience, status, info, exemplary_content) |
||
108 | VALUES ( |
||
109 | "%s", "%s", "%s", "%s", |
||
110 | "%s", "%s", "%s", "%s", |
||
111 | "%s", "%s", "%s", |
||
112 | "%s", "%s", "%s", "%s", "%s");', |
||
113 | Database::get_main_table(TABLE_MAIN_COURSE_REQUEST), |
||
114 | Database::escape_string($code), |
||
115 | Database::escape_string($user_id), |
||
116 | Database::escape_string($directory), |
||
117 | Database::escape_string($db_name), |
||
118 | Database::escape_string($course_language), |
||
119 | Database::escape_string($title), |
||
120 | Database::escape_string($description), |
||
121 | Database::escape_string($category_code), |
||
122 | Database::escape_string($tutor_name), |
||
123 | Database::escape_string($visual_code), |
||
124 | Database::escape_string($request_date), |
||
125 | Database::escape_string($objectives), |
||
126 | Database::escape_string($target_audience), |
||
127 | Database::escape_string($status), |
||
128 | Database::escape_string($info), |
||
129 | Database::escape_string($exemplary_content) |
||
130 | ); |
||
131 | |||
132 | $result_sql = Database::query($sql); |
||
133 | |||
134 | if (!$result_sql) { |
||
135 | return false; |
||
136 | } |
||
137 | |||
138 | $last_insert_id = Database::insert_id(); |
||
139 | |||
140 | // E-mail notifications. |
||
141 | |||
142 | $email_language = $user_info['language']; |
||
143 | $email_language_admin = api_get_setting('platformLanguage'); |
||
144 | |||
145 | $email_subject = sprintf(get_lang('CourseRequestEmailSubject', null, $email_language), '['.api_get_setting('siteName').']', $code); |
||
146 | |||
147 | $email_body = get_lang('CourseRequestMailOpening', null, $email_language)."\n\n"; |
||
148 | $email_body .= get_lang('CourseName', null, $email_language).': '.$title."\n"; |
||
149 | $email_body .= get_lang('Fac', null, $email_language).': '.$category_code."\n"; |
||
150 | $email_body .= get_lang('CourseCode', null, $email_language).': '.$code."\n"; |
||
151 | $email_body .= get_lang('Professor', null, $email_language).': '.api_get_person_name($user_info['firstname'], $user_info['lastname'], null, null, $email_language)."\n"; |
||
152 | $email_body .= get_lang('Email', null, $email_language).': '.$user_info['mail']."\n"; |
||
153 | $email_body .= get_lang('Description', null, $email_language).': '.$description."\n"; |
||
154 | $email_body .= get_lang('Objectives', null, $email_language).': '.$objectives."\n"; |
||
155 | $email_body .= get_lang('TargetAudience', null, $email_language).': '.$target_audience."\n"; |
||
156 | $email_body .= get_lang('Ln', null, $email_language).': '.$course_language."\n"; |
||
157 | $email_body .= get_lang('FillWithExemplaryContent', null, $email_language).': '.($exemplary_content ? get_lang('Yes', null, $email_language) : get_lang('No', null, $email_language))."\n"; |
||
158 | $email_body = nl2br($email_body); |
||
159 | |||
160 | // Sending an e-mail to the platform administrator. |
||
161 | $email_body_admin = $email_body; |
||
162 | $email_body_admin .= "\n".get_lang('CourseRequestPageForApproval', null, $email_language_admin).' '.api_get_path(WEB_CODE_PATH).'admin/course_request_edit.php?id='.$last_insert_id."\n"; |
||
163 | $email_body_admin .= "\n".get_lang('CourseRequestLegalNote', null, $email_language_admin)."\n"; |
||
164 | $email_body_admin = nl2br($email_body_admin); |
||
165 | |||
166 | $sender_name_teacher = api_get_person_name($user_info['firstname'], $user_info['lastname'], null, PERSON_NAME_EMAIL_ADDRESS); |
||
167 | $sender_email_teacher = $user_info['mail']; |
||
168 | $recipient_name_admin = api_get_person_name( |
||
169 | api_get_setting('administratorName'), |
||
170 | api_get_setting('administratorSurname'), |
||
171 | null, |
||
172 | PERSON_NAME_EMAIL_ADDRESS |
||
173 | ); |
||
174 | $recipient_email_admin = api_get_setting('emailAdministrator'); |
||
175 | |||
176 | $userInfo = api_get_user_info($user_id); |
||
177 | |||
178 | $additionalParameters = [ |
||
179 | 'smsType' => SmsPlugin::NEW_COURSE_SUGGESTED_TEACHER, |
||
180 | 'userId' => $user_id, |
||
181 | 'userUsername' => $userInfo['username'], |
||
182 | ]; |
||
183 | |||
184 | api_mail_html( |
||
185 | $recipient_name_admin, |
||
186 | $recipient_email_admin, |
||
187 | $email_subject, |
||
188 | $email_body_admin, |
||
189 | $sender_name_teacher, |
||
190 | $sender_email_teacher, |
||
191 | null, |
||
192 | null, |
||
193 | null, |
||
194 | $additionalParameters |
||
195 | ); |
||
196 | |||
197 | // Sending an e-mail to the requestor. |
||
198 | |||
199 | $email_body_teacher = get_lang('Dear', null, $email_language).' '; |
||
200 | $email_body_teacher .= api_get_person_name($user_info['firstname'], $user_info['lastname'], null, null, $email_language).",\n\n"; |
||
201 | $email_body_teacher .= $email_body; |
||
202 | $email_body_teacher .= "\n".get_lang('SignatureFormula', null, $email_language)."\n"; |
||
203 | $email_body_teacher .= api_get_person_name( |
||
204 | api_get_setting('administratorName'), |
||
205 | api_get_setting('administratorSurname'), |
||
206 | null, |
||
207 | null, |
||
208 | $email_language |
||
209 | )."\n"; |
||
210 | $email_body_teacher .= get_lang('Manager', null, $email_language).' '.api_get_setting('siteName')."\n"; |
||
211 | $email_body_teacher .= get_lang('Phone', null, $email_language).': '.api_get_setting('administratorTelephone')."\n"; |
||
212 | $email_body_teacher .= get_lang('Email', null, $email_language).': '.api_get_setting('emailAdministrator', null, $email_language)."\n"; |
||
213 | $email_body_teacher .= "\n".get_lang('CourseRequestLegalNote', null, $email_language)."\n"; |
||
214 | $email_body_teacher = nl2br($email_body_teacher); |
||
215 | |||
216 | // Swap the sender and the recipient. |
||
217 | $sender_name_admin = $recipient_name_admin; |
||
218 | $sender_email_admin = $recipient_email_admin; |
||
219 | $recipient_name_teacher = $sender_name_teacher; |
||
220 | $recipient_email_teacher = $sender_email_teacher; |
||
221 | |||
222 | $additionalParameters = [ |
||
223 | 'smsType' => SmsPlugin::COURSE_OPENING_REQUEST_CODE_REGISTERED, |
||
224 | 'userId' => $user_info['user_id'], |
||
225 | 'courseCode' => $wanted_code, |
||
226 | ]; |
||
227 | |||
228 | api_mail_html( |
||
229 | $recipient_name_teacher, |
||
230 | $recipient_email_teacher, |
||
231 | $email_subject, |
||
232 | $email_body_teacher, |
||
233 | $sender_name_admin, |
||
234 | $sender_email_admin, |
||
235 | null, |
||
236 | null, |
||
237 | null, |
||
238 | $additionalParameters |
||
239 | ); |
||
240 | |||
241 | return $last_insert_id; |
||
242 | } |
||
243 | |||
244 | /** |
||
245 | * Updates a given course request in the database. |
||
246 | * |
||
247 | * @param int $id the id (an integer number) of the corresponding database record |
||
248 | * @param string $wanted_code the code for the created in the future course |
||
249 | * @param string $title |
||
250 | * @param string $description |
||
251 | * @param string $category_code |
||
252 | * @param string $course_language |
||
253 | * @param string $objectives |
||
254 | * @param string $target_audience |
||
255 | * @param int $user_id |
||
256 | * |
||
257 | * @return bool returns TRUE on success or FALSE on failure |
||
258 | */ |
||
259 | public static function update_course_request( |
||
260 | $id, |
||
261 | $wanted_code, |
||
262 | $title, |
||
263 | $description, |
||
264 | $category_code, |
||
265 | $course_language, |
||
266 | $objectives, |
||
267 | $target_audience, |
||
268 | $user_id, |
||
269 | $exemplary_content |
||
270 | ) { |
||
271 | $id = (int) $id; |
||
272 | $wanted_code = trim($wanted_code); |
||
273 | $user_id = (int) $user_id; |
||
274 | $exemplary_content = (bool) $exemplary_content ? 1 : 0; |
||
275 | |||
276 | if ('' == $wanted_code) { |
||
277 | return false; |
||
278 | } |
||
279 | |||
280 | if ($user_id <= 0) { |
||
281 | return false; |
||
282 | } |
||
283 | |||
284 | // Retrieve request data |
||
285 | $course_request_info = self::get_course_request_info($id); |
||
286 | if (!is_array($course_request_info)) { |
||
287 | return false; |
||
288 | } |
||
289 | |||
290 | $code = $wanted_code; |
||
291 | $tutor_name = $course_request_info['tutor_name']; |
||
292 | $directory = $course_request_info['directory']; |
||
293 | $visual_code = $course_request_info['visual_code']; |
||
294 | $request_date = $course_request_info['request_date']; |
||
295 | $status = $course_request_info['status']; |
||
296 | $info = $course_request_info['info']; |
||
297 | |||
298 | if ($wanted_code != $course_request_info['code']) { |
||
299 | if (self::course_code_exists($wanted_code)) { |
||
300 | return false; |
||
301 | } |
||
302 | $keys = AddCourse::define_course_keys($wanted_code, ''); |
||
303 | if (count($keys)) { |
||
304 | $visual_code = $keys['currentCourseCode']; |
||
305 | $code = $keys['currentCourseId']; |
||
306 | $db_name = $keys['currentCourseDbName']; |
||
307 | $directory = $keys['currentCourseRepository']; |
||
308 | } else { |
||
309 | return false; |
||
310 | } |
||
311 | } |
||
312 | |||
313 | if ($user_id != $course_request_info['code']) { |
||
314 | $user_info = api_get_user_info($user_id); |
||
315 | if (is_array($user_info)) { |
||
316 | $tutor_name = api_get_person_name( |
||
317 | $user_info['firstname'], |
||
318 | $user_info['lastname'], |
||
319 | null, |
||
320 | null, |
||
321 | $course_language |
||
322 | ); |
||
323 | } else { |
||
324 | $user_id = $course_request_info['code']; |
||
325 | } |
||
326 | } |
||
327 | |||
328 | if ($course_language != $course_request_info['course_language']) { |
||
329 | $user_info = api_get_user_info($user_id); |
||
330 | if (is_array($user_info)) { |
||
331 | $tutor_name = api_get_person_name( |
||
332 | $user_info['firstname'], |
||
333 | $user_info['lastname'], |
||
334 | null, |
||
335 | null, |
||
336 | $course_language |
||
337 | ); |
||
338 | } |
||
339 | } |
||
340 | |||
341 | // @todo use entity |
||
342 | $sql = sprintf( |
||
343 | 'UPDATE %s SET |
||
344 | code = "%s", user_id = "%s", directory = "%s", db_name = "%s", |
||
345 | course_language = "%s", title = "%s", description = "%s", category_code = "%s", |
||
346 | tutor_name = "%s", visual_code = "%s", request_date = "%s", |
||
347 | objetives = "%s", target_audience = "%s", status = "%s", info = "%s", exemplary_content = "%s" |
||
348 | WHERE id = '.$id, |
||
349 | Database::get_main_table(TABLE_MAIN_COURSE_REQUEST), |
||
350 | Database::escape_string($code), |
||
351 | intval($user_id), |
||
352 | Database::escape_string($directory), |
||
353 | Database::escape_string($db_name), |
||
354 | Database::escape_string($course_language), |
||
355 | Database::escape_string($title), |
||
356 | Database::escape_string($description), |
||
357 | Database::escape_string($category_code), |
||
358 | Database::escape_string($tutor_name), |
||
359 | Database::escape_string($visual_code), |
||
360 | Database::escape_string($request_date), |
||
361 | Database::escape_string($objectives), |
||
362 | Database::escape_string($target_audience), |
||
363 | Database::escape_string($status), |
||
364 | Database::escape_string($info), |
||
365 | Database::escape_string($exemplary_content) |
||
366 | ); |
||
367 | $result_sql = Database::query($sql); |
||
368 | |||
369 | return false !== $result_sql; |
||
370 | } |
||
371 | |||
372 | /** |
||
373 | * Deletes a given course request. |
||
374 | * |
||
375 | * @param int $id the id (an integer number) of the corresponding database record |
||
376 | * |
||
377 | * @return bool returns TRUE on success or FALSE on failure |
||
378 | */ |
||
379 | public static function delete_course_request($id) |
||
380 | { |
||
381 | $id = (int) $id; |
||
382 | $sql = "DELETE FROM ".Database::get_main_table(TABLE_MAIN_COURSE_REQUEST)." |
||
383 | WHERE id = ".$id; |
||
384 | $result = Database::query($sql); |
||
385 | |||
386 | return false !== $result; |
||
387 | } |
||
388 | |||
389 | /** |
||
390 | * Returns the number of course requests in the course_request table (optionally matching a status). |
||
391 | * |
||
392 | * @param int $status |
||
393 | * |
||
394 | * @return bool |
||
395 | */ |
||
396 | public static function count_course_requests($status = null) |
||
397 | { |
||
398 | $course_table = Database::get_main_table(TABLE_MAIN_COURSE_REQUEST); |
||
399 | if (is_null($status)) { |
||
400 | $sql = "SELECT COUNT(id) AS number FROM ".$course_table; |
||
401 | } else { |
||
402 | $status = (int) $status; |
||
403 | $sql = "SELECT COUNT(id) AS number FROM ".$course_table." |
||
404 | WHERE status = ".$status; |
||
405 | } |
||
406 | $result = Database::fetch_array(Database::query($sql)); |
||
407 | if (is_array($result)) { |
||
408 | return $result['number']; |
||
409 | } |
||
410 | |||
411 | return false; |
||
412 | } |
||
413 | |||
414 | /** |
||
415 | * Gets all the information about a course request using its database id as an access key. |
||
416 | * |
||
417 | * @param int $id the id (an integer number) of the corresponding database record |
||
418 | * |
||
419 | * @return string|bool returns the requested data as an array or FALSE on failure |
||
420 | */ |
||
421 | public static function get_course_request_info($id) |
||
422 | { |
||
423 | $id = (int) $id; |
||
424 | $sql = "SELECT * |
||
425 | FROM ".Database::get_main_table(TABLE_MAIN_COURSE_REQUEST)." |
||
426 | WHERE id = ".$id; |
||
427 | $result = Database::query($sql); |
||
428 | if (Database::num_rows($result) > 0) { |
||
429 | return Database::fetch_array($result); |
||
0 ignored issues
–
show
Bug
Best Practice
introduced
by
Loading history...
|
|||
430 | } |
||
431 | |||
432 | return false; |
||
433 | } |
||
434 | |||
435 | /** |
||
436 | * Gets the code of a given course request using its database id as an access key. |
||
437 | * |
||
438 | * @param int $id the id (an integer number) of the corresponding database record |
||
439 | * |
||
440 | * @return string|bool returns the requested requested code or FALSE on failure |
||
441 | */ |
||
442 | public static function get_course_request_code($id) |
||
443 | { |
||
444 | $id = (int) $id; |
||
445 | $sql = "SELECT code |
||
446 | FROM ".Database::get_main_table(TABLE_MAIN_COURSE_REQUEST)." |
||
447 | WHERE id = ".$id; |
||
448 | $result = Database::query($sql); |
||
449 | if (Database::num_rows($result) > 0) { |
||
450 | $result_array = Database::fetch_array($result, 'NUM'); |
||
451 | if (is_array($result_array)) { |
||
452 | return $result_array[0]; |
||
453 | } |
||
454 | } |
||
455 | |||
456 | return false; |
||
457 | } |
||
458 | |||
459 | /** |
||
460 | * Accepts a given by its id course request. The requested course gets created immediately after the request acceptance. |
||
461 | * |
||
462 | * @param int $id the id (an integer number) of the corresponding database record |
||
463 | * |
||
464 | * @return string|bool returns the code of the newly created course or FALSE on failure |
||
465 | */ |
||
466 | public static function accept_course_request($id) |
||
467 | { |
||
468 | $id = (int) $id; |
||
469 | |||
470 | // Retrieve request's data |
||
471 | $course_request_info = self::get_course_request_info($id); |
||
472 | if (!is_array($course_request_info)) { |
||
473 | return false; |
||
474 | } |
||
475 | |||
476 | // Make all the checks again before the new course creation. |
||
477 | /*if (CourseManager::course_code_exists($wanted_code)) { |
||
478 | return false; |
||
479 | }*/ |
||
480 | |||
481 | $user_id = (int) $course_request_info['user_id']; |
||
482 | if ($user_id <= 0) { |
||
483 | return false; |
||
484 | } |
||
485 | |||
486 | $user_info = api_get_user_info($user_id); |
||
487 | if (!is_array($user_info)) { |
||
488 | return false; |
||
489 | } |
||
490 | |||
491 | // Create the requested course |
||
492 | $params = []; |
||
493 | |||
494 | $params['title'] = $course_request_info['title']; |
||
495 | $params['course_category'] = $course_request_info['category_code']; |
||
496 | $params['course_language'] = $course_request_info['course_language']; |
||
497 | $params['exemplary_content'] = intval($course_request_info['exemplary_content']) > 0; |
||
498 | $params['wanted_code'] = $course_request_info['code']; |
||
499 | $params['user_id'] = $course_request_info['user_id']; |
||
500 | $params['tutor_name'] = api_get_person_name($user_info['firstname'], $user_info['lastname']); |
||
501 | |||
502 | $course_info = CourseManager::create_course($params); |
||
503 | if (!empty($course_info)) { |
||
504 | // Mark the request as accepted. |
||
505 | $sql = "UPDATE ".Database::get_main_table(TABLE_MAIN_COURSE_REQUEST)." |
||
506 | SET status = ".COURSE_REQUEST_ACCEPTED." |
||
507 | WHERE id = ".$id; |
||
508 | Database::query($sql); |
||
509 | |||
510 | // E-mail notification. |
||
511 | |||
512 | // E-mail language: The user language seems to be the best choice |
||
513 | $email_language = $user_info['language']; |
||
514 | $email_subject = sprintf(get_lang('CourseRequestAcceptedEmailSubject', null, $email_language), '['.api_get_setting('siteName').']', $course_info['code']); |
||
515 | |||
516 | $email_body = get_lang('Dear', null, $email_language).' '; |
||
517 | $email_body .= api_get_person_name($user_info['firstname'], $user_info['lastname'], null, null, $email_language).",\n\n"; |
||
518 | $email_body .= sprintf( |
||
519 | get_lang( |
||
520 | 'CourseRequestAcceptedEmailText', |
||
521 | null, |
||
522 | $email_language |
||
523 | ), |
||
524 | $course_info['code'], |
||
525 | $course_info['code'], |
||
526 | api_get_path(WEB_COURSE_PATH).$course_info['directory'].'/' |
||
527 | )."\n"; |
||
528 | $email_body .= "\n".get_lang('SignatureFormula', null, $email_language)."\n"; |
||
529 | $email_body .= api_get_person_name(api_get_setting('administratorName'), api_get_setting('administratorSurname'), null, null, $email_language)."\n"; |
||
530 | $email_body .= get_lang('Manager', null, $email_language).' '.api_get_setting('siteName')."\n"; |
||
531 | $email_body .= get_lang('Phone', null, $email_language).': '.api_get_setting('administratorTelephone')."\n"; |
||
532 | $email_body .= get_lang('Email', null, $email_language).': '.api_get_setting('emailAdministrator', null, $email_language)."\n"; |
||
533 | $email_body .= "\n".get_lang('CourseRequestLegalNote', null, $email_language)."\n"; |
||
534 | $email_body = nl2br($email_body); |
||
535 | |||
536 | $sender_name = api_get_person_name(api_get_setting('administratorName'), api_get_setting('administratorSurname'), null, PERSON_NAME_EMAIL_ADDRESS); |
||
537 | $sender_email = api_get_setting('emailAdministrator'); |
||
538 | $recipient_name = api_get_person_name($user_info['firstname'], $user_info['lastname'], null, PERSON_NAME_EMAIL_ADDRESS); |
||
539 | $recipient_email = $user_info['mail']; |
||
540 | |||
541 | $additionalParameters = [ |
||
542 | 'smsType' => SmsPlugin::COURSE_OPENING_REQUEST_CODE_APPROVED, |
||
543 | 'userId' => $user_id, |
||
544 | 'courseCode' => $course_info['code'], |
||
545 | ]; |
||
546 | |||
547 | api_mail_html( |
||
548 | $recipient_name, |
||
549 | $recipient_email, |
||
550 | $email_subject, |
||
551 | $email_body, |
||
552 | $sender_name, |
||
553 | $sender_email, |
||
554 | null, |
||
555 | null, |
||
556 | null, |
||
557 | $additionalParameters |
||
558 | ); |
||
559 | |||
560 | return $course_info['code']; |
||
561 | } |
||
562 | |||
563 | return false; |
||
564 | } |
||
565 | |||
566 | /** |
||
567 | * Rejects a given course request. |
||
568 | * |
||
569 | * @param int $id the id (an integer number) of the corresponding database record |
||
570 | * |
||
571 | * @return bool returns TRUE on success or FALSE on failure |
||
572 | */ |
||
573 | public static function reject_course_request($id) |
||
574 | { |
||
575 | $id = (int) $id; |
||
576 | // Retrieve request's data |
||
577 | $course_request_info = self::get_course_request_info($id); |
||
578 | if (!is_array($course_request_info)) { |
||
579 | return false; |
||
580 | } |
||
581 | |||
582 | $user_id = intval($course_request_info['user_id']); |
||
583 | if ($user_id <= 0) { |
||
584 | return false; |
||
585 | } |
||
586 | |||
587 | $user_info = api_get_user_info($user_id); |
||
588 | if (!is_array($user_info)) { |
||
589 | return false; |
||
590 | } |
||
591 | |||
592 | $code = $course_request_info['code']; |
||
593 | |||
594 | $sql = "UPDATE ".Database::get_main_table(TABLE_MAIN_COURSE_REQUEST)." |
||
595 | SET status = ".COURSE_REQUEST_REJECTED." |
||
596 | WHERE id = ".$id; |
||
597 | if (false === Database::query($sql)) { |
||
598 | return false; |
||
599 | } |
||
600 | |||
601 | // E-mail notification. |
||
602 | |||
603 | // E-mail language: The user language seems to be the best choice. |
||
604 | $email_language = $user_info['language']; |
||
605 | |||
606 | $email_subject = sprintf(get_lang('CourseRequestRejectedEmailSubject', null, $email_language), '['.api_get_setting('siteName').']', $code); |
||
607 | |||
608 | $email_body = get_lang('Dear', null, $email_language).' '; |
||
609 | $email_body .= api_get_person_name($user_info['firstname'], $user_info['lastname'], null, null, $email_language).",\n\n"; |
||
610 | $email_body .= sprintf(get_lang('CourseRequestRejectedEmailText', null, $email_language), $code)."\n"; |
||
611 | $email_body .= "\n".get_lang('SignatureFormula', null, $email_language)."\n"; |
||
612 | $email_body .= api_get_person_name(api_get_setting('administratorName'), api_get_setting('administratorSurname'), null, null, $email_language)."\n"; |
||
613 | $email_body .= get_lang('Manager', null, $email_language).' '.api_get_setting('siteName')."\n"; |
||
614 | $email_body .= get_lang('Phone', null, $email_language).': '.api_get_setting('administratorTelephone')."\n"; |
||
615 | $email_body .= get_lang('Email', null, $email_language).': '.api_get_setting('emailAdministrator', null, $email_language)."\n"; |
||
616 | $email_body .= "\n".get_lang('CourseRequestLegalNote', null, $email_language)."\n"; |
||
617 | $email_body = nl2br($email_body); |
||
618 | |||
619 | $sender_name = api_get_person_name( |
||
620 | api_get_setting('administratorName'), |
||
621 | api_get_setting('administratorSurname'), |
||
622 | null, |
||
623 | PERSON_NAME_EMAIL_ADDRESS |
||
624 | ); |
||
625 | $sender_email = api_get_setting('emailAdministrator'); |
||
626 | $recipient_name = api_get_person_name( |
||
627 | $user_info['firstname'], |
||
628 | $user_info['lastname'], |
||
629 | null, |
||
630 | PERSON_NAME_EMAIL_ADDRESS |
||
631 | ); |
||
632 | $recipient_email = $user_info['mail']; |
||
633 | |||
634 | $additionalParameters = [ |
||
635 | 'smsType' => SmsPlugin::COURSE_OPENING_REQUEST_CODE_REJECTED, |
||
636 | 'userId' => $user_id, |
||
637 | 'courseCode' => $code, |
||
638 | ]; |
||
639 | |||
640 | api_mail_html( |
||
641 | $recipient_name, |
||
642 | $recipient_email, |
||
643 | $email_subject, |
||
644 | $email_body, |
||
645 | $sender_name, |
||
646 | $sender_email, |
||
647 | null, |
||
648 | null, |
||
649 | null, |
||
650 | $additionalParameters |
||
651 | ); |
||
652 | |||
653 | return true; |
||
654 | } |
||
655 | |||
656 | /** |
||
657 | * Asks the author (through e-mail) for additional information about the given course request. |
||
658 | * |
||
659 | * @param int $id the database primary id of the given request |
||
660 | * |
||
661 | * @return bool returns TRUE on success or FALSE on failure |
||
662 | */ |
||
663 | public static function ask_for_additional_info($id) |
||
664 | { |
||
665 | $id = (int) $id; |
||
666 | |||
667 | // Retrieve request's data |
||
668 | $course_request_info = self::get_course_request_info($id); |
||
669 | if (!is_array($course_request_info)) { |
||
670 | return false; |
||
671 | } |
||
672 | |||
673 | $user_id = intval($course_request_info['user_id']); |
||
674 | if ($user_id <= 0) { |
||
675 | return false; |
||
676 | } |
||
677 | |||
678 | $user_info = api_get_user_info($user_id); |
||
679 | if (!is_array($user_info)) { |
||
680 | return false; |
||
681 | } |
||
682 | |||
683 | $code = $course_request_info['code']; |
||
684 | $info = intval($course_request_info['info']); |
||
685 | |||
686 | // Error is to be returned on a repeated attempt for asking additional information. |
||
687 | if (!empty($info)) { |
||
688 | return false; |
||
689 | } |
||
690 | |||
691 | // E-mail notification. |
||
692 | |||
693 | // E-mail language: The user language seems to be the best choice. |
||
694 | $email_language = $user_info['language']; |
||
695 | $email_subject = sprintf(get_lang('CourseRequestAskInfoEmailSubject', null, $email_language), '['.api_get_setting('siteName').']', $code); |
||
696 | |||
697 | $email_body = get_lang('Dear', null, $email_language).' '; |
||
698 | $email_body .= api_get_person_name($user_info['firstname'], $user_info['lastname'], null, null, $email_language).",\n\n"; |
||
699 | $email_body .= sprintf(get_lang('CourseRequestAskInfoEmailText', null, $email_language), $code)."\n"; |
||
700 | $email_body .= "\n".get_lang('SignatureFormula', null, $email_language)."\n"; |
||
701 | $email_body .= api_get_person_name(api_get_setting('administratorName'), api_get_setting('administratorSurname'))."\n"; |
||
702 | $email_body .= get_lang('Manager', null, $email_language).' '.api_get_setting('siteName')."\n"; |
||
703 | $email_body .= get_lang('Phone', null, $email_language).': '.api_get_setting('administratorTelephone')."\n"; |
||
704 | $email_body .= get_lang('Email', null, $email_language).': '.api_get_setting('emailAdministrator')."\n"; |
||
705 | $email_body .= "\n".get_lang('CourseRequestLegalNote', null, $email_language)."\n"; |
||
706 | $email_body = nl2br($email_body); |
||
707 | |||
708 | $sender_name = api_get_person_name( |
||
709 | api_get_setting('administratorName'), |
||
710 | api_get_setting('administratorSurname'), |
||
711 | null, |
||
712 | PERSON_NAME_EMAIL_ADDRESS |
||
713 | ); |
||
714 | $sender_email = api_get_setting('emailAdministrator'); |
||
715 | $recipient_name = api_get_person_name( |
||
716 | $user_info['firstname'], |
||
717 | $user_info['lastname'], |
||
718 | null, |
||
719 | PERSON_NAME_EMAIL_ADDRESS |
||
720 | ); |
||
721 | $recipient_email = $user_info['mail']; |
||
722 | |||
723 | $additionalParameters = [ |
||
724 | 'smsType' => SmsPlugin::COURSE_OPENING_REQUEST_CODE, |
||
725 | 'userId' => $user_id, |
||
726 | 'courseCode' => $code, |
||
727 | ]; |
||
728 | |||
729 | $result = api_mail_html( |
||
730 | $recipient_name, |
||
731 | $recipient_email, |
||
732 | $email_subject, |
||
733 | $email_body, |
||
734 | $sender_name, |
||
735 | $sender_email, |
||
736 | null, |
||
737 | null, |
||
738 | null, |
||
739 | $additionalParameters |
||
740 | ); |
||
741 | |||
742 | if (!$result) { |
||
743 | return false; |
||
744 | } |
||
745 | |||
746 | // Marking the fact that additional information about the request has been asked. |
||
747 | $sql = "UPDATE ".Database::get_main_table(TABLE_MAIN_COURSE_REQUEST)." |
||
748 | SET info = 1 WHERE id = ".$id; |
||
749 | $result = false !== Database::query($sql); |
||
750 | |||
751 | return $result; |
||
752 | } |
||
753 | |||
754 | /** |
||
755 | * Checks whether additional information about the given course request has been asked. |
||
756 | * |
||
757 | * @param int $id the database primary id of the given request |
||
758 | * |
||
759 | * @return bool returns TRUE if additional information has been asked or FALSE otherwise |
||
760 | */ |
||
761 | public static function additional_info_asked($id) |
||
762 | { |
||
763 | $id = (int) $id; |
||
764 | $sql = "SELECT id FROM ".Database::get_main_table(TABLE_MAIN_COURSE_REQUEST)." |
||
765 | WHERE (id = ".$id." AND info > 0)"; |
||
766 | $result = Database::num_rows(Database::query($sql)); |
||
767 | |||
768 | return !empty($result); |
||
769 | } |
||
770 | } |
||
771 |