1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-05-19 17:28:23 +03:00

Документация классов

This commit is contained in:
Mzhelskiy Maxim 2012-06-25 21:53:05 +04:00
parent 05aeccda82
commit d453781800
9 changed files with 1496 additions and 604 deletions

View file

@ -18,11 +18,27 @@
/**
* Модуль для работы с топиками
*
* @package modules.topic
* @since 1.0
*/
class ModuleTopic extends Module {
/**
* Объект маппера
*
* @var ModuleTopic_MapperTopic
*/
protected $oMapperTopic;
/**
* Объект текущего пользователя
*
* @var ModuleUser_EntityUser|null
*/
protected $oUserCurrent=null;
/**
* Список типов топика
*
* @var array
*/
protected $aTopicTypes=array(
'topic','link','question','photoset'
);
@ -37,12 +53,17 @@ class ModuleTopic extends Module {
}
/**
* Возвращает список типов топика
*
* @return array
*/
public function GetTopicTypes() {
return $this->aTopicTypes;
}
/**
* Добавляет в новый тип топика
*
* @param string $sType Новый тип
* @return bool
*/
public function AddTopicType($sType) {
if (!in_array($sType,$this->aTopicTypes)) {
@ -54,7 +75,7 @@ class ModuleTopic extends Module {
/**
* Проверяет разрешен ли данный тип топика
*
* @param $sType
* @param string $sType Тип
* @return bool
*/
public function IsAllowTopicType($sType) {
@ -63,6 +84,9 @@ class ModuleTopic extends Module {
/**
* Получает дополнительные данные(объекты) для топиков по их ID
*
* @param array $aTopicId Список ID топиков
* @param array|null $aAllowData Список типов дополнительных данных, которые нужно подключать к топикам
* @return array
*/
public function GetTopicsAdditionalData($aTopicId,$aAllowData=null) {
if (is_null($aAllowData)) {
@ -164,8 +188,8 @@ class ModuleTopic extends Module {
/**
* Добавляет топик
*
* @param ModuleTopic_EntityTopic $oTopic
* @return unknown
* @param ModuleTopic_EntityTopic $oTopic Объект топика
* @return ModuleTopic_EntityTopic|bool
*/
public function AddTopic(ModuleTopic_EntityTopic $oTopic) {
if ($sId=$this->oMapperTopic->AddTopic($oTopic)) {
@ -187,12 +211,11 @@ class ModuleTopic extends Module {
}
return false;
}
/**
* Добавление тега к топику
*
* @param ModuleTopic_EntityTopicTag $oTopicTag
* @return mixed
* @param ModuleTopic_EntityTopicTag $oTopicTag Объект тега топика
* @return int
*/
public function AddTopicTag(ModuleTopic_EntityTopicTag $oTopicTag) {
return $this->oMapperTopic->AddTopicTag($oTopicTag);
@ -200,8 +223,8 @@ class ModuleTopic extends Module {
/**
* Удаляет теги у топика
*
* @param unknown_type $sTopicId
* @return unknown
* @param int $sTopicId ID топика
* @return bool
*/
public function DeleteTopicTagsByTopicId($sTopicId) {
return $this->oMapperTopic->DeleteTopicTagsByTopicId($sTopicId);
@ -210,8 +233,8 @@ class ModuleTopic extends Module {
* Удаляет топик.
* Если тип таблиц в БД InnoDB, то удалятся всё связи по топику(комменты,голосования,избранное)
*
* @param unknown_type $oTopicId|$sTopicId
* @return unknown
* @param ModuleTopic_EntityTopic|int $oTopicId Объект топика или ID
* @return bool
*/
public function DeleteTopic($oTopicId) {
if ($oTopicId instanceof ModuleTopic_EntityTopic) {
@ -237,7 +260,7 @@ class ModuleTopic extends Module {
/**
* Удаляет свзяанные с топика данные
*
* @param int $iTopicId
* @param int $iTopicId ID топика
* @return bool
*/
public function DeleteTopicAdditionalData($iTopicId) {
@ -279,14 +302,13 @@ class ModuleTopic extends Module {
$this->deleteTopicPhoto($oPhoto);
}
}
return true;
}
/**
* Обновляет топик
*
* @param ModuleTopic_EntityTopic $oTopic
* @return unknown
* @param ModuleTopic_EntityTopic $oTopic Объект топика
* @return bool
*/
public function UpdateTopic(ModuleTopic_EntityTopic $oTopic) {
/**
@ -338,22 +360,20 @@ class ModuleTopic extends Module {
}
return false;
}
/**
* Удаление контента топика по его номеру
*
* @param unknown_type $iTopicId
* @return unknown
* @param int $iTopicId ID топика
* @return bool
*/
public function DeleteTopicContentByTopicId($iTopicId) {
return $this->oMapperTopic->DeleteTopicContentByTopicId($iTopicId);
}
/**
* Получить топик по айдишнику
*
* @param unknown_type $sId
* @return unknown
* @param int $sId ID топика
* @return ModuleTopic_EntityTopic|null
*/
public function GetTopicById($sId) {
$aTopics=$this->GetTopicsAdditionalData($sId);
@ -365,7 +385,8 @@ class ModuleTopic extends Module {
/**
* Получить список топиков по списку айдишников
*
* @param unknown_type $aTopicId
* @param array $aTopicId Список ID топиков
* @return array
*/
public function GetTopicsByArrayId($aTopicId) {
if (!$aTopicId) {
@ -430,8 +451,8 @@ class ModuleTopic extends Module {
/**
* Получить список топиков по списку айдишников, но используя единый кеш
*
* @param unknown_type $aTopicId
* @return unknown
* @param array $aTopicId Список ID топиков
* @return array
*/
public function GetTopicsByArrayIdSolid($aTopicId) {
if (!is_array($aTopicId)) {
@ -453,11 +474,10 @@ class ModuleTopic extends Module {
/**
* Получает список топиков из избранного
*
* @param string $sUserId
* @param int $iCount
* @param int $iCurrPage
* @param int $iPerPage
* @return array
* @param int $sUserId ID пользователя
* @param int $iCurrPage Номер текущей страницы
* @param int $iPerPage Количество элементов на страницу
* @return array('collection'=>array,'count'=>int)
*/
public function GetTopicsFavouriteByUserId($sUserId,$iCurrPage,$iPerPage) {
$aCloseTopics =array();
@ -476,7 +496,7 @@ class ModuleTopic extends Module {
/**
* Возвращает число топиков в избранном
*
* @param string $sUserId
* @param int $sUserId ID пользователя
* @return int
*/
public function GetCountTopicsFavouriteByUserId($sUserId) {
@ -488,10 +508,11 @@ class ModuleTopic extends Module {
/**
* Список топиков по фильтру
*
* @param array $aFilter
* @param int $iPage
* @param int $iPerPage
* @return array
* @param array $aFilter Фильтр
* @param int $iPage Номер страницы
* @param int $iPerPage Количество элементов на страницу
* @param array|null $aAllowData Список типов данных для подгрузки в топики
* @return array('collection'=>array,'count'=>int)
*/
public function GetTopicsByFilter($aFilter,$iPage=0,$iPerPage=0,$aAllowData=null) {
$s=serialize($aFilter);
@ -513,7 +534,7 @@ class ModuleTopic extends Module {
/**
* Количество топиков по фильтру
*
* @param array $aFilter
* @param array $aFilter Фильтр
* @return int
*/
public function GetCountTopicsByFilter($aFilter) {
@ -527,7 +548,7 @@ class ModuleTopic extends Module {
/**
* Количество черновиков у пользователя
*
* @param $iUserId
* @param int $iUserId ID пользователя
* @return int
*/
public function GetCountDraftTopicsByUserId($iUserId) {
@ -539,8 +560,8 @@ class ModuleTopic extends Module {
/**
* Получает список хороших топиков для вывода на главную страницу(из всех блогов, как коллективных так и персональных)
*
* @param int $iPage
* @param int $iPerPage
* @param int $iPage Номер страницы
* @param int $iPerPage Количество элементов на страницу
* @param bool $bAddAccessible Указывает на необходимость добавить в выдачу топики,
* из блогов доступных пользователю. При указании false,
* в выдачу будут переданы только топики из общедоступных блогов.
@ -573,8 +594,8 @@ class ModuleTopic extends Module {
/**
* Получает список новых топиков, ограничение новизны по дате из конфига
*
* @param int $iPage
* @param int $iPerPage
* @param int $iPage Номер страницы
* @param int $iPerPage Количество элементов на страницу
* @param bool $bAddAccessible Указывает на необходимость добавить в выдачу топики,
* из блогов доступных пользователю. При указании false,
* в выдачу будут переданы только топики из общедоступных блогов.
@ -603,8 +624,8 @@ class ModuleTopic extends Module {
/**
* Получает список ВСЕХ новых топиков
*
* @param int $iPage
* @param int $iPerPage
* @param int $iPage Номер страницы
* @param int $iPerPage Количество элементов на страницу
* @param bool $bAddAccessible Указывает на необходимость добавить в выдачу топики,
* из блогов доступных пользователю. При указании false,
* в выдачу будут переданы только топики из общедоступных блогов.
@ -631,9 +652,9 @@ class ModuleTopic extends Module {
/**
* Получает список ВСЕХ обсуждаемых топиков
*
* @param int $iPage
* @param int $iPerPage
* @param int | string $sPeriod
* @param int $iPage Номер страницы
* @param int $iPerPage Количество элементов на страницу
* @param int|string $sPeriod Период в виде секунд или конкретной даты
* @param bool $bAddAccessible Указывает на необходимость добавить в выдачу топики,
* из блогов доступных пользователю. При указании false,
* в выдачу будут переданы только топики из общедоступных блогов.
@ -669,9 +690,9 @@ class ModuleTopic extends Module {
/**
* Получает список ВСЕХ рейтинговых топиков
*
* @param int $iPage
* @param int $iPerPage
* @param int | string $sPeriod
* @param int $iPage Номер страницы
* @param int $iPerPage Количество элементов на страницу
* @param int|string $sPeriod Период в виде секунд или конкретной даты
* @param bool $bAddAccessible Указывает на необходимость добавить в выдачу топики,
* из блогов доступных пользователю. При указании false,
* в выдачу будут переданы только топики из общедоступных блогов.
@ -707,8 +728,8 @@ class ModuleTopic extends Module {
/**
* Получает заданое число последних топиков
*
* @param unknown_type $iCount
* @return unknown
* @param int $iCount Количество
* @return array
*/
public function GetTopicsLast($iCount) {
$aFilter=array(
@ -735,10 +756,11 @@ class ModuleTopic extends Module {
/**
* список топиков из персональных блогов
*
* @param unknown_type $iPage
* @param unknown_type $iPerPage
* @param unknown_type $sShowType
* @return unknown
* @param int $iPage Номер страницы
* @param int $iPerPage Количество элементов на страницу
* @param string $sShowType Тип выборки топиков
* @param string|int $sPeriod Период в виде секунд или конкретной даты
* @return array
*/
public function GetTopicsPersonal($iPage,$iPerPage,$sShowType='good',$sPeriod=null) {
if (is_numeric($sPeriod)) {
@ -787,7 +809,7 @@ class ModuleTopic extends Module {
/**
* Получает число новых топиков в персональных блогах
*
* @return unknown
* @return int
*/
public function GetCountTopicsPersonalNew() {
$sDate=date("Y-m-d H:00:00",time()-Config::Get('module.topic.new_time'));
@ -803,11 +825,11 @@ class ModuleTopic extends Module {
/**
* Получает список топиков по юзеру
*
* @param unknown_type $sUserId
* @param unknown_type $iPublish
* @param unknown_type $iPage
* @param unknown_type $iPerPage
* @return unknown
* @param int $sUserId ID пользователя
* @param int $iPublish Флаг публикации топика
* @param int $iPage Номер страницы
* @param int $iPerPage Количество элементов на страницу
* @return array
*/
public function GetTopicsPersonalByUser($sUserId,$iPublish,$iPage,$iPerPage) {
$aFilter=array(
@ -824,13 +846,12 @@ class ModuleTopic extends Module {
}
return $this->GetTopicsByFilter($aFilter,$iPage,$iPerPage);
}
/**
* Возвращает количество топиков которые создал юзер
*
* @param unknown_type $sUserId
* @param unknown_type $iPublish
* @return unknown
* @param int $sUserId ID пользователя
* @param int $iPublish Флаг публикации топика
* @return array
*/
public function GetCountTopicsPersonalByUser($sUserId,$iPublish) {
$aFilter=array(
@ -852,12 +873,11 @@ class ModuleTopic extends Module {
}
return $data;
}
/**
* Получает список идентификаторов топиков
* из закрытых блогов по юзеру
*
* @param string $sUserId
* @param int $sUserId ID пользователя
* @return array
*/
public function GetTopicsCloseByUser($sUserId=null) {
@ -873,19 +893,17 @@ class ModuleTopic extends Module {
'blog_type' => array('close'),
);
}
$aTopics=$this->GetTopicsByFilter($aFilter);
return array_keys($aTopics['collection']);
}
/**
* Получает список топиков из указанного блога
*
* @param int $iBlogId
* @param int $iPage
* @param int $iPerPage
* @param array $aAllowData
* @param bool $bIdsOnly
* @param int $iBlogId ID блога
* @param int $iPage Номер страницы
* @param int $iPerPage Количество элементов на страницу
* @param array $aAllowData Список типов данных для подгрузки в топики
* @param bool $bIdsOnly Возвращать только ID или список объектов
* @return array
*/
public function GetTopicsByBlogId($iBlogId,$iPage=0,$iPerPage=0,$aAllowData=array(),$bIdsOnly=true) {
@ -899,14 +917,14 @@ class ModuleTopic extends Module {
? array_keys($aTopics['collection'])
: $aTopics;
}
/**
* список топиков из коллективных блогов
* Список топиков из коллективных блогов
*
* @param unknown_type $iPage
* @param unknown_type $iPerPage
* @param unknown_type $sShowType
* @return unknown
* @param int $iPage Номер страницы
* @param int $iPerPage Количество элементов на страницу
* @param string $sShowType Тип выборки топиков
* @param string $sPeriod Период в виде секунд или конкретной даты
* @return array
*/
public function GetTopicsCollective($iPage,$iPerPage,$sShowType='good',$sPeriod=null) {
if (is_numeric($sPeriod)) {
@ -963,7 +981,7 @@ class ModuleTopic extends Module {
/**
* Получает число новых топиков в коллективных блогах
*
* @return unknown
* @return int
*/
public function GetCountTopicsCollectiveNew() {
$sDate=date("Y-m-d H:00:00",time()-Config::Get('module.topic.new_time'));
@ -987,9 +1005,9 @@ class ModuleTopic extends Module {
/**
* Получает топики по рейтингу и дате
*
* @param unknown_type $sDate
* @param unknown_type $iLimit
* @return unknown
* @param string $sDate Дата
* @param int $iLimit Количество
* @return array
*/
public function GetTopicsRatingByDate($sDate,$iLimit=20) {
/**
@ -1011,11 +1029,12 @@ class ModuleTopic extends Module {
/**
* Список топиков из блога
*
* @param unknown_type $oBlog
* @param unknown_type $iPage
* @param unknown_type $iPerPage
* @param unknown_type $sShowType
* @return unknown
* @param ModuleBlog_EntityBlog $oBlog Объект блога
* @param int $iPage Номер страницы
* @param int $iPerPage Количество элементов на страницу
* @param string $sShowType Тип выборки топиков
* @param string $sPeriod Период в виде секунд или конкретной даты
* @return array
*/
public function GetTopicsByBlog($oBlog,$iPage,$iPerPage,$sShowType='good',$sPeriod=null) {
if (is_numeric($sPeriod)) {
@ -1063,8 +1082,8 @@ class ModuleTopic extends Module {
/**
* Получает число новых топиков из блога
*
* @param unknown_type $oBlog
* @return unknown
* @param ModuleBlog_EntityBlog $oBlog Объект блога
* @return int
*/
public function GetCountTopicsByBlogNew($oBlog) {
$sDate=date("Y-m-d H:00:00",time()-Config::Get('module.topic.new_time'));
@ -1079,9 +1098,9 @@ class ModuleTopic extends Module {
/**
* Получает список топиков по тегу
*
* @param string $sTag
* @param int $iPage
* @param int $iPerPage
* @param string $sTag Тег
* @param int $iPage Номер страницы
* @param int $iPerPage Количество элементов на страницу
* @param bool $bAddAccessible Указывает на необходимость добавить в выдачу топики,
* из блогов доступных пользователю. При указании false,
* в выдачу будут переданы только топики из общедоступных блогов.
@ -1103,8 +1122,9 @@ class ModuleTopic extends Module {
/**
* Получает список тегов топиков
*
* @param unknown_type $iLimit
* @return unknown
* @param int $iLimit Количество
* @param array $aExcludeTopic Список ID топиков для исключения
* @return array
*/
public function GetTopicTags($iLimit,$aExcludeTopic=array()) {
$s=serialize($aExcludeTopic);
@ -1117,7 +1137,8 @@ class ModuleTopic extends Module {
/**
* Получает список тегов из топиков открытых блогов (open,personal)
*
* @param int $iLimit
* @param int $iLimit Количество
* @param int|null $iUserId ID пользователя, чью теги получаем
* @return array
*/
public function GetOpenTopicTags($iLimit,$iUserId=null) {
@ -1127,12 +1148,11 @@ class ModuleTopic extends Module {
}
return $data;
}
/**
* Увеличивает у топика число комментов
*
* @param unknown_type $sTopicId
* @return unknown
* @param int $sTopicId ID топика
* @return bool
*/
public function increaseTopicCountComment($sTopicId) {
$this->Cache_Delete("topic_{$sTopicId}");
@ -1142,9 +1162,9 @@ class ModuleTopic extends Module {
/**
* Получает привязку топика к ибранному(добавлен ли топик в избранное у юзера)
*
* @param unknown_type $sTopicId
* @param unknown_type $sUserId
* @return unknown
* @param int $sTopicId ID топика
* @param int $sUserId ID пользователя
* @return ModuleFavourite_EntityFavourite
*/
public function GetFavouriteTopic($sTopicId,$sUserId) {
return $this->Favourite_GetFavourite($sTopicId,'topic',$sUserId);
@ -1152,7 +1172,9 @@ class ModuleTopic extends Module {
/**
* Получить список избранного по списку айдишников
*
* @param unknown_type $aTopicId
* @param array $aTopicId Список ID топиков
* @param int $sUserId ID пользователя
* @return array
*/
public function GetFavouriteTopicsByArray($aTopicId,$sUserId) {
return $this->Favourite_GetFavouritesByArray($aTopicId,'topic',$sUserId);
@ -1160,8 +1182,8 @@ class ModuleTopic extends Module {
/**
* Получить список избранного по списку айдишников, но используя единый кеш
*
* @param array $aTopicId
* @param int $sUserId
* @param array $aTopicId Список ID топиков
* @param int $sUserId ID пользователя
* @return array
*/
public function GetFavouriteTopicsByArraySolid($aTopicId,$sUserId) {
@ -1170,8 +1192,8 @@ class ModuleTopic extends Module {
/**
* Добавляет топик в избранное
*
* @param ModuleFavourite_EntityFavourite $oFavouriteTopic
* @return unknown
* @param ModuleFavourite_EntityFavourite $oFavouriteTopic Объект избранного
* @return bool
*/
public function AddFavouriteTopic(ModuleFavourite_EntityFavourite $oFavouriteTopic) {
return $this->Favourite_AddFavourite($oFavouriteTopic);
@ -1179,8 +1201,8 @@ class ModuleTopic extends Module {
/**
* Удаляет топик из избранного
*
* @param ModuleFavourite_EntityFavourite $oFavouriteTopic
* @return unknown
* @param ModuleFavourite_EntityFavourite $oFavouriteTopic Объект избранного
* @return bool
*/
public function DeleteFavouriteTopic(ModuleFavourite_EntityFavourite $oFavouriteTopic) {
return $this->Favourite_DeleteFavourite($oFavouriteTopic);
@ -1188,8 +1210,8 @@ class ModuleTopic extends Module {
/**
* Устанавливает переданный параметр публикации таргета (топика)
*
* @param string $sTopicId
* @param int $iPublish
* @param int $sTopicId ID топика
* @param int $iPublish Флаг публикации топика
* @return bool
*/
public function SetFavouriteTopicPublish($sTopicId,$iPublish) {
@ -1198,7 +1220,7 @@ class ModuleTopic extends Module {
/**
* Удаляет топики из избранного по списку
*
* @param array $aTopicId
* @param array $aTopicId Список ID топиков
* @return bool
*/
public function DeleteFavouriteTopicByArrayId($aTopicId) {
@ -1207,8 +1229,9 @@ class ModuleTopic extends Module {
/**
* Получает список тегов по первым буквам тега
*
* @param unknown_type $sTag
* @param unknown_type $iLimit
* @param string $sTag Тэг
* @param int $iLimit Количество
* @return bool
*/
public function GetTopicTagsByLike($sTag,$iLimit) {
if (false === ($data = $this->Cache_Get("tag_like_{$sTag}_{$iLimit}"))) {
@ -1220,7 +1243,8 @@ class ModuleTopic extends Module {
/**
* Обновляем/устанавливаем дату прочтения топика, если читаем его первый раз то добавляем
*
* @param ModuleTopic_EntityTopicRead $oTopicRead
* @param ModuleTopic_EntityTopicRead $oTopicRead Объект факта чтения топика
* @return bool
*/
public function SetTopicRead(ModuleTopic_EntityTopicRead $oTopicRead) {
if ($this->GetTopicRead($oTopicRead->getTopicId(),$oTopicRead->getUserId())) {
@ -1237,9 +1261,9 @@ class ModuleTopic extends Module {
/**
* Получаем дату прочтения топика юзером
*
* @param unknown_type $sTopicId
* @param unknown_type $sUserId
* @return unknown
* @param int $sTopicId ID топика
* @param int $sUserId ID пользователя
* @return ModuleTopic_EntityTopicRead|null
*/
public function GetTopicRead($sTopicId,$sUserId) {
$data=$this->GetTopicsReadByArray($sTopicId,$sUserId);
@ -1251,7 +1275,7 @@ class ModuleTopic extends Module {
/**
* Удаляет записи о чтении записей по списку идентификаторов
*
* @param array|int $aTopicId
* @param array|int $aTopicId Список ID топиков
* @return bool
*/
public function DeleteTopicReadByArrayId($aTopicId) {
@ -1261,7 +1285,9 @@ class ModuleTopic extends Module {
/**
* Получить список просмотром/чтения топиков по списку айдишников
*
* @param unknown_type $aTopicId
* @param array $aTopicId Список ID топиков
* @param int $sUserId ID пользователя
* @return array
*/
public function GetTopicsReadByArray($aTopicId,$sUserId) {
if (!$aTopicId) {
@ -1325,9 +1351,9 @@ class ModuleTopic extends Module {
/**
* Получить список просмотром/чтения топиков по списку айдишников, но используя единый кеш
*
* @param unknown_type $aTopicId
* @param unknown_type $sUserId
* @return unknown
* @param array $aTopicId Список ID топиков
* @param int $sUserId ID пользователя
* @return array
*/
public function GetTopicsReadByArraySolid($aTopicId,$sUserId) {
if (!is_array($aTopicId)) {
@ -1349,9 +1375,9 @@ class ModuleTopic extends Module {
/**
* Проверяет голосовал ли юзер за топик-вопрос
*
* @param unknown_type $sTopicId
* @param unknown_type $sUserId
* @return unknown
* @param int $sTopicId ID топика
* @param int $sUserId ID пользователя
* @return ModuleTopic_EntityTopicQuestionVote|null
*/
public function GetTopicQuestionVote($sTopicId,$sUserId) {
$data=$this->GetTopicsQuestionVoteByArray($sTopicId,$sUserId);
@ -1363,7 +1389,9 @@ class ModuleTopic extends Module {
/**
* Получить список голосований в топике-опросе по списку айдишников
*
* @param unknown_type $aTopicId
* @param array $aTopicId Список ID топиков
* @param int $sUserId ID пользователя
* @return array
*/
public function GetTopicsQuestionVoteByArray($aTopicId,$sUserId) {
if (!$aTopicId) {
@ -1427,9 +1455,9 @@ class ModuleTopic extends Module {
/**
* Получить список голосований в топике-опросе по списку айдишников, но используя единый кеш
*
* @param unknown_type $aTopicId
* @param unknown_type $sUserId
* @return unknown
* @param array $aTopicId Список ID топиков
* @param int $sUserId ID пользователя
* @return array
*/
public function GetTopicsQuestionVoteByArraySolid($aTopicId,$sUserId) {
if (!is_array($aTopicId)) {
@ -1451,7 +1479,8 @@ class ModuleTopic extends Module {
/**
* Добавляет факт голосования за топик-вопрос
*
* @param ModuleTopic_EntityTopicQuestionVote $oTopicQuestionVote
* @param ModuleTopic_EntityTopicQuestionVote $oTopicQuestionVote Объект голосования в топике-опросе
* @return bool
*/
public function AddTopicQuestionVote(ModuleTopic_EntityTopicQuestionVote $oTopicQuestionVote) {
$this->Cache_Delete("topic_question_vote_{$oTopicQuestionVote->getTopicId()}_{$oTopicQuestionVote->getVoterId()}");
@ -1461,9 +1490,9 @@ class ModuleTopic extends Module {
/**
* Получает топик по уникальному хешу(текст топика)
*
* @param unknown_type $sUserId
* @param unknown_type $sHash
* @return unknown
* @param int $sUserId
* @param string $sHash
* @return ModuleTopic_EntityTopic|null
*/
public function GetTopicUnique($sUserId,$sHash) {
$sId=$this->oMapperTopic->GetTopicUnique($sUserId,$sHash);
@ -1472,9 +1501,9 @@ class ModuleTopic extends Module {
/**
* Рассылает уведомления о новом топике подписчикам блога
*
* @param unknown_type $oBlog
* @param unknown_type $oTopic
* @param unknown_type $oUserTopic
* @param ModuleBlog_EntityBlog $oBlog Объект блога
* @param ModuleTopic_EntityTopic $oTopic Объект топика
* @param ModuleUser_EntityUser $oUserTopic Объект пользователя
*/
public function SendNotifyTopicNew($oBlog,$oTopic,$oUserTopic) {
$aBlogUsersResult=$this->Blog_GetBlogUsersByBlogId($oBlog->getId(),null,null); // нужно постранично пробегаться по всем
@ -1491,12 +1520,12 @@ class ModuleTopic extends Module {
}
}
/**
* Возвращает список последних топиков пользователя,
* опубликованных не более чем $iTimeLimit секунд назад
* Возвращает список последних топиков пользователя, опубликованных не более чем $iTimeLimit секунд назад
*
* @param string $sUserId
* @param int $iTimeLimit
* @param int $iCountLimit
* @param int $sUserId ID пользователя
* @param int $iTimeLimit Число секунд
* @param int $iCountLimit Количество
* @param array $aAllowData Список типов данных для подгрузки в топики
* @return array
*/
public function GetLastTopicsByUserId($sUserId,$iTimeLimit,$iCountLimit=1,$aAllowData=array()) {
@ -1509,12 +1538,11 @@ class ModuleTopic extends Module {
return $aTopics;
}
/**
* Перемещает топики в другой блог
*
* @param array $aTopics
* @param string $sBlogId
* @param array $aTopics Список ID топиков
* @param int $sBlogId ID блога
* @return bool
*/
public function MoveTopicsByArrayId($aTopics,$sBlogId) {
@ -1530,12 +1558,11 @@ class ModuleTopic extends Module {
}
return false;
}
/**
* Перемещает топики в другой блог
*
* @param string $sBlogId
* @param string $sBlogIdNew
* @param int $sBlogId ID старого блога
* @param int $sBlogIdNew ID нового блога
* @return bool
*/
public function MoveTopics($sBlogId,$sBlogIdNew) {
@ -1551,12 +1578,11 @@ class ModuleTopic extends Module {
}
return false;
}
/**
* Заргузка изображений при написании топика
* Загрузка изображений при написании топика
*
* @param array $aFile
* @param ModuleUser_EntityUser $oUser
* @param array $aFile Массив $_FILES
* @param ModuleUser_EntityUser $oUser Объект пользователя
* @return string|bool
*/
public function UploadTopicImageFile($aFile,$oUser) {
@ -1581,9 +1607,9 @@ class ModuleTopic extends Module {
/**
* Загрузка изображений по переданному URL
*
* @param string $sUrl
* @param string $sUrl URL изображения
* @param ModuleUser_EntityUser $oUser
* @return (string|bool)
* @return string|int
*/
public function UploadTopicImageUrl($sUrl, $oUser) {
/**
@ -1608,7 +1634,6 @@ class ModuleTopic extends Module {
$sContent.=fread($oFile ,1024*1);
$iSizeKb++;
}
/**
* Если конец файла не достигнут,
* значит файл имеет недопустимый размер
@ -1617,7 +1642,6 @@ class ModuleTopic extends Module {
return ModuleImage::UPLOAD_IMAGE_ERROR_SIZE;
}
fclose($oFile);
/**
* Создаем tmp-файл, для временного хранения изображения
*/
@ -1629,7 +1653,6 @@ class ModuleTopic extends Module {
$sDirSave=$this->Image_GetIdDir($oUser->getId());
$aParams=$this->Image_BuildParams('topic');
/**
* Передаем изображение на обработку
*/
@ -1641,19 +1664,11 @@ class ModuleTopic extends Module {
@unlink($sFileTmp);
return ModuleImage::UPLOAD_IMAGE_ERROR;
}
/**
* Возвращает список фотографий к топику-фотосет по списку id фоток
*
* @param unknown_type $aPhotoId
* @return unknown
* @param array $aPhotoId Список ID фото
* @return array
*/
public function GetTopicPhotosByArrayId($aPhotoId) {
if (!$aPhotoId) {
@ -1675,11 +1690,11 @@ class ModuleTopic extends Module {
}
return $data;
}
/**
* Добавить к топику изображение
* @param type $oPhoto
* @return type
*
* @param ModuleTopic_EntityTopicPhoto $oPhoto Объект фото к топику-фотосету
* @return ModuleTopic_EntityTopicPhoto|bool
*/
public function addTopicPhoto($oPhoto) {
if ($sId=$this->oMapperTopic->addTopicPhoto($oPhoto)) {
@ -1689,12 +1704,11 @@ class ModuleTopic extends Module {
}
return false;
}
/**
* Получить изображение из фотосета по его id
* @param type $sId
* @return type
*
* @param int $sId ID фото
* @return ModuleTopic_EntityTopicPhoto|null
*/
public function getTopicPhotoById($sId) {
$aPhotos=$this->GetTopicPhotosByArrayId($sId);
@ -1703,60 +1717,57 @@ class ModuleTopic extends Module {
}
return null;
}
/**
* Получить список изображений из фотосета по id топика
* @param type $iTopicId
* @param type $iFromId
* @param type $iCount
* @return type
*
* @param int $iTopicId ID топика
* @param int|null $iFromId ID с которого начинать выборку
* @param int|null $iCount Количество
* @return array
*/
public function getPhotosByTopicId($iTopicId, $iFromId = null, $iCount = null) {
return $this->oMapperTopic->getPhotosByTopicId($iTopicId, $iFromId, $iCount);
}
/**
* Получить список изображений из фотосета по временному коду
* @param type $sTargetTmp
* @return type
*
* @param string $sTargetTmp Временный ключ
* @return array
*/
public function getPhotosByTargetTmp($sTargetTmp) {
return $this->oMapperTopic->getPhotosByTargetTmp($sTargetTmp);
}
/**
* Получить число изображений из фотосета по id топика
* @param type $iTopicId
* @return type
*
* @param int $iTopicId ID топика
* @return int
*/
public function getCountPhotosByTopicId($iTopicId) {
return $this->oMapperTopic->getCountPhotosByTopicId($iTopicId);
}
/**
* Получить число изображений из фотосета по id топика
* @param type $sTargetTmp
* @return type
*
* @param string $sTargetTmp Временный ключ
* @return int
*/
public function getCountPhotosByTargetTmp($sTargetTmp) {
return $this->oMapperTopic->getCountPhotosByTargetTmp($sTargetTmp);
}
/**
* обновить данные по изображению
* @param type $oPhoto
* Обновить данные по изображению
*
* @param ModuleTopic_EntityTopicPhoto $oPhoto Объект фото
*/
public function updateTopicPhoto($oPhoto) {
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("photoset_photo_update"));
$this->oMapperTopic->updateTopicPhoto($oPhoto);
}
/**
* Удалить изображение
* @param type $oPhoto
* @return type
*
* @param ModuleTopic_EntityTopicPhoto $oPhoto Объект фото
*/
public function deleteTopicPhoto($oPhoto) {
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("photoset_photo_update"));
@ -1772,13 +1783,12 @@ class ModuleTopic extends Module {
}
$this->Image_RemoveFile($this->Image_GetServerPath($oPhoto->getWebPath($sSize)));
}
return;
}
/**
* Загрузить изображение
* @param type $aFile
* @return string
*
* @param array $aFile Массив $_FILES
* @return string|bool
*/
public function UploadTopicPhoto($aFile) {
if(!is_array($aFile) || !isset($aFile['tmp_name'])) {
@ -1811,7 +1821,6 @@ class ModuleTopic extends Module {
@unlink($sFileTmp);
return false;
}
/**
* Превышает максимальные размеры из конфига
*/
@ -1820,14 +1829,17 @@ class ModuleTopic extends Module {
@unlink($sFileTmp);
return false;
}
// Добавляем к загруженному файлу расширение
/**
* Добавляем к загруженному файлу расширение
*/
$sFile=$sFileTmp.'.'.$oImage->get_image_params('format');
rename($sFileTmp,$sFile);
$aSizes=Config::Get('module.topic.photoset.size');
foreach ($aSizes as $aSize) {
// Для каждого указанного в конфиге размера генерируем картинку
/**
* Для каждого указанного в конфиге размера генерируем картинку
*/
$sNewFileName = $sFileName.'_'.$aSize['w'];
$oImage = $this->Image_CreateImageObject($sFile);
if ($aSize['crop']) {
@ -1836,10 +1848,8 @@ class ModuleTopic extends Module {
}
$this->Image_Resize($sFile,$sPath,$sNewFileName,Config::Get('view.img_max_width'),Config::Get('view.img_max_height'),$aSize['w'],$aSize['h'],true,$aParams,$oImage);
}
return $this->Image_GetWebPath($sFile);
}
/**
* Пересчитывает счетчик избранных топиков
*
@ -1848,7 +1858,6 @@ class ModuleTopic extends Module {
public function RecalculateFavourite(){
return $this->oMapperTopic->RecalculateFavourite();
}
/**
* Пересчитывает счетчики голосований
*

View file

@ -15,7 +15,19 @@
---------------------------------------------------------
*/
/**
* Объект сущности топика
*
* @package modules.topic
* @since 1.0
*/
class ModuleTopic_EntityTopic extends Entity {
/**
* Массив объектов(не всегда) для дополнительных типов топиков(линки, опросы, подкасты и т.п.)
*
* @var array
*/
protected $aExtra=null;
/**
* Определяем правила валидации
@ -33,20 +45,12 @@ class ModuleTopic_EntityTopic extends Entity {
$this->aValidateRules[]=array('topic_type','topic_type','on'=>array('topic','link','question','photoset'));
$this->aValidateRules[]=array('link_url','url','allowEmpty'=>false,'label'=>$this->Lang_Get('topic_link_create_url'),'on'=>array('link'));
}
/**
* массив объектов(не всегда) для дополнительных типов топиков(линки, опросы, подкасты и т.п.)
*
* @var array
*/
protected $aExtra=null;
/**
* Проверка типа топика
*
* @param $sValue
* @param $aParams
* @return bool | string
* @param string $sValue Проверяемое значение
* @param array $aParams Параметры
* @return bool|string
*/
public function ValidateTopicType($sValue,$aParams) {
if ($this->Topic_IsAllowTopicType($sValue)) {
@ -57,9 +61,9 @@ class ModuleTopic_EntityTopic extends Entity {
/**
* Проверка топика на уникальность
*
* @param $sValue
* @param $aParams
* @return bool | string
* @param string $sValue Проверяемое значение
* @param array $aParams Параметры
* @return bool|string
*/
public function ValidateTopicUnique($sValue,$aParams) {
$this->setTextHash(md5($this->getType().$sValue.$this->getTitle()));
@ -74,9 +78,9 @@ class ModuleTopic_EntityTopic extends Entity {
/**
* Валидация ID блога
*
* @param $sValue
* @param $aParams
* @return bool | string
* @param string $sValue Проверяемое значение
* @param array $aParams Параметры
* @return bool|string
*/
public function ValidateBlogId($sValue,$aParams) {
if ($sValue==0) {
@ -88,109 +92,266 @@ class ModuleTopic_EntityTopic extends Entity {
return $this->Lang_Get('topic_create_blog_error_unknown');
}
/**
* Возвращает ID топика
*
* @return int|null
*/
public function getId() {
return $this->_getDataOne('topic_id');
}
/**
* Возвращает ID блога
*
* @return int|null
*/
public function getBlogId() {
return $this->_getDataOne('blog_id');
}
/**
* Возвращает ID пользователя
*
* @return int|null
*/
public function getUserId() {
return $this->_getDataOne('user_id');
}
/**
* Возвращает тип топика
*
* @return string|null
*/
public function getType() {
return $this->_getDataOne('topic_type');
}
/**
* Возвращает заголовок топика
*
* @return string|null
*/
public function getTitle() {
return $this->_getDataOne('topic_title');
}
/**
* Возвращает текст топика
*
* @return string|null
*/
public function getText() {
return $this->_getDataOne('topic_text');
}
/**
* Возвращает короткий текст топика (до ката)
*
* @return string|null
*/
public function getTextShort() {
return $this->_getDataOne('topic_text_short');
}
/**
* Возвращает исходный текст топика, без примененя парсера тегов
*
* @return string|null
*/
public function getTextSource() {
return $this->_getDataOne('topic_text_source');
}
/**
* Возвращает сериализованные строку дополнительный данных топика
*
* @return string
*/
public function getExtra() {
return $this->_getDataOne('topic_extra') ? $this->_getDataOne('topic_extra') : serialize('');
}
/**
* Возвращает строку со списком тегов через запятую
*
* @return string|null
*/
public function getTags() {
return $this->_getDataOne('topic_tags');
}
/**
* Возвращает дату создания топика
*
* @return string|null
*/
public function getDateAdd() {
return $this->_getDataOne('topic_date_add');
}
/**
* Возвращает дату редактирования топика
*
* @return string|null
*/
public function getDateEdit() {
return $this->_getDataOne('topic_date_edit');
}
/**
* Возвращает IP пользователя
*
* @return string|null
*/
public function getUserIp() {
return $this->_getDataOne('topic_user_ip');
}
/**
* Возвращает статус опубликованности топика
*
* @return int|null
*/
public function getPublish() {
return $this->_getDataOne('topic_publish');
}
/**
* Возвращает статус опубликованности черновика
*
* @return int|null
*/
public function getPublishDraft() {
return $this->_getDataOne('topic_publish_draft');
}
/**
* Возвращает статус публикации топика на главной странице
*
* @return int|null
*/
public function getPublishIndex() {
return $this->_getDataOne('topic_publish_index');
}
/**
* Возвращает рейтинг топика
*
* @return string
*/
public function getRating() {
return number_format(round($this->_getDataOne('topic_rating'),2), 0, '.', '');
}
/**
* Возвращает число проголосовавших за топик
*
* @return int|null
*/
public function getCountVote() {
return $this->_getDataOne('topic_count_vote');
}
/**
* Возвращает число проголосовавших за топик положительно
*
* @return int|null
*/
public function getCountVoteUp() {
return $this->_getDataOne('topic_count_vote_up');
}
/**
* Возвращает число проголосовавших за топик отрицательно
*
* @return int|null
*/
public function getCountVoteDown() {
return $this->_getDataOne('topic_count_vote_down');
}
/**
* Возвращает число воздержавшихся при голосовании за топик
*
* @return int|null
*/
public function getCountVoteAbstain() {
return $this->_getDataOne('topic_count_vote_abstain');
}
/**
* Возвращает число прочтений топика
*
* @return int|null
*/
public function getCountRead() {
return $this->_getDataOne('topic_count_read');
}
/**
* Возвращает количество комментариев к топику
*
* @return int|null
*/
public function getCountComment() {
return $this->_getDataOne('topic_count_comment');
}
/**
* Возвращает текст ката
*
* @return string|null
*/
public function getCutText() {
return $this->_getDataOne('topic_cut_text');
}
/**
* Возвращает статус запрета комментировать топик
*
* @return int|null
*/
public function getForbidComment() {
return $this->_getDataOne('topic_forbid_comment');
}
/**
* Возвращает хеш топика для проверки топика на уникальность
*
* @return string|null
*/
public function getTextHash() {
return $this->_getDataOne('topic_text_hash');
}
/**
* Возвращает массив тегов
*
* @return array
*/
public function getTagsArray() {
if ($this->getTags()) {
return explode(',',$this->getTags());
}
return array();
}
/**
* Возвращает количество новых комментариев в топике для текущего пользователя
*
* @return int|null
*/
public function getCountCommentNew() {
return $this->_getDataOne('count_comment_new');
}
/**
* Возвращает дату прочтения топика для текущего пользователя
*
* @return string|null
*/
public function getDateRead() {
return $this->_getDataOne('date_read');
}
/**
* Возвращает объект пользователя, автора топик
*
* @return ModuleUser_EntityUser|null
*/
public function getUser() {
if (!$this->_getDataOne('user')) {
$this->_aData['user']=$this->User_GetUserById($this->getUserId());
}
return $this->_getDataOne('user');
}
/**
* Возвращает объект блого, в котором находится топик
*
* @return ModuleBlog_EntityBlog|null
*/
public function getBlog() {
return $this->_getDataOne('blog');
}
/**
* Возвращает полный URL до топика
*
* @return string
*/
public function getUrl() {
if ($this->getBlog()->getType()=='personal') {
return Router::GetPath('blog').$this->getId().'.html';
@ -198,21 +359,46 @@ class ModuleTopic_EntityTopic extends Entity {
return Router::GetPath('blog').$this->getBlog()->getUrl().'/'.$this->getId().'.html';
}
}
/**
* Возвращает объект голосования за топик текущим пользователем
*
* @return ModuleVote_EntityVote|null
*/
public function getVote() {
return $this->_getDataOne('vote');
}
/**
* Возвращает статус голосовал ли пользователь в топике-опросе
*
* @return bool|null
*/
public function getUserQuestionIsVote() {
return $this->_getDataOne('user_question_is_vote');
}
/**
* Проверяет находится ли данный топик в избранном у текущего пользователя
*
* @return bool
*/
public function getIsFavourite() {
if ($this->getFavourite()) {
return true;
}
return false;
}
/**
* Возвращает количество добавивших топик в избранное
*
* @return int|null
*/
public function getCountFavourite() {
return $this->_getDataOne('topic_count_favourite');
}
/**
* Возвращает объект подписки на новые комментарии к топику
*
* @return ModuleSubscribe_EntitySubscribe|null
*/
public function getSubscribeNewComment() {
if (!($oUserCurrent=$this->User_GetUserCurrent())) {
return null;
@ -225,18 +411,31 @@ class ModuleTopic_EntityTopic extends Entity {
***************************************************************************************************************************************************
*/
/**
* Извлекает сериализованные данные топика
*/
protected function extractExtra() {
if (is_null($this->aExtra)) {
$this->aExtra=@unserialize($this->getExtra());
}
}
/**
* Устанавливает значение нужного параметра
*
* @param string $sName Название параметра/данных
* @param mixed $data Данные
*/
protected function setExtraValue($sName,$data) {
$this->extractExtra();
$this->aExtra[$sName]=$data;
$this->setExtra($this->aExtra);
}
/**
* Извлекает значение параметра
*
* @param string $sName Название параметра
* @return null|mixed
*/
protected function getExtraValue($sName) {
$this->extractExtra();
if (isset($this->aExtra[$sName])) {
@ -245,7 +444,12 @@ class ModuleTopic_EntityTopic extends Entity {
return null;
}
// методы для топика-ссылки
/**
* Возвращает URL для топика-ссылки
*
* @param bool $bShort Укарачивать урл или нет
* @return null|string
*/
public function getLinkUrl($bShort=false) {
if ($this->getType()!='link') {
return null;
@ -271,25 +475,45 @@ class ModuleTopic_EntityTopic extends Entity {
}
return null;
}
/**
* Устанавливает URL для топика-ссылки
*
* @param string $data
*/
public function setLinkUrl($data) {
if ($this->getType()!='link') {
return;
}
$this->setExtraValue('url',$data);
}
/**
* Возвращает количество переходов по ссылке в топике-ссылке
*
* @return int|null
*/
public function getLinkCountJump() {
if ($this->getType()!='link') {
return null;
}
return (int)$this->getExtraValue('count_jump');
}
/**
* Устанавливает количество переходов по ссылке в топике-ссылке
*
* @param string $data
*/
public function setLinkCountJump($data) {
if ($this->getType()!='link') {
return;
}
$this->setExtraValue('count_jump',$data);
}
//методы для топика-вопроса
/**
* Добавляет вариант ответа в топик-опрос
*
* @param string $data
*/
public function addQuestionAnswer($data) {
if ($this->getType()!='question') {
return;
@ -298,12 +522,21 @@ class ModuleTopic_EntityTopic extends Entity {
$this->aExtra['answers'][]=array('text'=>$data,'count'=>0);
$this->setExtra($this->aExtra);
}
/**
* Очищает варианты ответа в топике-опрос
*/
public function clearQuestionAnswer() {
if ($this->getType()!='question') {
return;
}
$this->setExtraValue('answers',array());
}
/**
* Возвращает варианты ответа в топике-опрос
*
* @param bool $bSortVote
* @return array|null
*/
public function getQuestionAnswers($bSortVote=false) {
if ($this->getType()!='question') {
return null;
@ -318,6 +551,11 @@ class ModuleTopic_EntityTopic extends Entity {
}
return array();
}
/**
* Увеличивает количество ответов на данный вариант в топике-опросе
*
* @param int $sIdAnswer ID варианта ответа
*/
public function increaseQuestionAnswerVote($sIdAnswer) {
if ($aAnswers=$this->getQuestionAnswers()) {
if (isset($aAnswers[$sIdAnswer])) {
@ -327,6 +565,11 @@ class ModuleTopic_EntityTopic extends Entity {
}
}
}
/**
* Возвращает максимально количество ответов на вариант в топике-опросе
*
* @return int
*/
public function getQuestionAnswerMax() {
$aAnswers=$this->getQuestionAnswers();
$iMax=0;
@ -337,6 +580,12 @@ class ModuleTopic_EntityTopic extends Entity {
}
return $iMax;
}
/**
* Возвращает в процентах количество проголосовавших за конкретный вариант
*
* @param int $sIdAnswer ID варианта
* @return int|string
*/
public function getQuestionAnswerPercent($sIdAnswer) {
if ($aAnswers=$this->getQuestionAnswers()) {
if (isset($aAnswers[$sIdAnswer])) {
@ -349,26 +598,45 @@ class ModuleTopic_EntityTopic extends Entity {
}
}
}
/**
* Возвращает общее число принявших участие в опросе в топике-опросе
*
* @return int|null
*/
public function getQuestionCountVote() {
if ($this->getType()!='question') {
return null;
}
return (int)$this->getExtraValue('count_vote');
}
/**
* Устанавливает общее число принявших участие в опросе в топике-опросе
*
* @param int $data
*/
public function setQuestionCountVote($data) {
if ($this->getType()!='question') {
return;
}
$this->setExtraValue('count_vote',$data);
}
/**
* Возвращает число воздержавшихся от участия в опросе в топике-опросе
*
* @return int|null
*/
public function getQuestionCountVoteAbstain() {
if ($this->getType()!='question') {
return null;
}
return (int)$this->getExtraValue('count_vote_abstain');
}
/**
* Устанавливает число воздержавшихся от участия в опросе в топике-опросе
*
* @param int $data
* @return mixed
*/
public function setQuestionCountVoteAbstain($data) {
if ($this->getType()!='question') {
return;
@ -376,123 +644,313 @@ class ModuleTopic_EntityTopic extends Entity {
$this->setExtraValue('count_vote_abstain',$data);
}
// Методы для фото-топика
/**
* Возвращает фотографии из топика-фотосета
*
* @param int|null $iFromId ID с которого начинать выборку
* @param int|null $iCount Количество
* @return array
*/
public function getPhotosetPhotos($iFromId = null, $iCount = null) {
return $this->Topic_getPhotosByTopicId($this->getId(), $iFromId, $iCount);
}
/**
* Возвращает количество фотографий в топике-фотосете
*
* @return int|null
*/
public function getPhotosetCount() {
return $this->getExtraValue('count_photo');
}
/**
* Возвращает ID главной фото в топике-фотосете
*
* @return int|null
*/
public function getPhotosetMainPhotoId() {
return $this->getExtraValue('main_photo_id');
}
/**
* Устанавливает ID главной фото в топике-фотосете
*
* @param int $data
*/
public function setPhotosetMainPhotoId($data) {
$this->setExtraValue('main_photo_id',$data);
}
/**
* Устанавливает количество фотографий в топике-фотосете
*
* @param int $data
*/
public function setPhotosetCount($data) {
$this->setExtraValue('count_photo',$data);
}
//*************************************************************************************************************************************************
/**
* Устанваливает ID топика
*
* @param int $data
*/
public function setId($data) {
$this->_aData['topic_id']=$data;
}
/**
* Устанавливает ID блога
*
* @param int $data
*/
public function setBlogId($data) {
$this->_aData['blog_id']=$data;
}
/**
* Устанавливает ID пользователя
*
* @param int $data
*/
public function setUserId($data) {
$this->_aData['user_id']=$data;
}
/**
* Устанавливает тип топика
*
* @param string $data
*/
public function setType($data) {
$this->_aData['topic_type']=$data;
}
/**
* Устанавливает заголовок топика
*
* @param string $data
*/
public function setTitle($data) {
$this->_aData['topic_title']=$data;
}
/**
* Устанавливает текст топика
*
* @param string $data
*/
public function setText($data) {
$this->_aData['topic_text']=$data;
}
/**
* Устанавливает сериализованную строчку дополнительных данных
*
* @param string $data
*/
public function setExtra($data) {
$this->_aData['topic_extra']=serialize($data);
}
/**
* Устанавливает короткий текст топика до ката
*
* @param string $data
*/
public function setTextShort($data) {
$this->_aData['topic_text_short']=$data;
}
/**
* Устаналивает исходный текст топика
*
* @param string $data
*/
public function setTextSource($data) {
$this->_aData['topic_text_source']=$data;
}
/**
* Устанавливает список тегов в виде строки
*
* @param string $data
*/
public function setTags($data) {
$this->_aData['topic_tags']=$data;
}
/**
* Устанавливает дату создания топика
*
* @param string $data
*/
public function setDateAdd($data) {
$this->_aData['topic_date_add']=$data;
}
/**
* Устанавливает дату редактирования топика
*
* @param string $data
*/
public function setDateEdit($data) {
$this->_aData['topic_date_edit']=$data;
}
/**
* Устанавливает IP пользователя
*
* @param string $data
*/
public function setUserIp($data) {
$this->_aData['topic_user_ip']=$data;
}
/**
* Устанавливает флаг публикации топика
*
* @param string $data
*/
public function setPublish($data) {
$this->_aData['topic_publish']=$data;
}
/**
* Устанавливает флаг публикации черновика
*
* @param string $data
*/
public function setPublishDraft($data) {
$this->_aData['topic_publish_draft']=$data;
}
/**
* Устанавливает флаг публикации на главной странице
*
* @param string $data
*/
public function setPublishIndex($data) {
$this->_aData['topic_publish_index']=$data;
}
/**
* Устанавливает рейтинг топика
*
* @param string $data
*/
public function setRating($data) {
$this->_aData['topic_rating']=$data;
}
/**
* Устанавливает количество проголосовавших
*
* @param int $data
*/
public function setCountVote($data) {
$this->_aData['topic_count_vote']=$data;
}
/**
* Устанавливает количество проголосовавших в плюс
*
* @param int $data
*/
public function setCountVoteUp($data) {
$this->_aData['topic_count_vote_up']=$data;
}
/**
* Устанавливает количество проголосовавших в минус
*
* @param int $data
*/
public function setCountVoteDown($data) {
$this->_aData['topic_count_vote_down']=$data;
}
/**
* Устанавливает число воздержавшихся
*
* @param int $data
*/
public function setCountVoteAbstain($data) {
$this->_aData['topic_count_vote_abstain']=$data;
}
/**
* Устанавливает число прочтения топика
*
* @param int $data
*/
public function setCountRead($data) {
$this->_aData['topic_count_read']=$data;
}
/**
* Устанавливает количество комментариев
*
* @param int $data
*/
public function setCountComment($data) {
$this->_aData['topic_count_comment']=$data;
}
/**
* Устанавливает текст ката
*
* @param string $data
*/
public function setCutText($data) {
$this->_aData['topic_cut_text']=$data;
}
/**
* Устанавливает флаг запрета коментирования топика
*
* @param int $data
*/
public function setForbidComment($data) {
$this->_aData['topic_forbid_comment']=$data;
}
/**
* Устанавливает хеш топика
*
* @param string $data
*/
public function setTextHash($data) {
$this->_aData['topic_text_hash']=$data;
}
/**
* Устанавливает объект пользователя
*
* @param ModuleUser_EntityUser $data
*/
public function setUser($data) {
$this->_aData['user']=$data;
}
/**
* Устанавливает объект блога
*
* @param ModuleBlog_EntityBlog $data
*/
public function setBlog($data) {
$this->_aData['blog']=$data;
}
/**
* Устанавливает факт голосования пользователя в топике-опросе
*
* @param int $data
*/
public function setUserQuestionIsVote($data) {
$this->_aData['user_question_is_vote']=$data;
}
/**
* Устанавливает объект голосования за топик
*
* @param ModuleVote_EntityVote $data
*/
public function setVote($data) {
$this->_aData['vote']=$data;
}
/**
* Устанавливает количество новых комментариев
*
* @param int $data
*/
public function setCountCommentNew($data) {
$this->_aData['count_comment_new']=$data;
}
/**
* Устанавливает дату прочтения топика текущим пользователем
*
* @param string $data
*/
public function setDateRead($data) {
$this->_aData['date_read']=$data;
}
/**
* Устанавливает количество пользователей, добавивших топик в избранное
*
* @param int $data
*/
public function setCountFavourite($data) {
$this->_aData['topic_count_favourite']=$data;
}

View file

@ -1,31 +1,74 @@
<?php
/*-------------------------------------------------------
*
* LiveStreet Engine Social Networking
* Copyright © 2008 Mzhelskiy Maxim
*
*--------------------------------------------------------
*
* Official site: www.livestreet.ru
* Contact e-mail: rus.engine@gmail.com
*
* GNU General Public License, version 2:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
---------------------------------------------------------
*/
class ModuleTopic_EntityTopicPhoto extends Entity
{
public function getId()
{
/**
* Объект сущности фото в топике-фотосете
*
* @package modules.topic
* @since 1.0
*/
class ModuleTopic_EntityTopicPhoto extends Entity {
/**
* Возвращает ID фото
*
* @return int|null
*/
public function getId() {
return $this->_getDataOne('id');
}
public function getTopicId()
{
/**
* Возвращает ID топика
*
* @return int|null
*/
public function getTopicId() {
return $this->_getDataOne('topic_id');
}
public function getTargetTmp()
{
/**
* Возвращает ключ временного владельца
*
* @return string|null
*/
public function getTargetTmp() {
return $this->_getDataOne('target_tmp');
}
public function getDescription()
{
/**
* Возвращает описание фото
*
* @return string|null
*/
public function getDescription() {
return $this->_getDataOne('description');
}
public function getPath()
{
/**
* Вовзращает полный веб путь до фото
*
* @return mixed|null
*/
public function getPath() {
return $this->_getDataOne('path');
}
public function getWebPath($sWidth = null)
{
/**
* Возвращает полный веб путь до фото определенного размера
*
* @param string|null $sWidth Размер фото, например, '100' или '150crop'
* @return null|string
*/
public function getWebPath($sWidth = null) {
if ($this->getPath()) {
if ($sWidth) {
$aPathInfo=pathinfo($this->getPath());
@ -38,17 +81,28 @@ class ModuleTopic_EntityTopicPhoto extends Entity
}
}
public function setTopicId($iTopicId)
{
/**
* Устанавливает ID топика
*
* @param int $iTopicId
*/
public function setTopicId($iTopicId) {
$this->_aData['topic_id'] = $iTopicId;
}
public function setTargetTmp($sTargetTmp)
{
/**
* Устанавливает ключ временного владельца
*
* @param string $sTargetTmp
*/
public function setTargetTmp($sTargetTmp) {
$this->_aData['target_tmp'] = $sTargetTmp;
}
public function setDescription($sDescription)
{
/**
* Устанавливает описание фото
*
* @param string $sDescription
*/
public function setDescription($sDescription) {
$this->_aData['description'] = $sDescription;
}
}

View file

@ -15,27 +15,61 @@
---------------------------------------------------------
*/
class ModuleTopic_EntityTopicQuestionVote extends Entity
{
public function getTopicId() {
return $this->_getDataOne('topic_id');
}
public function getVoterId() {
return $this->_getDataOne('user_voter_id');
}
/**
* Объект сущности голосования в топике-опросе
*
* @package modules.topic
* @since 1.0
*/
class ModuleTopic_EntityTopicQuestionVote extends Entity {
/**
* Возвращает ID топика
*
* @return int|null
*/
public function getTopicId() {
return $this->_getDataOne('topic_id');
}
/**
* Возвращает ID проголосовавшего пользователя
*
* @return int|null
*/
public function getVoterId() {
return $this->_getDataOne('user_voter_id');
}
/**
* Возвращает номер варианта
*
* @return int|null
*/
public function getAnswer() {
return $this->_getDataOne('answer');
}
return $this->_getDataOne('answer');
}
/**
* Устанавливает ID топика
*
* @param int $data
*/
public function setTopicId($data) {
$this->_aData['topic_id']=$data;
}
public function setVoterId($data) {
$this->_aData['user_voter_id']=$data;
}
public function setAnswer($data) {
$this->_aData['answer']=$data;
}
$this->_aData['topic_id']=$data;
}
/**
* Устанавливает ID проголосовавшего пользователя
*
* @param int $data
*/
public function setVoterId($data) {
$this->_aData['user_voter_id']=$data;
}
/**
* Устанавливает номер варианта
*
* @param int $data
*/
public function setAnswer($data) {
$this->_aData['answer']=$data;
}
}
?>

View file

@ -15,40 +15,94 @@
---------------------------------------------------------
*/
class ModuleTopic_EntityTopicRead extends Entity
{
public function getTopicId() {
return $this->_getDataOne('topic_id');
}
public function getUserId() {
return $this->_getDataOne('user_id');
}
public function getDateRead() {
return $this->_getDataOne('date_read');
}
public function getCommentCountLast() {
return $this->_getDataOne('comment_count_last');
}
public function getCommentIdLast() {
return $this->_getDataOne('comment_id_last');
}
/**
* Объект сущности факта прочтения топика
*
* @package modules.topic
* @since 1.0
*/
class ModuleTopic_EntityTopicRead extends Entity {
/**
* Возвращает ID топика
*
* @return int|null
*/
public function getTopicId() {
return $this->_getDataOne('topic_id');
}
/**
* Возвращает ID пользователя
*
* @return int|null
*/
public function getUserId() {
return $this->_getDataOne('user_id');
}
/**
* Возвращает дату прочтения
*
* @return string|null
*/
public function getDateRead() {
return $this->_getDataOne('date_read');
}
/**
* Возвращает число комментариев в последнем прочтении топика
*
* @return int|null
*/
public function getCommentCountLast() {
return $this->_getDataOne('comment_count_last');
}
/**
* Возвращает ID последнего комментария
*
* @return int|null
*/
public function getCommentIdLast() {
return $this->_getDataOne('comment_id_last');
}
/**
* Устанавливает ID топика
*
* @param int $data
*/
public function setTopicId($data) {
$this->_aData['topic_id']=$data;
}
public function setUserId($data) {
$this->_aData['user_id']=$data;
}
public function setDateRead($data) {
$this->_aData['date_read']=$data;
}
public function setCommentCountLast($data) {
$this->_aData['comment_count_last']=$data;
}
public function setCommentIdLast($data) {
$this->_aData['comment_id_last']=$data;
}
$this->_aData['topic_id']=$data;
}
/**
* Устанавливает ID пользователя
*
* @param int $data
*/
public function setUserId($data) {
$this->_aData['user_id']=$data;
}
/**
* Устанавливает дату прочтения
*
* @param string $data
*/
public function setDateRead($data) {
$this->_aData['date_read']=$data;
}
/**
* Устанавливает число комментариев в последнем прочтении топика
*
* @param int $data
*/
public function setCommentCountLast($data) {
$this->_aData['comment_count_last']=$data;
}
/**
* Устанавливает ID последнего комментария
*
* @param int $data
*/
public function setCommentIdLast($data) {
$this->_aData['comment_id_last']=$data;
}
}
?>

View file

@ -15,51 +15,119 @@
---------------------------------------------------------
*/
class ModuleTopic_EntityTopicTag extends Entity
{
public function getId() {
return $this->_getDataOne('topic_tag_id');
}
public function getTopicId() {
return $this->_getDataOne('topic_id');
}
public function getUserId() {
return $this->_getDataOne('user_id');
}
public function getBlogId() {
return $this->_getDataOne('blog_id');
}
public function getText() {
return $this->_getDataOne('topic_tag_text');
}
public function getCount() {
return $this->_getDataOne('count');
}
public function getSize() {
return $this->_getDataOne('size');
}
/**
* Объект сущности тега топика
*
* @package modules.topic
* @since 1.0
*/
class ModuleTopic_EntityTopicTag extends Entity {
/**
* Возвращает ID тега
*
* @return int|null
*/
public function getId() {
return $this->_getDataOne('topic_tag_id');
}
/**
* Возвращает ID топика
*
* @return int|null
*/
public function getTopicId() {
return $this->_getDataOne('topic_id');
}
/**
* Возвращает ID пользователя
*
* @return int|null
*/
public function getUserId() {
return $this->_getDataOne('user_id');
}
/**
* Возвращает ID блога
*
* @return int|null
*/
public function getBlogId() {
return $this->_getDataOne('blog_id');
}
/**
* Возвращает текст тега
*
* @return string|null
*/
public function getText() {
return $this->_getDataOne('topic_tag_text');
}
/**
* Возвращает количество тегов
*
* @return int|null
*/
public function getCount() {
return $this->_getDataOne('count');
}
/**
* Возвращает просчитанный размер тега для облака тегов
*
* @return int|null
*/
public function getSize() {
return $this->_getDataOne('size');
}
/**
* Устанавливает ID тега
*
* @param int $data
*/
public function setId($data) {
$this->_aData['topic_tag_id']=$data;
}
public function setTopicId($data) {
$this->_aData['topic_id']=$data;
}
public function setUserId($data) {
$this->_aData['user_id']=$data;
}
public function setBlogId($data) {
$this->_aData['blog_id']=$data;
}
public function setText($data) {
$this->_aData['topic_tag_text']=$data;
}
$this->_aData['topic_tag_id']=$data;
}
/**
* Устанавливает ID топика
*
* @param int $data
*/
public function setTopicId($data) {
$this->_aData['topic_id']=$data;
}
/**
* Устанавливает ID пользователя
*
* @param int $data
*/
public function setUserId($data) {
$this->_aData['user_id']=$data;
}
/**
* Устанавливает ID блога
*
* @param int $data
*/
public function setBlogId($data) {
$this->_aData['blog_id']=$data;
}
/**
* Устанавливает текст тега
*
* @param string $data
*/
public function setText($data) {
$this->_aData['topic_tag_text']=$data;
}
/**
* Устанавливает просчитанный размер тега для облака тегов
*
* @param int $data
*/
public function setSize($data) {
$this->_aData['size']=$data;
}
$this->_aData['size']=$data;
}
}
?>

View file

@ -15,8 +15,19 @@
---------------------------------------------------------
*/
class ModuleTopic_MapperTopic extends Mapper {
/**
* Объект маппера для работы с БД
*
* @package modules.topic
* @since 1.0
*/
class ModuleTopic_MapperTopic extends Mapper {
/**
* Добавляет топик
*
* @param ModuleTopic_EntityTopic $oTopic Объект топика
* @return int|bool
*/
public function AddTopic(ModuleTopic_EntityTopic $oTopic) {
$sql = "INSERT INTO ".Config::Get('db.table.topic')."
(blog_id,
@ -34,17 +45,22 @@ class ModuleTopic_MapperTopic extends Mapper {
topic_text_hash
)
VALUES(?d, ?d, ?, ?, ?, ?, ?, ?d, ?d, ?d, ?, ?, ?)
";
";
if ($iId=$this->oDb->query($sql,$oTopic->getBlogId(),$oTopic->getUserId(),$oTopic->getType(),$oTopic->getTitle(),
$oTopic->getTags(),$oTopic->getDateAdd(),$oTopic->getUserIp(),$oTopic->getPublish(),$oTopic->getPublishDraft(),$oTopic->getPublishIndex(),$oTopic->getCutText(),$oTopic->getForbidComment(),$oTopic->getTextHash()))
$oTopic->getTags(),$oTopic->getDateAdd(),$oTopic->getUserIp(),$oTopic->getPublish(),$oTopic->getPublishDraft(),$oTopic->getPublishIndex(),$oTopic->getCutText(),$oTopic->getForbidComment(),$oTopic->getTextHash()))
{
$oTopic->setId($iId);
$this->AddTopicContent($oTopic);
return $iId;
}
}
return false;
}
/**
* Добавляет контент топика
*
* @param ModuleTopic_EntityTopic $oTopic Объект топика
* @return int|bool
*/
public function AddTopicContent(ModuleTopic_EntityTopic $oTopic) {
$sql = "INSERT INTO ".Config::Get('db.table.topic_content')."
(topic_id,
@ -54,15 +70,20 @@ class ModuleTopic_MapperTopic extends Mapper {
topic_extra
)
VALUES(?d, ?, ?, ?, ? )
";
";
if ($iId=$this->oDb->query($sql,$oTopic->getId(),$oTopic->getText(),
$oTopic->getTextShort(),$oTopic->getTextSource(),$oTopic->getExtra()))
$oTopic->getTextShort(),$oTopic->getTextSource(),$oTopic->getExtra()))
{
return $iId;
}
}
return false;
}
/**
* Добавление тега к топику
*
* @param ModuleTopic_EntityTopicTag $oTopicTag Объект тега топика
* @return int
*/
public function AddTopicTag(ModuleTopic_EntityTopicTag $oTopicTag) {
$sql = "INSERT INTO ".Config::Get('db.table.topic_tag')."
(topic_id,
@ -71,45 +92,66 @@ class ModuleTopic_MapperTopic extends Mapper {
topic_tag_text
)
VALUES(?d, ?d, ?d, ?)
";
if ($iId=$this->oDb->query($sql,$oTopicTag->getTopicId(),$oTopicTag->getUserId(),$oTopicTag->getBlogId(),$oTopicTag->getText()))
";
if ($iId=$this->oDb->query($sql,$oTopicTag->getTopicId(),$oTopicTag->getUserId(),$oTopicTag->getBlogId(),$oTopicTag->getText()))
{
return $iId;
}
}
return false;
}
/**
* Удаление контента топика по его номеру
*
* @param int $iTopicId ID топика
* @return bool
*/
public function DeleteTopicContentByTopicId($iTopicId) {
$sql = "DELETE FROM ".Config::Get('db.table.topic_content')." WHERE topic_id = ?d ";
if ($this->oDb->query($sql,$iTopicId)) {
return true;
}
}
return false;
}
/**
* Удаляет теги у топика
*
* @param int $sTopicId ID топика
* @return bool
*/
public function DeleteTopicTagsByTopicId($sTopicId) {
$sql = "DELETE FROM ".Config::Get('db.table.topic_tag')."
WHERE
topic_id = ?d
";
";
if ($this->oDb->query($sql,$sTopicId)) {
return true;
}
}
return false;
}
/**
* Удаляет топик.
* Если тип таблиц в БД InnoDB, то удалятся всё связи по топику(комменты,голосования,избранное)
*
* @param int $sTopicId Объект топика или ID
* @return bool
*/
public function DeleteTopic($sTopicId) {
$sql = "DELETE FROM ".Config::Get('db.table.topic')."
WHERE
topic_id = ?d
";
";
if ($this->oDb->query($sql,$sTopicId)) {
return true;
}
}
return false;
}
/**
* Получает топик по уникальному хешу(текст топика)
*
* @param int $sUserId
* @param string $sHash
* @return int|null
*/
public function GetTopicUnique($sUserId,$sHash) {
$sql = "SELECT topic_id FROM ".Config::Get('db.table.topic')."
WHERE
@ -123,12 +165,17 @@ class ModuleTopic_MapperTopic extends Mapper {
}
return null;
}
/**
* Получить список топиков по списку айдишников
*
* @param array $aArrayId Список ID топиков
* @return array
*/
public function GetTopicsByArrayId($aArrayId) {
if (!is_array($aArrayId) or count($aArrayId)==0) {
return array();
}
$sql = "SELECT
t.*,
tc.*
@ -143,21 +190,28 @@ class ModuleTopic_MapperTopic extends Mapper {
foreach ($aRows as $aTopic) {
$aTopics[]=Engine::GetEntity('Topic',$aTopic);
}
}
}
return $aTopics;
}
/**
* Список топиков по фильтру
*
* @param array $aFilter Фильтр
* @param int $iCount Возвращает общее число элементов
* @param int $iCurrPage Номер страницы
* @param int $iPerPage Количество элементов на страницу
* @return array
*/
public function GetTopics($aFilter,&$iCount,$iCurrPage,$iPerPage) {
$sWhere=$this->buildFilter($aFilter);
if(!isset($aFilter['order'])) {
$aFilter['order'] = 't.topic_date_add desc';
}
if (!is_array($aFilter['order'])) {
$aFilter['order'] = array($aFilter['order']);
}
$sql = "SELECT
t.topic_id
FROM
@ -169,19 +223,24 @@ class ModuleTopic_MapperTopic extends Mapper {
AND
t.blog_id=b.blog_id
ORDER BY ".
implode(', ', $aFilter['order'])
."
LIMIT ?d, ?d";
implode(', ', $aFilter['order'])
."
LIMIT ?d, ?d";
$aTopics=array();
if ($aRows=$this->oDb->selectPage($iCount,$sql,($iCurrPage-1)*$iPerPage, $iPerPage)) {
if ($aRows=$this->oDb->selectPage($iCount,$sql,($iCurrPage-1)*$iPerPage, $iPerPage)) {
foreach ($aRows as $aTopic) {
$aTopics[]=$aTopic['topic_id'];
}
}
}
return $aTopics;
}
public function GetCountTopics($aFilter) {
/**
* Количество топиков по фильтру
*
* @param array $aFilter Фильтр
* @return int
*/
public function GetCountTopics($aFilter) {
$sWhere=$this->buildFilter($aFilter);
$sql = "SELECT
count(t.topic_id) as count
@ -194,23 +253,28 @@ class ModuleTopic_MapperTopic extends Mapper {
".$sWhere."
AND
t.blog_id=b.blog_id;";
t.blog_id=b.blog_id;";
if ($aRow=$this->oDb->selectRow($sql)) {
return $aRow['count'];
}
return false;
}
/**
* Возвращает все топики по фильтру
*
* @param array $aFilter Фильтр
* @return array
*/
public function GetAllTopics($aFilter) {
$sWhere=$this->buildFilter($aFilter);
if(!isset($aFilter['order'])) {
$aFilter['order'] = 't.topic_id desc';
}
if (!is_array($aFilter['order'])) {
$aFilter['order'] = array($aFilter['order']);
}
$sql = "SELECT
t.topic_id
FROM
@ -221,18 +285,27 @@ class ModuleTopic_MapperTopic extends Mapper {
".$sWhere."
AND
t.blog_id=b.blog_id
ORDER by ".implode(', ', $aFilter['order'])." ";
ORDER by ".implode(', ', $aFilter['order'])." ";
$aTopics=array();
if ($aRows=$this->oDb->select($sql)) {
if ($aRows=$this->oDb->select($sql)) {
foreach ($aRows as $aTopic) {
$aTopics[]=$aTopic['topic_id'];
}
}
}
return $aTopics;
return $aTopics;
}
public function GetTopicsByTag($sTag,$aExcludeBlog,&$iCount,$iCurrPage,$iPerPage) {
/**
* Получает список топиков по тегу
*
* @param string $sTag Тег
* @param array $aExcludeBlog Список ID блогов для исключения
* @param int $iCount Возвращает общее количество элементов
* @param int $iCurrPage Номер страницы
* @param int $iPerPage Количество элементов на страницу
* @return array
*/
public function GetTopicsByTag($sTag,$aExcludeBlog,&$iCount,$iCurrPage,$iPerPage) {
$sql = "
SELECT
topic_id
@ -243,13 +316,13 @@ class ModuleTopic_MapperTopic extends Mapper {
{ AND blog_id NOT IN (?a) }
ORDER BY topic_id DESC
LIMIT ?d, ?d ";
$aTopics=array();
if ($aRows=$this->oDb->selectPage(
$iCount,$sql,$sTag,
(is_array($aExcludeBlog)&&count($aExcludeBlog)) ? $aExcludeBlog : DBSIMPLE_SKIP,
($iCurrPage-1)*$iPerPage, $iPerPage
)
$iCount,$sql,$sTag,
(is_array($aExcludeBlog)&&count($aExcludeBlog)) ? $aExcludeBlog : DBSIMPLE_SKIP,
($iCurrPage-1)*$iPerPage, $iPerPage
)
) {
foreach ($aRows as $aTopic) {
$aTopics[]=$aTopic['topic_id'];
@ -257,8 +330,14 @@ class ModuleTopic_MapperTopic extends Mapper {
}
return $aTopics;
}
/**
* Получает топики по рейтингу и дате
*
* @param string $sDate Дата
* @param int $iLimit Количество
* @param array $aExcludeBlog Список ID блогов для исключения
* @return array
*/
public function GetTopicsRatingByDate($sDate,$iLimit,$aExcludeBlog=array()) {
$sql = "SELECT
t.topic_id
@ -272,13 +351,13 @@ class ModuleTopic_MapperTopic extends Mapper {
t.topic_rating >= 0
{ AND t.blog_id NOT IN(?a) }
ORDER by t.topic_rating desc, t.topic_id desc
LIMIT 0, ?d ";
LIMIT 0, ?d ";
$aTopics=array();
if ($aRows=$this->oDb->select(
$sql,$sDate,
(is_array($aExcludeBlog)&&count($aExcludeBlog)) ? $aExcludeBlog : DBSIMPLE_SKIP,
$iLimit
)
$sql,$sDate,
(is_array($aExcludeBlog)&&count($aExcludeBlog)) ? $aExcludeBlog : DBSIMPLE_SKIP,
$iLimit
)
) {
foreach ($aRows as $aTopic) {
$aTopics[]=$aTopic['topic_id'];
@ -286,7 +365,13 @@ class ModuleTopic_MapperTopic extends Mapper {
}
return $aTopics;
}
/**
* Получает список тегов топиков
*
* @param int $iLimit Количество
* @param array $aExcludeTopic Список ID топиков для исключения
* @return array
*/
public function GetTopicTags($iLimit,$aExcludeTopic=array()) {
$sql = "SELECT
tt.topic_tag_text,
@ -301,26 +386,32 @@ class ModuleTopic_MapperTopic extends Mapper {
ORDER BY
count desc
LIMIT 0, ?d
";
";
$aReturn=array();
$aReturnSort=array();
if ($aRows=$this->oDb->select(
$sql,
(is_array($aExcludeTopic)&&count($aExcludeTopic)) ? $aExcludeTopic : DBSIMPLE_SKIP,
$iLimit
)
$sql,
(is_array($aExcludeTopic)&&count($aExcludeTopic)) ? $aExcludeTopic : DBSIMPLE_SKIP,
$iLimit
)
) {
foreach ($aRows as $aRow) {
foreach ($aRows as $aRow) {
$aReturn[mb_strtolower($aRow['topic_tag_text'],'UTF-8')]=$aRow;
}
ksort($aReturn);
foreach ($aReturn as $aRow) {
$aReturnSort[]=Engine::GetEntity('Topic_TopicTag',$aRow);
$aReturnSort[]=Engine::GetEntity('Topic_TopicTag',$aRow);
}
}
return $aReturnSort;
}
/**
* Получает список тегов из топиков открытых блогов (open,personal)
*
* @param int $iLimit Количество
* @param int|null $iUserId ID пользователя, чью теги получаем
* @return array
*/
public function GetOpenTopicTags($iLimit,$iUserId=null) {
$sql = "
SELECT
@ -341,36 +432,45 @@ class ModuleTopic_MapperTopic extends Mapper {
ORDER BY
count desc
LIMIT 0, ?d
";
";
$aReturn=array();
$aReturnSort=array();
if ($aRows=$this->oDb->select($sql,is_null($iUserId) ? DBSIMPLE_SKIP : $iUserId,$iLimit)) {
foreach ($aRows as $aRow) {
foreach ($aRows as $aRow) {
$aReturn[mb_strtolower($aRow['topic_tag_text'],'UTF-8')]=$aRow;
}
ksort($aReturn);
foreach ($aReturn as $aRow) {
$aReturnSort[]=Engine::GetEntity('Topic_TopicTag',$aRow);
$aReturnSort[]=Engine::GetEntity('Topic_TopicTag',$aRow);
}
}
return $aReturnSort;
}
/**
* Увеличивает у топика число комментов
*
* @param int $sTopicId ID топика
* @return bool
*/
public function increaseTopicCountComment($sTopicId) {
$sql = "UPDATE ".Config::Get('db.table.topic')."
SET
topic_count_comment=topic_count_comment+1
WHERE
topic_id = ?
";
";
if ($this->oDb->query($sql,$sTopicId)) {
return true;
}
}
return false;
}
public function UpdateTopic(ModuleTopic_EntityTopic $oTopic) {
/**
* Обновляет топик
*
* @param ModuleTopic_EntityTopic $oTopic Объект топика
* @return bool
*/
public function UpdateTopic(ModuleTopic_EntityTopic $oTopic) {
$sql = "UPDATE ".Config::Get('db.table.topic')."
SET
blog_id= ?d,
@ -395,15 +495,20 @@ class ModuleTopic_MapperTopic extends Mapper {
topic_text_hash = ?
WHERE
topic_id = ?d
";
";
if ($this->oDb->query($sql,$oTopic->getBlogId(),$oTopic->getTitle(),$oTopic->getTags(),$oTopic->getDateAdd(),$oTopic->getDateEdit(),$oTopic->getUserIp(),$oTopic->getPublish(),$oTopic->getPublishDraft(),$oTopic->getPublishIndex(),$oTopic->getRating(),$oTopic->getCountVote(),$oTopic->getCountVoteUp(),$oTopic->getCountVoteDown(),$oTopic->getCountVoteAbstain(),$oTopic->getCountRead(),$oTopic->getCountComment(),$oTopic->getCountFavourite(),$oTopic->getCutText(),$oTopic->getForbidComment(),$oTopic->getTextHash(),$oTopic->getId())) {
$this->UpdateTopicContent($oTopic);
return true;
}
}
return false;
}
public function UpdateTopicContent(ModuleTopic_EntityTopic $oTopic) {
/**
* Обновляет контент топика
*
* @param ModuleTopic_EntityTopic $oTopic Объект топика
* @return bool
*/
public function UpdateTopicContent(ModuleTopic_EntityTopic $oTopic) {
$sql = "UPDATE ".Config::Get('db.table.topic_content')."
SET
topic_text= ?,
@ -412,13 +517,18 @@ class ModuleTopic_MapperTopic extends Mapper {
topic_extra= ?
WHERE
topic_id = ?d
";
";
if ($this->oDb->query($sql,$oTopic->getText(),$oTopic->getTextShort(),$oTopic->getTextSource(),$oTopic->getExtra(),$oTopic->getId())) {
return true;
}
}
return false;
}
/**
* Строит строку условий для SQL запроса топиков
*
* @param array $aFilter Фильтр
* @return string
*/
protected function buildFilter($aFilter) {
$sWhere='';
if (isset($aFilter['topic_date_more'])) {
@ -426,7 +536,7 @@ class ModuleTopic_MapperTopic extends Mapper {
}
if (isset($aFilter['topic_publish'])) {
$sWhere.=" AND t.topic_publish = ".(int)$aFilter['topic_publish'];
}
}
if (isset($aFilter['topic_rating']) and is_array($aFilter['topic_rating'])) {
$sPublishIndex='';
if (isset($aFilter['topic_rating']['publish_index']) and $aFilter['topic_rating']['publish_index']==1) {
@ -436,7 +546,7 @@ class ModuleTopic_MapperTopic extends Mapper {
$sWhere.=" AND ( t.topic_rating >= ".(float)$aFilter['topic_rating']['value']." {$sPublishIndex} ) ";
} else {
$sWhere.=" AND ( t.topic_rating < ".(float)$aFilter['topic_rating']['value']." ) ";
}
}
}
if (isset($aFilter['topic_new'])) {
$sWhere.=" AND t.topic_date_add >= '".$aFilter['topic_new']."'";
@ -468,8 +578,8 @@ class ModuleTopic_MapperTopic extends Mapper {
$sType=$aBlogId;
$aBlogId=array();
}
$aBlogTypes[] = (count($aBlogId)==0)
$aBlogTypes[] = (count($aBlogId)==0)
? "(b.blog_type='".$sType."')"
: "(b.blog_type='".$sType."' AND t.blog_id IN ('".join("','",$aBlogId)."'))";
}
@ -483,9 +593,15 @@ class ModuleTopic_MapperTopic extends Mapper {
}
return $sWhere;
}
/**
* Получает список тегов по первым буквам тега
*
* @param string $sTag Тэг
* @param int $iLimit Количество
* @return bool
*/
public function GetTopicTagsByLike($sTag,$iLimit) {
$sTag=mb_strtolower($sTag,"UTF-8");
$sTag=mb_strtolower($sTag,"UTF-8");
$sql = "SELECT
topic_tag_text
FROM
@ -495,7 +611,7 @@ class ModuleTopic_MapperTopic extends Mapper {
GROUP BY
topic_tag_text
LIMIT 0, ?d
";
";
$aReturn=array();
if ($aRows=$this->oDb->select($sql,$sTag.'%',$iLimit)) {
foreach ($aRows as $aRow) {
@ -504,8 +620,13 @@ class ModuleTopic_MapperTopic extends Mapper {
}
return $aReturn;
}
public function UpdateTopicRead(ModuleTopic_EntityTopicRead $oTopicRead) {
/**
* Обновляем дату прочтения топика
*
* @param ModuleTopic_EntityTopicRead $oTopicRead Объект факта чтения топика
* @return int
*/
public function UpdateTopicRead(ModuleTopic_EntityTopicRead $oTopicRead) {
$sql = "UPDATE ".Config::Get('db.table.topic_read')."
SET
comment_count_last = ? ,
@ -515,11 +636,16 @@ class ModuleTopic_MapperTopic extends Mapper {
topic_id = ?
AND
user_id = ?
";
";
return $this->oDb->query($sql,$oTopicRead->getCommentCountLast(),$oTopicRead->getCommentIdLast(),$oTopicRead->getDateRead(),$oTopicRead->getTopicId(),$oTopicRead->getUserId());
}
public function AddTopicRead(ModuleTopic_EntityTopicRead $oTopicRead) {
}
/**
* Устанавливаем дату прочтения топика
*
* @param ModuleTopic_EntityTopicRead $oTopicRead Объект факта чтения топика
* @return bool
*/
public function AddTopicRead(ModuleTopic_EntityTopicRead $oTopicRead) {
$sql = "INSERT INTO ".Config::Get('db.table.topic_read')."
SET
comment_count_last = ? ,
@ -527,32 +653,38 @@ class ModuleTopic_MapperTopic extends Mapper {
date_read = ? ,
topic_id = ? ,
user_id = ?
";
";
return $this->oDb->query($sql,$oTopicRead->getCommentCountLast(),$oTopicRead->getCommentIdLast(),$oTopicRead->getDateRead(),$oTopicRead->getTopicId(),$oTopicRead->getUserId());
}
/**
* Удаляет записи о чтении записей по списку идентификаторов
*
* @param array $aTopicId
* @param array $aTopicId Список ID топиков
* @return bool
*/
*/
public function DeleteTopicReadByArrayId($aTopicId) {
$sql = "
DELETE FROM ".Config::Get('db.table.topic_read')."
WHERE
topic_id IN(?a)
";
";
if ($this->oDb->query($sql,$aTopicId)) {
return true;
}
return false;
}
/**
* Получить список просмотром/чтения топиков по списку айдишников
*
* @param array $aArrayId Список ID топиков
* @param int $sUserId ID пользователя
* @return array
*/
public function GetTopicsReadByArray($aArrayId,$sUserId) {
if (!is_array($aArrayId) or count($aArrayId)==0) {
return array();
}
$sql = "SELECT
t.*
FROM
@ -567,10 +699,15 @@ class ModuleTopic_MapperTopic extends Mapper {
foreach ($aRows as $aRow) {
$aReads[]=Engine::GetEntity('Topic_TopicRead',$aRow);
}
}
}
return $aReads;
}
/**
* Добавляет факт голосования за топик-вопрос
*
* @param ModuleTopic_EntityTopicQuestionVote $oTopicQuestionVote Объект голосования в топике-опросе
* @return bool
*/
public function AddTopicQuestionVote(ModuleTopic_EntityTopicQuestionVote $oTopicQuestionVote) {
$sql = "INSERT INTO ".Config::Get('db.table.topic_question_vote')."
(topic_id,
@ -578,20 +715,25 @@ class ModuleTopic_MapperTopic extends Mapper {
answer
)
VALUES(?d, ?d, ?f)
";
if ($this->oDb->query($sql,$oTopicQuestionVote->getTopicId(),$oTopicQuestionVote->getVoterId(),$oTopicQuestionVote->getAnswer())===0)
";
if ($this->oDb->query($sql,$oTopicQuestionVote->getTopicId(),$oTopicQuestionVote->getVoterId(),$oTopicQuestionVote->getAnswer())===0)
{
return true;
}
}
return false;
}
/**
* Получить список голосований в топике-опросе по списку айдишников
*
* @param array $aArrayId Список ID топиков
* @param int $sUserId ID пользователя
* @return array
*/
public function GetTopicsQuestionVoteByArray($aArrayId,$sUserId) {
if (!is_array($aArrayId) or count($aArrayId)==0) {
return array();
}
$sql = "SELECT
v.*
FROM
@ -606,57 +748,54 @@ class ModuleTopic_MapperTopic extends Mapper {
foreach ($aRows as $aRow) {
$aVotes[]=Engine::GetEntity('Topic_TopicQuestionVote',$aRow);
}
}
}
return $aVotes;
}
/**
* Перемещает топики в другой блог
*
* @param array $aTopics
* @param string $sBlogId
* @param array $aTopics Список ID топиков
* @param int $sBlogId ID блога
* @return bool
*/
*/
public function MoveTopicsByArrayId($aTopics,$sBlogId) {
if(!is_array($aTopics)) $aTopics = array($aTopics);
$sql = "UPDATE ".Config::Get('db.table.topic')."
SET
blog_id= ?d
WHERE
topic_id IN(?a)
";
";
if ($this->oDb->query($sql,$sBlogId,$aTopics)) {
return true;
}
}
return false;
}
/**
* Перемещает топики в другой блог
*
* @param string $sBlogId
* @param string $sBlogIdNew
* @param int $sBlogId ID старого блога
* @param int $sBlogIdNew ID нового блога
* @return bool
*/
*/
public function MoveTopics($sBlogId,$sBlogIdNew) {
$sql = "UPDATE ".Config::Get('db.table.topic')."
SET
blog_id= ?d
WHERE
blog_id = ?d
";
";
if ($this->oDb->query($sql,$sBlogIdNew,$sBlogId)) {
return true;
}
}
return false;
}
/**
* Перемещает теги топиков в другой блог
*
* @param string $sBlogId
* @param string $sBlogIdNew
* @param int $sBlogId ID старого блога
* @param int $sBlogIdNew ID нового блога
* @return bool
*/
public function MoveTopicsTags($sBlogId,$sBlogIdNew) {
@ -665,42 +804,38 @@ class ModuleTopic_MapperTopic extends Mapper {
blog_id= ?d
WHERE
blog_id = ?d
";
";
if ($this->oDb->query($sql,$sBlogIdNew,$sBlogId)) {
return true;
}
}
return false;
}
/**
* Перемещает теги топиков в другой блог
*
* @param array $aTopics
* @param string $sBlogId
* @param array $aTopics Список ID топиков
* @param int $sBlogId ID блога
* @return bool
*/
public function MoveTopicsTagsByArrayId($aTopics,$sBlogId) {
if(!is_array($aTopics)) $aTopics = array($aTopics);
$sql = "UPDATE ".Config::Get('db.table.topic_tag')."
SET
blog_id= ?d
WHERE
topic_id IN(?a)
";
";
if ($this->oDb->query($sql,$sBlogId,$aTopics)) {
return true;
}
}
return false;
}
/**
* Возвращает список фоток из фото-сета по списку id фоток
* Возвращает список фотографий к топику-фотосет по списку id фоток
*
* @param unknown_type $aArrayId
* @return unknown
* @param array $aPhotoId Список ID фото
* @return array
*/
public function GetTopicPhotosByArrayId($aArrayId) {
if (!is_array($aArrayId) or count($aArrayId)==0) {
@ -722,16 +857,15 @@ class ModuleTopic_MapperTopic extends Mapper {
}
return $aReturn;
}
public function getPhotosByTopicId($iTopicId, $iFromId, $iCount)
{
/**
* Получить список изображений из фотосета по id топика
*
* @param int $iTopicId ID топика
* @param int|null $iFromId ID с которого начинать выборку
* @param int|null $iCount Количество
* @return array
*/
public function getPhotosByTopicId($iTopicId, $iFromId, $iCount) {
$sql = 'SELECT * FROM ' . Config::Get('db.table.topic_photo') . ' WHERE topic_id = ?d {AND id > ?d LIMIT 0, ?d}';
$aPhotos = $this->oDb->select($sql, $iTopicId, ($iFromId !== null) ? $iFromId : DBSIMPLE_SKIP, $iCount);
$aReturn = array();
@ -742,9 +876,13 @@ class ModuleTopic_MapperTopic extends Mapper {
}
return $aReturn;
}
public function getPhotosByTargetTmp($sTargetTmp)
{
/**
* Получить список изображений из фотосета по временному коду
*
* @param string $sTargetTmp Временный ключ
* @return array
*/
public function getPhotosByTargetTmp($sTargetTmp) {
$sql = 'SELECT * FROM ' . Config::Get('db.table.topic_photo') . ' WHERE target_tmp = ?';
$aPhotos = $this->oDb->select($sql, $sTargetTmp);
$aReturn = array();
@ -755,9 +893,13 @@ class ModuleTopic_MapperTopic extends Mapper {
}
return $aReturn;
}
public function getTopicPhotoById($iPhotoId)
{
/**
* Получить изображение из фотосета по его id
*
* @param int $iPhotoId ID фото
* @return ModuleTopic_EntityTopicPhoto|null
*/
public function getTopicPhotoById($iPhotoId) {
$sql = 'SELECT * FROM ' . Config::Get('db.table.topic_photo') . ' WHERE id = ?d';
$aPhoto = $this->oDb->selectRow($sql, $iPhotoId);
if ($aPhoto) {
@ -766,23 +908,35 @@ class ModuleTopic_MapperTopic extends Mapper {
return null;
}
}
public function getCountPhotosByTopicId($iTopicId)
{
/**
* Получить число изображений из фотосета по id топика
*
* @param int $iTopicId ID топика
* @return int
*/
public function getCountPhotosByTopicId($iTopicId) {
$sql = 'SELECT count(id) FROM ' . Config::Get('db.table.topic_photo') . ' WHERE topic_id = ?d';
$aPhotosCount = $this->oDb->selectCol($sql, $iTopicId);
return $aPhotosCount[0];
}
public function getCountPhotosByTargetTmp($sTargetTmp)
{
/**
* Получить число изображений из фотосета по id топика
*
* @param string $sTargetTmp Временный ключ
* @return int
*/
public function getCountPhotosByTargetTmp($sTargetTmp) {
$sql = 'SELECT count(id) FROM ' . Config::Get('db.table.topic_photo') . ' WHERE target_tmp = ?';
$aPhotosCount = $this->oDb->selectCol($sql, $sTargetTmp);
return $aPhotosCount[0];
}
public function addTopicPhoto($oPhoto)
{
/**
* Добавить к топику изображение
*
* @param ModuleTopic_EntityTopicPhoto $oPhoto Объект фото к топику-фотосету
* @return bool
*/
public function addTopicPhoto($oPhoto) {
if (!$oPhoto->getTopicId() && !$oPhoto->getTargetTmp()) return false;
$sTargetType = ($oPhoto->getTopicId()) ? 'topic_id' : 'target_tmp';
$iTargetId = ($sTargetType == 'topic_id') ? $oPhoto->getTopicId() : $oPhoto->getTargetTmp();
@ -790,9 +944,12 @@ class ModuleTopic_MapperTopic extends Mapper {
path = ?, description = ?, ?# = ?';
return $this->oDb->query($sql, $oPhoto->getPath(), $oPhoto->getDescription(), $sTargetType, $iTargetId);
}
public function updateTopicPhoto($oPhoto)
{
/**
* Обновить данные по изображению
*
* @param ModuleTopic_EntityTopicPhoto $oPhoto Объект фото
*/
public function updateTopicPhoto($oPhoto) {
if (!$oPhoto->getTopicId() && !$oPhoto->getTargetTmp()) return false;
if ($oPhoto->getTopicId()) {
$oPhoto->setTargetTmp = null;
@ -801,14 +958,21 @@ class ModuleTopic_MapperTopic extends Mapper {
path = ?, description = ?, topic_id = ?d, target_tmp=? WHERE id = ?d';
$this->oDb->query($sql, $oPhoto->getPath(), $oPhoto->getDescription(), $oPhoto->getTopicId(), $oPhoto->getTargetTmp(), $oPhoto->getId());
}
public function deleteTopicPhoto($iPhotoId)
{
/**
* Удалить изображение
*
* @param int $iPhotoId ID фото
*/
public function deleteTopicPhoto($iPhotoId) {
$sql = 'DELETE FROM '. Config::Get('db.table.topic_photo') . ' WHERE
id= ?d';
$this->oDb->query($sql, $iPhotoId);
}
/**
* Пересчитывает счетчик избранных топиков
*
* @return bool
*/
public function RecalculateFavourite() {
$sql = "
UPDATE ".Config::Get('db.table.topic')." t
@ -828,7 +992,11 @@ class ModuleTopic_MapperTopic extends Mapper {
}
return false;
}
/**
* Пересчитывает счетчики голосований
*
* @return bool
*/
public function RecalculateVote() {
$sql = "
UPDATE ".Config::Get('db.table.topic')." t

View file

@ -16,59 +16,75 @@
*/
/**
* Модуль пользовательских лент контента
* Модуль пользовательских лент контента (топиков)
*
* @package modules.userfeed
* @since 1.0
*/
class ModuleUserfeed extends Module
{
const SUBSCRIBE_TYPE_BLOG = 1; // Подписки на топики по блогу
const SUBSCRIBE_TYPE_USER = 2;// Подписки на топики по юзеру
class ModuleUserfeed extends Module {
/**
* Подписки на топики по блогу
*/
const SUBSCRIBE_TYPE_BLOG = 1;
/**
* Подписки на топики по юзеру
*/
const SUBSCRIBE_TYPE_USER = 2;
/**
* Объект маппера
*
* @var ModuleUserfeed_MapperUserfeed|null
*/
protected $oMapper = null;
/**
* Инициализация модуля
*/
public function Init() {
$this->oMapper=Engine::GetMapper(__CLASS__);
}
/**
* Подписать пользователя
* @param type $iUserId Id подписываемого пользователя
* @param type $iSubscribeType Тип подписки (см. константы класса)
* @param type $iTargetId Id цели подписки
*/
* Подписать пользователя
*
* @param int $iUserId ID подписываемого пользователя
* @param int $iSubscribeType Тип подписки (см. константы класса)
* @param int $iTargetId ID цели подписки
* @return bool
*/
public function subscribeUser($iUserId, $iSubscribeType, $iTargetId) {
return $this->oMapper->subscribeUser($iUserId, $iSubscribeType, $iTargetId);
}
/**
* Отписать пользователя
* @param type $iUserId Id подписываемого пользователя
* @param type $iSubscribeType Тип подписки (см. константы класса)
* @param type $iTargetId Id цели подписки
*/
* Отписать пользователя
*
* @param int $iUserId ID подписываемого пользователя
* @param int $iSubscribeType Тип подписки (см. константы класса)
* @param int $iTargetId ID цели подписки
* @return bool
*/
public function unsubscribeUser($iUserId, $iSubscribeType, $iTargetId) {
return $this->oMapper->unsubscribeUser($iUserId, $iSubscribeType, $iTargetId);
}
/**
* Получить ленту топиков по подписке
* @param type $iUserId Id пользователя, для которого получаем ленту
* @param type $iCount Число получаемых записей (если null, из конфига)
* @param type $iFromId Получить записи, начиная с указанной
* @return type
*/
* Получить ленту топиков по подписке
*
* @param int $iUserId ID пользователя, для которого получаем ленту
* @param int $iCount Число получаемых записей (если null, из конфига)
* @param int $iFromId Получить записи, начиная с указанной
* @return array
*/
public function read($iUserId, $iCount = null, $iFromId = null) {
if (!$iCount) $iCount = Config::Get('module.userfeed.count_default');
$aUserSubscribes = $this->oMapper->getUserSubscribes($iUserId);
$aTopicsIds = $this->oMapper->readFeed($aUserSubscribes, $iCount, $iFromId);
return $this->Topic_getTopicsAdditionalData($aTopicsIds);
}
/**
* Получить список подписок пользователя
* @param type $iUserId Id пользователя, для которого загружаются подписки
* @return type
*/
* Получить список подписок пользователя
*
* @param int $iUserId ID пользователя, для которого загружаются подписки
* @return array
*/
public function getUserSubscribes($iUserId) {
$aUserSubscribes = $this->oMapper->getUserSubscribes($iUserId);
$aResult = array('blogs' => array(), 'users' => array());

View file

@ -15,47 +15,78 @@
---------------------------------------------------------
*/
class ModuleUserfeed_MapperUserfeed extends Mapper
{
public function subscribeUser($iUserId, $iSubscribeType, $iTargetId)
{
$sql = 'SELECT * FROM ' . Config::Get('db.table.userfeed_subscribe') . ' WHERE
/**
* Маппер для работы с БД
*
* @package modules.userfeed
* @since 1.0
*/
class ModuleUserfeed_MapperUserfeed extends Mapper {
/**
* Подписать пользователя
*
* @param int $iUserId ID подписываемого пользователя
* @param int $iSubscribeType Тип подписки (см. константы класса)
* @param int $iTargetId ID цели подписки
* @return bool
*/
public function subscribeUser($iUserId, $iSubscribeType, $iTargetId) {
$sql = 'SELECT * FROM ' . Config::Get('db.table.userfeed_subscribe') . ' WHERE
user_id = ?d AND subscribe_type = ?d AND target_id = ?d';
if (!$this->oDb->select($sql, $iUserId, $iSubscribeType, $iTargetId)) {
$sql = 'INSERT INTO ' . Config::Get('db.table.userfeed_subscribe') . ' SET
if (!$this->oDb->select($sql, $iUserId, $iSubscribeType, $iTargetId)) {
$sql = 'INSERT INTO ' . Config::Get('db.table.userfeed_subscribe') . ' SET
user_id = ?d, subscribe_type = ?d, target_id = ?d';
$this->oDb->query($sql, $iUserId, $iSubscribeType, $iTargetId);
}
}
public function unsubscribeUser($iUserId, $iSubscribeType, $iTargetId)
{
$sql = 'DELETE FROM ' . Config::Get('db.table.userfeed_subscribe') . ' WHERE
$this->oDb->query($sql, $iUserId, $iSubscribeType, $iTargetId);
return true;
}
return false;
}
/**
* Отписать пользователя
*
* @param int $iUserId ID подписываемого пользователя
* @param int $iSubscribeType Тип подписки (см. константы класса)
* @param int $iTargetId ID цели подписки
* @return bool
*/
public function unsubscribeUser($iUserId, $iSubscribeType, $iTargetId) {
$sql = 'DELETE FROM ' . Config::Get('db.table.userfeed_subscribe') . ' WHERE
user_id = ?d AND subscribe_type = ?d AND target_id = ?d';
$this->oDb->query($sql, $iUserId, $iSubscribeType, $iTargetId);
}
$this->oDb->query($sql, $iUserId, $iSubscribeType, $iTargetId);
return true;
}
/**
* Получить список подписок пользователя
*
* @param int $iUserId ID пользователя, для которого загружаются подписки
* @return array
*/
public function getUserSubscribes($iUserId) {
$sql = 'SELECT subscribe_type, target_id FROM ' . Config::Get('db.table.userfeed_subscribe') . ' WHERE user_id = ?d';
$aSubscribes = $this->oDb->select($sql, $iUserId);
$aResult = array('blogs' => array(), 'users' => array());
public function getUserSubscribes($iUserId)
{
$sql = 'SELECT subscribe_type, target_id FROM ' . Config::Get('db.table.userfeed_subscribe') . ' WHERE user_id = ?d';
$aSubscribes = $this->oDb->select($sql, $iUserId);
$aResult = array('blogs' => array(), 'users' => array());
if (!count($aSubscribes)) return $aResult;
if (!count($aSubscribes)) return $aResult;
foreach ($aSubscribes as $aSubscribe) {
if($aSubscribe['subscribe_type'] == ModuleUserfeed::SUBSCRIBE_TYPE_BLOG) {
$aResult['blogs'][] = $aSubscribe['target_id'];
} elseif ($aSubscribe['subscribe_type'] == ModuleUserfeed::SUBSCRIBE_TYPE_USER) {
$aResult['users'][] = $aSubscribe['target_id'];
}
}
return $aResult;
}
public function readFeed($aUserSubscribes, $iCount, $iFromId) {
$sql = "
foreach ($aSubscribes as $aSubscribe) {
if($aSubscribe['subscribe_type'] == ModuleUserfeed::SUBSCRIBE_TYPE_BLOG) {
$aResult['blogs'][] = $aSubscribe['target_id'];
} elseif ($aSubscribe['subscribe_type'] == ModuleUserfeed::SUBSCRIBE_TYPE_USER) {
$aResult['users'][] = $aSubscribe['target_id'];
}
}
return $aResult;
}
/**
* Получить ленту топиков по подписке
*
* @param array $aUserSubscribes Список подписок пользователя
* @param int $iCount Число получаемых записей (если null, из конфига)
* @param int $iFromId Получить записи, начиная с указанной
* @return array
*/
public function readFeed($aUserSubscribes, $iCount, $iFromId) {
$sql = "
SELECT
t.topic_id
FROM
@ -70,12 +101,12 @@ class ModuleUserfeed_MapperUserfeed extends Mapper
ORDER BY t.topic_id DESC
{ LIMIT 0, ?d }";
$aTopics=$aTopics=$this->oDb->selectCol($sql,
$iFromId ? $iFromId : DBSIMPLE_SKIP,
count($aUserSubscribes['blogs']) ? $aUserSubscribes['blogs'] : DBSIMPLE_SKIP,
count($aUserSubscribes['users']) ? $aUserSubscribes['users'] : DBSIMPLE_SKIP,
$iCount ? $iCount : DBSIMPLE_SKIP
);
return $aTopics;
}
$aTopics=$aTopics=$this->oDb->selectCol($sql,
$iFromId ? $iFromId : DBSIMPLE_SKIP,
count($aUserSubscribes['blogs']) ? $aUserSubscribes['blogs'] : DBSIMPLE_SKIP,
count($aUserSubscribes['users']) ? $aUserSubscribes['users'] : DBSIMPLE_SKIP,
$iCount ? $iCount : DBSIMPLE_SKIP
);
return $aTopics;
}
}