2009-05-10 10:50:39 +03:00
|
|
|
|
<?php
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/*-------------------------------------------------------
|
|
|
|
|
*
|
|
|
|
|
* 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__));
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Модуль для работы с блогами
|
|
|
|
|
*
|
|
|
|
|
*/
|
2010-05-27 23:40:30 +03:00
|
|
|
|
class ModuleBlog extends Module {
|
2009-09-17 21:54:55 +03:00
|
|
|
|
/**
|
|
|
|
|
* Возможные роли пользователя в блоге
|
|
|
|
|
*/
|
|
|
|
|
const BLOG_USER_ROLE_GUEST = 0;
|
|
|
|
|
const BLOG_USER_ROLE_USER = 1;
|
|
|
|
|
const BLOG_USER_ROLE_MODERATOR = 2;
|
|
|
|
|
const BLOG_USER_ROLE_ADMINISTRATOR = 4;
|
2009-09-22 00:08:00 +03:00
|
|
|
|
/**
|
|
|
|
|
* Пользователь, приглашенный админом блога в блог
|
|
|
|
|
*/
|
|
|
|
|
const BLOG_USER_ROLE_INVITE = -1;
|
|
|
|
|
/**
|
|
|
|
|
* Пользователь, отклонивший приглашение админа
|
|
|
|
|
*/
|
|
|
|
|
const BLOG_USER_ROLE_REJECT = -2;
|
2009-09-26 23:32:33 +03:00
|
|
|
|
/**
|
|
|
|
|
* Забаненный в блоге пользователь
|
|
|
|
|
*/
|
|
|
|
|
const BLOG_USER_ROLE_BAN = -4;
|
2009-09-22 00:08:00 +03:00
|
|
|
|
|
2008-09-21 09:36:57 +03:00
|
|
|
|
protected $oMapperBlog;
|
|
|
|
|
protected $oUserCurrent=null;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Инициализация
|
|
|
|
|
*
|
|
|
|
|
*/
|
2010-05-27 23:40:30 +03:00
|
|
|
|
public function Init() {
|
|
|
|
|
$this->oMapperBlog=Engine::GetMapper(__CLASS__);
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$this->oMapperBlog->SetUserCurrent($this->User_GetUserCurrent());
|
|
|
|
|
$this->oUserCurrent=$this->User_GetUserCurrent();
|
|
|
|
|
}
|
2009-05-29 18:32:37 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получает дополнительные данные(объекты) для блогов по их ID
|
|
|
|
|
*
|
|
|
|
|
*/
|
2009-07-26 16:43:16 +03:00
|
|
|
|
public function GetBlogsAdditionalData($aBlogId,$aAllowData=array('vote','owner'=>array(),'relation_user')) {
|
2009-05-29 18:32:37 +03:00
|
|
|
|
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();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Получаем дополнительные данные
|
|
|
|
|
*/
|
2009-06-02 22:29:05 +03:00
|
|
|
|
$aBlogUsers=array();
|
|
|
|
|
$aBlogsVote=array();
|
|
|
|
|
$aUsers=isset($aAllowData['owner']) && is_array($aAllowData['owner']) ? $this->User_GetUsersAdditionalData($aUserId,$aAllowData['owner']) : $this->User_GetUsersAdditionalData($aUserId);
|
|
|
|
|
if (isset($aAllowData['relation_user']) and $this->oUserCurrent) {
|
2009-06-07 20:20:58 +03:00
|
|
|
|
$aBlogUsers=$this->GetBlogUsersByArrayBlog($aBlogId,$this->oUserCurrent->getId());
|
2009-06-02 22:29:05 +03:00
|
|
|
|
}
|
2009-06-28 17:04:44 +03:00
|
|
|
|
if (isset($aAllowData['vote']) and $this->oUserCurrent) {
|
|
|
|
|
$aBlogsVote=$this->Vote_GetVoteByArray($aBlogId,'blog',$this->oUserCurrent->getId());
|
2009-06-02 22:29:05 +03:00
|
|
|
|
}
|
2009-05-29 18:32:37 +03:00
|
|
|
|
/**
|
|
|
|
|
* Добавляем данные к результату - списку блогов
|
|
|
|
|
*/
|
|
|
|
|
foreach ($aBlogs as $oBlog) {
|
|
|
|
|
if (isset($aUsers[$oBlog->getOwnerId()])) {
|
|
|
|
|
$oBlog->setOwner($aUsers[$oBlog->getOwnerId()]);
|
|
|
|
|
} else {
|
2010-05-27 18:16:20 +03:00
|
|
|
|
$oBlog->setOwner(null); // или $oBlog->setOwner(new ModuleUser_EntityUser());
|
2009-05-29 18:32:37 +03:00
|
|
|
|
}
|
2009-06-02 22:29:05 +03:00
|
|
|
|
if (isset($aBlogUsers[$oBlog->getId()])) {
|
2009-06-07 20:20:58 +03:00
|
|
|
|
$oBlog->setUserIsJoin(true);
|
2010-03-06 21:14:27 +02:00
|
|
|
|
$oBlog->setUserIsAdministrator($aBlogUsers[$oBlog->getId()]->getIsAdministrator());
|
|
|
|
|
$oBlog->setUserIsModerator($aBlogUsers[$oBlog->getId()]->getIsModerator());
|
2009-06-02 22:29:05 +03:00
|
|
|
|
} else {
|
2009-06-07 20:20:58 +03:00
|
|
|
|
$oBlog->setUserIsJoin(false);
|
2009-06-02 22:29:05 +03:00
|
|
|
|
$oBlog->setUserIsAdministrator(false);
|
|
|
|
|
$oBlog->setUserIsModerator(false);
|
2010-03-06 21:14:27 +02:00
|
|
|
|
}
|
2009-06-02 22:29:05 +03:00
|
|
|
|
if (isset($aBlogsVote[$oBlog->getId()])) {
|
2009-06-28 17:04:44 +03:00
|
|
|
|
$oBlog->setVote($aBlogsVote[$oBlog->getId()]);
|
2009-06-02 22:29:05 +03:00
|
|
|
|
} else {
|
2009-06-28 17:04:44 +03:00
|
|
|
|
$oBlog->setVote(null);
|
2010-03-06 21:14:27 +02:00
|
|
|
|
}
|
2009-05-29 18:32:37 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $aBlogs;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Список блогов по ID
|
|
|
|
|
*
|
|
|
|
|
* @param array $aUserId
|
|
|
|
|
*/
|
|
|
|
|
public function GetBlogsByArrayId($aBlogId) {
|
2009-08-08 12:33:32 +03:00
|
|
|
|
if (!$aBlogId) {
|
|
|
|
|
return array();
|
|
|
|
|
}
|
2009-10-10 22:13:14 +03:00
|
|
|
|
if (Config::Get('sys.cache.solid')) {
|
2009-08-08 12:33:32 +03:00
|
|
|
|
return $this->GetBlogsByArrayIdSolid($aBlogId);
|
|
|
|
|
}
|
2009-05-29 18:32:37 +03:00
|
|
|
|
if (!is_array($aBlogId)) {
|
|
|
|
|
$aBlogId=array($aBlogId);
|
|
|
|
|
}
|
|
|
|
|
$aBlogId=array_unique($aBlogId);
|
2009-06-04 18:02:10 +03:00
|
|
|
|
$aBlogs=array();
|
|
|
|
|
$aBlogIdNotNeedQuery=array();
|
2009-05-29 18:32:37 +03:00
|
|
|
|
/**
|
|
|
|
|
* Делаем мульти-запрос к кешу
|
|
|
|
|
*/
|
2009-06-04 18:02:10 +03:00
|
|
|
|
$aCacheKeys=func_build_cache_keys($aBlogId,'blog_');
|
2009-08-08 12:33:32 +03:00
|
|
|
|
if (false !== ($data = $this->Cache_Get($aCacheKeys))) {
|
2009-05-29 18:32:37 +03:00
|
|
|
|
/**
|
|
|
|
|
* проверяем что досталось из кеша
|
2009-06-04 18:02:10 +03:00
|
|
|
|
*/
|
|
|
|
|
foreach ($aCacheKeys as $sValue => $sKey ) {
|
|
|
|
|
if (array_key_exists($sKey,$data)) {
|
|
|
|
|
if ($data[$sKey]) {
|
|
|
|
|
$aBlogs[$data[$sKey]->getId()]=$data[$sKey];
|
|
|
|
|
} else {
|
|
|
|
|
$aBlogIdNotNeedQuery[]=$sValue;
|
|
|
|
|
}
|
2009-05-29 18:32:37 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
2009-06-04 18:02:10 +03:00
|
|
|
|
}
|
2009-05-29 18:32:37 +03:00
|
|
|
|
/**
|
|
|
|
|
* Смотрим каких блогов не было в кеше и делаем запрос в БД
|
|
|
|
|
*/
|
2009-06-04 18:02:10 +03:00
|
|
|
|
$aBlogIdNeedQuery=array_diff($aBlogId,array_keys($aBlogs));
|
|
|
|
|
$aBlogIdNeedQuery=array_diff($aBlogIdNeedQuery,$aBlogIdNotNeedQuery);
|
|
|
|
|
$aBlogIdNeedStore=$aBlogIdNeedQuery;
|
2009-05-29 18:32:37 +03:00
|
|
|
|
if ($data = $this->oMapperBlog->GetBlogsByArrayId($aBlogIdNeedQuery)) {
|
|
|
|
|
foreach ($data as $oBlog) {
|
|
|
|
|
/**
|
|
|
|
|
* Добавляем к результату и сохраняем в кеш
|
|
|
|
|
*/
|
|
|
|
|
$aBlogs[$oBlog->getId()]=$oBlog;
|
2009-08-08 12:33:32 +03:00
|
|
|
|
$this->Cache_Set($oBlog, "blog_{$oBlog->getId()}", array(), 60*60*24*4);
|
2009-06-04 18:02:10 +03:00
|
|
|
|
$aBlogIdNeedStore=array_diff($aBlogIdNeedStore,array($oBlog->getId()));
|
2009-05-29 18:32:37 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
2009-06-04 18:02:10 +03:00
|
|
|
|
/**
|
|
|
|
|
* Сохраняем в кеш запросы не вернувшие результата
|
|
|
|
|
*/
|
|
|
|
|
foreach ($aBlogIdNeedStore as $sId) {
|
2009-07-26 16:43:16 +03:00
|
|
|
|
$this->Cache_Set(null, "blog_{$sId}", array(), 60*60*24*4);
|
2009-06-04 18:02:10 +03:00
|
|
|
|
}
|
2009-06-23 20:06:19 +03:00
|
|
|
|
/**
|
|
|
|
|
* Сортируем результат согласно входящему массиву
|
|
|
|
|
*/
|
|
|
|
|
$aBlogs=func_array_sort_by_keys($aBlogs,$aBlogId);
|
2009-05-29 18:32:37 +03:00
|
|
|
|
return $aBlogs;
|
|
|
|
|
}
|
2009-08-08 12:33:32 +03:00
|
|
|
|
/**
|
|
|
|
|
* Список блогов по ID, но используя единый кеш
|
|
|
|
|
*
|
|
|
|
|
* @param unknown_type $aBlogId
|
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
|
|
|
|
public function GetBlogsByArrayIdSolid($aBlogId) {
|
|
|
|
|
if (!is_array($aBlogId)) {
|
|
|
|
|
$aBlogId=array($aBlogId);
|
|
|
|
|
}
|
|
|
|
|
$aBlogId=array_unique($aBlogId);
|
|
|
|
|
$aBlogs=array();
|
|
|
|
|
$s=join(',',$aBlogId);
|
|
|
|
|
if (false === ($data = $this->Cache_Get("blog_id_{$s}"))) {
|
|
|
|
|
$data = $this->oMapperBlog->GetBlogsByArrayId($aBlogId);
|
|
|
|
|
foreach ($data as $oBlog) {
|
|
|
|
|
$aBlogs[$oBlog->getId()]=$oBlog;
|
|
|
|
|
}
|
|
|
|
|
$this->Cache_Set($aBlogs, "blog_id_{$s}", array("blog_update"), 60*60*24*1);
|
|
|
|
|
return $aBlogs;
|
|
|
|
|
}
|
|
|
|
|
return $data;
|
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получить персональный блог юзера
|
|
|
|
|
*
|
|
|
|
|
* @param Entity_User $oUser
|
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
2008-10-04 00:07:32 +03:00
|
|
|
|
public function GetPersonalBlogByUserId($sUserId) {
|
2009-06-20 16:54:24 +03:00
|
|
|
|
$id=$this->oMapperBlog->GetPersonalBlogByUserId($sUserId);
|
2009-06-24 00:35:20 +03:00
|
|
|
|
return $this->GetBlogById($id);
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Получить блог по айдишнику(номеру)
|
|
|
|
|
*
|
|
|
|
|
* @param unknown_type $sBlogId
|
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
|
|
|
|
public function GetBlogById($sBlogId) {
|
2009-06-09 18:55:10 +03:00
|
|
|
|
$aBlogs=$this->GetBlogsAdditionalData($sBlogId);
|
|
|
|
|
if (isset($aBlogs[$sBlogId])) {
|
|
|
|
|
return $aBlogs[$sBlogId];
|
2009-05-29 18:32:37 +03:00
|
|
|
|
}
|
|
|
|
|
return null;
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Получить блог по УРЛу
|
|
|
|
|
*
|
|
|
|
|
* @param unknown_type $sBlogUrl
|
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
2009-06-07 20:20:58 +03:00
|
|
|
|
public function GetBlogByUrl($sBlogUrl) {
|
|
|
|
|
if (false === ($id = $this->Cache_Get("blog_url_{$sBlogUrl}"))) {
|
|
|
|
|
if ($id = $this->oMapperBlog->GetBlogByUrl($sBlogUrl)) {
|
|
|
|
|
$this->Cache_Set($id, "blog_url_{$sBlogUrl}", array("blog_update_{$id}"), 60*60*24*2);
|
2008-09-21 09:36:57 +03:00
|
|
|
|
} else {
|
2009-07-06 23:04:20 +03:00
|
|
|
|
$this->Cache_Set(null, "blog_url_{$sBlogUrl}", array('blog_update','blog_new'), 60*60);
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
2009-06-07 20:20:58 +03:00
|
|
|
|
}
|
2009-06-24 00:35:20 +03:00
|
|
|
|
return $this->GetBlogById($id);
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
2008-10-16 18:40:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получить блог по названию
|
|
|
|
|
*
|
|
|
|
|
* @param unknown_type $sTitle
|
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
|
|
|
|
public function GetBlogByTitle($sTitle) {
|
2009-07-06 23:04:20 +03:00
|
|
|
|
if (false === ($id = $this->Cache_Get("blog_title_{$sTitle}"))) {
|
2009-06-24 00:35:20 +03:00
|
|
|
|
if ($id = $this->oMapperBlog->GetBlogByTitle($sTitle)) {
|
2009-08-08 12:33:32 +03:00
|
|
|
|
$this->Cache_Set($id, "blog_title_{$sTitle}", array("blog_update_{$id}",'blog_new'), 60*60*24*2);
|
2008-10-16 18:40:57 +03:00
|
|
|
|
} else {
|
2009-07-06 23:04:20 +03:00
|
|
|
|
$this->Cache_Set(null, "blog_title_{$sTitle}", array('blog_update','blog_new'), 60*60);
|
2008-10-16 18:40:57 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
2009-06-24 00:35:20 +03:00
|
|
|
|
return $this->GetBlogById($id);
|
2008-10-16 18:40:57 +03:00
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Создаёт персональный блог
|
|
|
|
|
*
|
|
|
|
|
* @param Entity_User $oUser
|
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
2010-05-27 18:16:20 +03:00
|
|
|
|
public function CreatePersonalBlog(ModuleUser_EntityUser $oUser) {
|
2009-09-08 15:02:51 +03:00
|
|
|
|
$oBlog=Engine::GetEntity('Blog');
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$oBlog->setOwnerId($oUser->getId());
|
2009-04-23 16:59:40 +03:00
|
|
|
|
$oBlog->setTitle($this->Lang_Get('blogs_personal_title').' '.$oUser->getLogin());
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$oBlog->setType('personal');
|
2009-04-23 16:59:40 +03:00
|
|
|
|
$oBlog->setDescription($this->Lang_Get('blogs_personal_description'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$oBlog->setDateAdd(date("Y-m-d H:i:s"));
|
|
|
|
|
$oBlog->setLimitRatingTopic(-1000);
|
2008-10-26 11:54:38 +02:00
|
|
|
|
$oBlog->setUrl(null);
|
2009-10-14 15:36:12 +03:00
|
|
|
|
$oBlog->setAvatar(null);
|
2008-09-21 09:36:57 +03:00
|
|
|
|
return $this->AddBlog($oBlog);
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Добавляет блог
|
|
|
|
|
*
|
2010-05-27 18:16:20 +03:00
|
|
|
|
* @param ModuleBlog_EntityBlog $oBlog
|
2008-09-21 09:36:57 +03:00
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
2010-05-27 18:16:20 +03:00
|
|
|
|
public function AddBlog(ModuleBlog_EntityBlog $oBlog) {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
if ($sId=$this->oMapperBlog->AddBlog($oBlog)) {
|
|
|
|
|
$oBlog->setId($sId);
|
|
|
|
|
//чистим зависимые кеши
|
2009-02-06 23:24:30 +02:00
|
|
|
|
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array('blog_new',"blog_new_user_{$oBlog->getOwnerId()}"));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
return $oBlog;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Обновляет блог
|
|
|
|
|
*
|
2010-05-27 18:16:20 +03:00
|
|
|
|
* @param ModuleBlog_EntityBlog $oBlog
|
2008-09-21 09:36:57 +03:00
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
2010-05-27 18:16:20 +03:00
|
|
|
|
public function UpdateBlog(ModuleBlog_EntityBlog $oBlog) {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$oBlog->setDateEdit(date("Y-m-d H:i:s"));
|
|
|
|
|
$res=$this->oMapperBlog->UpdateBlog($oBlog);
|
|
|
|
|
if ($res) {
|
|
|
|
|
//чистим зависимые кеши
|
2009-09-26 23:32:33 +03:00
|
|
|
|
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array('blog_update',"blog_update_{$oBlog->getId()}","topic_update"));
|
2009-07-26 16:43:16 +03:00
|
|
|
|
$this->Cache_Delete("blog_{$oBlog->getId()}");
|
2008-09-21 09:36:57 +03:00
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
2009-06-28 17:04:44 +03:00
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Добавляет отношение юзера к блогу, по сути присоединяет к блогу
|
|
|
|
|
*
|
2010-05-27 18:16:20 +03:00
|
|
|
|
* @param ModuleBlog_EntityBlogUser $oBlogUser
|
2008-09-21 09:36:57 +03:00
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
2010-05-27 18:16:20 +03:00
|
|
|
|
public function AddRelationBlogUser(ModuleBlog_EntityBlogUser $oBlogUser) {
|
2009-02-06 23:24:30 +02:00
|
|
|
|
if ($this->oMapperBlog->AddRelationBlogUser($oBlogUser)) {
|
2009-06-07 20:20:58 +03:00
|
|
|
|
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("blog_relation_change_{$oBlogUser->getUserId()}","blog_relation_change_blog_{$oBlogUser->getBlogId()}"));
|
|
|
|
|
$this->Cache_Delete("blog_relation_user_{$oBlogUser->getBlogId()}_{$oBlogUser->getUserId()}");
|
2008-09-21 09:36:57 +03:00
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Удалет отношение юзера к блогу, по сути отключает от блога
|
|
|
|
|
*
|
2010-05-27 18:16:20 +03:00
|
|
|
|
* @param ModuleBlog_EntityBlogUser $oBlogUser
|
2008-09-21 09:36:57 +03:00
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
2010-05-27 18:16:20 +03:00
|
|
|
|
public function DeleteRelationBlogUser(ModuleBlog_EntityBlogUser $oBlogUser) {
|
2009-09-17 21:54:55 +03:00
|
|
|
|
if ($this->oMapperBlog->DeleteRelationBlogUser($oBlogUser)) {
|
2009-06-07 20:20:58 +03:00
|
|
|
|
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("blog_relation_change_{$oBlogUser->getUserId()}","blog_relation_change_blog_{$oBlogUser->getBlogId()}"));
|
|
|
|
|
$this->Cache_Delete("blog_relation_user_{$oBlogUser->getBlogId()}_{$oBlogUser->getUserId()}");
|
2008-09-21 09:36:57 +03:00
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Получает список блогов по хозяину
|
|
|
|
|
*
|
|
|
|
|
* @param unknown_type $sUserId
|
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
2010-01-09 18:45:09 +02:00
|
|
|
|
public function GetBlogsByOwnerId($sUserId,$bReturnIdOnly=false) {
|
2009-06-13 14:32:06 +03:00
|
|
|
|
$data=$this->oMapperBlog->GetBlogsByOwnerId($sUserId);
|
2010-01-09 18:45:09 +02:00
|
|
|
|
/**
|
|
|
|
|
* Возвращаем только иденитификаторы
|
|
|
|
|
*/
|
|
|
|
|
if($bReturnIdOnly) return $data;
|
|
|
|
|
|
2009-06-13 14:32:06 +03:00
|
|
|
|
$data=$this->GetBlogsAdditionalData($data);
|
|
|
|
|
return $data;
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
2008-10-04 00:07:32 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получает список всех НЕ персональных блогов
|
|
|
|
|
*
|
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
2010-01-09 18:45:09 +02:00
|
|
|
|
public function GetBlogs($bReturnIdOnly=false) {
|
2009-06-15 00:15:11 +03:00
|
|
|
|
$data=$this->oMapperBlog->GetBlogs();
|
2010-01-09 18:45:09 +02:00
|
|
|
|
/**
|
|
|
|
|
* Возвращаем только иденитификаторы
|
|
|
|
|
*/
|
|
|
|
|
if($bReturnIdOnly) return $data;
|
|
|
|
|
|
2009-06-15 00:15:11 +03:00
|
|
|
|
$data=$this->GetBlogsAdditionalData($data);
|
|
|
|
|
return $data;
|
2008-10-04 00:07:32 +03:00
|
|
|
|
}
|
2009-06-07 20:20:58 +03:00
|
|
|
|
|
2009-03-17 21:05:30 +02:00
|
|
|
|
/**
|
2009-09-22 00:08:00 +03:00
|
|
|
|
* Получает список пользователей блога.
|
|
|
|
|
* Если роль не указана, то считаем что
|
|
|
|
|
* поиск производиться по положительным значениям
|
|
|
|
|
* (статусом выше GUEST).
|
2009-03-17 21:05:30 +02:00
|
|
|
|
*
|
2009-09-22 00:08:00 +03:00
|
|
|
|
* @param string $sBlogId
|
|
|
|
|
* @param (null|int|array) $iRole
|
|
|
|
|
* @return array
|
2009-03-17 21:05:30 +02:00
|
|
|
|
*/
|
2009-06-07 20:20:58 +03:00
|
|
|
|
public function GetBlogUsersByBlogId($sBlogId,$iRole=null) {
|
2009-03-17 21:05:30 +02:00
|
|
|
|
$aFilter=array(
|
2009-06-07 20:20:58 +03:00
|
|
|
|
'blog_id'=> $sBlogId,
|
2009-03-17 21:05:30 +02:00
|
|
|
|
);
|
2009-09-17 21:54:55 +03:00
|
|
|
|
if($iRole!==null) {
|
|
|
|
|
$aFilter['user_role']=$iRole;
|
2009-06-07 20:20:58 +03:00
|
|
|
|
}
|
|
|
|
|
$s=serialize($aFilter);
|
|
|
|
|
if (false === ($data = $this->Cache_Get("blog_relation_user_by_filter_$s"))) {
|
|
|
|
|
$data = $this->oMapperBlog->GetBlogUsers($aFilter);
|
|
|
|
|
$this->Cache_Set($data, "blog_relation_user_by_filter_$s", array("blog_relation_change_blog_{$sBlogId}"), 60*60*24*3);
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Достаем дополнительные данные, для этого формируем список юзеров и делаем мульти-запрос
|
|
|
|
|
*/
|
|
|
|
|
if ($data) {
|
|
|
|
|
$aUserId=array();
|
|
|
|
|
foreach ($data as $oBlogUser) {
|
|
|
|
|
$aUserId[]=$oBlogUser->getUserId();
|
|
|
|
|
}
|
|
|
|
|
$aUsers=$this->User_GetUsersAdditionalData($aUserId);
|
|
|
|
|
$aBlogs=$this->Blog_GetBlogsAdditionalData($sBlogId);
|
2009-09-29 19:21:47 +03:00
|
|
|
|
|
|
|
|
|
$aResults=array();
|
2009-06-07 20:20:58 +03:00
|
|
|
|
foreach ($data as $oBlogUser) {
|
|
|
|
|
if (isset($aUsers[$oBlogUser->getUserId()])) {
|
|
|
|
|
$oBlogUser->setUser($aUsers[$oBlogUser->getUserId()]);
|
|
|
|
|
} else {
|
|
|
|
|
$oBlogUser->setUser(null);
|
|
|
|
|
}
|
|
|
|
|
if (isset($aBlogs[$oBlogUser->getBlogId()])) {
|
|
|
|
|
$oBlogUser->setBlog($aBlogs[$oBlogUser->getBlogId()]);
|
|
|
|
|
} else {
|
|
|
|
|
$oBlogUser->setBlog(null);
|
|
|
|
|
}
|
2009-09-29 19:21:47 +03:00
|
|
|
|
$aResults[$oBlogUser->getUserId()]=$oBlogUser;
|
2009-06-07 20:20:58 +03:00
|
|
|
|
}
|
2009-09-29 19:21:47 +03:00
|
|
|
|
$data=$aResults;
|
2009-06-07 20:20:58 +03:00
|
|
|
|
}
|
|
|
|
|
return $data;
|
2009-03-17 21:05:30 +02:00
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
2009-06-07 20:20:58 +03:00
|
|
|
|
* Получает отношения юзера к блогам(состоит в блоге или нет)
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*
|
|
|
|
|
* @param unknown_type $sUserId
|
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
2010-01-09 18:45:09 +02:00
|
|
|
|
public function GetBlogUsersByUserId($sUserId,$iRole=null,$bReturnIdOnly=false) {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$aFilter=array(
|
2010-01-09 18:45:09 +02:00
|
|
|
|
'user_id'=> $sUserId
|
2008-09-21 09:36:57 +03:00
|
|
|
|
);
|
2009-09-17 21:54:55 +03:00
|
|
|
|
if($iRole!==null) {
|
2010-01-09 18:45:09 +02:00
|
|
|
|
$aFilter['user_role']=$iRole;
|
2009-05-06 23:14:41 +03:00
|
|
|
|
}
|
2009-06-07 20:20:58 +03:00
|
|
|
|
$s=serialize($aFilter);
|
|
|
|
|
if (false === ($data = $this->Cache_Get("blog_relation_user_by_filter_$s"))) {
|
|
|
|
|
$data = $this->oMapperBlog->GetBlogUsers($aFilter);
|
|
|
|
|
$this->Cache_Set($data, "blog_relation_user_by_filter_$s", array("blog_relation_change_{$sUserId}"), 60*60*24*3);
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Достаем дополнительные данные, для этого формируем список блогов и делаем мульти-запрос
|
|
|
|
|
*/
|
2010-01-09 18:45:09 +02:00
|
|
|
|
$aBlogId=array();
|
2009-06-07 20:20:58 +03:00
|
|
|
|
if ($data) {
|
|
|
|
|
foreach ($data as $oBlogUser) {
|
|
|
|
|
$aBlogId[]=$oBlogUser->getBlogId();
|
|
|
|
|
}
|
2010-01-09 18:45:09 +02:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Если указано возвращать полные объекты
|
|
|
|
|
*/
|
|
|
|
|
if(!$bReturnIdOnly) {
|
|
|
|
|
$aUsers=$this->User_GetUsersAdditionalData($sUserId);
|
|
|
|
|
$aBlogs=$this->Blog_GetBlogsAdditionalData($aBlogId);
|
|
|
|
|
foreach ($data as $oBlogUser) {
|
|
|
|
|
if (isset($aUsers[$oBlogUser->getUserId()])) {
|
|
|
|
|
$oBlogUser->setUser($aUsers[$oBlogUser->getUserId()]);
|
|
|
|
|
} else {
|
|
|
|
|
$oBlogUser->setUser(null);
|
|
|
|
|
}
|
|
|
|
|
if (isset($aBlogs[$oBlogUser->getBlogId()])) {
|
|
|
|
|
$oBlogUser->setBlog($aBlogs[$oBlogUser->getBlogId()]);
|
|
|
|
|
} else {
|
|
|
|
|
$oBlogUser->setBlog(null);
|
|
|
|
|
}
|
|
|
|
|
}
|
2009-06-07 20:20:58 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
2010-01-09 18:45:09 +02:00
|
|
|
|
return ($bReturnIdOnly) ? $aBlogId : $data;
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Состоит ли юзер в конкретном блоге
|
|
|
|
|
*
|
|
|
|
|
* @param unknown_type $sBlogId
|
|
|
|
|
* @param unknown_type $sUserId
|
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
2009-06-07 20:20:58 +03:00
|
|
|
|
public function GetBlogUserByBlogIdAndUserId($sBlogId,$sUserId) {
|
|
|
|
|
if ($aBlogUser=$this->GetBlogUsersByArrayBlog($sBlogId,$sUserId)) {
|
|
|
|
|
if (isset($aBlogUser[$sBlogId])) {
|
|
|
|
|
return $aBlogUser[$sBlogId];
|
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
2009-05-29 18:32:37 +03:00
|
|
|
|
return null;
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
2009-06-02 22:29:05 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получить список отношений блог-юзер по списку айдишников
|
|
|
|
|
*
|
|
|
|
|
* @param unknown_type $aTopicId
|
|
|
|
|
*/
|
2009-06-07 20:20:58 +03:00
|
|
|
|
public function GetBlogUsersByArrayBlog($aBlogId,$sUserId) {
|
2009-08-08 12:33:32 +03:00
|
|
|
|
if (!$aBlogId) {
|
|
|
|
|
return array();
|
|
|
|
|
}
|
2009-10-10 22:13:14 +03:00
|
|
|
|
if (Config::Get('sys.cache.solid')) {
|
2009-08-08 12:33:32 +03:00
|
|
|
|
return $this->GetBlogUsersByArrayBlogSolid($aBlogId,$sUserId);
|
|
|
|
|
}
|
2009-06-02 22:29:05 +03:00
|
|
|
|
if (!is_array($aBlogId)) {
|
|
|
|
|
$aBlogId=array($aBlogId);
|
|
|
|
|
}
|
|
|
|
|
$aBlogId=array_unique($aBlogId);
|
2009-06-05 15:32:12 +03:00
|
|
|
|
$aBlogUsers=array();
|
|
|
|
|
$aBlogIdNotNeedQuery=array();
|
2009-06-02 22:29:05 +03:00
|
|
|
|
/**
|
|
|
|
|
* Делаем мульти-запрос к кешу
|
|
|
|
|
*/
|
2009-06-05 15:32:12 +03:00
|
|
|
|
$aCacheKeys=func_build_cache_keys($aBlogId,'blog_relation_user_','_'.$sUserId);
|
2009-06-02 22:29:05 +03:00
|
|
|
|
if (false !== ($data = $this->Cache_Get($aCacheKeys))) {
|
|
|
|
|
/**
|
|
|
|
|
* проверяем что досталось из кеша
|
2009-06-05 15:32:12 +03:00
|
|
|
|
*/
|
|
|
|
|
foreach ($aCacheKeys as $sValue => $sKey ) {
|
|
|
|
|
if (array_key_exists($sKey,$data)) {
|
|
|
|
|
if ($data[$sKey]) {
|
|
|
|
|
$aBlogUsers[$data[$sKey]->getBlogId()]=$data[$sKey];
|
|
|
|
|
} else {
|
|
|
|
|
$aBlogIdNotNeedQuery[]=$sValue;
|
|
|
|
|
}
|
2009-06-02 22:29:05 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
2009-06-05 15:32:12 +03:00
|
|
|
|
}
|
2009-06-02 22:29:05 +03:00
|
|
|
|
/**
|
|
|
|
|
* Смотрим каких блогов не было в кеше и делаем запрос в БД
|
|
|
|
|
*/
|
2009-06-05 15:32:12 +03:00
|
|
|
|
$aBlogIdNeedQuery=array_diff($aBlogId,array_keys($aBlogUsers));
|
|
|
|
|
$aBlogIdNeedQuery=array_diff($aBlogIdNeedQuery,$aBlogIdNotNeedQuery);
|
|
|
|
|
$aBlogIdNeedStore=$aBlogIdNeedQuery;
|
2009-06-07 20:20:58 +03:00
|
|
|
|
if ($data = $this->oMapperBlog->GetBlogUsersByArrayBlog($aBlogIdNeedQuery,$sUserId)) {
|
2009-06-02 22:29:05 +03:00
|
|
|
|
foreach ($data as $oBlogUser) {
|
|
|
|
|
/**
|
|
|
|
|
* Добавляем к результату и сохраняем в кеш
|
|
|
|
|
*/
|
|
|
|
|
$aBlogUsers[$oBlogUser->getBlogId()]=$oBlogUser;
|
|
|
|
|
$this->Cache_Set($oBlogUser, "blog_relation_user_{$oBlogUser->getBlogId()}_{$oBlogUser->getUserId()}", array(), 60*60*24*4);
|
2009-06-05 15:32:12 +03:00
|
|
|
|
$aBlogIdNeedStore=array_diff($aBlogIdNeedStore,array($oBlogUser->getBlogId()));
|
2009-06-02 22:29:05 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
2009-06-05 15:32:12 +03:00
|
|
|
|
/**
|
|
|
|
|
* Сохраняем в кеш запросы не вернувшие результата
|
|
|
|
|
*/
|
|
|
|
|
foreach ($aBlogIdNeedStore as $sId) {
|
|
|
|
|
$this->Cache_Set(null, "blog_relation_user_{$sId}_{$sUserId}", array(), 60*60*24*4);
|
|
|
|
|
}
|
2009-06-23 20:06:19 +03:00
|
|
|
|
/**
|
|
|
|
|
* Сортируем результат согласно входящему массиву
|
|
|
|
|
*/
|
|
|
|
|
$aBlogUsers=func_array_sort_by_keys($aBlogUsers,$aBlogId);
|
2009-06-02 22:29:05 +03:00
|
|
|
|
return $aBlogUsers;
|
2009-06-07 20:20:58 +03:00
|
|
|
|
}
|
2009-08-08 12:33:32 +03:00
|
|
|
|
public function GetBlogUsersByArrayBlogSolid($aBlogId,$sUserId) {
|
|
|
|
|
if (!is_array($aBlogId)) {
|
|
|
|
|
$aBlogId=array($aBlogId);
|
|
|
|
|
}
|
|
|
|
|
$aBlogId=array_unique($aBlogId);
|
|
|
|
|
$aBlogUsers=array();
|
|
|
|
|
$s=join(',',$aBlogId);
|
|
|
|
|
if (false === ($data = $this->Cache_Get("blog_relation_user_{$sUserId}_id_{$s}"))) {
|
|
|
|
|
$data = $this->oMapperBlog->GetBlogUsersByArrayBlog($aBlogId,$sUserId);
|
|
|
|
|
foreach ($data as $oBlogUser) {
|
|
|
|
|
$aBlogUsers[$oBlogUser->getBlogId()]=$oBlogUser;
|
|
|
|
|
}
|
|
|
|
|
$this->Cache_Set($aBlogUsers, "blog_relation_user_{$sUserId}_id_{$s}", array("blog_relation_change_{$sUserId}"), 60*60*24*1);
|
|
|
|
|
return $aBlogUsers;
|
|
|
|
|
}
|
|
|
|
|
return $data;
|
|
|
|
|
}
|
2010-05-27 18:16:20 +03:00
|
|
|
|
public function UpdateRelationBlogUser(ModuleBlog_EntityBlogUser $oBlogUser) {
|
2009-06-07 20:20:58 +03:00
|
|
|
|
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("blog_relation_change_{$oBlogUser->getUserId()}","blog_relation_change_blog_{$oBlogUser->getBlogId()}"));
|
|
|
|
|
$this->Cache_Delete("blog_relation_user_{$oBlogUser->getBlogId()}_{$oBlogUser->getUserId()}");
|
2008-10-16 23:26:53 +03:00
|
|
|
|
return $this->oMapperBlog->UpdateRelationBlogUser($oBlogUser);
|
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получает список блогов по рейтингу
|
|
|
|
|
*
|
|
|
|
|
* @param unknown_type $iLimit
|
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
2009-06-09 18:55:10 +03:00
|
|
|
|
public function GetBlogsRating($iCurrPage,$iPerPage) {
|
|
|
|
|
if (false === ($data = $this->Cache_Get("blog_rating_{$iCurrPage}_{$iPerPage}"))) {
|
2008-10-26 17:51:03 +02:00
|
|
|
|
$data = array('collection'=>$this->oMapperBlog->GetBlogsRating($iCount,$iCurrPage,$iPerPage),'count'=>$iCount);
|
2009-07-06 23:04:20 +03:00
|
|
|
|
$this->Cache_Set($data, "blog_rating_{$iCurrPage}_{$iPerPage}", array("blog_update","blog_new"), 60*60*24*2);
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
2009-08-08 12:33:32 +03:00
|
|
|
|
$data['collection']=$this->GetBlogsAdditionalData($data['collection'],array('owner'=>array(),'relation_user'));
|
2009-09-18 23:36:07 +03:00
|
|
|
|
return $data;
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
2009-02-06 23:24:30 +02:00
|
|
|
|
/**
|
|
|
|
|
* Список подключенных блогов по рейтингу
|
|
|
|
|
*
|
|
|
|
|
* @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;
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
2009-06-15 00:15:11 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получает список блогов в которые может постить юзер
|
|
|
|
|
*
|
2009-06-20 16:54:24 +03:00
|
|
|
|
* @param unknown_type $oUser
|
2009-06-15 00:15:11 +03:00
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
2009-06-20 16:54:24 +03:00
|
|
|
|
public function GetBlogsAllowByUser($oUser) {
|
2009-06-15 00:15:11 +03:00
|
|
|
|
if ($oUser->isAdministrator()) {
|
|
|
|
|
return $this->GetBlogs();
|
|
|
|
|
} else {
|
|
|
|
|
$aAllowBlogsUser=$this->GetBlogsByOwnerId($oUser->getId());
|
|
|
|
|
$aBlogUsers=$this->GetBlogUsersByUserId($oUser->getId());
|
|
|
|
|
foreach ($aBlogUsers as $oBlogUser) {
|
|
|
|
|
$oBlog=$oBlogUser->getBlog();
|
2009-06-20 16:54:24 +03:00
|
|
|
|
if ($this->ACL_CanAddTopic($oUser,$oBlog) or $oBlogUser->getIsAdministrator() or $oBlogUser->getIsModerator()) {
|
2009-06-15 00:15:11 +03:00
|
|
|
|
$aAllowBlogsUser[$oBlog->getId()]=$oBlog;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $aAllowBlogsUser;
|
|
|
|
|
}
|
|
|
|
|
}
|
2009-11-20 01:23:49 +02:00
|
|
|
|
|
2009-09-18 23:36:07 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получаем массив блогов,
|
|
|
|
|
* которые являются открытыми для пользователя
|
|
|
|
|
*
|
2010-05-27 18:16:20 +03:00
|
|
|
|
* @param ModuleUser_EntityUser $oUser
|
2009-09-18 23:36:07 +03:00
|
|
|
|
* @return array
|
|
|
|
|
*/
|
2009-09-20 21:43:20 +03:00
|
|
|
|
public function GetAccessibleBlogsByUser($oUser) {
|
2009-09-18 23:36:07 +03:00
|
|
|
|
if ($oUser->isAdministrator()) {
|
2010-01-09 18:45:09 +02:00
|
|
|
|
return $this->GetBlogs(true);
|
2009-09-18 23:36:07 +03:00
|
|
|
|
}
|
2010-01-08 20:59:17 +02:00
|
|
|
|
|
|
|
|
|
if (false === ($aOpenBlogsUser = $this->Cache_Get("blog_accessible_user_{$oUser->getId()}"))) {
|
|
|
|
|
/**
|
|
|
|
|
* Заносим блоги, созданные пользователем
|
|
|
|
|
*/
|
|
|
|
|
$aOpenBlogsUser=array();
|
2010-01-09 18:45:09 +02:00
|
|
|
|
$aOpenBlogsUser=$this->GetBlogsByOwnerId($oUser->getId(),true);
|
2010-01-08 20:59:17 +02:00
|
|
|
|
/**
|
|
|
|
|
* Добавляем блоги, в которых состоит пользователь
|
|
|
|
|
* (читателем, модератором, или администратором)
|
|
|
|
|
*/
|
2010-01-09 18:45:09 +02:00
|
|
|
|
$aOpenBlogsUser=array_merge($aOpenBlogsUser,$this->GetBlogUsersByUserId($oUser->getId(),null,true));
|
2010-01-08 20:59:17 +02:00
|
|
|
|
$this->Cache_Set($aOpenBlogsUser, "blog_accessible_user_{$oUser->getId()}", array('blog_new','blog_update',"blog_relation_change_{$oUser->getId()}"), 60*60*24);
|
2009-09-18 23:36:07 +03:00
|
|
|
|
}
|
2010-01-08 20:59:17 +02:00
|
|
|
|
return $aOpenBlogsUser;
|
2009-09-18 23:36:07 +03:00
|
|
|
|
}
|
2009-09-19 03:43:00 +03:00
|
|
|
|
|
|
|
|
|
/**
|
2009-09-19 17:48:28 +03:00
|
|
|
|
* Получаем массив идентификаторов блогов,
|
2009-09-19 03:43:00 +03:00
|
|
|
|
* которые являются закрытыми для пользователя
|
|
|
|
|
*
|
2010-05-27 18:16:20 +03:00
|
|
|
|
* @param ModuleUser_EntityUser $oUser
|
2009-09-19 03:43:00 +03:00
|
|
|
|
* @return array
|
|
|
|
|
*/
|
2009-09-20 21:43:20 +03:00
|
|
|
|
public function GetInaccessibleBlogsByUser($oUser=null) {
|
2009-09-19 17:48:28 +03:00
|
|
|
|
if ($oUser&&$oUser->isAdministrator()) {
|
2009-09-19 03:43:00 +03:00
|
|
|
|
return array();
|
|
|
|
|
}
|
2009-09-19 17:48:28 +03:00
|
|
|
|
|
2010-01-08 20:59:17 +02:00
|
|
|
|
$sUserId=$oUser ? $oUser->getId() : 'quest';
|
|
|
|
|
if (false === ($aCloseBlogs = $this->Cache_Get("blog_inaccessible_user_{$sUserId}"))) {
|
|
|
|
|
$aCloseBlogs=array();
|
|
|
|
|
$aCloseBlogs = $this->oMapperBlog->GetCloseBlogs();
|
|
|
|
|
|
|
|
|
|
if($oUser) {
|
|
|
|
|
/**
|
|
|
|
|
* Получаем массив идентификаторов блогов,
|
|
|
|
|
* которые являются откытыми для данного пользователя
|
|
|
|
|
*/
|
|
|
|
|
$aOpenBlogs = array();
|
2010-01-09 18:45:09 +02:00
|
|
|
|
$aOpenBlogs=$this->GetBlogUsersByUserId($oUser->getId(),null,true);
|
|
|
|
|
|
2010-01-08 20:59:17 +02:00
|
|
|
|
$aCloseBlogs=array_diff($aCloseBlogs,$aOpenBlogs);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Сохраняем в кеш
|
|
|
|
|
if ($oUser) {
|
|
|
|
|
$this->Cache_Set($aCloseBlogs, "blog_inaccessible_user_{$sUserId}", array('blog_new','blog_update',"blog_relation_change_{$oUser->getId()}"), 60*60*24);
|
|
|
|
|
} else {
|
|
|
|
|
$this->Cache_Set($aCloseBlogs, "blog_inaccessible_user_{$sUserId}", array('blog_new','blog_update'), 60*60*24*3);
|
2009-09-19 17:48:28 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
2010-01-08 20:59:17 +02:00
|
|
|
|
return $aCloseBlogs;
|
2009-09-19 03:43:00 +03:00
|
|
|
|
}
|
2009-10-27 19:22:11 +02:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Удаляет блог
|
|
|
|
|
*
|
|
|
|
|
* @param int $iBlogId
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function DeleteBlog($iBlogId) {
|
2010-05-27 18:16:20 +03:00
|
|
|
|
if($iBlogId instanceof ModuleBlog_EntityBlog){
|
2009-10-27 19:22:11 +02:00
|
|
|
|
$iBlogId = $iBlogId->getId();
|
|
|
|
|
}
|
|
|
|
|
/**
|
2009-11-25 16:06:02 +02:00
|
|
|
|
* Получаем идентификаторы топиков блога. Удаляем топики блога.
|
|
|
|
|
* При удалении топиков удаляются комментарии к ним и голоса.
|
2009-10-27 19:22:11 +02:00
|
|
|
|
*/
|
2009-11-25 16:06:02 +02:00
|
|
|
|
$aTopicIds = $this->Topic_GetTopicsByBlogId($iBlogId);
|
2009-10-27 19:22:11 +02:00
|
|
|
|
/**
|
2009-11-25 16:06:02 +02:00
|
|
|
|
* Если блог не удален, возвращаем false
|
2009-10-27 19:22:11 +02:00
|
|
|
|
*/
|
2009-11-25 16:06:02 +02:00
|
|
|
|
if(!$this->oMapperBlog->DeleteBlog($iBlogId)) { return false; }
|
2009-10-27 19:22:11 +02:00
|
|
|
|
/**
|
|
|
|
|
* Чистим кеш
|
|
|
|
|
*/
|
|
|
|
|
$this->Cache_Clean(
|
|
|
|
|
Zend_Cache::CLEANING_MODE_MATCHING_TAG,
|
|
|
|
|
array(
|
2009-11-25 16:06:02 +02:00
|
|
|
|
"blog_update", "blog_relation_change_blog_{$iBlogId}",
|
|
|
|
|
"topic_update", "comment_online_update_topic", "comment_update"
|
2009-10-27 19:22:11 +02:00
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
$this->Cache_Delete("blog_{$iBlogId}");
|
2009-11-25 16:06:02 +02:00
|
|
|
|
|
|
|
|
|
if(is_array($aTopicIds) and count($aTopicIds)) {
|
|
|
|
|
/**
|
|
|
|
|
* Удаляем топики
|
|
|
|
|
*/
|
|
|
|
|
foreach ($aTopicIds as $iTopicId) {
|
|
|
|
|
$this->Cache_Delete("topic_{$iTopicId}");
|
|
|
|
|
if(Config::Get('db.tables.engine')=="InnoDB") {
|
|
|
|
|
$this->Topic_DeleteTopicAdditionalData($iTopicId);
|
|
|
|
|
} else {
|
|
|
|
|
$this->Topic_DeleteTopic($iTopicId);
|
|
|
|
|
}
|
2009-10-27 19:22:11 +02:00
|
|
|
|
}
|
2009-11-25 16:06:02 +02:00
|
|
|
|
|
2009-10-27 19:22:11 +02:00
|
|
|
|
}
|
2009-11-25 16:06:02 +02:00
|
|
|
|
|
2009-10-27 19:22:11 +02:00
|
|
|
|
/**
|
|
|
|
|
* Удаляем связи пользователей блога.
|
|
|
|
|
*/
|
|
|
|
|
if(Config::Get('db.tables.engine')!="InnoDB"){
|
|
|
|
|
$this->oMapperBlog->DeleteBlogUsersByBlogId($iBlogId);
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Удаляем голосование за блог
|
|
|
|
|
*/
|
|
|
|
|
$this->Vote_DeleteVoteByTarget($iBlogId, 'blog');
|
2009-11-25 16:06:02 +02:00
|
|
|
|
/**
|
|
|
|
|
* Удаляем комментарии к записям из блога и метки прямого эфира
|
|
|
|
|
*/
|
2009-10-27 19:22:11 +02:00
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
2009-12-10 18:57:30 +02:00
|
|
|
|
/**
|
|
|
|
|
* Upload blog avatar on server
|
|
|
|
|
* Make resized images
|
|
|
|
|
*
|
|
|
|
|
* @param array $aFile
|
2010-05-27 18:16:20 +03:00
|
|
|
|
* @param ModuleBlog_EntityBlog $oUser
|
2009-12-10 18:57:30 +02:00
|
|
|
|
* @return (string|bool)
|
|
|
|
|
*/
|
|
|
|
|
public function UploadBlogAvatar($aFile,$oBlog) {
|
|
|
|
|
if(!is_array($aFile) || !isset($aFile['tmp_name'])) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2010-04-04 15:15:40 +03:00
|
|
|
|
$sFileTmp=Config::Get('sys.cache.dir').func_generator();
|
|
|
|
|
if (!move_uploaded_file($aFile['tmp_name'],$sFileTmp)) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2009-12-10 21:07:54 +02:00
|
|
|
|
$sPath=$this->Image_GetIdDir($oBlog->getOwnerId());
|
2009-12-10 18:57:30 +02:00
|
|
|
|
$aParams=$this->Image_BuildParams('avatar');
|
2010-01-20 20:11:17 +02:00
|
|
|
|
|
|
|
|
|
$oImage=new LiveImage($sFileTmp);
|
|
|
|
|
/**
|
|
|
|
|
* Если объект изображения не создан,
|
|
|
|
|
* возвращаем ошибку
|
|
|
|
|
*/
|
|
|
|
|
if($sError=$oImage->get_last_error()) {
|
|
|
|
|
// Вывод сообщения об ошибки, произошедшей при создании объекта изображения
|
|
|
|
|
// $this->Message_AddError($sError,$this->Lang_Get('error'));
|
2010-04-04 15:15:40 +03:00
|
|
|
|
@unlink($sFileTmp);
|
2010-01-20 20:11:17 +02:00
|
|
|
|
return false;
|
|
|
|
|
}
|
2009-12-10 18:57:30 +02:00
|
|
|
|
/**
|
|
|
|
|
* Срезаем квадрат
|
|
|
|
|
*/
|
2010-01-20 20:11:17 +02:00
|
|
|
|
$oImage = $this->Image_CropSquare($oImage);
|
2009-12-10 18:57:30 +02:00
|
|
|
|
|
2010-04-17 22:37:27 +03:00
|
|
|
|
if ($oImage && $sFileAvatar=$this->Image_Resize($sFileTmp,$sPath,"avatar_blog_{$oBlog->getUrl()}_48x48",Config::Get('view.img_max_width'),Config::Get('view.img_max_height'),48,48,false,$aParams,$oImage)) {
|
|
|
|
|
$this->Image_Resize($sFileTmp,$sPath,"avatar_blog_{$oBlog->getUrl()}_24x24",Config::Get('view.img_max_width'),Config::Get('view.img_max_height'),24,24,false,$aParams,$oImage);
|
|
|
|
|
$this->Image_Resize($sFileTmp,$sPath,"avatar_blog_{$oBlog->getUrl()}",Config::Get('view.img_max_width'),Config::Get('view.img_max_height'),null,null,false,$aParams,$oImage);
|
2010-04-04 15:15:40 +03:00
|
|
|
|
@unlink($sFileTmp);
|
2009-12-10 18:57:30 +02:00
|
|
|
|
/**
|
|
|
|
|
* Если все нормально, возвращаем расширение загруженного аватара
|
|
|
|
|
*/
|
2009-12-10 20:30:05 +02:00
|
|
|
|
return $this->Image_GetWebPath($sFileAvatar);
|
2009-12-10 18:57:30 +02:00
|
|
|
|
}
|
2010-04-04 15:15:40 +03:00
|
|
|
|
@unlink($sFileTmp);
|
2009-12-10 18:57:30 +02:00
|
|
|
|
/**
|
|
|
|
|
* В случае ошибки, возвращаем false
|
|
|
|
|
*/
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Delete blog avatar from server
|
|
|
|
|
*
|
2010-05-27 18:16:20 +03:00
|
|
|
|
* @param ModuleBlog_EntityBlog $oUser
|
2009-12-10 18:57:30 +02:00
|
|
|
|
*/
|
|
|
|
|
public function DeleteBlogAvatar($oBlog) {
|
|
|
|
|
/**
|
|
|
|
|
* Если аватар есть, удаляем его и его рейсайзы
|
|
|
|
|
*/
|
|
|
|
|
if($oBlog->getAvatar()) {
|
|
|
|
|
@unlink($this->Image_GetServerPath($oBlog->getAvatarPath(48)));
|
|
|
|
|
@unlink($this->Image_GetServerPath($oBlog->getAvatarPath(24)));
|
|
|
|
|
@unlink($this->Image_GetServerPath($oBlog->getAvatarPath(0)));
|
|
|
|
|
}
|
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
?>
|