ModuleGeo

Package modules.geo
Inheritance class ModuleGeo » Module » LsObject
Since 1.0
Source Code /classes/modules/geo/Geo.class.php
Модуль Geo - привязка объектов к географии (страна/регион/город) Терминология: объект - который привязываем к гео-объекту гео-объект - географический объект(страна/регион/город)

Protected Properties

Hide inherited properties

PropertyTypeDescriptionDefined By
aGeoTypes array Список доступных типов гео-объектов ModuleGeo
aTargetTypes array Список доступных типов объектов ModuleGeo
bIsInit bool Указывает на то, была ли проведенна инициализация модуля Module
oEngine Engine Объект ядра Module
oMapper ModuleGeo_MapperGeo Объект маппера ModuleGeo
oUserCurrent ModuleUser_EntityUser|null Объект текущего пользователя ModuleGeo

Public Methods

Hide inherited methods

MethodDescriptionDefined 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

Hide inherited methods

MethodDescriptionDefined By
__clone() Блокируем копирование/клонирование объекта Module

Property Details

aGeoTypes property
protected array $aGeoTypes;

Список доступных типов гео-объектов

aTargetTypes property
protected array $aTargetTypes;

Список доступных типов объектов На данный момент доступен параметр allow_multi=>1 - указывает на возможность создавать несколько связей для одного объекта

oMapper property
protected ModuleGeo_MapperGeo $oMapper;

Объект маппера

oUserCurrent property
protected ModuleUser_EntityUser|null $oUserCurrent;

Объект текущего пользователя

Method Details

AddTarget() method
public ModuleGeo_EntityTarget|bool AddTarget(ModuleGeo_EntityTarget $oTarget)
$oTarget ModuleGeo_EntityTarget Объект связи с владельцем
{return} ModuleGeo_EntityTarget|bool
Source Code: /classes/modules/geo/Geo.class.php#144 (show)
public function AddTarget($oTarget) {
    if (
$this->oMapper->AddTarget($oTarget)) {
        return 
$oTarget;
    }
    return 
false;
}

Добавляет связь объекта с гео-объектом в БД

AddTargetType() method
public bool AddTargetType(string $sTargetType, array $aParams=array ( ))
$sTargetType string Тип владельца
$aParams array Параметры
{return} bool
Source Code: /classes/modules/geo/Geo.class.php#82 (show)
public function AddTargetType($sTargetType,$aParams=array()) {
    if (!
array_key_exists($sTargetType,$this->aTargetTypes)) {
        
$this->aTargetTypes[$sTargetType]=$aParams;
        return 
true;
    }
    return 
false;
}

Добавляет в разрешенные новый тип

CheckTarget() method
public bool CheckTarget(string $sTargetType, int $iTargetId)
$sTargetType string Тип владельца
$iTargetId int ID владельца
{return} bool
Source Code: /classes/modules/geo/Geo.class.php#114 (show)
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;
}

Проверка объекта

CheckTargetUser() method
public bool CheckTargetUser(int $iTargetId)
$iTargetId int ID пользователя
{return} bool
Source Code: /classes/modules/geo/Geo.class.php#416 (show)
public function CheckTargetUser($iTargetId) {
    if (
$oUser=$this->User_GetUserById($iTargetId)) {
        return 
true;
    }
    return 
false;
}

Проверка объекта с типом "user" Название метода формируется автоматически

CreateTarget() method
public bool|ModuleGeo_EntityTarget CreateTarget(ModuleGeo_EntityGeo $oGeoObject, string $sTargetType, int $iTargetId)
$oGeoObject ModuleGeo_EntityGeo
$sTargetType string Тип владельца
$iTargetId int ID владельца
{return} bool|ModuleGeo_EntityTarget
Source Code: /classes/modules/geo/Geo.class.php#158 (show)
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);
}

Создание связи

DeleteTargets() method
public bool|int DeleteTargets(array $aFilter)
$aFilter array Фильтр
{return} bool|int
Source Code: /classes/modules/geo/Geo.class.php#260 (show)
public function DeleteTargets($aFilter) {
    return 
$this->oMapper->DeleteTargets($aFilter);
}

Удаляет связи по фильтру

DeleteTargetsByTarget() method
public bool|int DeleteTargetsByTarget(string $sTargetType, int $iTargetId)
$sTargetType string Тип владельца
$iTargetId int ID владельца
{return} bool|int
Source Code: /classes/modules/geo/Geo.class.php#270 (show)
public function DeleteTargetsByTarget($sTargetType,$iTargetId) {
    return 
$this->DeleteTargets(array('target_type'=>$sTargetType,'target_id'=>$iTargetId));
}

Удаление всех связей объекта

GetCities() method
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)
Source Code: /classes/modules/geo/Geo.class.php#306 (show)
public function GetCities($aFilter,$aOrder,$iCurrPage,$iPerPage) {
    return array(
'collection'=>$this->oMapper->GetCities($aFilter,$aOrder,$iCount,$iCurrPage,$iPerPage),'count'=>$iCount);
}

Возвращает список городов по фильтру

GetCityById() method
public ModuleGeo_EntityCity|null GetCityById(int $iId)
$iId int ID города
{return} ModuleGeo_EntityCity|null
Source Code: /classes/modules/geo/Geo.class.php#341 (show)
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

