ModuleGeo
Package | application.modules.geo |
---|---|
Inheritance | class ModuleGeo » Module » LsObject |
Since | 1.0 |
Source Code | /application/classes/modules/geo/Geo.class.php |
Protected Properties
Property | Type | Description | Defined By |
---|---|---|---|
_aBehaviors | Список поведений в виде готовых объектов, формируется автоматически | LsObject | |
aBehaviors | array | Список поведений | LsObject |
aGeoTypes | array | Список доступных типов гео-объектов | ModuleGeo |
aTargetTypes | array | Список доступных типов объектов | ModuleGeo |
bIsInit | bool | Указывает на то, была ли проведенна инициализация модуля | Module |
oMapper | ModuleGeo_MapperGeo | Объект маппера | ModuleGeo |
oUserCurrent | ModuleUser_EntityUser|null | Объект текущего пользователя | ModuleGeo |
Public Methods
Method | Description | Defined By |
---|---|---|
AddBehaviorHook() | Добавляет хук поведения | LsObject |
AddTarget() | Добавляет связь объекта с гео-объектом в БД | ModuleGeo |
AddTargetType() | Добавляет в разрешенные новый тип | ModuleGeo |
AttachBehavior() | Присоединяет поведение к объекту | LsObject |
CheckTarget() | Проверка объекта | ModuleGeo |
CheckTargetUser() | Проверка объекта с типом "user" | ModuleGeo |
CreateTarget() | Создание связи | ModuleGeo |
DeleteTargets() | Удаляет связи по фильтру | ModuleGeo |
DeleteTargetsByTarget() | Удаление всех связей объекта | ModuleGeo |
DetachBehavior() | Отсоединяет поведение от объекта | LsObject |
GetBehavior() | Возвращает объект поведения по его имени | LsObject |
GetBehaviors() | Возвращает все объекты поведения | LsObject |
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 |
RemoveBehaviorHook() | Удаляет хук поведения | LsObject |
RunBehaviorHook() | Запускает хук поведения на выполнение | LsObject |
SetInit() | Помечает модуль как инициализированный | Module |
Shutdown() | Метод срабатывает при завершении работы ядра | Module |
__call() | Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля | LsObject |
__clone() | Блокируем копирование/клонирование объекта | Module |
__construct() | Конструктор, запускается автоматически при создании объекта | LsObject |
__get() | Обработка доступа к объекты поведения | LsObject |
isInit() | Возвращает значение флага инициализации модуля | Module |
Protected Methods
Method | Description | Defined By |
---|---|---|
PrepareBehaviors() | Инициализация поведений | LsObject |
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));
}
Проверяет разрешен ли данный тип