private function composeCheckData() { $data = array(); if ($this->method == \core\RuleBase::$methodPost) { $data = $this->request->getPost(); } else { $data = $this->request->getQuery(); } $this->formData = $data; }
public function getQuery($name = null, $filters = null, $defaultValue = null) { $query = parent::getQuery($name, $filters, $defaultValue); if (isset($query['_url'])) { unset($query['_url']); } return $query; }
/** * Preenche os registros a serem exibidos na pagina solicitada * * @return \wsGerProj\Http\GetResponse */ private function setResults() { if ($this->request->getQuery(DefaultParams::SKIP_PAGINATION)) { $this->retorno->results = $this->data; } else { $startRow = ($this->currentPage - 1) * Settings::RECORDS; $this->retorno->results = array_slice($this->data, $startRow, Settings::RECORDS); } return $this; }
/** * Выполняет обработку запроса * * @param \Phalcon\Http\Request $request * @param \Kladr\Core\Plugins\Base\PluginResult $prevResult * @return \Kladr\Core\Plugins\Base\PluginResult */ public function process(Request $request, PluginResult $prevResult) { if ($prevResult->error) { return $prevResult; } $userKey = $request->getQuery('token'); $user = $this->userService->getUserByKey($userKey); $this->userService->logUser($user); $prevResult->user = $user; return $prevResult; }
/** * Выполняет обработку запроса * * @param \Phalcon\Http\Request $request * @param \Kladr\Core\Plugins\Base\PluginResult $prevResult * @return \Kladr\Core\Plugins\Base\PluginResult */ public function process(Request $request, PluginResult $prevResult) { if ($prevResult->error) { return $prevResult; } $userKey = $request->getQuery('token'); $tokens = array(); include __DIR__ . '/../../config/enabled_tokens.php'; if (trim($userKey) == '' || !in_array($userKey, $tokens)) { $prevResult->error = true; $prevResult->errorCode = 403; $prevResult->errorMessage = 'Неверный token'; return $prevResult; } return $prevResult; }
/** * Выполняет обработку запроса * * @param \Phalcon\Http\Request $request * @param \Kladr\Core\Plugins\Base\PluginResult $prevResult * @return \Kladr\Core\Plugins\Base\PluginResult */ public function process(Request $request, PluginResult $prevResult) { if ($prevResult->error) { return $prevResult; } if (!$request->getQuery('withParent')) { return $prevResult; } $objects = $this->cache->get('FindParentsPlugin', $request); $result = $prevResult; if ($objects === null) { $objects = $result->result; switch ($request->getQuery('contentType')) { case Regions::ContentType: foreach ($objects as $key => $object) { $objects[$key]['parents'] = self::findParents(Regions::getCodes($object['id'])); } break; case Districts::ContentType: foreach ($objects as $key => $object) { $objects[$key]['parents'] = self::findParents(Districts::getCodes($object['id'])); } break; case Cities::ContentType: foreach ($objects as $key => $object) { $objects[$key]['parents'] = self::findParents(Cities::getCodes($object['id'])); } break; case Streets::ContentType: foreach ($objects as $key => $object) { $objects[$key]['parents'] = self::findParents(Streets::getCodes($object['id'])); } break; case Buildings::ContentType: foreach ($objects as $key => $object) { $objects[$key]['parents'] = self::findParents(Buildings::getCodes($object['id'])); } break; } $this->cache->set('FindParentsPlugin', $request, $objects); } $result->result = $objects; return $result; }
/** * Выполняет обработку запроса * * @param \Phalcon\Http\Request $request * @param \Kladr\Core\Plugins\Base\PluginResult $prevResult * @return \Kladr\Core\Plugins\Base\PluginResult */ public function process(Request $request, PluginResult $prevResult) { if ($prevResult->error) { return $prevResult; } if (!$request->getQuery('withParent')) { return $prevResult; } $arSpecialCases = array('7700000000000', '7800000000000', '7800000000001', '9900000000000'); $objects = array(); $result = $prevResult; foreach ($prevResult->result as $key => $obj) { if (in_array($obj['id'], $arSpecialCases)) { $obj['parents'] = array(); } $objects[] = $obj; } $result = $prevResult; $result->result = $objects; return $result; }
/** * Выполняет обработку запроса * * @param \Phalcon\Http\Request $request * @param \Kladr\Core\Plugins\Base\PluginResult $prevResult * @return \Kladr\Core\Plugins\Base\PluginResult */ public function process(Request $request, PluginResult $prevResult) { if ($prevResult->error) { return $prevResult; } if (!$request->getQuery('oneString')) { return $prevResult; } $arReturn = $this->cache->get('OneStringPlugin', $request); if ($arReturn === null) { $objects = array(); $query = $request->getQuery('query'); //разбиваем строку запроса на слова $arWords = preg_split('/(\\ |\\.|\\;|\\,)+/', $query, -1, PREG_SPLIT_NO_EMPTY); //нормализуем foreach ($arWords as $key => $word) { $arWords[$key] = preg_replace('/"/u', '', $arWords[$key]); //Tools::Normalize($word); if (mb_strlen($arWords[$key], mb_detect_encoding($arWords[$key])) < 4) { $arWords[$key] = preg_replace('/-/u', '', $arWords[$key]); } } //$arExceptionWords = array('рн', 'бр'); $arExceptionWords = array(); for ($i = 0; $i < count($arWords); $i++) { if ($i === count($arWords) - 1 || mb_strlen($arWords[$i], mb_detect_encoding($arWords[$i])) <= 3 && !in_array($arWords[$i], $arExceptionWords)) { $arWords[$i] = $arWords[$i] . '*'; } } $houseForMongo = null; //строка для поиска номера дома в монго $possibleBuildingName = end($arWords); $houseForMongo = Tools::Normalize($possibleBuildingName); //array_pop($arWords); //$houseForMongo = str_replace('*', '', $houseForMongo); $searchString = implode(" ", $arWords); $sphinxClient = $this->sphinxClient; $limit = $request->getQuery('limit') ? (int) $request->getQuery('limit') >= 50 ? 50 : (int) $request->getQuery('limit') : 50; $sphinxClient->SetLimits(0, $limit); $sphinxClient->SetMatchMode(SPH_MATCH_EXTENDED2); $sphinxClient->SetSortMode(SPH_SORT_ATTR_ASC, 'sort'); $regionForSphinx = (string) $request->getQuery('regionId'); $districtForSphinx = (string) $request->getQuery('districtId'); $cityForSphinx = (string) $request->getQuery('cityId'); $sphinxRes = null; //echo "@fullname \"$searchString\""; if ($cityForSphinx) { $sphinxRes = $sphinxClient->Query("@fullname \"{$searchString}\" @cityid {$cityForSphinx}"); } elseif ($districtForSphinx) { $sphinxRes = $sphinxClient->Query("@fullname \"{$searchString}\" @districtid {$districtForSphinx}"); } elseif ($regionForSphinx) { $sphinxRes = $sphinxClient->Query("@fullname \"{$searchString}\" @regionid {$regionForSphinx}"); } else { $sphinxRes = $sphinxClient->Query("@fullname \"{$searchString}\""); } if ($sphinxRes === false) { $result = $prevResult; $result->terminate = true; $result->error = true; $result->errorMessage = $sphinxClient->GetLastError(); return $result; } if (empty($sphinxRes['matches'])) { array_pop($arWords); $searchString = implode(" ", $arWords); $sphinxRes = $sphinxClient->Query($searchString); //подумать о повторном запросе при разных заданных областях } //ID в сфинксе числовые, поэтому мы теряем нули в начале //0100000000000 — 13 //01000001000000300 — 17 //0100000100000030001 — 19 if (!empty($sphinxRes['matches'])) { $sphinxIds = array(); $sphinxIds = array_keys($sphinxRes['matches']); foreach ($sphinxIds as &$id) { $id = "{$id}"; $len = strlen($id); if ($len == 13 || $len == 17 || $len == 19) { continue; } if ($len > 19) { continue; } while ($len != 13 && $len != 17 && $len != 19) { $id = '0' . $id; $len = strlen($id); } } $objects = Complex::find(array(array('Id' => array('$in' => $sphinxIds)))); } if ($houseForMongo) { $streets = array(); foreach ($objects as $object) { if ($object->readAttribute(KladrFields::ContentType) == 'street') { $streets[] = $object; } } if (count($streets) > 0) { $retBuildings = array(); $mainBuilding = null; foreach ($streets as $street) { $buildingsOfStr = Complex::find(array(array(KladrFields::StreetId => $street->readAttribute(KladrFields::StreetId), KladrFields::ContentType => 'building'))); foreach ($buildingsOfStr as $buildingOfStr) { foreach ($buildingOfStr->readAttribute(KladrFields::NormalizedBuildingName) as $buildName) { if ($buildName === $houseForMongo) { $mainBuilding = $buildingOfStr; //находим точное совпадение $mainBuilding->NormalizedBuildingName = $buildName; } $reg = '#^' . $houseForMongo . '#'; $match = preg_match($reg, $buildName) ? $buildName : null; //убираем длинные строки из домов $match = preg_match('/\\,/', $match) ? null : $match; if ($match) { $building = clone $buildingOfStr; $building->NormalizedBuildingName = $match; $retBuildings[] = $building; } } } //убираем повторное точное вхождение, ставим его на первое место if ($mainBuilding) { foreach ($retBuildings as $key => $retBuilding) { if ($mainBuilding->NormalizedBuildingName == $retBuilding->NormalizedBuildingName) { unset($retBuildings[$key]); } } $retBuildings = array_merge(array($mainBuilding), $retBuildings); } if (count($objects) > floor($limit / 2)) { if (count($retBuildings) >= ceil($limit / 2)) { break; } } elseif (count($retBuildings) >= $limit - count($objects)) { break; } } //заполянем лимит по максимуму if (count($objects) > floor($limit / 2)) { if ($retBuildings > ceil($limit / 2)) { $retBuildings = array_slice($retBuildings, 0, ceil($limit / 2)); } } else { $retBuildings = array_slice($retBuildings, 0, $limit - count($objects)); } //сливаем массивы домов и остальных совпадений $objects = array_merge($retBuildings, $objects); //финальная обрезка массива if ($objects > $limit) { $objects = array_slice($objects, 0, $limit, true); } } } $withParent = $request->getQuery('withParent') != ''; $ids = array(); foreach ($objects as $object) { $key = $object->readAttribute(KladrFields::Id) . '_' . $object->readAttribute(KladrFields::NormalizedBuildingName); if (in_array($key, $ids)) { continue; } $ids[] = $key; if ($object) { $retObj = array('id' => $object->readAttribute(KladrFields::Id), 'name' => $object->readAttribute(KladrFields::Name), 'zip' => $object->readAttribute(KladrFields::ZipCode), 'type' => $object->readAttribute(KladrFields::Type), 'typeShort' => $object->readAttribute(KladrFields::TypeShort), 'okato' => $object->readAttribute(KladrFields::Okato), 'contentType' => $object->readAttribute(KladrFields::ContentType), 'fullName' => $object->readAttribute(KladrFields::FullName)); $ownerId = \Kladr\Core\Models\Cities::getCityOwnerId($retObj['id']); switch ($retObj['contentType']) { case 'district': if ($withParent) { $retObj['parents'] = FindParentsPlugin::findParents(\Kladr\Core\Models\Districts::getCodes($retObj['id'])); } //$retObj['districtId'] = $object->readAttribute(KladrFields::DistrictId); break; case 'city': if ($withParent) { $retObj['parents'] = FindParentsPlugin::findParents(\Kladr\Core\Models\Cities::getCodes($retObj['id']), $ownerId); } //$retObj['districtId'] = $object->readAttribute(KladrFields::DistrictId); //$retObj['cityId'] = $object->readAttribute(KladrFields::CityId); break; case 'street': if ($withParent) { $retObj['parents'] = FindParentsPlugin::findParents(\Kladr\Core\Models\Streets::getCodes($retObj['id']), $ownerId); } //$retObj['districtId'] = $object->readAttribute(KladrFields::DistrictId); //$retObj['cityId'] = $object->readAttribute(KladrFields::CityId); //$retObj['streetId'] = $object->readAttribute(KladrFields::StreetId); break; case 'building': if ($withParent) { $retObj['parents'] = FindParentsPlugin::findParents(\Kladr\Core\Models\Buildings::getCodes($retObj['id']), $ownerId); } //$retObj['districtId'] = $object->readAttribute(KladrFields::DistrictId); //$retObj['cityId'] = $object->readAttribute(KladrFields::CityId); //$retObj['streetId'] = $object->readAttribute(KladrFields::StreetId); //$retObj['buildingId'] = $object->readAttribute(KladrFields::BuildingId); break; default: break; } } if ($retObj['contentType'] == 'building') { $name = $object->readAttribute(KladrFields::NormalizedBuildingName); $retObj['fullName'] .= ', ' . $name; $retObj['name'] = $name; $arReturn[] = $retObj; } else { $arReturn[] = $retObj; } } $this->cache->set('OneStringPlugin', $request, $arReturn); } $result = $prevResult; $result->result = $arReturn; $result->terminate = true; return $result; }
/** * Проверяет, надо ли включать данный плагин * @param \Phalcon\Http\Request $request * @return bool */ private function check(Request $request) { return $request->getQuery('cmd') && $request->getQuery('cmd') == self::COMMAND; }
public function index(Request $request) { return $request->getQuery(); }
/** * Generate cache key pair (for response header / body) by Host + Uri + Allowed Queries * @param Request $request * @param array $ignores * @return array */ public function generateCacheKeys(Request $request, array $ignores = array()) { list($urlPath) = explode('?', $request->getURI()); $urlQuery = $request->getQuery(); //NOTE: remove Phalcon default url rewrite param here unset($urlQuery['_url']); if ($ignores) { foreach ($ignores as $ignoreKey) { unset($urlQuery[$ignoreKey]); } } $cacheKeyPrefix = $request->getHttpHost() . $urlPath . json_encode($urlQuery); $cacheKeyPrefix = md5($cacheKeyPrefix); $bodyKey = $cacheKeyPrefix . '_b'; $headersKey = $cacheKeyPrefix . '_h'; $this->cacheHeadersKey = $headersKey; $this->cacheBodyKey = $bodyKey; return array($headersKey, $bodyKey); }
/** * Возвращает ключ кэша для плагина * * @param string $plugin Имя плагина * @param \Phalcon\Http\Request $request * @return string */ private function getCacheKey($plugin, Request $request) { $key = $plugin; $key .= 'contentType=' . $request->getQuery('contentType'); $key .= 'oneString=' . $request->getQuery('oneString'); $key .= 'regionId=' . $request->getQuery('regionId'); $key .= 'districtId=' . $request->getQuery('districtId'); $key .= 'cityId=' . $request->getQuery('cityId'); $key .= 'streetId=' . $request->getQuery('streetId'); $key .= 'buildingId=' . $request->getQuery('buildingId'); $key .= 'zip=' . $request->getQuery('zip'); $query = $request->getQuery('query'); $query = Tools::Key($query); $query = Tools::Normalize($query); $key .= 'query=' . $query; $key .= 'withParent=' . $request->getQuery('withParent'); $key .= 'limit=' . $request->getQuery('limit'); $key .= 'offset=' . $request->getQuery('offset'); $key .= 'typeCode=' . $request->getQuery('typeCode'); return sha1($key); }
/** * Reads the parameters passed to the script, and selects the authorization key ULogin * * @return bool|mixed */ public function getToken() { $request = new Request(); if ($request->isPost() === true) { $this->token = $request->getPost('token', null, false); } else { $this->token = $request->getQuery('token', null, false); } return $this->token; }
public function getQuery($name = null, $filters = null, $defaultValue = null, $notAllowEmpty = false, $noRecursive = false) { return parent::getQuery($name, $filters, $defaultValue, $notAllowEmpty, $noRecursive); }
/** * Выполняет обработку запроса * * @param \Phalcon\Http\Request $request * @param \Kladr\Core\Plugins\Base\PluginResult $prevResult * @return \Kladr\Core\Plugins\Base\PluginResult */ public function process(Request $request, PluginResult $prevResult) { if ($prevResult->error) { return $prevResult; } $arSearchContext = array(); $errorMessage = ''; //поиск одной строкой if ($request->getQuery('oneString')) { $arSearchContext['oneString'] = $request->getQuery('oneString'); } // contentType if ($request->getQuery('contentType')) { $arSearchContext['contentType'] = $request->getQuery('contentType'); if (!in_array($arSearchContext['contentType'], array(Regions::ContentType, Districts::ContentType, Cities::ContentType, Streets::ContentType, Buildings::ContentType))) { $errorMessage = 'contentType incorrect'; } } elseif (!$request->getQuery('oneString')) { $errorMessage = 'contentType required parameter'; } // regionId if ($request->getQuery('regionId')) { $arSearchContext['regionId'] = $request->getQuery('regionId'); if (preg_match('/[^0-9]+/u', $arSearchContext['regionId'])) { $errorMessage = 'regionId incorrect'; } } // districtId if ($request->getQuery('districtId')) { $arSearchContext['districtId'] = $request->getQuery('districtId'); if (preg_match('/[^0-9]+/u', $arSearchContext['districtId'])) { $errorMessage = 'districtId incorrect'; } } // cityId if ($request->getQuery('cityId')) { $arSearchContext['cityId'] = $request->getQuery('cityId'); if (preg_match('/[^0-9]+/u', $arSearchContext['cityId'])) { $errorMessage = 'cityId incorrect'; } } // streetId if ($request->getQuery('streetId')) { $arSearchContext['streetId'] = $request->getQuery('streetId'); if (preg_match('/[^0-9]+/u', $arSearchContext['streetId'])) { $errorMessage = 'streetId incorrect'; } } // buildingId if ($request->getQuery('buildingId')) { $arSearchContext['buildingId'] = $request->getQuery('buildingId'); if (preg_match('/[^0-9]+/u', $arSearchContext['buildingId'])) { $errorMessage = 'buildingId incorrect'; } } // query $arSearchContext['query'] = $request->getQuery('query'); //contentType if ($request->getQuery('query') && !$request->getQuery('oneString')) { if (array_key_exists('contentType', $arSearchContext)) { switch ($arSearchContext['contentType']) { case 'street': if (empty($arSearchContext['cityId'])) { $errorMessage = 'cityId parameter required'; } break; case 'building': if (empty($arSearchContext['streetId']) && empty($arSearchContext['cityId'])) { $errorMessage = 'streetId or cityId parameters required'; } break; } } } // withParent if ($request->getQuery('withParent')) { $arSearchContext['withParent'] = $request->getQuery('withParent'); } // limit if ($request->getQuery('limit')) { $arSearchContext['limit'] = (int) $request->getQuery('limit'); if ($arSearchContext['limit'] == 0) { $errorMessage = 'limit is incorrect. Should be numerable, greater than 0'; } if ($arSearchContext['limit'] > 400) { $errorMessage = 'limit > 400. Should be less than 400'; } } //offset if ($request->getQuery('offset')) { $arSearchContext['offset'] = (int) $request->getQuery('offset'); if ($arSearchContext['limit'] == 0) { $errorMessage = 'offset incorrect. Should be numerable, greater than 0'; } } // callback if ($request->getQuery('callback')) { $arSearchContext['callback'] = $request->getQuery('callback'); } $result = new PluginResult(); if ($errorMessage) { $result->error = true; $result->errorCode = 400; $result->errorMessage = $errorMessage; } $result->searchContext = $arSearchContext; return $result; }
/** * Выполняет обработку запроса * * @param \Phalcon\Http\Request $request * @param \Kladr\Core\Plugins\Base\PluginResult $prevResult * @return \Kladr\Core\Plugins\Base\PluginResult */ public function process(Request $request, PluginResult $prevResult) { if ($prevResult->error) { return $prevResult; } // Проверяем, что ищем город // с принадлежностью региону if ($request->getQuery('contentType') != 'city') { return $prevResult; } if (!$request->getQuery('regionId')) { return $prevResult; } // добавляем к результату поиск в другом регионе $arRegionCodeSpecialCases = array(50 => 77, 47 => 78); $objects = $this->cache->get('SpecialCasesPlugin', $request); if ($objects === null) { $objects = array(); $arCodes = array(); // regionId $regionId = $request->getQuery('regionId'); if ($regionId) { $arCodes = Regions::getCodes($regionId); } // districtId $districtId = $request->getQuery('districtId'); if ($districtId) { $arCodes = Districts::getCodes($districtId); } // cityId $cityId = $request->getQuery('cityId'); if ($cityId) { $arCodes = Cities::getCodes($cityId); } // streetId $streetId = $request->getQuery('streetId'); if ($streetId) { $arCodes = Streets::getCodes($streetId); } // buildingId $buildingId = $request->getQuery('buildingId'); if ($buildingId) { $arCodes = Buildings::getCodes($buildingId); } if (!isset($arCodes[KladrFields::CodeRegion]) && !isset($arRegionCodeSpecialCases[$arCodes[KladrFields::CodeRegion]])) { return $prevResult; } $arCodes[KladrFields::CodeRegion] = $arRegionCodeSpecialCases[$arCodes[KladrFields::CodeRegion]]; // query $query = $request->getQuery('query'); $query = Tools::Key($query); $query = Tools::Normalize($query); // limit $limit = $request->getQuery('limit'); $limit = intval($limit); $limit = $limit ? $limit : 5000; if ($limit > 400) { $limit = 400; } switch ($request->getQuery('contentType')) { case Regions::ContentType: $objects = Regions::findByQuery($query, $arCodes, $limit); break; case Districts::ContentType: $objects = Districts::findByQuery($query, $arCodes, $limit); break; case Cities::ContentType: $objects = Cities::findByQuery($query, $arCodes, $limit); break; case Streets::ContentType: $objects = Streets::findByQuery($query, $arCodes, $limit); break; case Buildings::ContentType: $objects = Buildings::findByQuery($query, $arCodes, $limit); break; } $this->cache->set('SpecialCasesPlugin', $request, $objects); } $result = $prevResult; $result->result = array_merge($prevResult->result, $objects); return $result; }
/** * I fetch a value from pathparams and request * @todo wrap pathparams and request in a composite * @param $pathParams * @param Request $Request * @return bool * @throws \Exception */ public function fetch($pathParams, Request $Request) { $this->value = null; $this->_hasFetched = false; $filters = []; $name = $this->_data->name; switch ($this->_data->in) { case 'path': if (array_key_exists($name, $pathParams)) { $this->_hasFetched = true; $this->setValue($pathParams[$name]); } break; case 'query': $this->_hasFetched = $Request->hasQuery($name); $this->setValue($Request->getQuery($name, $filters, null)); break; case 'header': // this syntax won't work... yet??? //$value = $Request->getHeader($name, $filters, null); $nameWithHttpPrefix = strtoupper(str_replace('-', '_', $name)); if ($Request->hasServer($name) || $Request->hasServer($nameWithHttpPrefix)) { $this->setValue($Request->getHeader($name)); $this->_hasFetched = true; } break; case 'formData': switch (strtolower($Request->getMethod())) { case 'post': if ($Request->hasPost($name)) { $this->_hasFetched = true; $this->setValue($Request->getPost($name, $filters, null)); } break; case 'put': if ($Request->hasPut($name)) { $this->_hasFetched = true; $this->setValue($Request->getPut($name, $filters, null)); } break; // parameters on delete request not supported yet // parameters on delete request not supported yet case 'delete': default: throw new \Exception('TBI: ' . $Request->getMethod()); } break; case 'body': throw new \Exception('TBI'); break; default: throw new \Exception('invalid or not implemented "in" value: ' . $this->_data->in); } return $this->_hasFetched; }