private function filterCustomField($fields)
 {
     $result = array();
     $model = new connectionFieldsModel();
     foreach ($fields as $key => $value) {
         $exp = explode('_', $key);
         $fieldId = (int) $exp[1];
         $field = $model->getField($fieldId);
         $type = $field['type'] == 'textarea' ? 'input' : $field['type'];
         switch ($type) {
             case 'input':
                 $result[$key] = new MongoRegex('/' . $value . '/i');
                 break;
             case 'checkbox':
                 $result[$key] = true;
                 break;
             case 'select':
                 if ($model->hasVariant($fieldId, $value)) {
                     $variants = $model->getLocalesVariant($fieldId, $value);
                     $result[$key] = array('$in' => $variants);
                 }
                 break;
             case 'list':
                 if (is_array($value)) {
                     $variants = array();
                     foreach ($value as $variant) {
                         if ($model->hasVariant($fieldId, $variant)) {
                             $variantsLocale = $model->getLocalesVariant($fieldId, $variant);
                             $variants = array_merge($variants, $variantsLocale);
                         }
                     }
                     if (sizeof($variants) != 0) {
                         $result[$key] = array('$in' => $variants);
                     }
                 }
                 break;
         }
     }
     return $result;
 }
 public function updateInfo($array, $id, $files = array())
 {
     $update = array();
     $default = array('first_name', 'last_name', 'birth_day', 'birth_month', 'birth_year', 'country');
     foreach ($default as $value) {
         if (array_key_exists($value, $array) && Validator::Field($array[$value], $this->regFields[$value])) {
             $update[$value] = Validator::clearValue($array[$value]);
         }
         unset($array[$value]);
     }
     if (isset($update['birth_day']) && isset($update['birth_month']) && isset($update['birth_year'])) {
         $update['birth_date'] = (int) strtotime($update['birth_year'] . '-' . $update['birth_month'] . '-' . $update['birth_day']);
     }
     unset($update['birth_day']);
     unset($update['birth_month']);
     unset($update['birth_year']);
     $fieldModel = new connectionFieldsModel();
     $fieldMask = 'field_';
     foreach ($array as $key => $value) {
         if (substr($key, 0, strlen($fieldMask)) != $fieldMask) {
             continue;
         }
         $fieldStr = explode('_', $key);
         $fieldId = (int) $fieldStr[1];
         $field = $fieldModel->getField($fieldId);
         if ($field) {
             switch ($field['type']) {
                 case 'checkbox':
                     $update[$key] = false;
                     if ((int) $value == 1) {
                         $update[$key] = true;
                     }
                     break;
                 case 'select':
                     if ($fieldModel->hasVariant($fieldId, $value)) {
                         $update[$key] = $value;
                     }
                     break;
                 case 'list':
                     if (is_array($value)) {
                         $values = array();
                         foreach ($value as $field_variant) {
                             if ($fieldModel->hasVariant($fieldId, $field_variant)) {
                                 $values = $value;
                             }
                         }
                         $update[$key] = $values;
                     } else {
                         $update[$key] = array();
                     }
                     break;
                 case 'group':
                     $update[$key] = array(Validator::clearValue($value[0]), Validator::clearValue($value[1]));
                     break;
                 default:
                     $update[$key] = Validator::clearValue($value);
                     break;
             }
         }
     }
     if (sizeof($files) > 0) {
         foreach ($files as $key => $file) {
             if (substr($key, 0, strlen($fieldMask)) != $fieldMask) {
                 continue;
             }
             $fID = (int) str_replace($fieldMask, '', $key);
             if (!($field = $fieldModel->where(array('id' => $fID, 'type' => 'file'))->fetchOne())) {
                 continue;
             }
             $extension = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
             if (!in_array($extension, $field['extension'])) {
                 continue;
             }
             $fileName = md5($file['name'] . time() . uniqid()) . '.' . $extension;
             $fileInfo = array('name' => htmlspecialchars($file['name']), 'extension' => $extension, 'file' => $fileName);
             if (move_uploaded_file($file['tmp_name'], UPLOAD_DIR . DS . 'attachment' . DS . $fileName)) {
                 $user = $this->getFromId((int) $id);
                 if (!isset($user[$key]) || !is_array($user[$key]) || sizeof($user[$key]) == 0) {
                     $update[$key] = array($fileInfo);
                 } else {
                     $user[$key][] = $fileInfo;
                     $update[$key] = $user[$key];
                 }
             }
         }
     }
     $this->where(array('id' => (int) $id))->update($update);
     return true;
 }