Skip to content

Commit dcb4dcb

Browse files
committed
Merge branch 'palace-22305-2' of https://github.com/christianbeeznest/chamilo-lms into 22305
2 parents cb34d08 + 7d9da9c commit dcb4dcb

File tree

3 files changed

+118
-24
lines changed

3 files changed

+118
-24
lines changed

main/admin/user_advanced_edit.php

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@
2727
// Advanced search form
2828
$form = new FormValidator('advancedSearch', 'get', '', '', [], FormValidator::LAYOUT_HORIZONTAL);
2929
$form->addElement('header', '', get_lang('AdvancedSearch'));
30-
$form->addText('keywordUsername', get_lang('LoginName'), false);
31-
$form->addText('keywordEmail', get_lang('Email'), false);
32-
$form->addText('keywordFirstname', get_lang('FirstName'), false);
33-
$form->addText('keywordLastname', get_lang('LastName'), false);
34-
$form->addText('keywordOfficialCode', get_lang('OfficialCode'), false);
30+
$form->addText('keywordUsername', get_lang('LoginName'), false, ['value' => $_GET['keywordUsername'] ?? '']);
31+
$form->addText('keywordEmail', get_lang('Email'), false, ['value' => $_GET['keywordEmail'] ?? '']);
32+
$form->addText('keywordFirstname', get_lang('FirstName'), false, ['value' => $_GET['keywordFirstname'] ?? '']);
33+
$form->addText('keywordLastname', get_lang('LastName'), false, ['value' => $_GET['keywordLastname'] ?? '']);
34+
$form->addText('keywordOfficialCode', get_lang('OfficialCode'), false, ['value' => $_GET['keywordOfficialCode'] ?? '']);
3535

3636
$statusOptions = [
3737
'%' => get_lang('All'),
@@ -41,34 +41,43 @@
4141
SESSIONADMIN => get_lang('SessionsAdmin'),
4242
PLATFORM_ADMIN => get_lang('Administrator')
4343
];
44-
$form->addElement('select', 'keywordStatus', get_lang('Profile'), $statusOptions);
44+
$form->addElement('select', 'keywordStatus', get_lang('Profile'), $statusOptions, ['selected' => $_GET['keywordStatus'] ?? '%']);
4545

4646
$activeGroup = [];
47-
$activeGroup[] = $form->createElement('checkbox', 'keywordActive', '', get_lang('Active'));
48-
$activeGroup[] = $form->createElement('checkbox', 'keywordInactive', '', get_lang('Inactive'));
47+
$activeGroup[] = $form->createElement('checkbox', 'keywordActive', '', get_lang('Active'), ['checked' => isset($_GET['keywordActive'])]);
48+
$activeGroup[] = $form->createElement('checkbox', 'keywordInactive', '', get_lang('Inactive'), ['checked' => isset($_GET['keywordInactive'])]);
4949
$form->addGroup($activeGroup, '', get_lang('ActiveAccount'), null, false);
50-
$form->addButtonSearch(get_lang('SearchUsers'), 'filter');
5150

52-
// Search filters
53-
$searchFilters = [
54-
'keywordFirstname' => $_GET['keywordFirstname'] ?? '',
55-
'keywordLastname' => $_GET['keywordLastname'] ?? '',
56-
'keywordUsername' => $_GET['keywordUsername'] ?? '',
57-
'keywordEmail' => $_GET['keywordEmail'] ?? '',
58-
'keywordOfficialCode' => $_GET['keywordOfficialCode'] ?? '',
59-
'keywordStatus' => $_GET['keywordStatus'] ?? '',
60-
'keywordActive' => $_GET['keywordActive'] ?? '',
61-
'keywordInactive' => $_GET['keywordInactive'] ?? '',
62-
];
51+
$parameters = array_map(function ($value) {
52+
return Security::remove_XSS($value);
53+
}, $_GET);
54+
55+
$extraUserField = new ExtraField('user');
56+
$returnParams = $extraUserField->addElements(
57+
$form,
58+
0,
59+
[],
60+
true,
61+
false,
62+
[],
63+
[],
64+
$_REQUEST
65+
);
66+
67+
$htmlHeadXtra[] = '<script>
68+
$(function () {
69+
'.$returnParams['jquery_ready_content'].'
70+
})
71+
</script>';
72+
$form->addButtonSearch(get_lang('SearchUsers'), 'filter');
6373

6474
$users = [];
6575
if (isset($_GET['filter'])) {
66-
$users = UserManager::searchUsers($searchFilters);
76+
$users = UserManager::searchUsers($parameters);
6777
}
6878

6979
$fieldSelector = '';
7080
$jqueryReadyContent = '';
71-
$extraUserField = new ExtraField('user');
7281
if (!empty($users)) {
7382
$extraFields = $extraUserField->get_all(['filter = ?' => 1], 'option_order');
7483

@@ -116,7 +125,12 @@
116125
}
117126
unset($user);
118127

128+
if (count($users) === 1) {
129+
array_unshift($users, ['id' => '', 'username' => '']);
130+
}
131+
$parameters = array_diff_key($parameters, array_flip(['users_direction', 'users_column']));
119132
$userTable = new SortableTable('users', null, null, 0, 50);
133+
$userTable->set_additional_parameters($parameters);
120134
$userTable->set_header(0, get_lang('ID'));
121135
$userTable->set_header(1, get_lang('Username'));
122136

