ModuleGeo
Package | modules.geo |
---|---|
Inheritance | class ModuleGeo » Module » LsObject |
Since | 1.0 |
Source Code | /classes/modules/geo/Geo.class.php |
Protected Properties
Property | Type | Description | Defined By |
---|---|---|---|
aGeoTypes | array | Список доступных типов гео-объектов | ModuleGeo |
aTargetTypes | array | Список доступных типов объектов | ModuleGeo |
bIsInit | bool | Указывает на то, была ли проведенна инициализация модуля | Module |
oEngine | Engine | Объект ядра | Module |
oMapper | ModuleGeo_MapperGeo | Объект маппера | ModuleGeo |
oUserCurrent | ModuleUser_EntityUser|null | Объект текущего пользователя | ModuleGeo |
Public Methods
Method | Description | Defined By |
---|---|---|
AddTarget() | Добавляет связь объекта с гео-объектом в БД | ModuleGeo |
AddTargetType() | Добавляет в разрешенные новый тип | ModuleGeo |
CheckTarget() | Проверка объекта | ModuleGeo |
CheckTargetUser() | Проверка объекта с типом "user" | ModuleGeo |
CreateTarget() | Создание связи | ModuleGeo |
DeleteTargets() | Удаляет связи по фильтру | ModuleGeo |
DeleteTargetsByTarget() | Удаление всех связей объекта | ModuleGeo |
GetCities() | Возвращает список городов по фильтру | ModuleGeo |
GetCityById() | Возвращает регион по ID | ModuleGeo |
GetCountries() | Возвращает список стран по фильтру | ModuleGeo |
GetCountryById() | Возвращает страну по ID | ModuleGeo |
GetGeoObject() | Возвращает гео-объект | ModuleGeo |
GetGeoObjectByTarget() | Возвращает первый гео-объект для объекта | ModuleGeo |
GetGroupCitiesByTargetType() | Возвращает список городов сгруппированных по количеству использований в данном типе объектов | ModuleGeo |
GetGroupCountriesByTargetType() | Возвращает список стран сгруппированных по количеству использований в данном типе объектов | ModuleGeo |
GetRegionById() | Возвращает регион по ID | ModuleGeo |
GetRegions() | Возвращает список регионов по фильтру | ModuleGeo |
GetTargetByTarget() | Возвращает первый объект связи по объекту | ModuleGeo |
GetTargetTypes() | Возвращает список типов объектов | ModuleGeo |
GetTargets() | Возвращает список связей по фильтру | ModuleGeo |
GetTargetsByTargetArray() | Возвращает список связей для списка объектов одного типа. | ModuleGeo |
Init() | Инициализация | ModuleGeo |
IsAllowGeoType() | Проверяет разрешен ли данный гео-тип | ModuleGeo |
IsAllowTargetMulti() | Проверка на возможность нескольких связей | ModuleGeo |
IsAllowTargetType() | Проверяет разрешен ли данный тип | ModuleGeo |
SetInit() | Помечает модуль как инициализированный | Module |
Shutdown() | Метод срабатывает при завершении работы ядра | Module |
__call() | Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля | Module |
__construct() | При создании модуля передаем объект ядра | Module |
isInit() | Возвращает значение флага инициализации модуля | Module |
Protected Methods
Method | Description | Defined By |
---|---|---|
__clone() | Блокируем копирование/клонирование объекта | Module |
Property Details
Список доступных типов гео-объектов
Список доступных типов объектов На данный момент доступен параметр allow_multi=>1 - указывает на возможность создавать несколько связей для одного объекта
Объект маппера
Объект текущего пользователя
Method Details
public ModuleGeo_EntityTarget|bool AddTarget(ModuleGeo_EntityTarget $oTarget)
| ||
$oTarget | ModuleGeo_EntityTarget | Объект связи с владельцем |
{return} | ModuleGeo_EntityTarget|bool |
public function AddTarget($oTarget) {
if ($this->oMapper->AddTarget($oTarget)) {
return $oTarget;
}
return false;
}
Добавляет связь объекта с гео-объектом в БД
public bool AddTargetType(string $sTargetType, array $aParams=array (
))
| ||
$sTargetType | string | Тип владельца |
$aParams | array | Параметры |
{return} | bool |
public function AddTargetType($sTargetType,$aParams=array()) {
if (!array_key_exists($sTargetType,$this->aTargetTypes)) {
$this->aTargetTypes[$sTargetType]=$aParams;
return true;
}
return false;
}
Добавляет в разрешенные новый тип
public bool CheckTarget(string $sTargetType, int $iTargetId)
| ||
$sTargetType | string | Тип владельца |
$iTargetId | int | ID владельца |
{return} | bool |
public function CheckTarget($sTargetType,$iTargetId) {
if (!$this->IsAllowTargetType($sTargetType)) {
return false;
}
$sMethod = 'CheckTarget'.func_camelize($sTargetType);
if (method_exists($this,$sMethod)) {
return $this->$sMethod($iTargetId);
}
return false;
}
Проверка объекта
public bool CheckTargetUser(int $iTargetId)
| ||
$iTargetId | int | ID пользователя |
{return} | bool |
public function CheckTargetUser($iTargetId) {
if ($oUser=$this->User_GetUserById($iTargetId)) {
return true;
}
return false;
}
Проверка объекта с типом "user" Название метода формируется автоматически
public bool|ModuleGeo_EntityTarget CreateTarget(ModuleGeo_EntityGeo $oGeoObject, string $sTargetType, int $iTargetId)
| ||
$oGeoObject | ModuleGeo_EntityGeo | |
$sTargetType | string | Тип владельца |
$iTargetId | int | ID владельца |
{return} | bool|ModuleGeo_EntityTarget |
public function CreateTarget($oGeoObject,$sTargetType,$iTargetId) {
/**
* Проверяем объект на валидность
*/
if (!$this->CheckTarget($sTargetType,$iTargetId)) {
return false;
}
/**
* Проверяем есть ли уже у этого объекта другие связи
*/
$aTargets=$this->GetTargets(array('target_type'=>$sTargetType,'target_id'=>$iTargetId),1,1);
if ($aTargets['count']) {
if ($this->IsAllowTargetMulti($sTargetType)) {
/**
* Разрешено несколько связей
* Проверяем есть ли уже связь с данным гео-объектом, если есть то возвращаем его
*/
$aTargetSelf=$this->GetTargets(array('target_type'=>$sTargetType,'target_id'=>$iTargetId,'geo_type'=>$oGeoObject->getType(),'geo_id'=>$oGeoObject->getId()),1,1);
if (isset($aTargetSelf['collection'][0])) {
return $aTargetSelf['collection'][0];
}
} else {
/**
* Есть другие связи и несколько связей запрещено - удаляем имеющиеся связи
*/
$this->DeleteTargets(array('target_type'=>$sTargetType,'target_id'=>$iTargetId));
}
}
/**
* Создаем связь
*/
$oTarget=Engine::GetEntity('ModuleGeo_EntityTarget');
$oTarget->setGeoType($oGeoObject->getType());
$oTarget->setGeoId($oGeoObject->getId());
$oTarget->setTargetType($sTargetType);
$oTarget->setTargetId($iTargetId);
if ($oGeoObject->getType()=='city') {
$oTarget->setCountryId($oGeoObject->getCountryId());
$oTarget->setRegionId($oGeoObject->getRegionId());
$oTarget->setCityId($oGeoObject->getId());
} elseif ($oGeoObject->getType()=='region') {
$oTarget->setCountryId($oGeoObject->getCountryId());
$oTarget->setRegionId($oGeoObject->getId());
} elseif ($oGeoObject->getType()=='country') {
$oTarget->setCountryId($oGeoObject->getId());
}
return $this->AddTarget($oTarget);
}
Создание связи
public bool|int DeleteTargets(array $aFilter)
| ||
$aFilter | array | Фильтр |
{return} | bool|int |
public function DeleteTargets($aFilter) {
return $this->oMapper->DeleteTargets($aFilter);
}
Удаляет связи по фильтру
public bool|int DeleteTargetsByTarget(string $sTargetType, int $iTargetId)
| ||
$sTargetType | string | Тип владельца |
$iTargetId | int | ID владельца |
{return} | bool|int |
public function DeleteTargetsByTarget($sTargetType,$iTargetId) {
return $this->DeleteTargets(array('target_type'=>$sTargetType,'target_id'=>$iTargetId));
}
Удаление всех связей объекта
public array('collection'=>array,'count'=>int) GetCities(array $aFilter, array $aOrder, int $iCurrPage, int $iPerPage)
| ||
$aFilter | array | Фильтр |
$aOrder | array | Сортировка |
$iCurrPage | int | Номер страницы |
$iPerPage | int | Количество элементов на страницу |
{return} | array('collection'=>array,'count'=>int) |
public function GetCities($aFilter,$aOrder,$iCurrPage,$iPerPage) {
return array('collection'=>$this->oMapper->GetCities($aFilter,$aOrder,$iCount,$iCurrPage,$iPerPage),'count'=>$iCount);
}
Возвращает список городов по фильтру
public ModuleGeo_EntityCity|null GetCityById(int $iId)
| ||
$iId | int | ID города |
{return} | ModuleGeo_EntityCity|null |
public function GetCityById($iId) {
$aRes=$this->GetCities(array('id'=>$iId),array(),1,1);
if (isset($aRes['collection'][0])) {
return $aRes['collection'][0];
}
return null;
}
Возвращает регион по ID
public array('collection'=>array,'count'=>int) GetCountries(array $aFilter, array $aOrder, int $iCurrPage, int $iPerPage)
| ||
$aFilter | array | Фильтр |
$aOrder | array | Сортировка |
$iCurrPage | int | Номер страницы |
$iPerPage | int | Количество элементов на страницу |
{return} | array('collection'=>array,'count'=>int) |
public function GetCountries($aFilter,$aOrder,$iCurrPage,$iPerPage) {
return array('collection'=>$this->oMapper->GetCountries($aFilter,$aOrder,$iCount,$iCurrPage,$iPerPage),'count'=>$iCount);
}
Возвращает список стран по фильтру
public ModuleGeo_EntityCountry|null GetCountryById(int $iId)
| ||
$iId | int | ID страны |
{return} | ModuleGeo_EntityCountry|null |
public function GetCountryById($iId) {
$aRes=$this->GetCountries(array('id'=>$iId),array(),1,1);
if (isset($aRes['collection'][0])) {
return $aRes['collection'][0];
}
return null;
}
Возвращает страну по ID
public ModuleGeo_EntityGeo|null GetGeoObject(string $sType, int $iId)
| ||
$sType | string | Тип гео-объекта |
$iId | int | ID гео-объекта |
{return} | ModuleGeo_EntityGeo|null |
public function GetGeoObject($sType,$iId) {
$sType=strtolower($sType);
if (!$this->IsAllowGeoType($sType)) {
return null;
}
switch($sType) {
case 'country':
return $this->GetCountryById($iId);
break;
case 'region':
return $this->GetRegionById($iId);
break;
case 'city':
return $this->GetCityById($iId);
break;
default:
return null;
}
}
Возвращает гео-объект
public ModuleGeo_EntityCity|ModuleGeo_EntityCountry|ModuleGeo_EntityRegion|null GetGeoObjectByTarget(string $sTargetType, int $iTargetId)
| ||
$sTargetType | string | Тип владельца |
$iTargetId | int | ID владельца |
{return} | ModuleGeo_EntityCity|ModuleGeo_EntityCountry|ModuleGeo_EntityRegion|null |
public function GetGeoObjectByTarget($sTargetType,$iTargetId) {
$aTargets=$this->GetTargets(array('target_type'=>$sTargetType,'target_id'=>$iTargetId),1,1);
if (isset($aTargets['collection'][0])) {
$oTarget=$aTargets['collection'][0];
return $this->GetGeoObject($oTarget->getGeoType(),$oTarget->getGeoId());
}
return null;
}
Возвращает первый гео-объект для объекта
public array GetGroupCitiesByTargetType(string $sTargetType, int $iLimit)
| ||
$sTargetType | string | Тип владельца |
$iLimit | int | Количество элементов |
{return} | array |
public function GetGroupCitiesByTargetType($sTargetType,$iLimit) {
return $this->oMapper->GetGroupCitiesByTargetType($sTargetType,$iLimit);
}
Возвращает список городов сгруппированных по количеству использований в данном типе объектов
public array GetGroupCountriesByTargetType(string $sTargetType, int $iLimit)
| ||
$sTargetType | string | Тип владельца |
$iLimit | int | Количество элементов |
{return} | array |
public function GetGroupCountriesByTargetType($sTargetType,$iLimit) {
return $this->oMapper->GetGroupCountriesByTargetType($sTargetType,$iLimit);
}
Возвращает список стран сгруппированных по количеству использований в данном типе объектов
public ModuleGeo_EntityRegion|null GetRegionById(int $iId)
| ||
$iId | int | ID региона |
{return} | ModuleGeo_EntityRegion|null |
public function GetRegionById($iId) {
$aRes=$this->GetRegions(array('id'=>$iId),array(),1,1);
if (isset($aRes['collection'][0])) {
return $aRes['collection'][0];
}
return null;
}
Возвращает регион по ID
public array('collection'=>array,'count'=>int) GetRegions(array $aFilter, array $aOrder, int $iCurrPage, int $iPerPage)
| ||
$aFilter | array | Фильтр |
$aOrder | array | Сортировка |
$iCurrPage | int | Номер страницы |
$iPerPage | int | Количество элементов на страницу |
{return} | array('collection'=>array,'count'=>int) |
public function GetRegions($aFilter,$aOrder,$iCurrPage,$iPerPage) {
return array('collection'=>$this->oMapper->GetRegions($aFilter,$aOrder,$iCount,$iCurrPage,$iPerPage),'count'=>$iCount);
}
Возвращает список регионов по фильтру
public null|ModuleGeo_EntityTarget GetTargetByTarget(string $sTargetType, int $iTargetId)
| ||
$sTargetType | string | Тип владельца |
$iTargetId | int | ID владельца |
{return} | null|ModuleGeo_EntityTarget |
public function GetTargetByTarget($sTargetType,$iTargetId) {
$aTargets=$this->GetTargets(array('target_type'=>$sTargetType,'target_id'=>$iTargetId),1,1);
if (isset($aTargets['collection'][0])) {
return $aTargets['collection'][0];
}
return null;
}
Возвращает первый объект связи по объекту
public array GetTargetTypes()
| ||
{return} | array |
public function GetTargetTypes() {
return $this->aTargetTypes;
}
Возвращает список типов объектов
public array('collection'=>array,'count'=>int) GetTargets(array $aFilter, int $iCurrPage, int $iPerPage)
| ||
$aFilter | array | Фильтр |
$iCurrPage | int | Номер страницы |
$iPerPage | int | Количество элементов на страницу |
{return} | array('collection'=>array,'count'=>int) |
public function GetTargets($aFilter,$iCurrPage,$iPerPage) {
return array('collection'=>$this->oMapper->GetTargets($aFilter,$iCount,$iCurrPage,$iPerPage),'count'=>$iCount);
}
Возвращает список связей по фильтру
public array GetTargetsByTargetArray(string $sTargetType, array $aTargetId)
| ||
$sTargetType | string | Тип владельца |
$aTargetId | array | Список ID владельцев |
{return} | array | В качестве ключей используется ID объекта, в качестве значений массив связей этого объекта |
public function GetTargetsByTargetArray($sTargetType,$aTargetId) {
if (!is_array($aTargetId)) {
$aTargetId=array($aTargetId);
}
if (!count($aTargetId)) {
return array();
}
$aResult=array();
$aTargets=$this->GetTargets(array('target_type'=>$sTargetType,'target_id'=>$aTargetId),1,count($aTargetId));
if ($aTargets['count']) {
foreach($aTargets['collection'] as $oTarget) {
$aResult[$oTarget->getTargetId()][]=$oTarget;
}
}
return $aResult;
}
Возвращает список связей для списка объектов одного типа.
public void Init()
|
public function Init() {
$this->oMapper=Engine::GetMapper(__CLASS__);
$this->oUserCurrent=$this->User_GetUserCurrent();
}
Инициализация
public bool IsAllowGeoType(string $sGeoType)
| ||
$sGeoType | string | Тип владельца |
{return} | bool |
public function IsAllowGeoType($sGeoType) {
return in_array($sGeoType,$this->aGeoTypes);
}
Проверяет разрешен ли данный гео-тип
public bool IsAllowTargetMulti(string $sTargetType)
| ||
$sTargetType | string | Тип владельца |
{return} | bool |
public function IsAllowTargetMulti($sTargetType) {
if ($this->IsAllowTargetType($sTargetType)) {
if (isset($this->aTargetTypes[$sTargetType]['allow_multi']) and $this->aTargetTypes[$sTargetType]['allow_multi']) {
return true;
}
}
return false;
}
Проверка на возможность нескольких связей
public bool IsAllowTargetType(string $sTargetType)
| ||
$sTargetType | string | Тип владельца |
{return} | bool |
public function IsAllowTargetType($sTargetType) {
return in_array($sTargetType,array_keys($this->aTargetTypes));
}
Проверяет разрешен ли данный тип