$value) {
$parameters[$key] = Security::remove_XSS($value);
}
}
$interbreadcrumb[] = ['url' => 'index.php', 'name' => get_lang('PlatformAdmin')];
// Toolbar actions
$toolbarActions = '';
// Filter GET params
$keywordUsername = !empty($_GET['keywordUsername']) ? Security::remove_XSS($_GET['keywordUsername']) : '';
$keywordEmail = !empty($_GET['keywordEmail']) ? Security::remove_XSS($_GET['keywordEmail']) : '';
$keywordFirstname = !empty($_GET['keywordFirstname']) ? Security::remove_XSS($_GET['keywordFirstname']) : '';
$keywordLastname = !empty($_GET['keywordLastname']) ? Security::remove_XSS($_GET['keywordLastname']) : '';
$keywordOfficialCode = !empty($_GET['keywordOfficialCode']) ? Security::remove_XSS($_GET['keywordOfficialCode']) : '';
$keywordStatus = !empty($_GET['keywordStatus']) ? Security::remove_XSS($_GET['keywordStatus']) : '';
// Advanced search form
$form = new FormValidator('advancedSearch', 'get', '', '', [], FormValidator::LAYOUT_HORIZONTAL);
$form->addElement('header', '', get_lang('AdvancedSearch'));
$form->addText('keywordUsername', get_lang('LoginName'), false);
$form->addText('keywordEmail', get_lang('Email'), false);
$form->addText('keywordFirstname', get_lang('FirstName'), false);
$form->addText('keywordLastname', get_lang('LastName'), false);
$form->addText('keywordOfficialCode', get_lang('OfficialCode'), false);
$statusOptions = [
'%' => get_lang('All'),
STUDENT => get_lang('Student'),
COURSEMANAGER => get_lang('Teacher'),
DRH => get_lang('Drh'),
SESSIONADMIN => get_lang('SessionsAdmin'),
PLATFORM_ADMIN => get_lang('Administrator'),
];
$form->addElement('select', 'keywordStatus', get_lang('Profile'), $statusOptions);
$form->setDefaults(
[
'keywordUsername' => $keywordUsername,
'keywordEmail' => $keywordEmail,
'keywordFirstname' => $keywordFirstname,
'keywordLastname' => $keywordLastname,
'keywordOfficialCode' => $keywordOfficialCode,
'keywordStatus' => $keywordStatus,
]
);
$activeGroup = [];
$activeGroup[] = $form->createElement('checkbox', 'keywordActive', '', get_lang('Active'), ['checked' => isset($_GET['keywordActive'])]);
$activeGroup[] = $form->createElement('checkbox', 'keywordInactive', '', get_lang('Inactive'), ['checked' => isset($_GET['keywordInactive'])]);
$form->addGroup($activeGroup, '', get_lang('ActiveAccount'), null, false);
$parameters = array_map(function ($value) {
return Security::remove_XSS($value);
}, $_GET);
$extraUserField = new ExtraField('user');
$returnParams = $extraUserField->addElements(
$form,
0,
[],
true,
false,
[],
[],
$_REQUEST,
false,
true
);
$htmlHeadXtra[] = '';
$form->addButtonSearch(get_lang('SearchUsers'), 'filter');
$users = [];
if (isset($_GET['filter'])) {
$users = UserManager::searchUsers($parameters);
}
$fieldSelector = '';
$jqueryReadyContent = '';
if (!empty($users)) {
$extraFields = $extraUserField->get_all(['filter = ?' => 1], 'option_order');
$editableFields = [
'firstname' => get_lang('FirstName'),
'lastname' => get_lang('LastName'),
'email' => get_lang('Email'),
'phone' => get_lang('PhoneNumber'),
'official_code' => get_lang('OfficialCode'),
'status' => get_lang('Profile'),
'active' => get_lang('ActiveAccount'),
'password' => get_lang('Password'),
];
foreach ($extraFields as $field) {
$editableFields[$field['variable']] = ucfirst($field['variable']);
}
$form->addElement('select', 'editableFields', get_lang('FieldsToEdit'), $editableFields, [
'multiple' => 'multiple',
'size' => 7,
]);
$form->addElement('submit', 'filter', get_lang('View'));
}
$tableResult = '';
if (!empty($users)) {
foreach ($users as &$user) {
$userData = api_get_user_info($user['id']);
if ($userData) {
$user = array_merge($user, $userData);
}
$extraFieldValues = new ExtraFieldValue('user');
$userExtraFields = $extraFieldValues->getAllValuesByItem($user['id']);
$formattedExtraFields = [];
foreach ($userExtraFields as $extraField) {
$formattedExtraFields[$extraField['variable']] = $extraField['value'];
}
$user['extra_fields'] = $formattedExtraFields;
}
unset($user);
$selectedFields = $_GET['editableFields'] ?? [];
$filtersUsed = [
'keywordUsername' => 'username',
'keywordEmail' => 'email',
'keywordFirstname' => 'firstname',
'keywordLastname' => 'lastname',
'keywordOfficialCode' => 'official_code',
'keywordStatus' => 'status',
];
foreach ($filtersUsed as $filterKey => $fieldName) {
$getFilterKey = Security::remove_XSS($_GET[$filterKey]);
if (!empty($getFilterKey) && !in_array($fieldName, $selectedFields)) {
$selectedFields[] = $fieldName;
}
}
foreach ($extraFields as $field) {
$extraVariable = Security::remove_XSS($_GET['extra_'.$field['variable']]);
if (is_array($extraVariable)) {
$extraVariable = array_filter($extraVariable, function ($v) {
return $v !== null && $v !== '';
});
}
if (!empty($extraVariable) && !in_array($field['variable'], $selectedFields)) {
$selectedFields[] = $field['variable'];
}
}
$parameters = array_diff_key($parameters, array_flip(['users_direction', 'users_column']));
$userTable = new SortableTable('users', null, null, 0, count($users));
$userTable->set_additional_parameters($parameters);
$userTable->setTotalNumberOfItems(count($users));
$userTable->set_header(0, get_lang('ID'));
$userTable->set_header(1, get_lang('Username'));
$columnIndex = 2;
foreach ($selectedFields as $field) {
$userTable->set_header($columnIndex, ucfirst($field));
$columnIndex++;
}
$userTable->set_header($columnIndex, get_lang('Actions'));
$userTable->addRow([]);
foreach ($users as $user) {
$row = [$user['id'], $user['username']];
foreach ($selectedFields as $field) {
$value = isset($user[$field]) ? htmlspecialchars($user[$field]) : '';
$extraFieldTypes = [];
foreach ($extraFields as $extraField) {
$extraFieldTypes[$extraField['variable']] = $extraField['field_type'];
}
if (isset($user['extra_fields'][$field])) {
$fieldType = $extraFieldTypes[$field] ?? ExtraField::FIELD_TYPE_TEXT;
$value = htmlspecialchars($user['extra_fields'][$field]);
switch ($fieldType) {
case ExtraField::FIELD_TYPE_TEXTAREA:
$row[] = '';
break;
case ExtraField::FIELD_TYPE_SELECT:
$fieldHtml = '';
$row[] = $fieldHtml;
break;
case ExtraField::FIELD_TYPE_CHECKBOX:
$checked = ($value == '1') ? 'checked' : '';
$row[] = '';
break;
case ExtraField::FIELD_TYPE_RADIO:
$fieldHtml = '';
foreach ($extraField['options'] as $option) {
$checked = ($option['option_value'] == $value) ? 'checked' : '';
$fieldHtml .= '';
}
$row[] = $fieldHtml;
break;
case ExtraField::FIELD_TYPE_TAG:
$extraTagField = $extraUserField->get_handler_field_info_by_field_variable($field);
$formattedValue = UserManager::get_user_tags_to_string(
$user['id'],
$extraTagField['id'],
false
);
$row[] = ''.
''.get_lang('KeywordTip').'';
break;
case ExtraField::FIELD_TYPE_DOUBLE_SELECT:
if (is_array($value) && isset($value["extra_{$field}"]) && isset($value["extra_{$field}_second"])) {
$formattedValue = $value["extra_{$field}"].','.$value["extra_{$field}_second"];
} else {
$formattedValue = '';
}
$row[] = ''.
''.get_lang('KeywordTip').'';
break;
default:
$row[] = '';
break;
}
} else {
if ($field === 'password') {
$row[] = '';
} elseif ($field === 'status') {
$statusOptions = [
STUDENT => get_lang('Student'),
COURSEMANAGER => get_lang('Teacher'),
DRH => get_lang('Drh'),
SESSIONADMIN => get_lang('SessionsAdmin'),
PLATFORM_ADMIN => get_lang('Administrator'),
];
$select = '';
$row[] = $select;
} elseif ($field === 'active') {
$checkedActive = ($user['active'] == 1) ? 'checked' : '';
$checkedInactive = ($user['active'] == 0) ? 'checked' : '';
$row[] = '
';
} else {
$row[] = '';
}
}
}
$row[] = '';
$userTable->addRow($row);
}
$tableResult = $userTable->return_table();
}
$htmlHeadXtra[] = '';
$formContent = $form->returnForm();
// Render page
$tpl = new Template($tool_name);
$tpl->assign('actions', $toolbarActions);
$tpl->assign('message', $message);
$tpl->assign('content', $formContent.$fieldSelector.$tableResult.(!empty($users) ? '' : ''));
$tpl->display_one_col_template();