1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-07-09 01:44:25 +03:00
ifhub.club/classes/modules/blog/Blog.class.php
Mzhelskiy Maxim 548bd31699
2009-05-29 15:32:37 +00:00

461 lines
14 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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
*
---------------------------------------------------------
*/
set_include_path(get_include_path().PATH_SEPARATOR.dirname(__FILE__));
require_once('mapper/Blog.mapper.class.php');
/**
* Модуль для работы с блогами
*
*/
class LsBlog extends Module {
protected $oMapperBlog;
protected $oUserCurrent=null;
/**
* Инициализация
*
*/
public function Init() {
$this->oMapperBlog=new Mapper_Blog($this->Database_GetConnect());
$this->oMapperBlog->SetUserCurrent($this->User_GetUserCurrent());
$this->oUserCurrent=$this->User_GetUserCurrent();
}
/**
* Получает дополнительные данные(объекты) для блогов по их ID
*
*/
public function GetBlogsAdditionalData($aBlogId,$aAllowData=array('vote','owner')) {
func_array_simpleflip($aAllowData);
if (!is_array($aBlogId)) {
$aBlogId=array($aBlogId);
}
/**
* Получаем блоги
*/
$aBlogs=$this->GetBlogsByArrayId($aBlogId);
/**
* Формируем ID дополнительных данных, которые нужно получить
*/
$aUserId=array();
foreach ($aBlogs as $oBlog) {
if (isset($aAllowData['owner'])) {
$aUserId[]=$oBlog->getOwnerId();
}
}
/**
* Получаем дополнительные данные
*/
$aUsers=isset($aAllowData['owner']) && is_array($aAllowData['owner']) ? $this->User_GetUsersAdditionalData($aUserId,$aAllowData['owner']) : $this->User_GetUsersAdditionalData($aUserId);
/**
* Добавляем данные к результату - списку блогов
*/
foreach ($aBlogs as $oBlog) {
if (isset($aUsers[$oBlog->getOwnerId()])) {
$oBlog->setOwner($aUsers[$oBlog->getOwnerId()]);
} else {
$oBlog->setOwner(null); // или $oBlog->setOwner(new UserEntity_User());
}
/**
* Права на блог
*/
$oBlog->setUserIsAdministrator(false);
$oBlog->setUserIsModerator(false);
if ($this->oUserCurrent and $oBlogUser=$this->GetRelationBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId())) {
if ($oBlogUser->getIsAdministrator()) {
$oBlog->setUserIsAdministrator(true);
}
if ($oBlogUser->getIsModerator()) {
$oBlog->setUserIsModerator(true);
}
}
/**
*
*/
}
return $aBlogs;
}
/**
* Список блогов по ID
*
* @param array $aUserId
*/
public function GetBlogsByArrayId($aBlogId) {
if (!is_array($aBlogId)) {
$aBlogId=array($aBlogId);
}
$aBlogId=array_unique($aBlogId);
$aBlogs=array();
/**
* Делаем мульти-запрос к кешу
*/
$aCacheKeys=func_array_change_value($aBlogId,'blog_');
if (false !== ($data = $this->Cache_Get($aCacheKeys))) {
/**
* проверяем что досталось из кеша
*/
foreach ($aCacheKeys as $sKey ) {
if (isset($data[$sKey])) {
$aBlogs[$data[$sKey]->getId()]=$data[$sKey];
}
}
}
/**
* Смотрим каких блогов не было в кеше и делаем запрос в БД
*/
$aBlogIdNeedQuery=array_diff($aBlogId,array_keys($aBlogs));
if ($data = $this->oMapperBlog->GetBlogsByArrayId($aBlogIdNeedQuery)) {
foreach ($data as $oBlog) {
/**
* Добавляем к результату и сохраняем в кеш
*/
$aBlogs[$oBlog->getId()]=$oBlog;
$this->Cache_Set($oBlog, "blog_{$oBlog->getId()}", array("blog_update_{$oBlog->getId()}"), 60*60*24*4);
}
}
return $aBlogs;
}
/**
* Получить персональный блог юзера
*
* @param Entity_User $oUser
* @return unknown
*/
public function GetPersonalBlogByUserId($sUserId) {
return $this->oMapperBlog->GetPersonalBlogByUserId($sUserId);
}
/**
* Получить блог по айдишнику(номеру)
*
* @param unknown_type $sBlogId
* @return unknown
*/
public function GetBlogById($sBlogId) {
$aBlogs=$this->GetBlogsAdditionalData($sId);
if (isset($aBlogs[$sId])) {
return $aBlogs[$sId];
}
return null;
}
/**
* Получить блог по УРЛу
*
* @param unknown_type $sBlogUrl
* @return unknown
*/
public function GetBlogByUrl($sBlogUrl) {
$s2=-1;
if ($this->oUserCurrent) {
$s2=$this->oUserCurrent->getId();
}
if (false === ($data = $this->Cache_Get("blog_url_{$sBlogUrl}_{$s2}"))) {
if ($data = $this->oMapperBlog->GetBlogByUrl($sBlogUrl)) {
$this->Cache_Set($data, "blog_url_{$sBlogUrl}_{$s2}", array("blog_update_{$data->getId()}",'blog_new'), 60*5);
} else {
$this->Cache_Set($data, "blog_url_{$sBlogUrl}_{$s2}", array('blog_update','blog_new'), 60*5);
}
}
return $data;
}
/**
* Получить блог по названию
*
* @param unknown_type $sTitle
* @return unknown
*/
public function GetBlogByTitle($sTitle) {
if (false === ($data = $this->Cache_Get("blog_url_{$sTitle}"))) {
if ($data = $this->oMapperBlog->GetBlogByTitle($sTitle)) {
$this->Cache_Set($data, "blog_url_{$sTitle}", array("blog_update_{$data->getId()}",'blog_new'), 60*5);
} else {
$this->Cache_Set($data, "blog_url_{$sTitle}", array('blog_update','blog_new'), 60*5);
}
}
return $data;
}
/**
* Создаёт персональный блог
*
* @param Entity_User $oUser
* @return unknown
*/
public function CreatePersonalBlog(UserEntity_User $oUser) {
$oBlog=new BlogEntity_Blog();
$oBlog->setOwnerId($oUser->getId());
$oBlog->setTitle($this->Lang_Get('blogs_personal_title').' '.$oUser->getLogin());
$oBlog->setType('personal');
$oBlog->setDescription($this->Lang_Get('blogs_personal_description'));
$oBlog->setDateAdd(date("Y-m-d H:i:s"));
$oBlog->setLimitRatingTopic(-1000);
$oBlog->setUrl(null);
$oBlog->setAvatar(0);
$oBlog->setAvatarType(null);
return $this->AddBlog($oBlog);
}
/**
* Добавляет блог
*
* @param BlogEntity_Blog $oBlog
* @return unknown
*/
public function AddBlog(BlogEntity_Blog $oBlog) {
if ($sId=$this->oMapperBlog->AddBlog($oBlog)) {
$oBlog->setId($sId);
//чистим зависимые кеши
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array('blog_new',"blog_new_user_{$oBlog->getOwnerId()}"));
return $oBlog;
}
return false;
}
/**
* Обновляет блог
*
* @param BlogEntity_Blog $oBlog
* @return unknown
*/
public function UpdateBlog(BlogEntity_Blog $oBlog) {
$oBlog->setDateEdit(date("Y-m-d H:i:s"));
$res=$this->oMapperBlog->UpdateBlog($oBlog);
if ($res) {
//чистим зависимые кеши
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array('blog_update',"blog_update_{$oBlog->getId()}"));
return true;
}
return false;
}
/**
* Добавляет голосование за блог
*
* @param BlogEntity_BlogVote $oBlogVote
* @return unknown
*/
public function AddBlogVote(BlogEntity_BlogVote $oBlogVote) {
if ($this->oMapperBlog->AddBlogVote($oBlogVote)) {
return true;
}
return false;
}
/**
* Добавляет отношение юзера к блогу, по сути присоединяет к блогу
*
* @param BlogEntity_BlogUser $oBlogUser
* @return unknown
*/
public function AddRelationBlogUser(BlogEntity_BlogUser $oBlogUser) {
if ($this->oMapperBlog->AddRelationBlogUser($oBlogUser)) {
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("blog_relation_change_{$oBlogUser->getUserId()}"));
return true;
}
return false;
}
/**
* Удалет отношение юзера к блогу, по сути отключает от блога
*
* @param BlogEntity_BlogUser $oBlogUser
* @return unknown
*/
public function DeleteRelationBlogUser(BlogEntity_BlogUser $oBlogUser) {
if ($this->oMapperBlog->DeleteRelationBlogUser($oBlogUser)) {
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("blog_relation_change_{$oBlogUser->getUserId()}"));
return true;
}
return false;
}
/**
* Получает список блогов по хозяину
*
* @param unknown_type $sUserId
* @return unknown
*/
public function GetBlogsByOwnerId($sUserId) {
return $this->oMapperBlog->GetBlogsByOwnerId($sUserId);
}
/**
* Получает список всех НЕ персональных блогов
*
* @return unknown
*/
public function GetBlogs() {
return $this->oMapperBlog->GetBlogs();
}
/**
* Получает список отновшений блога к юзеру(пользователей блога)
*
* @param unknown_type $sBlogId
* @return unknown
*/
public function GetRelationBlogUsersByBlogId($sBlogId) {
$aFilter=array(
'blog_id'=> $sBlogId,
'is_moderator' => 0,
'is_administrator' => 0,
);
return $this->oMapperBlog->GetRelationBlogUsers($aFilter);
}
/**
* Получает список пользователей блога
*
* @param unknown_type $sBlogId
* @return unknown
*/
public function GetBlogUsersByBlogId($sBlogId) {
$aFilter=array(
'blog_id'=> $sBlogId,
'is_moderator' => 0,
'is_administrator' => 0,
);
return $this->oMapperBlog->GetBlogUsers($aFilter);
}
/**
* Получает отношение юзера к блогу(состоит в блоге или нет)
*
* @param unknown_type $sUserId
* @return unknown
*/
public function GetRelationBlogUsersByUserId($sUserId,$iRole=null) {
$aFilter=array(
'user_id'=> $sUserId
);
if ($iRole===0) {
$aFilter['is_moderator']=0;
$aFilter['is_administrator']=0;
} elseif ($iRole===1) {
$aFilter['is_moderator']=1;
} elseif ($iRole===2) {
$aFilter['is_administrator']=1;
}
return $this->oMapperBlog->GetRelationBlogUsers($aFilter);
}
/**
* Состоит ли юзер в конкретном блоге
*
* @param unknown_type $sBlogId
* @param unknown_type $sUserId
* @return unknown
*/
public function GetRelationBlogUserByBlogIdAndUserId($sBlogId,$sUserId) {
$aFilter=array(
'blog_id'=> $sBlogId,
'user_id' => $sUserId
);
if ($aBlogUser=$this->oMapperBlog->GetRelationBlogUsers($aFilter)) {
return $aBlogUser[0];
}
return null;
}
/**
* Список модеро вблога
*
* @param unknown_type $sBlogId
* @return unknown
*/
public function GetBlogModeratorsByBlogId($sBlogId) {
$aFilter=array(
'blog_id'=> $sBlogId,
'is_moderator' => 1,
'is_administrator' => 0,
);
return $this->oMapperBlog->GetRelationBlogUsers($aFilter);
}
/**
* Список админов блога
*
* @param unknown_type $sBlogId
* @return unknown
*/
public function GetBlogAdministratorsByBlogId($sBlogId) {
$aFilter=array(
'blog_id'=> $sBlogId,
'is_moderator' => 0,
'is_administrator' => 1,
);
return $this->oMapperBlog->GetRelationBlogUsers($aFilter);
}
/**
* Список тех кто состоит в блоге
*
* @param unknown_type $sBlogId
* @return unknown
*/
public function GetRelationBlog($sBlogId) {
$aFilter=array(
'blog_id'=> $sBlogId,
);
return $this->oMapperBlog->GetRelationBlogUsers($aFilter);
}
public function UpdateRelationBlogUser(BlogEntity_BlogUser $oBlogUser) {
return $this->oMapperBlog->UpdateRelationBlogUser($oBlogUser);
}
/**
* Получает список блогов по рейтингу
*
* @param unknown_type $iLimit
* @return unknown
*/
public function GetBlogsRating($iCurrPage,$iPerPage) {
$s1=-1;
if ($this->oUserCurrent) {
$s1=$this->oUserCurrent->getId();
}
if (false === ($data = $this->Cache_Get("blog_rating_{$iCurrPage}_{$iPerPage}_$s1"))) {
$data = array('collection'=>$this->oMapperBlog->GetBlogsRating($iCount,$iCurrPage,$iPerPage),'count'=>$iCount);
$this->Cache_Set($data, "blog_rating_{$iCurrPage}_{$iPerPage}_$s1", array("blog_update","blog_new"), 60*15);
}
return $data;
}
/**
* Список подключенных блогов по рейтингу
*
* @param unknown_type $sUserId
* @param unknown_type $iLimit
* @return unknown
*/
public function GetBlogsRatingJoin($sUserId,$iLimit) {
if (false === ($data = $this->Cache_Get("blog_rating_join_{$sUserId}_{$iLimit}"))) {
$data = $this->oMapperBlog->GetBlogsRatingJoin($sUserId,$iLimit);
$this->Cache_Set($data, "blog_rating_join_{$sUserId}_{$iLimit}", array('blog_update',"blog_relation_change_{$sUserId}"), 60*60*24);
}
return $data;
}
/**
* Список сових блогов по рейтингу
*
* @param unknown_type $sUserId
* @param unknown_type $iLimit
* @return unknown
*/
public function GetBlogsRatingSelf($sUserId,$iLimit) {
if (false === ($data = $this->Cache_Get("blog_rating_self_{$sUserId}_{$iLimit}"))) {
$data = $this->oMapperBlog->GetBlogsRatingSelf($sUserId,$iLimit);
$this->Cache_Set($data, "blog_rating_self_{$sUserId}_{$iLimit}", array('blog_update',"blog_new_user_{$sUserId}"), 60*60*24);
}
return $data;
}
/**
* Получает голосование за блог(проверяет голосовал ли юзер за этот блог)
*
* @param unknown_type $sBlogId
* @param unknown_type $sUserId
* @return unknown
*/
public function GetBlogVote($sBlogId,$sUserId) {
return $this->oMapperBlog->GetBlogVote($sBlogId,$sUserId);
}
}
?>