search_users()   F
last analyzed

Complexity

Conditions 31
Paths 9220

Size

Total Lines 202
Code Lines 128

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 31
eloc 128
nc 9220
nop 2
dl 0
loc 202
rs 0
c 0
b 0
f 0

How to fix   Long Method    Complexity   

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:

1
<?php
2
/* For licensing terms, see /license.txt */
3
4
// resetting the course id
5
use Chamilo\CoreBundle\Entity\Session;
6
use Chamilo\CoreBundle\Enums\ObjectIcon;
7
8
$cidReset = true;
9
10
// including some necessary files
11
require_once __DIR__.'/../inc/global.inc.php';
12
$xajax = new xajax();
13
$xajax->registerFunction('search_users');
14
15
// setting the section (for the tabs)
16
$this_section = SECTION_PLATFORM_ADMIN;
17
18
$id_session = isset($_GET['id_session']) ? (int) $_GET['id_session'] : 0;
19
$courseId = isset($_GET['course_id']) ? (int) $_GET['course_id'] : 0;
20
21
if (empty($id_session) || empty($courseId)) {
22
    api_not_allowed(true);
23
}
24
25
$addProcess = isset($_GET['add']) ? Security::remove_XSS($_GET['add']) : null;
26
27
$session = api_get_session_entity($id_session);
28
SessionManager::protectSession($session);
29
$courseInfo = api_get_course_info_by_id($courseId);
30
31
// setting breadcrumbs
32
$interbreadcrumb[] = ['url' => 'session_list.php', 'name' => get_lang('Session list')];
33
$interbreadcrumb[] = [
34
    'url' => "resume_session.php?id_session=".$id_session,
35
    'name' => get_lang('Session overview'),
36
];
37
38
// Database Table Definitions
39
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
40
$tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
41
$tbl_user = Database::get_main_table(TABLE_MAIN_USER);
42
$tbl_session_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_USER);
43
$tableRelSessionCourseUser = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
44
45
// setting the name of the tool
46
$tool_name = get_lang('Subscribe users to this session');
47
$add_type = 'unique';
48
if (isset($_REQUEST['add_type']) && '' != $_REQUEST['add_type']) {
49
    $add_type = Security::remove_XSS($_REQUEST['add_type']);
50
}
51
52
$page = isset($_GET['page']) ? Security::remove_XSS($_GET['page']) : null;
53
54
// Checking for extra field with filter on
55
56
$extra_field_list = UserManager::get_extra_fields();
57
58
$new_field_list = [];
59
if (is_array($extra_field_list)) {
60
    foreach ($extra_field_list as $extra_field) {
61
        //if is enabled to filter and is a "<select>" field type
62
        if (1 == $extra_field[8] && ExtraField::FIELD_TYPE_SELECT == $extra_field[2]) {
63
            $new_field_list[] = [
64
                'name' => $extra_field[3],
65
                'type' => $extra_field[2],
66
                'variable' => $extra_field[1],
67
                'data' => $extra_field[9],
68
            ];
69
        }
70
        if (1 == $extra_field[8] && ExtraField::FIELD_TYPE_TAG == $extra_field[2]) {
71
            $options = UserManager::get_extra_user_data_for_tags($extra_field[1]);
72
            $new_field_list[] = [
73
                'name' => $extra_field[3],
74
                'type' => $extra_field[2],
75
                'variable' => $extra_field[1],
76
                'data' => $options['options'],
77
            ];
78
        }
79
    }
80
}
81
82
function search_users($needle, $type)
83
{
84
    $courseId = isset($_GET['course_id']) ? (int) $_GET['course_id'] : 0;
85
    $id_session = isset($_GET['id_session']) ? (int) $_GET['id_session'] : 0;
86
87
    $tbl_user = Database::get_main_table(TABLE_MAIN_USER);
88
    $tbl_session_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_USER);
89
    $tableRelSessionCourseUser = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
90
91
    $xajax_response = new xajaxResponse();
92
    $return = '';
