ModuleGeo_MapperGeo
Package | application.modules.geo |
---|---|
Inheritance | class ModuleGeo_MapperGeo » Mapper » LsObject |
Since | 1.0 |
Source Code | /application/classes/modules/geo/mapper/Geo.mapper.class.php |
Объект маппера для работы с БД
Protected Properties
Property | Type | Description | Defined By |
---|---|---|---|
_aBehaviors | Список поведений в виде готовых объектов, формируется автоматически | LsObject | |
aBehaviors | array | Список поведений | LsObject |
oDb | DbSimple_Database | Объект подключения к базе данных | Mapper |
Public Methods
Method | Description | Defined By |
---|---|---|
AddBehaviorHook() | Добавляет хук поведения | LsObject |
AddTarget() | Добавляет связь объекта с гео-объектом в БД | ModuleGeo_MapperGeo |
AttachBehavior() | Присоединяет поведение к объекту | LsObject |
DeleteTargets() | Удаляет связи по фильтру | ModuleGeo_MapperGeo |
DetachBehavior() | Отсоединяет поведение от объекта | LsObject |
GetBehavior() | Возвращает объект поведения по его имени | LsObject |
GetBehaviors() | Возвращает все объекты поведения | LsObject |
GetCities() | Возвращает список стран по фильтру | ModuleGeo_MapperGeo |
GetCountries() | Возвращает список стран по фильтру | ModuleGeo_MapperGeo |
GetGroupCitiesByTargetType() | Возвращает список городов сгруппированных по количеству использований в данном типе объектов | ModuleGeo_MapperGeo |
GetGroupCountriesByTargetType() | Возвращает список стран сгруппированных по количеству использований в данном типе объектов | ModuleGeo_MapperGeo |
GetRegions() | Возвращает список стран по фильтру | ModuleGeo_MapperGeo |
GetTargets() | Возвращает список связей по фильтру | ModuleGeo_MapperGeo |
RemoveBehaviorHook() | Удаляет хук поведения | LsObject |
RunBehaviorHook() | Запускает хук поведения на выполнение | LsObject |
__call() | Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля | LsObject |
__clone() | При клонировании сбрасываем поведения | LsObject |
__construct() | Передаем коннект к БД | Mapper |
__get() | Обработка доступа к объекты поведения | LsObject |
Protected Methods
Method | Description | Defined By |
---|---|---|
IsSuccessful() | Mapper | |
PrepareBehaviors() | Инициализация поведений | LsObject |
Method Details
AddTarget()
method
public ModuleGeo_EntityTarget|bool AddTarget(ModuleGeo_EntityTarget $oTarget)
| ||
$oTarget | ModuleGeo_EntityTarget | Объект связи с владельцем |
{return} | ModuleGeo_EntityTarget|bool |
Source Code: /application/classes/modules/geo/mapper/Geo.mapper.class.php#36 (show)
public function AddTarget($oTarget)
{
$sql = "INSERT INTO " . Config::Get('db.table.geo_target') . " SET ?a ";
if ($this->oDb->query($sql, $oTarget->_getData())) {
return true;
}
return false;
}
Добавляет связь объекта с гео-объектом в БД
DeleteTargets()
method
public bool|int DeleteTargets(array $aFilter)
| ||
$aFilter | array | Фильтр |
{return} | bool|int |
Source Code: /application/classes/modules/geo/mapper/Geo.mapper.class.php#170 (show)
public function DeleteTargets($aFilter)
{
if (!$aFilter) {
return false;
}
$sql = "DELETE
FROM
" . Config::Get('db.table.geo_target') . "
WHERE
1 = 1
{ AND geo_type = ? }
{ AND geo_id = ?d }
{ AND target_type = ? }
{ AND target_id = ?d }
{ AND country_id = ?d }
{ AND region_id = ?d }
{ AND city_id = ?d }
";
$res = $this->oDb->query($sql,
isset($aFilter['geo_type']) ? $aFilter['geo_type'] : DBSIMPLE_SKIP,
isset($aFilter['geo_id']) ? $aFilter['geo_id'] : DBSIMPLE_SKIP,
isset($aFilter['target_type']) ? $aFilter['target_type'] : DBSIMPLE_SKIP,
isset($aFilter['target_id']) ? $aFilter['target_id'] : DBSIMPLE_SKIP,
isset($aFilter['country_id']) ? $aFilter['country_id'] : DBSIMPLE_SKIP,
isset($aFilter['region_id']) ? $aFilter['region_id'] : DBSIMPLE_SKIP,
isset($aFilter['city_id']) ? $aFilter['city_id'] : DBSIMPLE_SKIP
);
return $this->IsSuccessful($res);
}
Удаляет связи по фильтру
GetCities()
method
public array GetCities(array $aFilter, array $aOrder, int &$iCount, int $iCurrPage, int $iPerPage)
| ||
$aFilter | array | Фильтр |
$aOrder | array | Сортировка |
$iCount | int | Возвращает количество элементов |
$iCurrPage | int | Номер страницы |
$iPerPage | int | Количество элементов на страницу |
{return} | array |
Source Code: /application/classes/modules/geo/mapper/Geo.mapper.class.php#334 (show)
public function GetCities($aFilter, $aOrder, &$iCount, $iCurrPage, $iPerPage)
{
$aOrderAllow = array('id', 'name_ru', 'name_en', 'sort', 'country_id', 'region_id');
$sOrder = '';
foreach ($aOrder as $key => $value) {
if (!in_array($key, $aOrderAllow)) {
unset($aOrder[$key]);
} elseif (in_array($value, array('asc', 'desc'))) {
$sOrder .= " {$key} {$value},";
}
}
$sOrder = trim($sOrder, ',');
if ($sOrder == '') {
$sOrder = ' id desc ';
}
if (isset($aFilter['country_id']) and !is_array($aFilter['country_id'])) {
$aFilter['country_id'] = array($aFilter['country_id']);
}
if (isset($aFilter['region_id']) and !is_array($aFilter['region_id'])) {
$aFilter['region_id'] = array($aFilter['region_id']);
}
$sql = "SELECT
*
FROM
" . Config::Get('db.table.geo_city') . "
WHERE
1 = 1
{ AND id = ?d }
{ AND name_ru = ? }
{ AND name_ru LIKE ? }
{ AND name_en = ? }
{ AND name_en LIKE ? }
{ AND country_id IN ( ?a ) }
{ AND region_id IN ( ?a ) }
ORDER by {$sOrder}
LIMIT ?d, ?d ;
";
$aResult = array();
if ($aRows = $this->oDb->selectPage($iCount, $sql,
isset($aFilter['id']) ? $aFilter['id'] : DBSIMPLE_SKIP,
isset($aFilter['name_ru']) ? $aFilter['name_ru'] : DBSIMPLE_SKIP,
isset($aFilter['name_ru_like']) ? $aFilter['name_ru_like'] : DBSIMPLE_SKIP,
isset($aFilter['name_en']) ? $aFilter['name_en'] : DBSIMPLE_SKIP,
isset($aFilter['name_en_like']) ? $aFilter['name_en_like'] : DBSIMPLE_SKIP,
(isset($aFilter['country_id']) && count($aFilter['country_id'])) ? $aFilter['country_id'] : DBSIMPLE_SKIP,
(isset($aFilter['region_id']) && count($aFilter['region_id'])) ? $aFilter['region_id'] : DBSIMPLE_SKIP,
($iCurrPage - 1) * $iPerPage, $iPerPage
)
) {
foreach ($aRows as $aRow) {
$aResult[] = Engine::GetEntity('ModuleGeo_EntityCity', $aRow);
}
}
return $aResult;
}
Возвращает список стран по фильтру
GetCountries()
method
public array GetCountries(array $aFilter, array $aOrder, int &$iCount, int $iCurrPage, int $iPerPage)
| ||
$aFilter | array | Фильтр |
$aOrder | array | Сортировка |
$iCount | int | Возвращает количество элементов |
$iCurrPage | int | Номер страницы |
$iPerPage | int | Количество элементов на страницу |
{return} | array |
Source Code: /application/classes/modules/geo/mapper/Geo.mapper.class.php#210 (show)
public function GetCountries($aFilter, $aOrder, &$iCount, $iCurrPage, $iPerPage)
{
$aOrderAllow = array('id', 'name_ru', 'name_en', 'sort');
$sOrder = '';
foreach ($aOrder as $key => $value) {
if (!in_array($key, $aOrderAllow)) {
unset($aOrder[$key]);
} elseif (in_array($value, array('asc', 'desc'))) {
$sOrder .= " {$key} {$value},";
}
}
$sOrder = trim($sOrder, ',');
if ($sOrder == '') {
$sOrder = ' id desc ';
}
$sql = "SELECT
*
FROM
" . Config::Get('db.table.geo_country') . "
WHERE
1 = 1
{ AND id = ?d }
{ AND name_ru = ? }
{ AND name_ru LIKE ? }
{ AND name_en = ? }
{ AND name_en LIKE ? }
{ AND code = ? }
ORDER by {$sOrder}
LIMIT ?d, ?d ;
";
$aResult = array();
if ($aRows = $this->oDb->selectPage($iCount, $sql,
isset($aFilter['id']) ? $aFilter['id'] : DBSIMPLE_SKIP,
isset($aFilter['name_ru']) ? $aFilter['name_ru'] : DBSIMPLE_SKIP,
isset($aFilter['name_ru_like']) ? $aFilter['name_ru_like'] : DBSIMPLE_SKIP,
isset($aFilter['name_en']) ? $aFilter['name_en'] : DBSIMPLE_SKIP,
isset($aFilter['name_en_like']) ? $aFilter['name_en_like'] : DBSIMPLE_SKIP,
isset($aFilter['code']) ? $aFilter['code'] : DBSIMPLE_SKIP,
($iCurrPage - 1) * $iPerPage, $iPerPage
)
) {
foreach ($aRows as $aRow) {
$aResult[] = Engine::GetEntity('ModuleGeo_EntityCountry', $aRow);
}
}
return $aResult;
}
Возвращает список стран по фильтру
GetGroupCitiesByTargetType()
method
public array GetGroupCitiesByTargetType(string $sTargetType, int $iLimit)
| ||
$sTargetType | string | Тип владельца |
$iLimit | int | Количество элементов |
{return} | array |
Source Code: /application/classes/modules/geo/mapper/Geo.mapper.class.php#137 (show)
public function GetGroupCitiesByTargetType($sTargetType, $iLimit)
{
$sql = "
SELECT
t.count,
g.*
FROM (
SELECT
count(*) as count,
city_id
FROM
" . Config::Get('db.table.geo_target') . "
WHERE target_type = ? and city_id IS NOT NULL
GROUP BY city_id ORDER BY count DESC LIMIT 0, ?d
) as t
JOIN " . Config::Get('db.table.geo_city') . " as g on t.city_id=g.id
ORDER BY g.name_ru
";
$aResult = array();
if ($aRows = $this->oDb->select($sql, $sTargetType, $iLimit)) {
foreach ($aRows as $aRow) {
$aResult[] = Engine::GetEntity('ModuleGeo_EntityCity', $aRow);
}
}
return $aResult;
}
Возвращает список городов сгруппированных по количеству использований в данном типе объектов
GetGroupCountriesByTargetType()
method
public array GetGroupCountriesByTargetType(string $sTargetType, int $iLimit)
| ||
$sTargetType | string | Тип владельца |
$iLimit | int | Количество элементов |
{return} | array |
Source Code: /application/classes/modules/geo/mapper/Geo.mapper.class.php#103 (show)
public function GetGroupCountriesByTargetType($sTargetType, $iLimit)
{
$sql = "
SELECT
t.count,
g.*
FROM (
SELECT
count(*) as count,
country_id
FROM
" . Config::Get('db.table.geo_target') . "
WHERE target_type = ? and country_id IS NOT NULL
GROUP BY country_id ORDER BY count DESC LIMIT 0, ?d
) as t
JOIN " . Config::Get('db.table.geo_country') . " as g on t.country_id=g.id
ORDER BY g.name_ru
";
$aResult = array();
if ($aRows = $this->oDb->select($sql, $sTargetType, $iLimit)) {
foreach ($aRows as $aRow) {
$aResult[] = Engine::GetEntity('ModuleGeo_EntityCountry', $aRow);
}
}
return $aResult;
}
Возвращает список стран сгруппированных по количеству использований в данном типе объектов
GetRegions()
method
public array GetRegions(array $aFilter, array $aOrder, int &$iCount, int $iCurrPage, int $iPerPage)
| ||
$aFilter | array | Фильтр |
$aOrder | array | Сортировка |
$iCount | int | Возвращает количество элементов |
$iCurrPage | int | Номер страницы |
$iPerPage | int | Количество элементов на страницу |
{return} | array |
Source Code: /application/classes/modules/geo/mapper/Geo.mapper.class.php#270 (show)
public function GetRegions($aFilter, $aOrder, &$iCount, $iCurrPage, $iPerPage)
{
$aOrderAllow = array('id', 'name_ru', 'name_en', 'sort', 'country_id');
$sOrder = '';
foreach ($aOrder as $key => $value) {
if (!in_array($key, $aOrderAllow)) {
unset($aOrder[$key]);
} elseif (in_array($value, array('asc', 'desc'))) {
$sOrder .= " {$key} {$value},";
}
}
$sOrder = trim($sOrder, ',');
if ($sOrder == '') {
$sOrder = ' id desc ';
}
if (isset($aFilter['country_id']) and !is_array($aFilter['country_id'])) {
$aFilter['country_id'] = array($aFilter['country_id']);
}
$sql = "SELECT
*
FROM
" . Config::Get('db.table.geo_region') . "
WHERE
1 = 1
{ AND id = ?d }
{ AND name_ru = ? }
{ AND name_ru LIKE ? }
{ AND name_en = ? }
{ AND name_en LIKE ? }
{ AND country_id IN ( ?a ) }
ORDER by {$sOrder}
LIMIT ?d, ?d ;
";
$aResult = array();
if ($aRows = $this->oDb->selectPage($iCount, $sql,
isset($aFilter['id']) ? $aFilter['id'] : DBSIMPLE_SKIP,
isset($aFilter['name_ru']) ? $aFilter['name_ru'] : DBSIMPLE_SKIP,
isset($aFilter['name_ru_like']) ? $aFilter['name_ru_like'] : DBSIMPLE_SKIP,
isset($aFilter['name_en']) ? $aFilter['name_en'] : DBSIMPLE_SKIP,
isset($aFilter['name_en_like']) ? $aFilter['name_en_like'] : DBSIMPLE_SKIP,
(isset($aFilter['country_id']) && count($aFilter['country_id'])) ? $aFilter['country_id'] : DBSIMPLE_SKIP,
($iCurrPage - 1) * $iPerPage, $iPerPage
)
) {
foreach ($aRows as $aRow) {
$aResult[] = Engine::GetEntity('ModuleGeo_EntityRegion', $aRow);
}
}
return $aResult;
}
Возвращает список стран по фильтру
GetTargets()
method
public array GetTargets(array $aFilter, int &$iCount, int $iCurrPage, int $iPerPage)
| ||
$aFilter | array | Фильтр |
$iCount | int | Возвращает количество элементов |
$iCurrPage | int | Номер страницы |
$iPerPage | int | Количество элементов на страницу |
{return} | array |
Source Code: /application/classes/modules/geo/mapper/Geo.mapper.class.php#54 (show)
public function GetTargets($aFilter, &$iCount, $iCurrPage, $iPerPage)
{
if (isset($aFilter['target_id']) and !is_array($aFilter['target_id'])) {
$aFilter['target_id'] = array($aFilter['target_id']);
}
$sql = "SELECT
*
FROM
" . Config::Get('db.table.geo_target') . "
WHERE
1 = 1
{ AND geo_type = ? }
{ AND geo_id = ?d }
{ AND target_type = ? }
{ AND target_id IN ( ?a ) }
{ AND country_id = ?d }
{ AND region_id = ?d }
{ AND city_id = ?d }
ORDER BY target_id DESC
LIMIT ?d, ?d ;
";
$aResult = array();
if ($aRows = $this->oDb->selectPage($iCount, $sql,
isset($aFilter['geo_type']) ? $aFilter['geo_type'] : DBSIMPLE_SKIP,
isset($aFilter['geo_id']) ? $aFilter['geo_id'] : DBSIMPLE_SKIP,
isset($aFilter['target_type']) ? $aFilter['target_type'] : DBSIMPLE_SKIP,
(isset($aFilter['target_id']) and count($aFilter['target_id'])) ? $aFilter['target_id'] : DBSIMPLE_SKIP,
isset($aFilter['country_id']) ? $aFilter['country_id'] : DBSIMPLE_SKIP,
isset($aFilter['region_id']) ? $aFilter['region_id'] : DBSIMPLE_SKIP,
isset($aFilter['city_id']) ? $aFilter['city_id'] : DBSIMPLE_SKIP,
($iCurrPage - 1) * $iPerPage, $iPerPage
)
) {
foreach ($aRows as $aRow) {
$aResult[] = Engine::GetEntity('ModuleGeo_EntityTarget', $aRow);
}
}
return $aResult;
}
Возвращает список связей по фильтру