main/inc/lib/extra_field.lib.php

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -783,7 +783,6 @@ public function addElements(
783783

784784
$itemId = (int) $itemId;
785785
$form->addHidden('item_id', $itemId);
786-
$extraData = false;
787786
if (!empty($itemId)) {
788787
$extraData = $this->get_handler_extra_data($itemId);
789788
if (!empty($showOnlyTheseFields)) {
@@ -1373,6 +1372,23 @@ public function set_extra_fields_in_form(
13731372
);
13741373
$selectedOptions[] = $tag['tag'];
13751374
}
1375+
} else {
1376+
if (!empty($extraData) && isset($extraData['extra_'.$field_details['variable']])) {
1377+
$data = $extraData['extra_'.$field_details['variable']];
1378+
if (!empty($data)) {
1379+
foreach ($data as $option) {
1380+
$tagsSelect->addOption(
1381+
$option,
1382+
$option,
1383+
[
1384+
'selected' => 'selected',
1385+
'class' => 'selected',
1386+
]
1387+
);
1388+
$selectedOptions[] = $option;
1389+
}
1390+
}
1391+
}
13761392
}
13771393
$url = api_get_path(WEB_AJAX_PATH).'user_manager.ajax.php';
13781394
} else {

main/inc/lib/usermanager.lib.php

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8269,6 +8269,12 @@ public static function searchUsers(array $filters = [], array $editableFields =
82698269
{
82708270
$where = [];
82718271

8272+
$accessUrlRelUserTable = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
8273+
$userGroupTable = Database::get_main_table(TABLE_USERGROUP_REL_USER);
8274+
8275+
$isMultipleUrl = (api_is_platform_admin() || api_is_session_admin()) && api_get_multiple_access_url();
8276+
$urlId = api_get_current_access_url_id();
8277+
82728278
if (!empty($filters['keywordFirstname'])) {
82738279
$where[] = "u.firstname LIKE '%".Database::escape_string($filters['keywordFirstname'])."%'";
82748280
}
@@ -8293,6 +8299,50 @@ public static function searchUsers(array $filters = [], array $editableFields =
82938299
$where[] = "u.active = 0";
82948300
}
82958301

8302+
if ($isMultipleUrl) {
8303+
$where[] = "u.id IN (SELECT user_id FROM $accessUrlRelUserTable WHERE access_url_id = $urlId)";
8304+
}
8305+
8306+
if (!empty($filters['class_id'])) {
8307+
$where[] = "u.id IN (SELECT user_id FROM $userGroupTable WHERE usergroup_id = " . (int)$filters['class_id'] . ")";
8308+
}
8309+
8310+
$extraField = new ExtraField('user');
8311+
$extraFieldResults = [];
8312+
$extraFieldHasData = false;
8313+
8314+
foreach ($filters as $key => $value) {
8315+
if (strpos($key, 'extra_') === 0 && !empty($value)) {
8316+
$variable = substr($key, 6);
8317+
$fieldInfo = $extraField->get_handler_field_info_by_field_variable($variable);
8318+
if ($fieldInfo) {
8319+
$extraFieldHasData = true;
8320+
$values = is_array($value) ? $value : [$value];
8321+
8322+
foreach ($values as $singleValue) {
8323+
if (empty($singleValue)) {
8324+
continue;
8325+
}
8326+
8327+
if ($fieldInfo['field_type'] == ExtraField::FIELD_TYPE_TAG) {
8328+
$result = $extraField->getAllUserPerTag($fieldInfo['id'], $singleValue);
8329+
$result = empty($result) ? [] : array_column($result, 'user_id');
8330+
} else {
8331+
$result = UserManager::get_extra_user_data_by_value($variable, $singleValue, true);
8332+
}
8333+
8334+
if (!empty($result)) {
8335+
$extraFieldResults = array_merge($extraFieldResults, $result);
8336+
}
8337+
}
8338+
}
8339+
}
8340+
}
8341+
8342+
if ($extraFieldHasData && !empty($extraFieldResults)) {
8343+
$where[] = "u.id IN ('" . implode("','", array_unique($extraFieldResults)) . "')";
8344+
}
8345+
82968346
$fields = ['u.id', 'u.username'];
82978347

82988348
if (!empty($editableFields)) {
@@ -8301,11 +8351,25 @@ public static function searchUsers(array $filters = [], array $editableFields =
83018351
}
83028352
}
83038353

8354+
$sortableFields = [
8355+
0 => 'u.id',
8356+
1 => 'u.username'
8357+
];
8358+
8359+
$columnIndex = $_GET['users_column'] ?? 0;
8360+
$direction = strtoupper($_GET['users_direction'] ?? 'ASC');
8361+
8362+
if (!in_array($direction, ['ASC', 'DESC'])) {
8363+
$direction = 'ASC';
8364+
}
8365+
8366+
$orderBy = $sortableFields[$columnIndex] ?? 'u.id';
8367+
83048368
$sql = "SELECT " . implode(", ", $fields) . " FROM " . Database::get_main_table(TABLE_MAIN_USER) . " u";
83058369
if (!empty($where)) {
83068370
$sql .= " WHERE " . implode(" AND ", $where);
83078371
}
8308-
$sql .= " ORDER BY u.id ASC";
8372+
$sql .= " ORDER BY $orderBy $direction";
83098373

83108374
return Database::store_result(Database::query($sql), 'ASSOC');
83118375
}

0 commit comments

Comments
 (0)