93
94
    if (!empty($needle) && !empty($type)) {
95
        // Normal behaviour
96
        if ('any_session' == $type && 'false' == $needle) {
97
            $type = 'multiple';
98
            $needle = '';
99
        }
100
101
        $needle = Database::escape_string($needle);
102
        $order_clause = ' ORDER BY lastname, firstname, username';
103
        $showOfficialCode = false;
104
105
        $orderListByOfficialCode = api_get_setting('display.order_user_list_by_official_code');
106
        if ('true' === $orderListByOfficialCode) {
107
            $showOfficialCode = true;
108
            $order_clause = ' ORDER BY official_code, lastname, firstname, username';
109
        }
110
111
        if (api_is_session_admin()
112
            && 'true' === api_get_setting('prevent_session_admins_to_manage_all_users')
113
        ) {
114
            $order_clause = ' AND user.creator_id = '.api_get_user_id().$order_clause;
115
        }
116
117
        $cond_user_id = '';
118
119
        // Only for single & multiple
120
        if (in_array($type, ['single', 'multiple'])) {
121
            if (!empty($id_session)) {
122
                // check id_user from session_rel_user table
123
                $sql = "
124
                    SELECT su.user_id
125
                    FROM $tbl_session_rel_user  su
126
                    INNER JOIN $tableRelSessionCourseUser sc
127
                    ON (sc.session_id = su.session_id AND su.user_id = sc.user_id)
128
                    WHERE
129
                        sc.c_id = $courseId AND
130
                        su.session_id = $id_session AND
131
                        su.relation_type = ".Session::STUDENT;
132
                $res = Database::query($sql);
133
                $user_ids = [];
134
                if (Database::num_rows($res) > 0) {
135
                    while ($row = Database::fetch_row($res)) {
136
                        $user_ids[] = (int) $row[0];
137
                    }
138
                }
139
                if (count($user_ids) > 0) {
140
                    $cond_user_id = ' AND user.id NOT IN('.implode(",", $user_ids).')';
141
                }
142
            }
143
        }
144
145
        switch ($type) {
146
            case 'single':
147
                // search users where username or firstname or lastname begins likes $needle
148
                $sql = "
149
                    SELECT user.id, username, lastname, firstname, official_code
150
                    FROM $tbl_user user
151
                    WHERE
152
                        (
153
                            username LIKE '$needle%'
154
                            OR lastname LIKE '$needle%'
155
                            OR firstname LIKE '$needle%'
156
                        ) AND
157
                      user.status <> 6 AND
158
                      user.status <> ".DRH."
159
                    $order_clause
160
                    LIMIT 11
161
                ";
162
                break;
163
            case 'multiple':
164
                $sql = "
165
                    SELECT user.id, username, lastname, firstname, official_code
166
                    FROM $tbl_user user
167
                    WHERE
168
                        lastname LIKE '$needle%' AND
169
                        user.status <> ".DRH." AND
170
                        user.status <> 6 $cond_user_id
171
                    $order_clause
172
                ";
173
                break;
174
            case 'any_session':
175
                $sql = "
176
                    SELECT DISTINCT user.id, username, lastname, firstname, official_code
177
                    FROM $tbl_user user
178
                    LEFT OUTER JOIN $tbl_session_rel_user s
179
                    ON (s.user_id = user.id)
180
                    WHERE
181
                        s.user_id IS NULL AND
182
                        user.status <> ".DRH." AND
183
                        user.status <> 6 $cond_user_id
184
                    $order_clause
185
                ";
186
                break;
187
        }
188
189
        if (api_is_multiple_url_enabled()) {
0 ignored issues
show
Deprecated Code introduced by
The function api_is_multiple_url_enabled() has been deprecated: Use AccessUrlUtil::isMultiple ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

189
        if (/** @scrutinizer ignore-deprecated */ api_is_multiple_url_enabled()) {

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
190
            $tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
191
            $access_url_id = api_get_current_access_url_id();
192
            if (-1 != $access_url_id) {
193
                switch ($type) {
194
                    case 'single':
195
                        $sql = "
196
                            SELECT user.id, username, lastname, firstname, official_code
197
                            FROM $tbl_user user
198
                            INNER JOIN $tbl_user_rel_access_url url_user
199
                            ON (url_user.user_id = user.id)
200
                            WHERE
201
                                access_url_id = '$access_url_id'
202
                                AND (
203
                                    username LIKE '$needle%'
204
                                    OR lastname LIKE '$needle%'
205
                                    OR firstname LIKE '$needle%'
206
                                )
207
                                AND user.status <> 6
208
                                AND user.status <> ".DRH."
209
                            $order_clause LIMIT 11
210
                        ";
211
                        break;
212
                    case 'multiple':
213
                        $sql = "
214
                            SELECT user.id, username, lastname, firstname, official_code
215
                            FROM $tbl_user user
216
                            INNER JOIN $tbl_user_rel_access_url url_user ON (url_user.user_id=user.id)
217
                            WHERE
218
                                access_url_id = $access_url_id
219
                                AND lastname LIKE '$needle%'
220
                                AND user.status <> ".DRH."
221
                                AND user.status <> 6 $cond_user_id
222
                            $order_clause
223
                        ";
224
                        break;
225
                    case 'any_session':
226
                        $sql = "
227
                            SELECT DISTINCT user.id, username, lastname, firstname, official_code
228
                            FROM $tbl_user user
229
                            LEFT OUTER JOIN $tbl_session_rel_user s
230
                                ON (s.user_id = user.id)
231
                            INNER JOIN $tbl_user_rel_access_url url_user
232
                                ON (url_user.user_id = user.id)
233
                            WHERE
234
                                access_url_id = $access_url_id
235
                                AND s.user_id IS null
236
                                AND user.status <> ".DRH."
237
                                AND user.status <> 6 $cond_user_id
238
                            $order_clause
239
                        ";
240
                        break;
241
                }
242
            }
243
        }
244
245
        $rs = Database::query($sql);
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $sql does not seem to be defined for all execution paths leading up to this point.
Loading history...
246
        $i = 0;
247
        if ('single' == $type) {
248
            while ($user = Database:: fetch_array($rs)) {
249
                $i++;
250
                if ($i <= 10) {
251
                    $person_name =
252
                        $user['lastname'].' '.$user['firstname'].' ('.$user['username'].') '.$user['official_code'];
253
                    if ($showOfficialCode) {
254
                        $officialCode = !empty($user['official_code']) ? $user['official_code'].' - ' : '? - ';
255
                        $person_name =
256
                            $officialCode.$user['lastname'].' '.$user['firstname'].' ('.$user['username'].')';
257
                    }
258
259
                    $return .= '<a href="javascript: void(0);" onclick="javascript: add_user_to_session(\''.$user['id']
260
                        .'\',\''.$person_name.' '.'\')">'.$person_name.' </a><br />';
261
                } else {
262
                    $return .= '...<br />';
263
                }
264
            }
265
266
            $xajax_response->addAssign('ajax_list_users_single', 'innerHTML', api_utf8_encode($return));
267
        } else {
268
            $return .= '<select id="origin_users" name="nosessionUsersList[]" multiple="multiple" size="15" style="width:360px;">';
269
            while ($user = Database:: fetch_array($rs)) {
270
                $person_name =
271
                    $user['lastname'].' '.$user['firstname'].' ('.$user['username'].') '.$user['official_code'];
272
                if ($showOfficialCode) {
273
                    $officialCode = !empty($user['official_code']) ? $user['official_code'].' - ' : '? - ';
274
                    $person_name = $officialCode.$user['lastname'].' '.$user['firstname'].' ('.$user['username'].')';
275
                }
276
                $return .= '<option value="'.$user['id'].'">'.$person_name.' </option>';
277
            }
278
            $return .= '</select>';
279
            $xajax_response->addAssign('ajax_list_users_multiple', 'innerHTML', api_utf8_encode($return));
280
        }
281
    }
282
283
    return $xajax_response;
284
}
285
286
$xajax->processRequests();
287
$htmlHeadXtra[] = $xajax->getJavascript('../inc/lib/xajax/');
288
$htmlHeadXtra[] = '
289
<script>
290
function add_user_to_session (code, content) {
291
	document.getElementById("user_to_add").value = "";
292
	document.getElementById("ajax_list_users_single").innerHTML = "";
293
	destination = document.getElementById("destination_users");
294
	for (i=0;i<destination.length;i++) {
295
		if(destination.options[i].text == content) {
296
				return false;
297
		}
298
	}
299
	destination.options[destination.length] = new Option(content,code);
300
	destination.selectedIndex = -1;
301
	sortOptions(destination.options);
302
}
303
304
function remove_item(origin) {
305
	for(var i = 0 ; i<origin.options.length ; i++) {
306
		if(origin.options[i].selected) {
307
			origin.options[i]=null;
308
			i = i-1;
309
		}
310
	}
311
}
312
313
function validate_filter() {
314
    document.formulaire.add_type.value = \''.$add_type.'\';
315
    document.formulaire.form_sent.value=0;
316
    document.formulaire.submit();
317
}
318
319
function checked_in_no_session(checked) {
320
    $("#first_letter_user")
321
    .find("option")
322
    .attr("selected", false);
323
    xajax_search_users(checked, "any_session");
324
}
325
326
function change_select(val) {
327
    $("#user_with_any_session_id").attr("checked", false);
328
    xajax_search_users(val,"multiple");
329
}
330
</script>';
331
332
$form_sent = 0;
333
$firstLetterUser = $firstLetterSession = '';
334
$UserList = $SessionList = [];
335
$sessions = [];
336
if (isset($_POST['form_sent']) && $_POST['form_sent']) {
337
    $form_sent = $_POST['form_sent'];
338
    $firstLetterUser = isset($_POST['firstLetterUser']) ? $_POST['firstLetterUser'] : '';
339
    $firstLetterSession = isset($_POST['firstLetterSession']) ? $_POST['firstLetterSession'] : '';
340
    $UserList = isset($_POST['sessionUsersList']) ? $_POST['sessionUsersList'] : [];
341
342
    if (!is_array($UserList)) {
343
        $UserList = [];
344
    }
345
346
    if (1 == $form_sent) {
347
        // Added a parameter to send emails when registering a user
348
        SessionManager::subscribeUsersToSession(
349
            $id_session,
350
            $UserList,
351
            null,
352
            false,
353
            false
354
        );
355
356
        SessionManager::subscribe_users_to_session_course(
357
            $UserList,
358
            $id_session,
359
            $courseInfo['code'],
360
            SESSION_VISIBLE_READ_ONLY,
361
            true
362
        );
363
364
        Display::addFlash(Display::return_message(get_lang('Update successful')));
365
        header('Location: resume_session.php?id_session='.$id_session);
366
        exit;
367
    }
368
}
369
370
$session_info = SessionManager::fetch($id_session);
371
Display::display_header($tool_name);
372
373
$nosessionUsersList = $sessionUsersList = [];
374
$where_filter = null;
375
$ajax_search = 'unique' == $add_type ? true : false;
376
377
//$order_clause = api_sort_by_first_name() ? ' ORDER BY firstname, lastname, username' : ' ORDER BY lastname, firstname, username';
378
// On this screen, it doesn't make sense to order users by firstname. Always use lastname first
379
// api_get_person_name() calls have been removed because ordering users in a simple list must always
380
// be done by lastname, even if we like to show user names with the firstname first.
381
// By simple logic, lastnames are the smallest common denominator
382
$order_clause = ' ORDER BY lastname, firstname, username';
383
384
$showOfficialCode = false;
385
$orderListByOfficialCode = api_get_setting('display.order_user_list_by_official_code');
386
if ('true' === $orderListByOfficialCode) {
387
    $showOfficialCode = true;
388
    $order_clause = ' ORDER BY official_code, lastname, firstname, username';
389
}
390
391
if ($ajax_search) {
392
    $sql = "
393
        SELECT u.id, u.lastname, u.firstname, u.username, su.session_id, u.official_code
394
        FROM $tbl_session_rel_user su
395
        INNER JOIN $tableRelSessionCourseUser sc
396
        ON (sc.session_id = su.session_id AND su.user_id = sc.user_id)
397
        INNER JOIN $tbl_user u
398
        ON su.user_id = u.id
399
        WHERE
400
            su.session_id = ".intval($id_session)." AND
401
            su.relation_type = ".Session::STUDENT." AND
402
            sc.c_id = $courseId AND
403
            u.status<>".DRH." AND
404
            u.status <> 6
405
        $order_clause
406
    ";
407
408
    if (api_is_multiple_url_enabled()) {
0 ignored issues
show
Deprecated Code introduced by
The function api_is_multiple_url_enabled() has been deprecated: Use AccessUrlUtil::isMultiple ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

408
    if (/** @scrutinizer ignore-deprecated */ api_is_multiple_url_enabled()) {

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
409
        $tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
410
        $access_url_id = api_get_current_access_url_id();
411
        if (-1 != $access_url_id) {
412
            $sql = "
413
                SELECT u.id, u.lastname, u.firstname, u.username, su.session_id, u.official_code
414
                FROM $tbl_user u
415
                INNER JOIN $tbl_session_rel_user su
416
                ON
417
                    su.user_id = u.id AND
418
                    su.relation_type = ".Session::STUDENT." AND
419
                    su.session_id = ".intval($id_session)."
420
                INNER JOIN $tbl_user_rel_access_url url_user
421
                ON (url_user.user_id = u.id)
422
                INNER JOIN $tableRelSessionCourseUser sc
423
                ON (sc.session_id = su.session_id AND su.user_id = sc.user_id)
424
                WHERE
425
                    access_url_id = $access_url_id AND
426
                    sc.c_id = $courseId AND
427
                    u.status <> ".DRH." AND
428
                    u.status <> 6
429
                $order_clause
430
            ";
431
        }
432
    }
433
    $result = Database::query($sql);
434
    $users = Database::store_result($result);
435
    foreach ($users as $user) {
436
        $sessionUsersList[$user['id']] = $user;
437
    }
438
439
    $sessionUserInfo = SessionManager::getTotalUserCoursesInSession($id_session, $courseId);
440
    // Filter the user list in all courses in the session
441
    foreach ($sessionUserInfo as $sessionUser) {
442
        // filter students in session
443
        if (Session::STUDENT != $sessionUser['status_in_session']) {
444
            continue;
445
        }
446
447
        if (!array_key_exists($sessionUser['id'], $sessionUsersList)) {
448
            continue;
449
        }
450
    }
451
452
    unset($users); //clean to free memory
453
} else {
454
    // Filter by Extra Fields
455
    $extra_field_result = [];
456
    $use_extra_fields = false;
457
    if (is_array($extra_field_list)) {
458
        if (is_array($new_field_list) && count($new_field_list) > 0) {
459
            $result_list = [];
460
            foreach ($new_field_list as $new_field) {
461
                $varname = 'field_'.$new_field['variable'];
462
                $fieldtype = $new_field['type'];
463
                if (UserManager::is_extra_field_available($new_field['variable'])) {
464
                    if (isset($_POST[$varname]) && '0' != $_POST[$varname]) {
465
                        $use_extra_fields = true;
466
                        if (ExtraField::FIELD_TYPE_TAG == $fieldtype) {
467
                            $extra_field_result[] = UserManager::get_extra_user_data_by_tags(
468
                                $_POST['field_id'],
469
                                $_POST[$varname]
470
                            );
471
                        } else {
472
                            $extra_field_result[] = UserManager::get_extra_user_data_by_value(
473
                                $new_field['variable'],
474
                                $_POST[$varname]
475
                            );
476
                        }
477
                    }
478
                }
479
            }
480
        }
481
    }
482
483
    if ($use_extra_fields) {
484
        $final_result = [];
485
        if (count($extra_field_result) > 1) {
486
            for ($i = 0; $i < count($extra_field_result) - 1; $i++) {
487
                if (is_array($extra_field_result[$i + 1])) {
488
                    $final_result = array_intersect(
489
                        $extra_field_result[$i],
490
                        $extra_field_result[$i + 1]
491
                    );
492
                }
493
            }
494
        } else {
495
            $final_result = $extra_field_result[0];
496
        }
497
498
        if (api_is_multiple_url_enabled()) {
0 ignored issues
show
Deprecated Code introduced by
The function api_is_multiple_url_enabled() has been deprecated: Use AccessUrlUtil::isMultiple ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

498
        if (/** @scrutinizer ignore-deprecated */ api_is_multiple_url_enabled()) {

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
499
            if (is_array($final_result) && count($final_result) > 0) {
500
                $where_filter = " AND u.id IN  ('".implode("','", $final_result)."') ";
501
            } else {
502
                //no results
503
                $where_filter = " AND u.id  = -1";
504
            }
505
        } else {
506
            if (is_array($final_result) && count($final_result) > 0) {
507
                $where_filter = " WHERE u.id IN  ('".implode("','", $final_result)."') ";
508
            } else {
509
                //no results
510
                $where_filter = " WHERE u.id  = -1";
511
            }
512
        }
513
    }
514
    if (api_is_session_admin() && 'true' === api_get_setting('prevent_session_admins_to_manage_all_users')) {
515
        $order_clause = " AND u.creator_id = ".api_get_user_id().$order_clause;
516
    }
517
    if ($use_extra_fields) {
518
        $sql = "
519
            SELECT  u.id, lastname, firstname, username, su.session_id, official_code
520
            FROM $tbl_user u
521
            LEFT JOIN $tbl_session_rel_user su
522
                ON su.user_id = u.id
523
                AND su.session_id = $id_session
524
                AND su.relation_type = ".Session::STUDENT."
525
            INNER JOIN $tableRelSessionCourseUser sc
526
            ON (sc.session_id = su.session_id AND su.user_id = sc.user_id)
527
            $where_filter
528
                AND u.status <> ".DRH."
529
                AND u.status <> 6
530
                AND sc.c_id = $courseId
531
            $order_clause
532
           ";
533
    } else {
534
        $sql = "
535
            SELECT  u.id, lastname, firstname, username, su.session_id, official_code
536
            FROM $tbl_user u
537
            LEFT JOIN $tbl_session_rel_user su
538
                ON su.user_id = u.id
539
                AND su.session_id = $id_session
540
                AND su.relation_type = ".Session::STUDENT."
541
            WHERE
542
                u.status <> ".DRH." AND
543
                u.status <> 6
544
            $order_clause
545
        ";
546
    }
547
    if (api_is_multiple_url_enabled()) {
0 ignored issues
show
Deprecated Code introduced by
The function api_is_multiple_url_enabled() has been deprecated: Use AccessUrlUtil::isMultiple ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

547
    if (/** @scrutinizer ignore-deprecated */ api_is_multiple_url_enabled()) {

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
548
        $tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
549
        $access_url_id = api_get_current_access_url_id();
550
        if (-1 != $access_url_id) {
551
            $sql = "
552
                SELECT  u.id, lastname, firstname, username, su.session_id, official_code
553
                FROM $tbl_user u
554
                LEFT JOIN $tbl_session_rel_user su
555
                    ON su.user_id = u.id
556
                    AND su.session_id = $id_session
557
                    AND su.relation_type = ".Session::STUDENT."
558
                INNER JOIN $tbl_user_rel_access_url url_user
559
                ON (url_user.user_id = u.id)
560
561
                WHERE
562
                    access_url_id = $access_url_id
563
                    $where_filter
564
                    AND u.status <> ".DRH."
565
                    AND u.status<>6
566
                $order_clause
567
            ";
568
        }
569
    }
570
571
    $result = Database::query($sql);
572
    $users = Database::store_result($result, 'ASSOC');
573
    foreach ($users as $uid => $user) {
574
        if ($user['session_id'] != $id_session) {
575
            $nosessionUsersList[$user['id']] = [
576
                'fn' => $user['firstname'],
577
                'ln' => $user['lastname'],
578
                'un' => $user['username'],
579
                'official_code' => $user['official_code'],
580
            ];
581
            unset($users[$uid]);
582
        }
583
    }
584
    unset($users); //clean to free memory
585
586
    // filling the correct users in list
587
    $sql = "
588
        SELECT  u.id, lastname, firstname, username, su.session_id, official_code
589
        FROM $tbl_user u
590
        LEFT JOIN $tbl_session_rel_user su
591
        ON su.user_id = u.id
592
        AND su.session_id = $id_session
593
        AND su.relation_type = ".Session::STUDENT."
594
        INNER JOIN $tableRelSessionCourseUser sc
595
        ON (sc.session_id = su.session_id AND su.user_id = sc.user_id)
596
        WHERE
597
            sc.c_id = $courseId AND
598
            u.status <> ".DRH." AND u.status <> 6
599
        $order_clause
600
    ";
601
602
    if (api_is_multiple_url_enabled()) {
0 ignored issues
show
Deprecated Code introduced by
The function api_is_multiple_url_enabled() has been deprecated: Use AccessUrlUtil::isMultiple ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

602
    if (/** @scrutinizer ignore-deprecated */ api_is_multiple_url_enabled()) {

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
603
        $tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
604
        $access_url_id = api_get_current_access_url_id();
605
        if (-1 != $access_url_id) {
606
            $sql = "
607
                SELECT  u.id, lastname, firstname, username, su.session_id, official_code
608
                FROM $tbl_user u
609
                LEFT JOIN $tbl_session_rel_user su
610
                ON su.user_id = u.id
611
                AND su.session_id = $id_session
612
                AND su.relation_type = ".Session::STUDENT."
613
                INNER JOIN $tbl_user_rel_access_url url_user
614
                ON (url_user.user_id = u.id)
615
                INNER JOIN $tableRelSessionCourseUser sc
616
                ON (sc.session_id = su.session_id AND su.user_id = sc.user_id)
617
                WHERE
618
                    sc.c_id = $courseId AND
619
                    access_url_id = $access_url_id AND
620
                    u.status <> ".DRH." AND
621
                    u.status <> 6
622
                $order_clause
623
            ";
624
        }
625
    }
626
627
    $result = Database::query($sql);
628
    $users = Database::store_result($result, 'ASSOC');
629
    foreach ($users as $uid => $user) {
630
        if ($user['session_id'] == $id_session) {
631
            $sessionUsersList[$user['id']] = $user;
632
            if (array_key_exists($user['id'], $nosessionUsersList)) {
633
                unset($nosessionUsersList[$user['id']]);
634
            }
635
        }
636
        unset($users[$uid]);
637
    }
638
    unset($users); //clean to free memory
639
}
640
641
if ('multiple' == $add_type) {
642
    $link_add_type_unique =
643
        '<a href="'.api_get_self().'?course_id='.$courseId.'&id_session='.$id_session.'&add='.$addProcess.'&add_type=unique">'.
644
        Display::getMdiIcon(ObjectIcon::SINGLE_ELEMENT, 'ch-tool-icon', null, ICON_SIZE_SMALL, get_lang('Single registration')).get_lang('Single registration').'</a>';
645
    $link_add_type_multiple = Display::url(Display::getMdiIcon(ObjectIcon::MULTI_ELEMENT, 'ch-tool-icon', null, ICON_SIZE_SMALL, get_lang('Multiple registration')).get_lang('Multiple registration'), '');
646
} else {
647
    $link_add_type_unique = Display::url(Display::getMdiIcon(ObjectIcon::SINGLE_ELEMENT, 'ch-tool-icon', null, ICON_SIZE_SMALL, get_lang('Single registration')).get_lang('Single registration'), '');
648
    $link_add_type_multiple =
649
        '<a href="'.api_get_self().'?course_id='.$courseId.'&id_session='.$id_session.'&amp;add='.$addProcess.'&amp;add_type=multiple">'
650
        .Display::getMdiIcon(ObjectIcon::MULTI_ELEMENT, 'ch-tool-icon', null, ICON_SIZE_SMALL, get_lang('Multiple registration')).get_lang('Multiple registration').'</a>';
651
}
652
653
echo Display::toolbarAction('users_to_session', [$link_add_type_unique.$link_add_type_multiple]);
654
echo Display::page_header($tool_name.' ('.$session_info['name'].') - '.$courseInfo['title']);
655
?>
656
<form name="formulaire" method="post"
657
      action="<?php echo api_get_self(); ?>?page=<?php echo $page; ?>&course_id=<?php echo $courseId; ?>&id_session=<?php echo $id_session; ?><?php if (!empty($addProcess)) {
658
    echo '&add=true';
659
} ?>" <?php if ($ajax_search) {
660
    echo ' onsubmit="valide();"';
661
} ?>>
662
    <?php
663
    if ('multiple' === $add_type) {
664
        if (is_array($extra_field_list)) {
665
            if (is_array($new_field_list) && count($new_field_list) > 0) {
666
                echo '<h3 class="text-xl font-bold mb-4">'.get_lang('Filter users').'</h3>';
667
                foreach ($new_field_list as $new_field) {
668
                    echo '<label class="block text-gray-700 font-semibold mb-2">'.$new_field['name'].'</label>';
669
                    $varname = 'field_'.$new_field['variable'];
670
                    $fieldtype = $new_field['type'];
671
                    echo '<select name="'.$varname.'" class="w-full border border-gray-300 p-2 rounded mb-4">';
672
                    echo '<option value="0">--'.get_lang('Select').'--</option>';
673
                    foreach ($new_field['data'] as $option) {
674
                        $checked = '';
675
                        if (ExtraField::FIELD_TYPE_TAG == $fieldtype) {
676
                            if (isset($_POST[$varname])) {
677
                                if ($_POST[$varname] == $option['tag']) {
678
                                    $checked = 'selected="true"';
679
                                }
680
                            }
681
                            echo '<option value="'.$option['tag'].'" '.$checked.'>'.$option['tag'].'</option>';
682
                        } else {
683
                            if (isset($_POST[$varname])) {
684
                                if ($_POST[$varname] == $option[1]) {
685
                                    $checked = 'selected="true"';
686
                                }
687
                            }
688
                            echo '<option value="'.$option[1].'" '.$checked.'>'.$option[2].'</option>';
689
                        }
690
                    }
691
                    echo '</select>';
692
                    $extraHidden =
693
                        ExtraField::FIELD_TYPE_TAG == $fieldtype ? '<input type="hidden" name="field_id" value="'
694
                            .$option['field_id'].'" />' : '';
695
                    echo $extraHidden;
696
                    echo '&nbsp;&nbsp;';
697
                }
698
                echo '<input type="button" value="'.get_lang('Filter').'" class="btn btn-primary" onclick="validate_filter()" />';
699
                echo '<br /><br />';
700
            }
701
        }
702
    }
703
    ?>
704
    <input type="hidden" name="form_sent" value="1"/>
705
    <input type="hidden" name="add_type"/>
706
707
    <div id="multiple-add-session" class="flex justify-between items-start my-5">
708
        <div class="w-1/3 p-2">
709
            <label class="block text-gray-700 font-semibold mb-2"><?php echo get_lang('Portal users list'); ?> </label>
710
            <?php
711
            if (!('multiple' == $add_type)) {
712
                ?>
713
                <input type="text" id="user_to_add" onkeyup="xajax_search_users(this.value,'single')"
714
                       class="w-full border border-gray-300 p-2 rounded"/>
715
                <div id="ajax_list_users_single" class="mt-2"></div>
716
                <?php
717
            } else {
718
                ?>
719
                <div id="ajax_list_users_multiple">
720
                    <select id="origin_users" name="nosessionUsersList[]" multiple="multiple" size="15"
721
                            class="w-full border border-gray-300 p-2 rounded">
722
                        <?php
723
                        foreach ($nosessionUsersList as $uid => $enreg) {
724
                            ?>
725
                            <option value="<?php echo $uid; ?>" <?php if (in_array($uid, $UserList)) {
726
                                echo 'selected="selected"';
727
                            } ?>>
728
                                <?php
729
                                $personName = $enreg['ln'].' '.$enreg['fn'].' ('.$enreg['un'].') '
730
                                    .$enreg['official_code'];
731
                                if ($showOfficialCode) {
732
                                    $officialCode = !empty($enreg['official_code']) ? $enreg['official_code'].' - '
733
                                        : '? - ';
734
                                    $personName = $officialCode.$enreg['ln'].' '.$enreg['fn'].' ('.$enreg['un'].')';
735
                                }
736
                                echo $personName; ?>
737
                            </option>
738
                            <?php
739
                        } ?>
740
                    </select>
741
                </div>
742
                <?php
743
            }
744
            unset($nosessionUsersList);
745
            ?>
746
        </div>
747
        <div class="flex flex-col items-center justify-center space-y-3 mt-4">
748
            <?php if ('multiple' == $add_type) {
749
                ?>
750
                <?php echo get_lang('First letter (last name)'); ?> :
751
                <select class="mb-4" id="first_letter_user" name="firstLetterUser" onchange="change_select(this.value);">
752
                    <option value="%">--</option>
753
                    <?php
754
                    echo Display:: get_alphabet_options(); ?>
755
                </select>
756
                <?php
757
            } ?>
758
            <?php if ($ajax_search) { ?>
759
                <button name="remove_user" class="btn btn--primary mb-4"
760
                        type="button" onclick="remove_item(document.getElementById('destination_users'))">
761
                    <em class="pi pi-chevron-left"></em>
762
                </button>
763
            <?php } else { ?>
764
                <button name="add_user" class="btn btn--primary mb-4"
765
                        type="button" onclick="moveItem(document.getElementById('origin_users'), document.getElementById('destination_users'))">
766
                    <em class="pi pi-chevron-right"></em>
767
                </button>
768
                <button name="remove_user" class="btn btn--primary mb-4"
769
                        type="button" onclick="moveItem(document.getElementById('destination_users'), document.getElementById('origin_users'))">
770
                    <em class="pi pi-chevron-left"></em>
771
                </button>
772
            <?php } ?>
773
            <button name="next" class="btn btn--success mb-4" type="button"
774
                    onclick="valide()">
775
                <?php echo (!empty($addProcess)) ? get_lang('Finish session creation') : get_lang('Subscribe users to this session'); ?>
776
            </button>
777
        </div>
778
        <div class="w-1/3 p-2">
779
            <label class="block text-gray-700 font-semibold mb-2"><?php echo get_lang('List of users registered in this session'); ?>:</label>
780
            <select id="destination_users" name="sessionUsersList[]" multiple="multiple" size="15"
781
                    class="w-full border border-gray-300 p-2 rounded">
782
                <?php
783
                foreach ($sessionUsersList as $enreg) {
784
                    ?>
785
                    <option value="<?php echo $enreg['id']; ?>">
786
                        <?php
787
                        $personName = $enreg['lastname'].' '.$enreg['firstname'].' ('.$enreg['username'].') '
788
                            .$enreg['official_code'];
789
                        if ($showOfficialCode) {
790
                            $officialCode =
791
                                !empty($enreg['official_code']) ? $enreg['official_code'].' - ' : '? - ';
792
                            $personName =
793
                                $officialCode.$enreg['lastname'].' '.$enreg['firstname'].' ('.$enreg['username'].')';
794
                        }
795
                        echo $personName; ?>
796
                    </option>
797
                    <?php
798
                }
799
                unset($sessionUsersList);
800
                ?>
801
            </select>
802
        </div>
803
    </div>
804
</form>
805
<script>
806
    function moveItem(origin, destination) {
807
        for (var i = 0; i < origin.options.length; i++) {
808
            if (origin.options[i].selected) {
809
                destination.options[destination.length] = new Option(origin.options[i].text, origin.options[i].value);
810
                origin.options[i] = null;
811
                i = i - 1;
812
            }
813
        }
814
        destination.selectedIndex = -1;
815
        sortOptions(destination.options);
816
    }
817
818
    function sortOptions(options) {
819
        newOptions = new Array();
820
        for (i = 0; i < options.length; i++)
821
            newOptions[i] = options[i];
822
823
        newOptions = newOptions.sort(mysort);
824
        options.length = 0;
825
        for (i = 0; i < newOptions.length; i++)
826
            options[i] = newOptions[i];
827
    }
828
829
    function mysort(a, b) {
830
        if (a.text.toLowerCase() > b.text.toLowerCase()) {
831
            return 1;
832
        }
833
        if (a.text.toLowerCase() < b.text.toLowerCase()) {
834
            return -1;
835
        }
836
        return 0;
837
    }
838
839
    function valide() {
840
        var options = document.getElementById('destination_users').options;
841
        for (i = 0; i < options.length; i++) {
842
            options[i].selected = true;
843
        }
844
        document.forms.formulaire.submit();
845
    }
846
847
    function loadUsersInSelect(select) {
848
        var xhr_object = null;
849
        if (window.XMLHttpRequest) // Firefox
850
            xhr_object = new XMLHttpRequest();
851
        else if (window.ActiveXObject) // Internet Explorer
852
            xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
853
        else  // XMLHttpRequest non supporté par le navigateur
854
            alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
855
856
        xhr_object.open("POST", "loadUsersInSelect.ajax.php");
857
        xhr_object.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
858
        nosessionUsers = makepost(document.getElementById('origin_users'));
859
        sessionUsers = makepost(document.getElementById('destination_users'));
860
        nosessionClasses = makepost(document.getElementById('origin_classes'));
861
        sessionClasses = makepost(document.getElementById('destination_classes'));
862
        xhr_object.send("nosessionusers=" + nosessionUsers + "&sessionusers=" + sessionUsers + "&nosessionclasses=" + nosessionClasses + "&sessionclasses=" + sessionClasses);
863
864
        xhr_object.onreadystatechange = function () {
865
            if (xhr_object.readyState == 4) {
866
                document.getElementById('content_source').innerHTML = result = xhr_object.responseText;
867
            }
868
        }
869
    }
870
871
    function makepost(select) {
872
        var options = select.options;
873
        var ret = "";
874
        for (i = 0; i < options.length; i++)
875
            ret = ret + options[i].value + '::' + options[i].text + ";;";
876
        return ret;
877
    }
878
</script>
879
<?php
880
881
Display::display_footer();
882