GetCountries() method
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)
Source Code: /classes/modules/geo/Geo.class.php#282 (show)
public function GetCountries($aFilter,$aOrder,$iCurrPage,$iPerPage) {
    return array(
'collection'=>$this->oMapper->GetCountries($aFilter,$aOrder,$iCount,$iCurrPage,$iPerPage),'count'=>$iCount);
}

Возвращает список стран по фильтру

GetCountryById() method
public ModuleGeo_EntityCountry|null GetCountryById(int $iId)
$iId int ID страны
{return} ModuleGeo_EntityCountry|null
Source Code: /classes/modules/geo/Geo.class.php#315 (show)
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

GetGeoObject() method
public ModuleGeo_EntityGeo|null GetGeoObject(string $sType, int $iId)
$sType string Тип гео-объекта
$iId int ID гео-объекта
{return} ModuleGeo_EntityGeo|null
Source Code: /classes/modules/geo/Geo.class.php#355 (show)
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;
    }
}

Возвращает гео-объект

GetGeoObjectByTarget() method
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
Source Code: /classes/modules/geo/Geo.class.php#381 (show)
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;
}

Возвращает первый гео-объект для объекта

GetGroupCitiesByTargetType() method
public array GetGroupCitiesByTargetType(string $sTargetType, int $iLimit)
$sTargetType string Тип владельца
$iLimit int Количество элементов
{return} array
Source Code: /classes/modules/geo/Geo.class.php#406 (show)
public function GetGroupCitiesByTargetType($sTargetType,$iLimit) {
    return 
$this->oMapper->GetGroupCitiesByTargetType($sTargetType,$iLimit);
}

Возвращает список городов сгруппированных по количеству использований в данном типе объектов

GetGroupCountriesByTargetType() method
public array GetGroupCountriesByTargetType(string $sTargetType, int $iLimit)
$sTargetType string Тип владельца
$iLimit int Количество элементов
{return} array
Source Code: /classes/modules/geo/Geo.class.php#396 (show)
public function GetGroupCountriesByTargetType($sTargetType,$iLimit) {
    return 
$this->oMapper->GetGroupCountriesByTargetType($sTargetType,$iLimit);
}

Возвращает список стран сгруппированных по количеству использований в данном типе объектов

GetRegionById() method
public ModuleGeo_EntityRegion|null GetRegionById(int $iId)
$iId int ID региона
{return} ModuleGeo_EntityRegion|null
Source Code: /classes/modules/geo/Geo.class.php#328 (show)
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

GetRegions() method
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)
Source Code: /classes/modules/geo/Geo.class.php#294 (show)
public function GetRegions($aFilter,$aOrder,$iCurrPage,$iPerPage) {
    return array(
'collection'=>$this->oMapper->GetRegions($aFilter,$aOrder,$iCount,$iCurrPage,$iPerPage),'count'=>$iCount);
}

Возвращает список регионов по фильтру

GetTargetByTarget() method
public null|ModuleGeo_EntityTarget GetTargetByTarget(string $sTargetType, int $iTargetId)
$sTargetType string Тип владельца
$iTargetId int ID владельца
{return} null|ModuleGeo_EntityTarget
Source Code: /classes/modules/geo/Geo.class.php#224 (show)
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;
}

Возвращает первый объект связи по объекту

GetTargetTypes() method
public array GetTargetTypes()
{return} array
Source Code: /classes/modules/geo/Geo.class.php#73 (show)
public function GetTargetTypes() {
    return 
$this->aTargetTypes;
}

Возвращает список типов объектов

GetTargets() method
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)
Source Code: /classes/modules/geo/Geo.class.php#214 (show)
public function GetTargets($aFilter,$iCurrPage,$iPerPage) {
    return array(
'collection'=>$this->oMapper->GetTargets($aFilter,$iCount,$iCurrPage,$iPerPage),'count'=>$iCount);
}

Возвращает список связей по фильтру

GetTargetsByTargetArray() method
public array GetTargetsByTargetArray(string $sTargetType, array $aTargetId)
$sTargetType string Тип владельца
$aTargetId array Список ID владельцев
{return} array В качестве ключей используется ID объекта, в качестве значений массив связей этого объекта
Source Code: /classes/modules/geo/Geo.class.php#238 (show)
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;
}

Возвращает список связей для списка объектов одного типа.

Init() method
public void Init()
Source Code: /classes/modules/geo/Geo.class.php#64 (show)
public function Init() {
    
$this->oMapper=Engine::GetMapper(__CLASS__);
    
$this->oUserCurrent=$this->User_GetUserCurrent();
}

Инициализация

IsAllowGeoType() method
public bool IsAllowGeoType(string $sGeoType)
$sGeoType string Тип владельца
{return} bool
Source Code: /classes/modules/geo/Geo.class.php#104 (show)
public function IsAllowGeoType($sGeoType) {
    return 
in_array($sGeoType,$this->aGeoTypes);
}

Проверяет разрешен ли данный гео-тип

IsAllowTargetMulti() method
public bool IsAllowTargetMulti(string $sTargetType)
$sTargetType string Тип владельца
{return} bool
Source Code: /classes/modules/geo/Geo.class.php#130 (show)
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;
}

Проверка на возможность нескольких связей

IsAllowTargetType() method
public bool IsAllowTargetType(string $sTargetType)
$sTargetType string Тип владельца
{return} bool
Source Code: /classes/modules/geo/Geo.class.php#95 (show)
public function IsAllowTargetType($sTargetType) {
    return 
in_array($sTargetType,array_keys($this->aTargetTypes));
}

Проверяет разрешен ли данный тип