/** * Метод для поиска родителей объекта * * @param array $arCodes Массив кодов объекта * @param string $cityOwnerId ID города-родителя объекта / временный хак * @return array Массив родителей объекта */ public static function findParents($arCodes, $cityOwnerId = null) { if (!$arCodes) { return array(); } $arCodes = array_slice($arCodes, 0, count($arCodes) - 1); $arReturn = array(); $object = array(); foreach ($arCodes as $field => $code) { $contentType = ''; switch ($field) { case KladrFields::CodeRegion: $object = Regions::findFirst(array(array(KladrFields::CodeRegion => $arCodes[KladrFields::CodeRegion], KladrFields::Bad => false))); $contentType = Regions::ContentType; break; case KladrFields::CodeDistrict: $object = Districts::findFirst(array(array(KladrFields::CodeRegion => $arCodes[KladrFields::CodeRegion], KladrFields::CodeDistrict => $arCodes[KladrFields::CodeDistrict], KladrFields::Bad => false))); $contentType = Districts::ContentType; break; case KladrFields::CodeLocality: $object = Cities::findFirst(array(array(KladrFields::CodeRegion => $arCodes[KladrFields::CodeRegion], KladrFields::CodeDistrict => $arCodes[KladrFields::CodeDistrict], KladrFields::CodeLocality => $arCodes[KladrFields::CodeLocality], KladrFields::Bad => false))); $contentType = Cities::ContentType; break; case KladrFields::CodeStreet: $object = Streets::findFirst(array(array(KladrFields::CodeRegion => $arCodes[KladrFields::CodeRegion], KladrFields::CodeDistrict => $arCodes[KladrFields::CodeDistrict], KladrFields::CodeLocality => $arCodes[KladrFields::CodeLocality], KladrFields::CodeStreet => $arCodes[KladrFields::CodeStreet], KladrFields::Bad => false))); $contentType = Streets::ContentType; break; } if ($object) { $arReturn[] = 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' => $contentType); } } if ($cityOwnerId) { $owner = Cities::findByQuery(null, $cityOwnerId); if ($owner && is_array($owner) && count($owner) > 0) { $owner = $owner[0]; $owner['contentType'] = 'cityOwner'; $arReturn[] = $owner; } } return $arReturn; }