@ -3568,6 +3568,7 @@ class UserManager
$number_of_items = intval($number_of_items);
$where_field = "";
$where_extra_fields = UserManager::get_search_form_where_extra_fields();
if ($field_id != 0) {
$where_field = " field_id = $field_id AND ";
}
@ -3594,6 +3595,7 @@ class UserManager
concat(u.firstname,' ',u.lastname) LIKE '%".$tag."%' OR
concat(u.lastname,' ',u.firstname) LIKE '%".$tag."%'
)
".(!empty($where_extra_fields)?$where_extra_fields:'')."
AND
url_rel_user.access_url_id=".api_get_current_access_url_id();
@ -3626,6 +3628,75 @@ class UserManager
return $return;
}
/**
* Get extra filtrable user fields (type select)
* @return array
*/
public static function get_extra_filtrable_fields()
{
$extra_field_list = UserManager::get_extra_fields();
$extra_filtrabe_fields = array();
if (is_array($extra_field_list)) {
foreach ($extra_field_list as $extra_field) {
//if is enabled to filter and is a "< select > " field type
if ($extra_field[8]==1 & & $extra_field[2]==4) {
$extra_filtrabe_fields[] = array('name'=> $extra_field[3], 'variable'=>$extra_field[1], 'data'=> $extra_field[9]);
}
}
}
if (is_array($extra_filtrabe_fields) & & count($extra_filtrabe_fields)>0 ) return $extra_filtrabe_fields;
}
/**
* Get extra where clauses for finding users based on extra filtrable user fields (type select)
* @return string With AND clauses based on user's ID which have the values to search in extra user fields
*/
public static function get_search_form_where_extra_fields()
{
$use_extra_fields = false;
$extra_fields = UserManager::get_extra_filtrable_fields();
if (is_array($extra_fields) & & count($extra_fields)>0 ) {
$result_list=array();
foreach ($extra_fields as $extra_field) {
$varname = 'field_'.$extra_field['variable'];
if (UserManager::is_extra_field_available($extra_field['variable'])) {
if (isset($_GET[$varname]) & & $_GET[$varname]!='0') {
$use_extra_fields = true;
$extra_field_result[]= UserManager::get_extra_user_data_by_value($extra_field['variable'], Database::escape_string($_GET[$varname]));
}
}
}
}
if ($use_extra_fields) {
$final_result = array();
if (count($extra_field_result)>1) {
for($i=0;$i< count ( $ extra_field_result ) -1 ; $ i + + ) {
if (is_array($extra_field_result[$i+1])) {
$final_result = array_intersect($extra_field_result[$i],$extra_field_result[$i+1]);
}
}
}
else {
$final_result = $extra_field_result[0];
}
$where_filter ='';
if (is_array($final_result) & & count($final_result)>0) {
$where_filter = " AND u.user_id IN ('".implode("','",$final_result)."') ";
}
else {
//no results
$where_filter = " AND u.user_id = -1 ";
}
return $where_filter;
}
}
/**
* Show the search form
* @param string the value of the search box
@ -3633,13 +3704,46 @@ class UserManager
*/
public static function get_search_form($query)
{
$extra_filtrable_fields = UserManager::get_extra_filtrable_fields();
if (is_array($extra_filtrable_fields) & & count($extra_filtrable_fields)>0 ) {
$extra_fields = '';
foreach ($extra_filtrable_fields as $extra_field) {
$extra_fields .= '< label class = "extra_field" > '.$extra_field['name'].'< / label > ';
$varname = 'field_'.$extra_field['variable'];
$extra_fields .= ' < select name = "'.$varname.'" class = "extra_field" > ';
$extra_fields .= '< option value = "0" > --'.get_lang('Select').'--< / option > ';
foreach ($extra_field['data'] as $option) {
$checked='';
if (isset($_GET[$varname])) {
if ($_GET[$varname]==$option[1]) {
$checked = 'selected="true"';
}
}
$extra_fields .= '< option value = "'.$option[1].'" ' . $ checked . ' > '.$option[1].'< / option > ';
}
$extra_fields .= '< / select > ';
$extra_fields .= ' ';
}
}
$search_type = isset($_GET['search_type']) ? $_GET['search_type'] : null;
return '
< form method = "GET" class = "well form-search" action = "'.api_get_path(WEB_PATH).'main/social/search.php" >
< input placeholder = "'.get_lang('UsersGroups').'" type = "text" class = "input-medium" value = "'.api_htmlentities(Security::remove_XSS($query)).'" name = "q" / >
Tipo < select name = "search_type" onchange = "javascript: if (jQuery(" select [ name = search_type]").val()=="2") jQuery ( " . extra_field " ) . hide ( ) ; else jQuery ( " . extra_field " ) . show ( ) ; " >
< option value = "0" > --'.get_lang('Select').'--< / option >
< option value = "1" ' . ( ( $ search_type = ='1')?'selected="selected"':"") . ' > --' . get_lang('User') .'--< / option >
< option value = "2" ' . ( ( $ search_type = ='2')?'selected="selected"':"") . ' > --' . get_lang('Group') . '--< / option >
< / select >
'.$extra_fields.'
< button class = "btn" type = "submit" value = "search" > '.get_lang('Search').'< / button >
< / form > ';
< / form >
';
}
/**
* Shows the user menu
*/