/**
  * Выполняет обработку запроса
  * 
  * @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;
 }
Beispiel #2
0
 /**
  * Выполняет обработку запроса
  * 
  * @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;
 }
Beispiel #4
0
 /**
  * Выполняет обработку запроса
  * 
  * @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;
 }