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; }