/** * Выполняет обработку запроса * * @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; }
/** * Выполняет обработку запроса * * @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 || $prevResult->isPluginDisabled('FindPlugin')) { return $prevResult; } $objects = null; $objects = $this->cache->get('FindPlugin', $request); if ($objects === null) { $objects = array(); // query $query = $request->getQuery('query'); $query = Tools::Key($query); $query = Tools::Normalize($query); $arCodes = null; // regionId $regionId = $request->getQuery('regionId'); if ($regionId) { $arCodes = $request->getQuery('contentType') == 'region' ? $regionId : Regions::getCodes($regionId); } // districtId $districtId = $request->getQuery('districtId'); if ($districtId) { $arCodes = $request->getQuery('contentType') == 'district' ? $districtId : Districts::getCodes($districtId); } // cityId $cityId = $request->getQuery('cityId'); if ($cityId) { $arCodes = $request->getQuery('contentType') == 'city' ? $cityId : Cities::getCodes($cityId); } // streetId $streetId = $request->getQuery('streetId'); if ($streetId) { $arCodes = $request->getQuery('contentType') == 'street' ? $streetId : Streets::getCodes($streetId); } // buildingId $buildingId = $request->getQuery('buildingId'); if ($buildingId) { $arCodes = Buildings::getCodes($buildingId); } // zip $zip = (int) $request->getQuery('zip'); if ($zip <= 0 || $zip > 999999) { $zip = null; } // limit $limit = $request->getQuery('limit'); $limit = intval($limit); $limit = $limit ? $limit : 400; if ($limit > 400) { $limit = 400; } //offset $offset = $request->getQuery('offset'); $offset = intval($offset); $typeCodes = self::ConvertCodeTypeToArray($request->getQuery('typeCode')); switch ($request->getQuery('contentType')) { case Regions::ContentType: $objects = Regions::findByQuery($query, $arCodes, $limit, $offset); break; case Districts::ContentType: $objects = Districts::findByQuery($query, $arCodes, $limit, $offset); break; case Cities::ContentType: $objects = Cities::findByQuery($query, $arCodes, $limit, $offset, $typeCodes); break; case Streets::ContentType: $objects = Streets::findByQuery($query, $arCodes, $limit, $offset); break; case Buildings::ContentType: $objects = Buildings::findByQuery($query, $arCodes, $limit, $zip); break; } $this->cache->set('FindPlugin', $request, $objects); } $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('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; } $objects = $this->cache->get('DuplicatePlugin', $request); if ($objects === null) { $objects = array(); $arCodes = array(); $existDuplicate = false; // regionId $regionId = $request->getQuery('regionId'); if ($regionId && $this->arDuplicates[$regionId]) { $arCodes = Regions::getCodes($this->arDuplicates[$regionId]); $existDuplicate = true; } // districtId $districtId = $request->getQuery('districtId'); if ($districtId && $this->arDuplicates[$districtId]) { $arCodes = Districts::getCodes($this->arDuplicates[$districtId]); $existDuplicate = true; } // cityId $cityId = $request->getQuery('cityId'); if ($cityId && $this->arDuplicates[$cityId]) { $arCodes = Cities::getCodes($this->arDuplicates[$cityId]); $existDuplicate = true; } // streetId $streetId = $request->getQuery('streetId'); if ($streetId && $this->arDuplicates[$streetId]) { $arCodes = Streets::getCodes($streetId); $existDuplicate = true; } // buildingId $buildingId = $request->getQuery('buildingId'); if ($buildingId && $this->arDuplicates[$buildingId]) { $arCodes = Buildings::getCodes($this->arDuplicates[$buildingId]); $existDuplicate = true; } if ($existDuplicate) { // 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('DuplicatePlugin', $request, $objects); } $result = $prevResult; $objects = array_merge($prevResult->result, $objects); $arResult = array(); $arIgnore = array(); foreach ($objects as $object) { $ignoreId = isset($this->arDuplicates[$object['id']]) ? $this->arDuplicates[$object['id']] : false; if ($ignoreId) { $arIgnore[] = $ignoreId; } if (!in_array($object['id'], $arIgnore)) { $arResult[] = $object; } } $result->result = $objects; return $result; }