function getUsers($param = false)
 {
     //retrieve all users matching given conditions
     $output = array();
     $json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
     $a_obj = new DoceboACLManager();
     $fman = new FieldList();
     $user_to_check = Get::req('user', DOTY_INT, false);
     $f_arr = $param ? $param : urldecode(stripslashes(Get::req($this->id . "_input", DOTY_STRING, false)));
     $filter = is_string($f_arr) ? $json->decode(stripslashes($f_arr)) : $f_arr;
     $exclusive = $filter['exclusive'];
     $conds = $filter['filters'];
     //return a void array if no conditions specified
     if (count($conds) <= 0) {
         return array();
     }
     //compose nested query
     // base query /Anonymous
     $base_query = "SELECT idst, userid " . " FROM %adm_user ";
     $std_condition = array();
     $in_conditions = array();
     $other_conditions = array();
     foreach ($conds as $cond) {
         $id_field = $cond['id_field'];
         $params = $json->decode($cond['value']);
         if ($params == null) {
             $params = $cond['value'];
         }
         $res = $exclusive;
         list($id_type, $id) = explode('_', $id_field);
         switch ($id_type) {
             case _STANDARD_FIELDS_PREFIX:
                 require_once _adm_ . '/modules/field/class.field.php';
                 require_once _adm_ . '/modules/field/class.date.php';
                 switch ($id) {
                     case 0:
                         //userid
                         $temp = " userid ";
                         switch ($params['cond']) {
                             case 2:
                                 $temp .= " = '" . $a_obj->absoluteId($params['value']) . "' ";
                                 break;
                                 //equals
                             //equals
                             case 0:
                                 $temp .= " LIKE '%" . $params['value'] . "%' ";
                                 break;
                                 //contains
                             //contains
                             case 3:
                                 $temp .= " <> '" . $a_obj->absoluteId($params['value']) . "' ";
                                 break;
                                 //not equal
                             //not equal
                             case 1:
                                 $temp .= " NOT LIKE '%" . $params['value'] . "%' ";
                                 break;
                                 //does not contain
                             //does not contain
                             case 4:
                                 $temp .= " LIKE '" . $a_obj->absoluteId($params['value']) . "%' ";
                                 break;
                                 //starts with
                             //starts with
                             case 5:
                                 $temp .= " LIKE '%" . $params['value'] . "' ";
                                 break;
                                 //ends with
                             //ends with
                             default:
                                 $temp .= " NOT LIKE '%' ";
                                 //unexistent
                         }
                         $std_condition[] = $temp;
                         break;
                     case 1:
                         //firstname
                         $temp = " firstname ";
                         switch ($params['cond']) {
                             case 2:
                                 $temp .= " = '" . $params['value'] . "' ";
                                 break;
                                 //equals
                             //equals
                             case 0:
                                 $temp .= " LIKE '%" . $params['value'] . "%' ";
                                 break;
                                 //contains
                             //contains
                             case 3:
                                 $temp .= " <> '" . $params['value'] . "' ";
                                 break;
                                 //not equal
                             //not equal
                             case 1:
                                 $temp .= " NOT LIKE '%" . $params['value'] . "%' ";
                                 break;
                                 //does not contain
                             //does not contain
                             case 4:
                                 $temp .= " LIKE '" . $params['value'] . "%' ";
                                 break;
                                 //starts with
                             //starts with
                             case 5:
                                 $temp .= " LIKE '%" . $params['value'] . "' ";
                                 break;
                                 //ends with
                             //ends with
                             default:
                                 $temp .= " NOT LIKE '%' ";
                                 //unexistent
                         }
                         $std_condition[] = $temp;
                         break;
                     case 2:
                         //lastname
                         $temp = " lastname ";
                         switch ($params['cond']) {
                             case 2:
                                 $temp .= " = '" . $params['value'] . "' ";
                                 break;
                                 //equals
                             //equals
                             case 0:
                                 $temp .= " LIKE '%" . $params['value'] . "%' ";
                                 break;
                                 //contains
                             //contains
                             case 3:
                                 $temp .= " <> '" . $params['value'] . "' ";
                                 break;
                                 //not equal
                             //not equal
                             case 1:
                                 $temp .= " NOT LIKE '%" . $params['value'] . "%' ";
                                 break;
                                 //does not contain
                             //does not contain
                             case 4:
                                 $temp .= " LIKE '" . $params['value'] . "%' ";
                                 break;
                                 //starts with
                             //starts with
                             case 5:
                                 $temp .= " LIKE '%" . $params['value'] . "' ";
                                 break;
                                 //ends with
                             //ends with
                             default:
                                 $temp .= " NOT LIKE '%' ";
                                 //unexistent
                         }
                         $std_condition[] = $temp;
                         break;
                     case 3:
                         //email
                         $temp = " email ";
                         switch ($params['cond']) {
                             case 2:
                                 $temp .= " = '" . $params['value'] . "' ";
                                 break;
                                 //equals
                             //equals
                             case 0:
                                 $temp .= " LIKE '%" . $params['value'] . "%' ";
                                 break;
                                 //contains
                             //contains
                             case 3:
                                 $temp .= " <> '" . $params['value'] . "' ";
                                 break;
                                 //not equal
                             //not equal
                             case 1:
                                 $temp .= " NOT LIKE '%" . $params['value'] . "%' ";
                                 break;
                                 //does not contain
                             //does not contain
                             case 4:
                                 $temp .= " LIKE '" . $params['value'] . "%' ";
                                 break;
                                 //starts with
                             //starts with
                             case 5:
                                 $temp .= " LIKE '%" . $params['value'] . "' ";
                                 break;
                                 //ends with
                             //ends with
                             default:
                                 $temp .= " NOT LIKE '%' ";
                                 //unexistent
                         }
                         $std_condition[] = $temp;
                         break;
                     case 4:
                         //register date
                         $date = substr(Format::dateDb($params['value'], 'date'), 0, 10);
                         $temp = " register_date ";
                         switch ($params['cond']) {
                             case 0:
                                 $temp .= " < '" . $date . " 00:00:00' ";
                                 break;
                                 //<
                             //<
                             case 1:
                                 $temp .= " <= '" . $date . " 23:59:59' ";
                                 break;
                                 //<=
                             //<=
                             case 2:
                                 $temp = " ( register_date >= '" . $date . " 00:00:00' AND register_date <= '" . $date . " 23:59:59' ) ";
                                 break;
                                 //=
                             //=
                             case 3:
                                 $temp .= " >= '" . $date . " 00:00:00' ";
                                 break;
                                 //>=
                             //>=
                             case 4:
                                 $temp .= " > '" . $date . " 23:59:59' ";
                                 break;
                                 //>
                             //>
                             default:
                                 $temp .= " NOT LIKE '%' ";
                                 //unexistent
                         }
                         $std_condition[] = $temp;
                         break;
                     case 5:
                         //lastenter
                         $date = substr(Format::dateDb($params['value'], 'date'), 0, 10);
                         $temp = " lastenter ";
                         switch ($params['cond']) {
                             case 0:
                                 $temp .= " < '" . $date . " 00:00:00' ";
                                 break;
                                 //<
                             //<
                             case 1:
                                 $temp .= " <= '" . $date . " 23:59:59' ";
                                 break;
                                 //<=
                             //<=
                             case 2:
                                 $temp = " ( lastenter >= '" . $date . " 00:00:00' AND lastenter <= '" . $date . " 23:59:59' ) ";
                                 break;
                                 //=
                             //=
                             case 3:
                                 $temp .= " >= '" . $date . " 00:00:00' ";
                                 break;
                                 //>=
                             //>=
                             case 4:
                                 $temp .= " > '" . $date . " 23:59:59' ";
                                 break;
                                 //>
                             //>
                             default:
                                 $temp .= " NOT LIKE '%' ";
                                 //unexistent
                         }
                         $std_condition[] = $temp;
                         break;
                     default:
                 }
                 break;
                 // filter on a custom field
             // filter on a custom field
             case _CUSTOM_FIELDS_PREFIX:
                 $fobj = $fman->getFieldInstance($id);
                 $in_conditions[] = $fobj->getFieldQuery($params);
                 break;
                 // other special field
             // other special field
             case _OTHER_FIELDS_PREFIX:
                 $ofobj = new OtherFieldsTypes();
                 $other_conditions[] = $ofobj->getFieldQuery($id, $params);
                 break;
             default:
         }
         //end switch
     }
     //end foreach
     if ($exclusive) {
         $query = $base_query . ' WHERE 1 ' . (!empty($std_condition) ? " AND " . implode(" AND ", $std_condition) : '') . (!empty($in_conditions) ? ' AND idst IN ( ' . implode(" ) AND idst IN ( ", $in_conditions) . ' ) ' : '') . (!empty($other_conditions) ? ' AND idst IN ( ' . implode(" ) AND idst IN ( ", $other_conditions) . ' ) ' : '');
     } else {
         $query = $base_query . ' WHERE 0 ' . (!empty($std_condition) ? ' OR  ( ' . implode(" ) OR idst IN ( ", $std_condition) . ' ) ' : '') . (!empty($in_conditions) ? ' OR idst IN ( ' . implode(" ) OR idst IN ( ", $in_conditions) . ' ) ' : '') . (!empty($other_conditions) ? ' OR idst IN ( ' . implode(" ) OR idst IN ( ", $other_conditions) . ' ) ' : '');
     }
     //produce output
     $output = array();
     $re = $this->db->query($query);
     while ($rw = $this->db->fetch_assoc($re)) {
         if ($rw['userid'] != '/Anonymous') {
             $output[] = $rw['idst'];
         }
     }
     return $output;
 }