Issues (2037)

main/inc/lib/course_request.lib.php (1 issue)

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
The expression return Database::fetch_array($result) also could return the type array which is incompatible with the documented return type boolean|string.
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