CourseRequestManager::update_course_request()   C
last analyzed

Complexity

Conditions 12
Paths 46

Size

Total Lines 111
Code Lines 75

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 12
eloc 75
nc 46
nop 10
dl 0
loc 111
rs 6.1186
c 0
b 0
f 0

How to fix   Long Method    Complexity    Many Parameters   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

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) {
0 ignored issues
show
introduced by
$result_sql is of type Doctrine\DBAL\Driver\Statement, thus it always evaluated to true.
Loading history...
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),
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $db_name does not seem to be defined for all execution paths leading up to this point.
Loading history...
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