loadPlugin('smarty_modifier_username');
static $iUserSelector = 0;
$iUserSelector++;
$defaults = [
'user' => $user,
'group' => 'all',
'groupIds' => '',
'contact' => 'false',
'name' => 'user',
'id' => 'user_selector_' . $iUserSelector,
'multiple' => 'false',
'mustmatch' => 'true',
'style' => '' ,
'editable' => $tiki_p_admin,
'user_selector_threshold' => $prefs['user_selector_threshold'],
'allowNone' => 'n',
'noneLabel' => 'None',
'realnames' => 'y',
'class' => 'form-control',
];
$params = array_merge($defaults, $params);
if (isset($params['size'])) {
$sz = ' size="' . $params['size'] . '"';
} else {
$sz = '';
}
if ($params['editable'] != 'y') {
$ed = ' disabled="disabled"';
} else {
$ed = '';
}
if ($params['multiple'] === 'true') {
$mt = ' multiple="multiple"';
} else {
$mt = '';
}
if (! empty($params['class'])) {
$class = ' class="' . $params['class'] . '"';
} else {
$class = '';
}
$groupNames = [];
if (is_array($params['groupIds'])) {
foreach ($params['groupIds'] as $k => $groupId) {
if ($groupId <= 0) {
unset($params['groupIds'][$k]);
}
}
if (! empty($params['groupIds'])) {
$groupIds = $params['groupIds'];
}
} elseif (! empty($params['groupIds'])) {
$groupIds = explode('|', $params['groupIds']);
}
if (! empty($groupIds)) {
foreach ($groupIds as $groupId) {
$group_info = $userlib->get_groupId_info($groupId);
$groupNames[] = $group_info['groupName'];
}
}
$users = [];
$ret = '';
if (! empty($groupNames)) {
$ucant = $userlib->count_users_consolidated($groupNames);
} else {
$ucant = $userlib->count_users('');
}
if ($prefs['feature_jquery_autocomplete'] == 'y' && ($ucant > $prefs['user_selector_threshold'] or $ucant > $params['user_selector_threshold'])) {
$ret .= '';
if (($params['contact'] == 'true')) {
$mode = ('usersandcontacts');
} elseif ($prefs['user_show_realnames'] === 'y' && $params['realnames'] === 'y') {
$mode = ('userrealname');
} else {
$mode = ('username');
}
$headerlib->add_jq_onready('$("#' . $params['id'] . '").tiki("autocomplete", "' . $mode . '", {mustMatch: ' . $params['mustmatch'] . ', multiple: ' . $params['multiple'] . ' });');
} else {
// get the user list
if ($params['group'] !== 'all') {
$groupNames[] = $params['group'];
}
// NOTE: if groupIds are present, the list of users is limited to those groups regardless of group == 'all'
if (! empty($groupNames)) {
$groupNames = array_unique($groupNames);
$usrs = [];
foreach ($groupNames as $groupName) {
$group_users = $userlib->get_group_users($groupName);
$usrs = array_merge($usrs, $group_users);
}
$usrs = array_unique($usrs);
foreach ($usrs as $usr) {
$users["$usr"] = $params['realnames'] === 'y' ? smarty_modifier_username($usr) : $usr;
}
}
if ($params['group'] == 'all' && empty($params['groupIds'])) {
$usrs = $tikilib->list_users(0, -1, 'login_asc');
foreach ($usrs['data'] as $usr) {
$users["{$usr['login']}"] = $params['realnames'] === 'y' ? smarty_modifier_username($usr['login']) : $usr['login'];
}
}
if ($params['realnames'] === 'y') {
$dupes = [];
foreach (array_count_values($users) as $usr => $c) {
if ($c > 1) {
$dupes[] = $usr;
}
}
foreach ($users as $usr => & $uname) {
if (in_array($uname, $dupes)) {
if ($prefs['login_is_email'] === 'y' && $prefs['login_is_email_obscure'] === 'y') {
$added = ' (' . substr($usr, strpos($usr, '@')) . ')';
} else {
$added = " ($usr)";
}
$uname .= $added;
}
}
}
asort($users, SORT_NATURAL | SORT_FLAG_CASE);
if ($params['multiple'] === 'true' && $params['allowNone'] === 'y') {
$ret .= '';
}
$ret .= '';
}
return $ret;
}