Skip to content

Commit eaa441b

Browse files
authored
Merge pull request #6091 from christianbeeznest/palace-22305-3
User: Fix filters & editable columns in extra fields for advanced edit - refs BT#22305
2 parents 3e450b4 + 070094f commit eaa441b

File tree

2 files changed

+77
-14
lines changed

2 files changed

+77
-14
lines changed

main/admin/user_advanced_edit.php

Lines changed: 36 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181
[],
8282
[],
8383
$_REQUEST,
84-
null,
84+
false,
8585
true
8686
);
8787

@@ -126,8 +126,6 @@
126126

127127
$tableResult = '';
128128
if (!empty($users)) {
129-
$selectedFields = $_GET['editableFields'] ?? [];
130-
131129
foreach ($users as &$user) {
132130
$userData = api_get_user_info($user['id']);
133131
if ($userData) {
@@ -146,21 +144,50 @@
146144
}
147145
unset($user);
148146

149-
if (count($users) === 1) {
150-
array_unshift($users, ['id' => '', 'username' => '']);
147+
$selectedFields = $_GET['editableFields'] ?? [];
148+
$filtersUsed = [
149+
'keywordUsername' => 'username',
150+
'keywordEmail' => 'email',
151+
'keywordFirstname' => 'firstname',
152+
'keywordLastname' => 'lastname',
153+
'keywordOfficialCode' => 'official_code',
154+
'keywordStatus' => 'status'
155+
];
156+
157+
foreach ($filtersUsed as $filterKey => $fieldName) {
158+
$getFilterKey = Security::remove_XSS($_GET[$filterKey]);
159+
if (!empty($getFilterKey) && !in_array($fieldName, $selectedFields)) {
160+
$selectedFields[] = $fieldName;
161+
}
162+
}
163+
164+
foreach ($extraFields as $field) {
165+
$extraVariable = Security::remove_XSS($_GET['extra_'.$field['variable']]);
166+
if (is_array($extraVariable)) {
167+
$extraVariable = array_filter($extraVariable, function ($v) {
168+
return $v !== null && $v !== '';
169+
});
170+
}
171+
if (!empty($extraVariable) && !in_array($field['variable'], $selectedFields)) {
172+
$selectedFields[] = $field['variable'];
173+
}
151174
}
175+
152176
$parameters = array_diff_key($parameters, array_flip(['users_direction', 'users_column']));
153-
$userTable = new SortableTable('users', null, null, 0, 50);
177+
$userTable = new SortableTable('users', null, null, 0, count($users));
154178
$userTable->set_additional_parameters($parameters);
179+
$userTable->setTotalNumberOfItems(count($users));
155180
$userTable->set_header(0, get_lang('ID'));
156181
$userTable->set_header(1, get_lang('Username'));
157182

183+
$columnIndex = 2;
158184
foreach ($selectedFields as $field) {
159-
$userTable->set_header(count($userTable->headers), ucfirst($field));
185+
$userTable->set_header($columnIndex, ucfirst($field));
186+
$columnIndex++;
160187
}
161188

162-
$userTable->set_header(count($userTable->headers), get_lang('Actions'));
163-
189+
$userTable->set_header($columnIndex, get_lang('Actions'));
190+
$userTable->addRow([]);
164191
foreach ($users as $user) {
165192
$row = [$user['id'], $user['username']];
166193

main/inc/lib/usermanager.lib.php

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8308,17 +8308,28 @@ public static function searchUsers(array $filters = [], array $editableFields =
83088308
}
83098309

83108310
$extraField = new ExtraField('user');
8311-
$extraFieldResults = [];
8311+
$extraFieldResults = null;
83128312
$extraFieldHasData = false;
83138313

83148314
foreach ($filters as $key => $value) {
8315-
if (strpos($key, 'extra_') === 0 && !empty($value)) {
8315+
if (str_starts_with($key, 'extra_')) {
8316+
if (is_array($value)) {
8317+
$value = array_filter($value, function ($v) {
8318+
return $v !== null && $v !== '';
8319+
});
8320+
}
8321+
8322+
if (empty($value)) {
8323+
continue;
8324+
}
8325+
83168326
$variable = substr($key, 6);
83178327
$fieldInfo = $extraField->get_handler_field_info_by_field_variable($variable);
83188328
if ($fieldInfo) {
83198329
$extraFieldHasData = true;
83208330
$values = is_array($value) ? $value : [$value];
83218331

8332+
$fieldResults = [];
83228333
foreach ($values as $singleValue) {
83238334
if (empty($singleValue)) {
83248335
continue;
@@ -8332,15 +8343,40 @@ public static function searchUsers(array $filters = [], array $editableFields =
83328343
}
83338344

83348345
if (!empty($result)) {
8335-
$extraFieldResults = array_merge($extraFieldResults, $result);
8346+
$fieldResults[] = $result;
83368347
}
83378348
}
8349+
8350+
if (!empty($values) && empty($fieldResults)) {
8351+
$extraFieldResults = [];
8352+
break;
8353+
}
8354+
8355+
$mergedFieldResults = call_user_func_array('array_merge', $fieldResults);
8356+
8357+
if ($extraFieldResults === null) {
8358+
$extraFieldResults = $mergedFieldResults;
8359+
} else {
8360+
$extraFieldResults = array_intersect($extraFieldResults, $mergedFieldResults);
8361+
}
8362+
8363+
if (empty($extraFieldResults)) {
8364+
break;
8365+
}
83388366
}
83398367
}
83408368
}
83418369

8342-
if ($extraFieldHasData && !empty($extraFieldResults)) {
8343-
$where[] = "u.id IN ('" . implode("','", array_unique($extraFieldResults)) . "')";
8370+
if ($extraFieldHasData && $extraFieldResults === null) {
8371+
$extraFieldResults = [];
8372+
}
8373+
8374+
if ($extraFieldHasData) {
8375+
if (empty($extraFieldResults)) {
8376+
$where[] = "u.id IN ('-1')";
8377+
} else {
8378+
$where[] = "u.id IN ('" . implode("','", array_unique($extraFieldResults)) . "')";
8379+
}
83448380
}
83458381

83468382
$fields = ['u.id', 'u.username'];

0 commit comments

Comments
 (0)