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
|
|
|
|
|
*
|
|
|
|
|
---------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/**
|
2012-04-29 17:58:36 +03:00
|
|
|
|
* Экшен обработки URL'ов вида /blog/
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*
|
2012-04-29 17:58:36 +03:00
|
|
|
|
* @package actions
|
|
|
|
|
* @since 1.0
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
|
|
|
|
class ActionBlog extends Action {
|
2009-02-14 13:56:04 +02:00
|
|
|
|
/**
|
|
|
|
|
* Главное меню
|
|
|
|
|
*
|
2012-04-29 17:58:36 +03:00
|
|
|
|
* @var string
|
2009-02-14 13:56:04 +02:00
|
|
|
|
*/
|
|
|
|
|
protected $sMenuHeadItemSelect='blog';
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Какое меню активно
|
|
|
|
|
*
|
2012-04-29 17:58:36 +03:00
|
|
|
|
* @var string
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
|
|
|
|
protected $sMenuItemSelect='blog';
|
|
|
|
|
/**
|
|
|
|
|
* Какое подменю активно
|
|
|
|
|
*
|
2012-04-29 17:58:36 +03:00
|
|
|
|
* @var string
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
|
|
|
|
protected $sMenuSubItemSelect='good';
|
|
|
|
|
/**
|
|
|
|
|
* УРЛ блога который подставляется в меню
|
|
|
|
|
*
|
2012-04-29 17:58:36 +03:00
|
|
|
|
* @var string
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
|
|
|
|
protected $sMenuSubBlogUrl;
|
|
|
|
|
/**
|
|
|
|
|
* Текущий пользователь
|
|
|
|
|
*
|
2012-04-29 17:58:36 +03:00
|
|
|
|
* @var ModuleUser_EntityUser|null
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
|
|
|
|
protected $oUserCurrent=null;
|
|
|
|
|
/**
|
|
|
|
|
* Число новых топиков в коллективных блогах
|
|
|
|
|
*
|
2012-04-29 17:58:36 +03:00
|
|
|
|
* @var int
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
|
|
|
|
protected $iCountTopicsCollectiveNew=0;
|
|
|
|
|
/**
|
|
|
|
|
* Число новых топиков в персональных блогах
|
|
|
|
|
*
|
2012-04-29 17:58:36 +03:00
|
|
|
|
* @var int
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
|
|
|
|
protected $iCountTopicsPersonalNew=0;
|
|
|
|
|
/**
|
|
|
|
|
* Число новых топиков в конкретном блоге
|
|
|
|
|
*
|
2012-04-29 17:58:36 +03:00
|
|
|
|
* @var int
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
|
|
|
|
protected $iCountTopicsBlogNew=0;
|
|
|
|
|
/**
|
2013-08-05 14:54:03 +03:00
|
|
|
|
* Общее число новых топиков
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*
|
2012-04-29 17:58:36 +03:00
|
|
|
|
* @var int
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
|
|
|
|
protected $iCountTopicsNew=0;
|
2013-08-05 14:54:03 +03:00
|
|
|
|
/**
|
|
|
|
|
* Число новых топиков в выбранном разделе
|
|
|
|
|
*
|
|
|
|
|
* @var int
|
|
|
|
|
*/
|
|
|
|
|
protected $iCountTopicsSubNew = 0;
|
|
|
|
|
/**
|
|
|
|
|
* URL-префикс для навигации по топикам
|
|
|
|
|
*
|
|
|
|
|
* @var string
|
|
|
|
|
*/
|
|
|
|
|
protected $sNavTopicsSubUrl = '';
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Список URL с котрыми запрещено создавать блог
|
|
|
|
|
*
|
2012-04-29 17:58:36 +03:00
|
|
|
|
* @var array
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
2012-03-31 21:33:36 +03:00
|
|
|
|
protected $aBadBlogUrl=array('new','good','bad','discussed','top','edit','add','admin','delete','invite','ajaxaddcomment','ajaxaddbloginvite','ajaxresponsecomment','ajaxrebloginvite','ajaxbloginfo','ajaxblogjoin');
|
2011-06-06 14:58:19 +03:00
|
|
|
|
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Инизиализация экшена
|
|
|
|
|
*
|
|
|
|
|
*/
|
2010-02-06 02:09:44 +02:00
|
|
|
|
public function Init() {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем евент по дефолту, т.е. будем показывать хорошие топики из коллективных блогов
|
|
|
|
|
*/
|
|
|
|
|
$this->SetDefaultEvent('good');
|
2009-08-20 10:43:06 +03:00
|
|
|
|
$this->sMenuSubBlogUrl=Router::GetPath('blog');
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Достаём текущего пользователя
|
|
|
|
|
*/
|
2011-06-06 14:58:19 +03:00
|
|
|
|
$this->oUserCurrent=$this->User_GetUserCurrent();
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Подсчитываем новые топики
|
|
|
|
|
*/
|
|
|
|
|
$this->iCountTopicsCollectiveNew=$this->Topic_GetCountTopicsCollectiveNew();
|
2011-06-06 14:58:19 +03:00
|
|
|
|
$this->iCountTopicsPersonalNew=$this->Topic_GetCountTopicsPersonalNew();
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$this->iCountTopicsBlogNew=$this->iCountTopicsCollectiveNew;
|
|
|
|
|
$this->iCountTopicsNew=$this->iCountTopicsCollectiveNew+$this->iCountTopicsPersonalNew;
|
2013-08-05 14:54:03 +03:00
|
|
|
|
$this->iCountTopicsSubNew=$this->iCountTopicsCollectiveNew;
|
|
|
|
|
$this->sNavTopicsSubUrl = Router::GetPath('blog');
|
2011-08-23 17:19:32 +03:00
|
|
|
|
/**
|
|
|
|
|
* Загружаем в шаблон JS текстовки
|
|
|
|
|
*/
|
|
|
|
|
$this->Lang_AddLangJs(array(
|
2014-01-25 14:39:19 +02:00
|
|
|
|
'blog.join.join','blog.join.leave'
|
2012-04-06 17:57:51 +03:00
|
|
|
|
));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Регистрируем евенты, по сути определяем УРЛы вида /blog/.../
|
|
|
|
|
*
|
|
|
|
|
*/
|
2011-06-06 14:58:19 +03:00
|
|
|
|
protected function RegisterEvent() {
|
2012-07-09 08:47:42 +03:00
|
|
|
|
$this->AddEventPreg('/^good$/i','/^(page([1-9]\d{0,5}))?$/i',array('EventTopics','topics'));
|
2012-04-22 10:16:11 +03:00
|
|
|
|
$this->AddEvent('good',array('EventTopics','topics'));
|
2012-07-09 08:47:42 +03:00
|
|
|
|
$this->AddEventPreg('/^bad$/i','/^(page([1-9]\d{0,5}))?$/i',array('EventTopics','topics'));
|
|
|
|
|
$this->AddEventPreg('/^new$/i','/^(page([1-9]\d{0,5}))?$/i',array('EventTopics','topics'));
|
|
|
|
|
$this->AddEventPreg('/^newall$/i','/^(page([1-9]\d{0,5}))?$/i',array('EventTopics','topics'));
|
|
|
|
|
$this->AddEventPreg('/^discussed$/i','/^(page([1-9]\d{0,5}))?$/i',array('EventTopics','topics'));
|
|
|
|
|
$this->AddEventPreg('/^top$/i','/^(page([1-9]\d{0,5}))?$/i',array('EventTopics','topics'));
|
2011-06-06 14:58:19 +03:00
|
|
|
|
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$this->AddEvent('add','EventAddBlog');
|
|
|
|
|
$this->AddEvent('edit','EventEditBlog');
|
2009-11-25 02:37:01 +02:00
|
|
|
|
$this->AddEvent('delete','EventDeleteBlog');
|
2012-07-09 08:47:42 +03:00
|
|
|
|
$this->AddEventPreg('/^admin$/i','/^\d+$/i','/^(page([1-9]\d{0,5}))?$/i','EventAdminBlog');
|
2009-09-22 00:08:00 +03:00
|
|
|
|
$this->AddEvent('invite','EventInviteBlog');
|
2011-06-06 14:58:19 +03:00
|
|
|
|
|
2009-06-24 19:58:21 +03:00
|
|
|
|
$this->AddEvent('ajaxaddcomment','AjaxAddComment');
|
2010-10-03 15:48:39 +03:00
|
|
|
|
$this->AddEvent('ajaxresponsecomment','AjaxResponseComment');
|
2009-09-22 00:08:00 +03:00
|
|
|
|
$this->AddEvent('ajaxaddbloginvite', 'AjaxAddBlogInvite');
|
2010-04-03 23:38:00 +03:00
|
|
|
|
$this->AddEvent('ajaxrebloginvite', 'AjaxReBlogInvite');
|
2012-06-17 08:24:48 +03:00
|
|
|
|
$this->AddEvent('ajaxremovebloginvite', 'AjaxRemoveBlogInvite');
|
2010-10-02 16:39:50 +03:00
|
|
|
|
$this->AddEvent('ajaxbloginfo', 'AjaxBlogInfo');
|
|
|
|
|
$this->AddEvent('ajaxblogjoin', 'AjaxBlogJoin');
|
2011-06-06 14:58:19 +03:00
|
|
|
|
|
2012-04-22 10:16:11 +03:00
|
|
|
|
$this->AddEventPreg('/^(\d+)\.html$/i','/^$/i',array('EventShowTopic','topic'));
|
|
|
|
|
$this->AddEventPreg('/^[\w\-\_]+$/i','/^(\d+)\.html$/i',array('EventShowTopic','topic'));
|
2011-06-06 14:58:19 +03:00
|
|
|
|
|
2012-07-09 08:47:42 +03:00
|
|
|
|
$this->AddEventPreg('/^[\w\-\_]+$/i','/^(page([1-9]\d{0,5}))?$/i',array('EventShowBlog','blog'));
|
|
|
|
|
$this->AddEventPreg('/^[\w\-\_]+$/i','/^bad$/i','/^(page([1-9]\d{0,5}))?$/i',array('EventShowBlog','blog'));
|
|
|
|
|
$this->AddEventPreg('/^[\w\-\_]+$/i','/^new$/i','/^(page([1-9]\d{0,5}))?$/i',array('EventShowBlog','blog'));
|
|
|
|
|
$this->AddEventPreg('/^[\w\-\_]+$/i','/^newall$/i','/^(page([1-9]\d{0,5}))?$/i',array('EventShowBlog','blog'));
|
|
|
|
|
$this->AddEventPreg('/^[\w\-\_]+$/i','/^discussed$/i','/^(page([1-9]\d{0,5}))?$/i',array('EventShowBlog','blog'));
|
|
|
|
|
$this->AddEventPreg('/^[\w\-\_]+$/i','/^top$/i','/^(page([1-9]\d{0,5}))?$/i',array('EventShowBlog','blog'));
|
2011-06-06 14:58:19 +03:00
|
|
|
|
|
2012-07-09 08:47:42 +03:00
|
|
|
|
$this->AddEventPreg('/^[\w\-\_]+$/i','/^users$/i','/^(page([1-9]\d{0,5}))?$/i','EventShowUsers');
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
2011-06-06 14:58:19 +03:00
|
|
|
|
|
|
|
|
|
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**********************************************************************************
|
|
|
|
|
************************ РЕАЛИЗАЦИЯ ЭКШЕНА ***************************************
|
|
|
|
|
**********************************************************************************
|
2011-06-06 14:58:19 +03:00
|
|
|
|
*/
|
2012-04-29 17:58:36 +03:00
|
|
|
|
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Добавление нового блога
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
protected function EventAddBlog() {
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем title страницы
|
|
|
|
|
*/
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('blog.add.title'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Меню
|
|
|
|
|
*/
|
|
|
|
|
$this->sMenuSubItemSelect='add';
|
2012-04-16 19:37:23 +03:00
|
|
|
|
$this->sMenuItemSelect='blog';
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Проверяем авторизован ли пользователь
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->User_IsAuthorization()) {
|
2008-12-28 18:46:13 +02:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('not_access'),$this->Lang_Get('error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
return Router::Action('error');
|
2011-06-06 14:58:19 +03:00
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Проверяем хватает ли рейтинга юзеру чтоб создать блог
|
|
|
|
|
*/
|
2008-10-28 20:54:36 +02:00
|
|
|
|
if (!$this->ACL_CanCreateBlog($this->oUserCurrent) and !$this->oUserCurrent->isAdministrator()) {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('blog.add.alerts.acl'),$this->Lang_Get('error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
return Router::Action('error');
|
2011-06-06 14:58:19 +03:00
|
|
|
|
}
|
2012-04-06 17:57:51 +03:00
|
|
|
|
$this->Hook_Run('blog_add_show');
|
2013-04-08 12:37:12 +03:00
|
|
|
|
/**
|
|
|
|
|
* Прогружаем категории блогов
|
|
|
|
|
*/
|
|
|
|
|
$aCategories=$this->Blog_GetCategoriesTree();
|
|
|
|
|
$this->Viewer_Assign('aBlogCategories',$aCategories);
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
2009-10-17 03:27:22 +03:00
|
|
|
|
* Запускаем проверку корректности ввода полей при добалении блога.
|
|
|
|
|
* Дополнительно проверяем, что был отправлен POST запрос.
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
|
|
|
|
if (!$this->checkBlogFields()) {
|
2011-06-06 14:58:19 +03:00
|
|
|
|
return false;
|
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Если всё ок то пытаемся создать блог
|
|
|
|
|
*/
|
2009-09-08 15:02:51 +03:00
|
|
|
|
$oBlog=Engine::GetEntity('Blog');
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$oBlog->setOwnerId($this->oUserCurrent->getId());
|
2012-12-12 08:06:38 +02:00
|
|
|
|
$oBlog->setTitle(strip_tags(getRequestStr('blog_title')));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Парсим текст на предмет разных ХТМЛ тегов
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
$sText=$this->Text_Parser(getRequestStr('blog_description'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$oBlog->setDescription($sText);
|
2012-12-12 08:06:38 +02:00
|
|
|
|
$oBlog->setType(getRequestStr('blog_type'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$oBlog->setDateAdd(date("Y-m-d H:i:s"));
|
2012-12-12 08:06:38 +02:00
|
|
|
|
$oBlog->setLimitRatingTopic(getRequestStr('blog_limit_rating_topic'));
|
|
|
|
|
$oBlog->setUrl(getRequestStr('blog_url'));
|
2009-10-14 15:36:12 +03:00
|
|
|
|
$oBlog->setAvatar(null);
|
2008-10-25 23:31:29 +03:00
|
|
|
|
/**
|
2012-04-06 17:57:51 +03:00
|
|
|
|
* Загрузка аватара, делаем ресайзы
|
|
|
|
|
*/
|
2009-05-21 17:50:55 +03:00
|
|
|
|
if (isset($_FILES['avatar']) and is_uploaded_file($_FILES['avatar']['tmp_name'])) {
|
2014-02-16 13:59:12 +02:00
|
|
|
|
if (true!==$sResult=$this->Blog_UploadBlogAvatar($_FILES['avatar'],$oBlog)) {
|
|
|
|
|
$this->Message_AddError(is_bool($sResult) ? $this->Lang_Get('blog.add.fields.avatar.error') : $sResult,$this->Lang_Get('error'));
|
2008-10-25 23:31:29 +03:00
|
|
|
|
return false;
|
|
|
|
|
}
|
2009-09-16 01:23:25 +03:00
|
|
|
|
}
|
2013-04-08 12:37:12 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем категорию для блога
|
|
|
|
|
*/
|
|
|
|
|
if (Config::Get('module.blog.category_allow') and ($this->oUserCurrent->isAdministrator() or !Config::Get('module.blog.category_only_admin'))) {
|
|
|
|
|
if (getRequestStr('blog_category')) {
|
|
|
|
|
$oBlog->setCategoryId(getRequestStr('blog_category'));
|
|
|
|
|
} elseif (Config::Get('module.blog.category_allow_empty')) {
|
|
|
|
|
$oBlog->setCategoryId(null);
|
|
|
|
|
}
|
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Создаём блог
|
|
|
|
|
*/
|
2010-02-07 00:41:47 +02:00
|
|
|
|
$this->Hook_Run('blog_add_before', array('oBlog'=>$oBlog));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
if ($this->Blog_AddBlog($oBlog)) {
|
2010-02-07 00:41:47 +02:00
|
|
|
|
$this->Hook_Run('blog_add_after', array('oBlog'=>$oBlog));
|
2009-05-03 22:50:26 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получаем блог, это для получение полного пути блога, если он в будущем будет зависит от других сущностей(компании, юзер и т.п.)
|
|
|
|
|
*/
|
|
|
|
|
$oBlog->Blog_GetBlogById($oBlog->getId());
|
2014-02-21 09:45:17 +02:00
|
|
|
|
/**
|
|
|
|
|
* Фиксируем ID у media файлов
|
|
|
|
|
*/
|
|
|
|
|
$this->Media_ReplaceTargetTmpById('blog',$oBlog->getId());
|
2013-04-08 12:37:12 +03:00
|
|
|
|
/**
|
|
|
|
|
* Меняем количество блогов в категории
|
|
|
|
|
*/
|
|
|
|
|
if ($oBlog->getCategoryId()) {
|
|
|
|
|
$this->Blog_IncreaseCategoryCountBlogs($oBlog->getCategoryId());
|
|
|
|
|
}
|
2011-06-06 14:58:19 +03:00
|
|
|
|
|
2011-07-31 19:52:50 +03:00
|
|
|
|
/**
|
|
|
|
|
* Добавляем событие в ленту
|
|
|
|
|
*/
|
|
|
|
|
$this->Stream_write($oBlog->getOwnerId(), 'add_blog', $oBlog->getId());
|
2009-09-09 20:49:00 +03:00
|
|
|
|
Router::Location($oBlog->getUrlFull());
|
2008-09-21 09:36:57 +03:00
|
|
|
|
} else {
|
2008-12-28 18:46:13 +02:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Редактирование блога
|
|
|
|
|
*
|
|
|
|
|
*/
|
2009-11-25 02:37:01 +02:00
|
|
|
|
protected function EventEditBlog() {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Меню
|
|
|
|
|
*/
|
2008-10-16 23:26:53 +03:00
|
|
|
|
$this->sMenuSubItemSelect='';
|
|
|
|
|
$this->sMenuItemSelect='profile';
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Проверяем передан ли в УРЛе номер блога
|
|
|
|
|
*/
|
|
|
|
|
$sBlogId=$this->GetParam(0);
|
|
|
|
|
if (!$oBlog=$this->Blog_GetBlogById($sBlogId)) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
2009-02-21 20:36:14 +02:00
|
|
|
|
/**
|
|
|
|
|
* Проверяем тип блога
|
|
|
|
|
*/
|
|
|
|
|
if ($oBlog->getType()=='personal') {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Проверям авторизован ли пользователь
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->User_IsAuthorization()) {
|
2008-12-28 18:46:13 +02:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('not_access'),$this->Lang_Get('error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
return Router::Action('error');
|
|
|
|
|
}
|
|
|
|
|
/**
|
2012-04-06 17:57:51 +03:00
|
|
|
|
* Проверка на право редактировать блог
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->ACL_IsAllowEditBlog($oBlog, $this->oUserCurrent)) {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
return parent::EventNotFound();
|
2012-04-06 17:57:51 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$this->Hook_Run('blog_edit_show',array('oBlog'=>$oBlog));
|
2013-04-08 12:37:12 +03:00
|
|
|
|
/**
|
|
|
|
|
* Прогружаем категории блогов
|
|
|
|
|
*/
|
|
|
|
|
$aCategories=$this->Blog_GetCategoriesTree();
|
|
|
|
|
$this->Viewer_Assign('aBlogCategories',$aCategories);
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем title страницы
|
|
|
|
|
*/
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$this->Viewer_AddHtmlTitle($oBlog->getTitle());
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('common.edit'));
|
2011-06-06 14:58:19 +03:00
|
|
|
|
|
2008-10-16 23:26:53 +03:00
|
|
|
|
$this->Viewer_Assign('oBlogEdit',$oBlog);
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем шалон для вывода
|
2011-06-06 14:58:19 +03:00
|
|
|
|
*/
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$this->SetTemplateAction('add');
|
|
|
|
|
/**
|
|
|
|
|
* Если нажали кнопку "Сохранить"
|
|
|
|
|
*/
|
2009-10-17 03:27:22 +03:00
|
|
|
|
if (isPost('submit_blog_add')) {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Запускаем проверку корректности ввода полей при редактировании блога
|
|
|
|
|
*/
|
2008-10-16 18:40:57 +03:00
|
|
|
|
if (!$this->checkBlogFields($oBlog)) {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
return false;
|
2009-12-10 18:57:30 +02:00
|
|
|
|
}
|
2012-12-12 08:06:38 +02:00
|
|
|
|
$oBlog->setTitle(strip_tags(getRequestStr('blog_title')));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Парсим описание блога на предмет ХТМЛ тегов
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
$sText=$this->Text_Parser(getRequestStr('blog_description'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$oBlog->setDescription($sText);
|
2010-09-15 19:07:31 +03:00
|
|
|
|
/**
|
|
|
|
|
* Сбрасываем кеш, если поменяли тип блога
|
|
|
|
|
* Нужна доработка, т.к. в этом блоге могут быть топики других юзеров
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
if ($oBlog->getType()!=getRequestStr('blog_type')) {
|
2010-09-15 19:07:31 +03:00
|
|
|
|
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("topic_update_user_{$oBlog->getOwnerId()}"));
|
|
|
|
|
}
|
2012-12-12 08:06:38 +02:00
|
|
|
|
$oBlog->setType(getRequestStr('blog_type'));
|
|
|
|
|
$oBlog->setLimitRatingTopic(getRequestStr('blog_limit_rating_topic'));
|
2012-04-07 11:22:45 +03:00
|
|
|
|
if ($this->oUserCurrent->isAdministrator()) {
|
2012-12-12 08:06:38 +02:00
|
|
|
|
$oBlog->setUrl(getRequestStr('blog_url')); // разрешаем смену URL блога только админу
|
2012-04-07 11:22:45 +03:00
|
|
|
|
}
|
2013-04-08 12:37:12 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем категорию для блога
|
|
|
|
|
*/
|
|
|
|
|
$iCategoryIdOld=$oBlog->getCategoryId();
|
|
|
|
|
if (Config::Get('module.blog.category_allow') and ($this->oUserCurrent->isAdministrator() or !Config::Get('module.blog.category_only_admin'))) {
|
|
|
|
|
if (getRequestStr('blog_category')) {
|
|
|
|
|
$oBlog->setCategoryId(getRequestStr('blog_category'));
|
|
|
|
|
} elseif (Config::Get('module.blog.category_allow_empty')) {
|
|
|
|
|
$oBlog->setCategoryId(null);
|
|
|
|
|
}
|
|
|
|
|
}
|
2008-10-25 23:31:29 +03:00
|
|
|
|
/**
|
2012-04-06 17:57:51 +03:00
|
|
|
|
* Загрузка аватара, делаем ресайзы
|
|
|
|
|
*/
|
2009-09-16 01:23:25 +03:00
|
|
|
|
if (isset($_FILES['avatar']) and is_uploaded_file($_FILES['avatar']['tmp_name'])) {
|
2014-02-16 13:59:12 +02:00
|
|
|
|
if (true!==$sResult=$this->Blog_UploadBlogAvatar($_FILES['avatar'],$oBlog)) {
|
|
|
|
|
$this->Message_AddError(is_bool($sResult) ? $this->Lang_Get('blog.add.fields.avatar.error') : $sResult,$this->Lang_Get('error'));
|
2008-10-25 23:31:29 +03:00
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Удалить аватар
|
|
|
|
|
*/
|
|
|
|
|
if (isset($_REQUEST['avatar_delete'])) {
|
2009-12-10 18:57:30 +02:00
|
|
|
|
$this->Blog_DeleteBlogAvatar($oBlog);
|
2009-10-15 02:34:03 +03:00
|
|
|
|
$oBlog->setAvatar(null);
|
2008-10-25 23:31:29 +03:00
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Обновляем блог
|
|
|
|
|
*/
|
2010-02-07 00:41:47 +02:00
|
|
|
|
$this->Hook_Run('blog_edit_before', array('oBlog'=>$oBlog));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
if ($this->Blog_UpdateBlog($oBlog)) {
|
2010-02-07 00:41:47 +02:00
|
|
|
|
$this->Hook_Run('blog_edit_after', array('oBlog'=>$oBlog));
|
2013-04-08 12:37:12 +03:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Меняем количество блогов в категории
|
|
|
|
|
*/
|
|
|
|
|
if ($iCategoryIdOld and $iCategoryIdOld!=$oBlog->getCategoryId()) {
|
|
|
|
|
$this->Blog_DecreaseCategoryCountBlogs($iCategoryIdOld);
|
|
|
|
|
}
|
|
|
|
|
if ($oBlog->getCategoryId()) {
|
|
|
|
|
$this->Blog_IncreaseCategoryCountBlogs($oBlog->getCategoryId());
|
|
|
|
|
}
|
|
|
|
|
|
2009-09-09 20:49:00 +03:00
|
|
|
|
Router::Location($oBlog->getUrlFull());
|
2008-09-21 09:36:57 +03:00
|
|
|
|
} else {
|
2008-12-28 18:46:13 +02:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
return Router::Action('error');
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
/**
|
|
|
|
|
* Загружаем данные в форму редактирования блога
|
|
|
|
|
*/
|
|
|
|
|
$_REQUEST['blog_title']=$oBlog->getTitle();
|
|
|
|
|
$_REQUEST['blog_url']=$oBlog->getUrl();
|
|
|
|
|
$_REQUEST['blog_type']=$oBlog->getType();
|
2013-04-08 12:37:12 +03:00
|
|
|
|
$_REQUEST['blog_category']=$oBlog->getCategoryId();
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$_REQUEST['blog_description']=$oBlog->getDescription();
|
|
|
|
|
$_REQUEST['blog_limit_rating_topic']=$oBlog->getLimitRatingTopic();
|
|
|
|
|
$_REQUEST['blog_id']=$oBlog->getId();
|
|
|
|
|
}
|
2008-10-16 23:26:53 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Управление пользователями блога
|
|
|
|
|
*
|
|
|
|
|
*/
|
2011-06-06 14:58:19 +03:00
|
|
|
|
protected function EventAdminBlog() {
|
2008-10-16 23:26:53 +03:00
|
|
|
|
/**
|
|
|
|
|
* Меню
|
2011-06-06 14:58:19 +03:00
|
|
|
|
*/
|
2008-10-16 23:26:53 +03:00
|
|
|
|
$this->sMenuItemSelect='admin';
|
2009-12-10 18:57:30 +02:00
|
|
|
|
$this->sMenuSubItemSelect='';
|
2008-10-16 23:26:53 +03:00
|
|
|
|
/**
|
|
|
|
|
* Проверяем передан ли в УРЛе номер блога
|
|
|
|
|
*/
|
|
|
|
|
$sBlogId=$this->GetParam(0);
|
|
|
|
|
if (!$oBlog=$this->Blog_GetBlogById($sBlogId)) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Проверям авторизован ли пользователь
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->User_IsAuthorization()) {
|
2008-12-28 18:46:13 +02:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('not_access'),$this->Lang_Get('error'));
|
2008-10-16 23:26:53 +03:00
|
|
|
|
return Router::Action('error');
|
|
|
|
|
}
|
2012-04-06 17:57:51 +03:00
|
|
|
|
/**
|
|
|
|
|
* Проверка на право управлением пользователями блога
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->ACL_IsAllowAdminBlog($oBlog, $this->oUserCurrent)) {
|
2008-10-16 23:26:53 +03:00
|
|
|
|
return parent::EventNotFound();
|
2012-04-06 17:57:51 +03:00
|
|
|
|
}
|
2008-10-16 23:26:53 +03:00
|
|
|
|
/**
|
|
|
|
|
* Обрабатываем сохранение формы
|
|
|
|
|
*/
|
2009-10-17 03:27:22 +03:00
|
|
|
|
if (isPost('submit_blog_admin')) {
|
2009-10-20 02:42:23 +03:00
|
|
|
|
$this->Security_ValidateSendForm();
|
2011-06-06 14:58:19 +03:00
|
|
|
|
|
2008-10-16 23:26:53 +03:00
|
|
|
|
$aUserRank=getRequest('user_rank',array());
|
|
|
|
|
if (!is_array($aUserRank)) {
|
|
|
|
|
$aUserRank=array();
|
|
|
|
|
}
|
|
|
|
|
foreach ($aUserRank as $sUserId => $sRank) {
|
2012-12-12 08:06:38 +02:00
|
|
|
|
$sRank=(string)$sRank;
|
2009-06-09 18:55:10 +03:00
|
|
|
|
if (!($oBlogUser=$this->Blog_GetBlogUserByBlogIdAndUserId($oBlog->getId(),$sUserId))) {
|
2008-12-28 18:46:13 +02:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
2008-10-16 23:26:53 +03:00
|
|
|
|
break;
|
|
|
|
|
}
|
2010-04-25 16:08:56 +03:00
|
|
|
|
/**
|
|
|
|
|
* Увеличиваем число читателей блога
|
|
|
|
|
*/
|
2011-06-06 14:58:19 +03:00
|
|
|
|
if (in_array($sRank,array('administrator','moderator','reader')) and $oBlogUser->getUserRole()==ModuleBlog::BLOG_USER_ROLE_BAN) {
|
|
|
|
|
$oBlog->setCountUser($oBlog->getCountUser()+1);
|
2010-04-25 16:08:56 +03:00
|
|
|
|
}
|
2011-06-06 14:58:19 +03:00
|
|
|
|
|
2008-10-16 23:26:53 +03:00
|
|
|
|
switch ($sRank) {
|
|
|
|
|
case 'administrator':
|
2010-05-27 17:02:43 +03:00
|
|
|
|
$oBlogUser->setUserRole(ModuleBlog::BLOG_USER_ROLE_ADMINISTRATOR);
|
2008-10-16 23:26:53 +03:00
|
|
|
|
break;
|
|
|
|
|
case 'moderator':
|
2010-05-27 17:02:43 +03:00
|
|
|
|
$oBlogUser->setUserRole(ModuleBlog::BLOG_USER_ROLE_MODERATOR);
|
2008-10-16 23:26:53 +03:00
|
|
|
|
break;
|
2009-09-26 23:32:33 +03:00
|
|
|
|
case 'reader':
|
2010-05-27 17:02:43 +03:00
|
|
|
|
$oBlogUser->setUserRole(ModuleBlog::BLOG_USER_ROLE_USER);
|
2008-10-16 23:26:53 +03:00
|
|
|
|
break;
|
2009-09-26 23:32:33 +03:00
|
|
|
|
case 'ban':
|
2010-05-27 17:02:43 +03:00
|
|
|
|
if ($oBlogUser->getUserRole()!=ModuleBlog::BLOG_USER_ROLE_BAN) {
|
2011-06-06 14:58:19 +03:00
|
|
|
|
$oBlog->setCountUser($oBlog->getCountUser()-1);
|
2010-04-25 16:08:56 +03:00
|
|
|
|
}
|
2010-05-27 17:02:43 +03:00
|
|
|
|
$oBlogUser->setUserRole(ModuleBlog::BLOG_USER_ROLE_BAN);
|
2009-09-26 23:32:33 +03:00
|
|
|
|
break;
|
|
|
|
|
default:
|
2011-06-06 14:58:19 +03:00
|
|
|
|
$oBlogUser->setUserRole(ModuleBlog::BLOG_USER_ROLE_GUEST);
|
2008-10-16 23:26:53 +03:00
|
|
|
|
}
|
|
|
|
|
$this->Blog_UpdateRelationBlogUser($oBlogUser);
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Message_AddNoticeSingle($this->Lang_Get('blog.admin.alerts.submit_success'));
|
2008-10-16 23:26:53 +03:00
|
|
|
|
}
|
2010-04-25 16:08:56 +03:00
|
|
|
|
$this->Blog_UpdateBlog($oBlog);
|
2008-10-16 23:26:53 +03:00
|
|
|
|
}
|
2011-05-05 16:30:01 +03:00
|
|
|
|
/**
|
|
|
|
|
* Текущая страница
|
|
|
|
|
*/
|
|
|
|
|
$iPage= $this->GetParamEventMatch(1,2) ? $this->GetParamEventMatch(1,2) : 1;
|
2008-10-16 23:26:53 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получаем список подписчиков блога
|
|
|
|
|
*/
|
2011-05-05 16:30:01 +03:00
|
|
|
|
$aResult=$this->Blog_GetBlogUsersByBlogId(
|
2009-09-26 23:32:33 +03:00
|
|
|
|
$oBlog->getId(),
|
|
|
|
|
array(
|
2010-05-27 17:02:43 +03:00
|
|
|
|
ModuleBlog::BLOG_USER_ROLE_BAN,
|
|
|
|
|
ModuleBlog::BLOG_USER_ROLE_USER,
|
|
|
|
|
ModuleBlog::BLOG_USER_ROLE_MODERATOR,
|
|
|
|
|
ModuleBlog::BLOG_USER_ROLE_ADMINISTRATOR
|
2011-05-05 16:30:01 +03:00
|
|
|
|
),$iPage,Config::Get('module.blog.users_per_page')
|
2009-09-26 23:32:33 +03:00
|
|
|
|
);
|
2011-05-05 16:30:01 +03:00
|
|
|
|
$aBlogUsers=$aResult['collection'];
|
|
|
|
|
/**
|
|
|
|
|
* Формируем постраничность
|
2011-06-06 14:58:19 +03:00
|
|
|
|
*/
|
2012-04-25 17:47:47 +03:00
|
|
|
|
$aPaging=$this->Viewer_MakePaging($aResult['count'],$iPage,Config::Get('module.blog.users_per_page'),Config::Get('pagination.pages.count'),Router::GetPath('blog')."admin/{$oBlog->getId()}");
|
2011-05-05 16:30:01 +03:00
|
|
|
|
$this->Viewer_Assign('aPaging',$aPaging);
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем title страницы
|
|
|
|
|
*/
|
2008-10-16 23:26:53 +03:00
|
|
|
|
$this->Viewer_AddHtmlTitle($oBlog->getTitle());
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Viewer_AddHtmlTitle($this->Lang_Get('blog.admin.title'));
|
2011-06-06 14:58:19 +03:00
|
|
|
|
|
2008-10-16 23:26:53 +03:00
|
|
|
|
$this->Viewer_Assign('oBlogEdit',$oBlog);
|
|
|
|
|
$this->Viewer_Assign('aBlogUsers',$aBlogUsers);
|
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем шалон для вывода
|
2011-06-06 14:58:19 +03:00
|
|
|
|
*/
|
2008-10-16 23:26:53 +03:00
|
|
|
|
$this->SetTemplateAction('admin');
|
2009-09-22 00:08:00 +03:00
|
|
|
|
/**
|
2011-06-06 14:58:19 +03:00
|
|
|
|
* Если блог закрытый, получаем приглашенных
|
|
|
|
|
* и добавляем блок-форму для приглашения
|
2009-09-22 00:08:00 +03:00
|
|
|
|
*/
|
|
|
|
|
if($oBlog->getType()=='close') {
|
2011-05-05 16:30:01 +03:00
|
|
|
|
$aBlogUsersInvited=$this->Blog_GetBlogUsersByBlogId($oBlog->getId(),ModuleBlog::BLOG_USER_ROLE_INVITE,null);
|
|
|
|
|
$this->Viewer_Assign('aBlogUsersInvited',$aBlogUsersInvited['collection']);
|
2013-05-04 17:10:22 +03:00
|
|
|
|
$this->Viewer_AddBlock('right','blocks/block.blogInvite.tpl');
|
2009-09-22 00:08:00 +03:00
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Проверка полей блога
|
|
|
|
|
*
|
2012-04-29 17:58:36 +03:00
|
|
|
|
* @param ModuleBlog_EntityBlog|null $oBlog
|
2009-10-17 03:27:22 +03:00
|
|
|
|
* @return bool
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
2008-10-16 18:40:57 +03:00
|
|
|
|
protected function checkBlogFields($oBlog=null) {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
2009-10-17 03:27:22 +03:00
|
|
|
|
* Проверяем только если была отправлена форма с данными (методом POST)
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
2009-10-17 03:27:22 +03:00
|
|
|
|
if (!isPost('submit_blog_add')) {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$_REQUEST['blog_limit_rating_topic']=0;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2009-10-21 16:28:35 +03:00
|
|
|
|
$this->Security_ValidateSendForm();
|
2011-06-06 14:58:19 +03:00
|
|
|
|
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$bOk=true;
|
|
|
|
|
/**
|
2012-04-06 17:57:51 +03:00
|
|
|
|
* Проверяем есть ли название блога
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
if (!func_check(getRequestStr('blog_title'),'text',2,200)) {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('blog.add.fields.title.error'),$this->Lang_Get('error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$bOk=false;
|
2012-07-08 11:50:36 +03:00
|
|
|
|
} else {
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем есть ли уже блог с таким названием
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
if ($oBlogExists=$this->Blog_GetBlogByTitle(getRequestStr('blog_title'))) {
|
2012-07-08 11:50:36 +03:00
|
|
|
|
if (!$oBlog or $oBlog->getId()!=$oBlogExists->getId()) {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('blog.add.fields.title.error_unique'),$this->Lang_Get('error'));
|
2012-07-08 11:50:36 +03:00
|
|
|
|
$bOk=false;
|
|
|
|
|
}
|
2008-10-16 18:40:57 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
2012-07-08 11:50:36 +03:00
|
|
|
|
|
2012-04-07 11:22:45 +03:00
|
|
|
|
/**
|
|
|
|
|
* Проверяем есть ли URL блога, с заменой всех пробельных символов на "_"
|
|
|
|
|
*/
|
|
|
|
|
if (!$oBlog or $this->oUserCurrent->isAdministrator()) {
|
2012-12-12 08:06:38 +02:00
|
|
|
|
$blogUrl=preg_replace("/\s+/",'_',getRequestStr('blog_url'));
|
2008-10-25 23:31:29 +03:00
|
|
|
|
$_REQUEST['blog_url']=$blogUrl;
|
2012-12-12 08:06:38 +02:00
|
|
|
|
if (!func_check(getRequestStr('blog_url'),'login',2,50)) {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('blog.add.fields.url.error'),$this->Lang_Get('error'));
|
2008-10-25 23:31:29 +03:00
|
|
|
|
$bOk=false;
|
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем на счет плохих УРЛов
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
if (in_array(getRequestStr('blog_url'),$this->aBadBlogUrl)) {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('blog.add.fields.url.error_badword').' '.join(',',$this->aBadBlogUrl),$this->Lang_Get('error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$bOk=false;
|
|
|
|
|
}
|
2008-10-16 18:40:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Проверяем есть ли уже блог с таким URL
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
if ($oBlogExists=$this->Blog_GetBlogByUrl(getRequestStr('blog_url'))) {
|
2008-10-16 18:40:57 +03:00
|
|
|
|
if (!$oBlog or $oBlog->getId()!=$oBlogExists->getId()) {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('blog.add.fields.url.error_unique'),$this->Lang_Get('error'));
|
2008-10-16 18:40:57 +03:00
|
|
|
|
$bOk=false;
|
|
|
|
|
}
|
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Проверяем есть ли описание блога
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
if (!func_check(getRequestStr('blog_description'),'text',10,3000)) {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('blog.add.fields.description.error'),$this->Lang_Get('error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$bOk=false;
|
|
|
|
|
}
|
|
|
|
|
/**
|
2009-09-20 16:26:09 +03:00
|
|
|
|
* Проверяем доступные типы блога для создания
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
2013-05-12 05:53:10 +03:00
|
|
|
|
if (!$this->Blog_IsAllowBlogType(getRequestStr('blog_type'))) {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('blog.add.fields.type.error'),$this->Lang_Get('error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$bOk=false;
|
|
|
|
|
}
|
|
|
|
|
/**
|
2011-06-06 14:58:19 +03:00
|
|
|
|
* Преобразуем ограничение по рейтингу в число
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
if (!func_check(getRequestStr('blog_limit_rating_topic'),'float')) {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('blog.add.fields.rating.error'),$this->Lang_Get('error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$bOk=false;
|
2010-02-06 14:47:19 +02:00
|
|
|
|
}
|
2013-04-08 12:37:12 +03:00
|
|
|
|
/**
|
|
|
|
|
* Проверяем категорию блога
|
|
|
|
|
*/
|
|
|
|
|
if (Config::Get('module.blog.category_allow')) {
|
|
|
|
|
if ($oCategory=$this->Blog_GetCategoryById(getRequestStr('blog_category'))) {
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем есть ли у этой категории дочернии
|
|
|
|
|
*/
|
|
|
|
|
if (Config::Get('module.blog.category_only_children') and $this->Blog_GetCategoriesByPid($oCategory->getId())) {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('blog.add.fields.category.error_only_children'),$this->Lang_Get('error'));
|
2013-04-08 12:37:12 +03:00
|
|
|
|
$bOk=false;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$_REQUEST['blog_category']=null;
|
|
|
|
|
if (!Config::Get('module.blog.category_allow_empty')) {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('blog.add.fields.category.error'),$this->Lang_Get('error'));
|
2013-04-08 12:37:12 +03:00
|
|
|
|
$bOk=false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2010-02-06 14:47:19 +02:00
|
|
|
|
/**
|
|
|
|
|
* Выполнение хуков
|
|
|
|
|
*/
|
2010-02-06 19:47:12 +02:00
|
|
|
|
$this->Hook_Run('check_blog_fields', array('bOk'=>&$bOk));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
return $bOk;
|
|
|
|
|
}
|
|
|
|
|
/**
|
2009-06-07 21:40:54 +03:00
|
|
|
|
* Показ всех топиков
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*
|
|
|
|
|
*/
|
2009-06-07 21:40:54 +03:00
|
|
|
|
protected function EventTopics() {
|
2012-03-31 21:33:36 +03:00
|
|
|
|
$sPeriod=1; // по дефолту 1 день
|
2012-12-12 08:06:38 +02:00
|
|
|
|
if (in_array(getRequestStr('period'),array(1,7,30,'all'))) {
|
|
|
|
|
$sPeriod=getRequestStr('period');
|
2012-03-31 21:33:36 +03:00
|
|
|
|
}
|
2009-06-07 21:40:54 +03:00
|
|
|
|
$sShowType=$this->sCurrentEvent;
|
2012-03-31 21:33:36 +03:00
|
|
|
|
if (!in_array($sShowType,array('discussed','top'))) {
|
|
|
|
|
$sPeriod='all';
|
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Меню
|
|
|
|
|
*/
|
2012-06-16 15:02:20 +03:00
|
|
|
|
$this->sMenuSubItemSelect=$sShowType=='newall' ? 'new' : $sShowType;
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Передан ли номер страницы
|
|
|
|
|
*/
|
2011-06-06 14:58:19 +03:00
|
|
|
|
$iPage=$this->GetParamEventMatch(0,2) ? $this->GetParamEventMatch(0,2) : 1;
|
2012-05-04 11:19:37 +03:00
|
|
|
|
if ($iPage==1 and !getRequest('period')) {
|
|
|
|
|
$this->Viewer_SetHtmlCanonical(Router::GetPath('blog').$sShowType.'/');
|
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получаем список топиков
|
2011-06-06 14:58:19 +03:00
|
|
|
|
*/
|
2012-03-31 21:33:36 +03:00
|
|
|
|
$aResult=$this->Topic_GetTopicsCollective($iPage,Config::Get('module.topic.per_page'),$sShowType,$sPeriod=='all' ? null : $sPeriod*60*60*24);
|
|
|
|
|
/**
|
|
|
|
|
* Если нет топиков за 1 день, то показываем за неделю (7)
|
|
|
|
|
*/
|
2012-04-12 18:09:39 +03:00
|
|
|
|
if (in_array($sShowType,array('discussed','top')) and !$aResult['count'] and $iPage==1 and !getRequest('period')) {
|
2012-03-31 21:33:36 +03:00
|
|
|
|
$sPeriod=7;
|
|
|
|
|
$aResult=$this->Topic_GetTopicsCollective($iPage,Config::Get('module.topic.per_page'),$sShowType,$sPeriod=='all' ? null : $sPeriod*60*60*24);
|
|
|
|
|
}
|
2011-06-06 14:58:19 +03:00
|
|
|
|
$aTopics=$aResult['collection'];
|
2012-06-10 11:33:03 +03:00
|
|
|
|
/**
|
|
|
|
|
* Вызов хуков
|
|
|
|
|
*/
|
|
|
|
|
$this->Hook_Run('topics_list_show',array('aTopics'=>$aTopics));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Формируем постраничность
|
|
|
|
|
*/
|
2012-05-04 11:19:37 +03:00
|
|
|
|
$aPaging=$this->Viewer_MakePaging($aResult['count'],$iPage,Config::Get('module.topic.per_page'),Config::Get('pagination.pages.count'),Router::GetPath('blog').$sShowType,in_array($sShowType,array('discussed','top')) ? array('period'=>$sPeriod) : array());
|
2009-05-09 20:53:25 +03:00
|
|
|
|
/**
|
|
|
|
|
* Вызов хуков
|
|
|
|
|
*/
|
2009-06-07 21:40:54 +03:00
|
|
|
|
$this->Hook_Run('blog_show',array('sShowType'=>$sShowType));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Загружаем переменные в шаблон
|
|
|
|
|
*/
|
|
|
|
|
$this->Viewer_Assign('aTopics',$aTopics);
|
2011-06-06 14:58:19 +03:00
|
|
|
|
$this->Viewer_Assign('aPaging',$aPaging);
|
2012-03-31 21:33:36 +03:00
|
|
|
|
if (in_array($sShowType,array('discussed','top'))) {
|
|
|
|
|
$this->Viewer_Assign('sPeriodSelectCurrent',$sPeriod);
|
|
|
|
|
$this->Viewer_Assign('sPeriodSelectRoot',Router::GetPath('blog').$sShowType.'/');
|
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем шаблон вывода
|
|
|
|
|
*/
|
|
|
|
|
$this->SetTemplateAction('index');
|
2011-06-06 14:58:19 +03:00
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
2009-06-07 22:32:58 +03:00
|
|
|
|
* Показ топика
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*
|
|
|
|
|
*/
|
2009-09-03 10:30:50 +03:00
|
|
|
|
protected function EventShowTopic() {
|
2011-06-06 14:58:19 +03:00
|
|
|
|
$sBlogUrl='';
|
2009-06-07 22:32:58 +03:00
|
|
|
|
if ($this->GetParamEventMatch(0,1)) {
|
|
|
|
|
// из коллективного блога
|
|
|
|
|
$sBlogUrl=$this->sCurrentEvent;
|
|
|
|
|
$iTopicId=$this->GetParamEventMatch(0,1);
|
2011-06-06 14:58:19 +03:00
|
|
|
|
$this->sMenuItemSelect='blog';
|
2009-06-07 22:32:58 +03:00
|
|
|
|
} else {
|
|
|
|
|
// из персонального блога
|
|
|
|
|
$iTopicId=$this->GetEventMatch(1);
|
2011-06-06 14:58:19 +03:00
|
|
|
|
$this->sMenuItemSelect='log';
|
2009-06-07 22:32:58 +03:00
|
|
|
|
}
|
2011-06-06 14:58:19 +03:00
|
|
|
|
$this->sMenuSubItemSelect='';
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Проверяем есть ли такой топик
|
|
|
|
|
*/
|
2009-06-05 16:57:11 +03:00
|
|
|
|
if (!($oTopic=$this->Topic_GetTopicById($iTopicId))) {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
/**
|
2008-10-17 22:52:11 +03:00
|
|
|
|
* Проверяем права на просмотр топика
|
|
|
|
|
*/
|
2008-10-18 20:56:22 +03:00
|
|
|
|
if (!$oTopic->getPublish() and (!$this->oUserCurrent or ($this->oUserCurrent->getId()!=$oTopic->getUserId() and !$this->oUserCurrent->isAdministrator()))) {
|
2008-10-17 22:52:11 +03:00
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
2009-09-18 23:36:07 +03:00
|
|
|
|
/**
|
|
|
|
|
* Определяем права на отображение записи из закрытого блога
|
|
|
|
|
*/
|
2011-06-06 14:58:19 +03:00
|
|
|
|
if($oTopic->getBlog()->getType()=='close'
|
|
|
|
|
and (!$this->oUserCurrent
|
2009-09-18 23:36:07 +03:00
|
|
|
|
|| !in_array(
|
2012-04-06 17:57:51 +03:00
|
|
|
|
$oTopic->getBlog()->getId(),
|
|
|
|
|
$this->Blog_GetAccessibleBlogsByUser($this->oUserCurrent)
|
2009-09-18 23:36:07 +03:00
|
|
|
|
)
|
2012-04-06 17:57:51 +03:00
|
|
|
|
)
|
|
|
|
|
) {
|
2010-09-15 18:26:45 +03:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('blog_close_show'),$this->Lang_Get('not_access'));
|
|
|
|
|
return Router::Action('error');
|
2009-09-18 23:36:07 +03:00
|
|
|
|
}
|
2008-10-17 22:52:11 +03:00
|
|
|
|
/**
|
2009-06-07 22:32:58 +03:00
|
|
|
|
* Если запросили топик из персонального блога то перенаправляем на страницу вывода коллективного топика
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
2009-06-07 22:32:58 +03:00
|
|
|
|
if ($sBlogUrl!='' and $oTopic->getBlog()->getType()=='personal') {
|
2009-09-09 20:49:00 +03:00
|
|
|
|
Router::Location($oTopic->getUrl());
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
2009-06-07 22:32:58 +03:00
|
|
|
|
* Если запросили не персональный топик то перенаправляем на страницу для вывода коллективного топика
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
2009-06-07 22:32:58 +03:00
|
|
|
|
if ($sBlogUrl=='' and $oTopic->getBlog()->getType()!='personal') {
|
2009-09-09 20:49:00 +03:00
|
|
|
|
Router::Location($oTopic->getUrl());
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Если номер топика правильный но УРЛ блога косяный то корректируем его и перенаправляем на нужный адрес
|
|
|
|
|
*/
|
2009-06-07 22:32:58 +03:00
|
|
|
|
if ($sBlogUrl!='' and $oTopic->getBlog()->getUrl()!=$sBlogUrl) {
|
2009-09-09 20:49:00 +03:00
|
|
|
|
Router::Location($oTopic->getUrl());
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Обрабатываем добавление коммента
|
|
|
|
|
*/
|
2009-06-24 19:58:21 +03:00
|
|
|
|
if (isset($_REQUEST['submit_comment'])) {
|
2009-07-05 00:41:42 +03:00
|
|
|
|
$this->SubmitComment();
|
2009-06-24 19:58:21 +03:00
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Достаём комменты к топику
|
2010-09-19 00:58:52 +03:00
|
|
|
|
*/
|
2010-09-21 12:29:54 +03:00
|
|
|
|
if (!Config::Get('module.comment.nested_page_reverse') and Config::Get('module.comment.use_nested') and Config::Get('module.comment.nested_per_page')) {
|
|
|
|
|
$iPageDef=ceil($this->Comment_GetCountCommentsRootByTargetId($oTopic->getId(),'topic')/Config::Get('module.comment.nested_per_page'));
|
|
|
|
|
} else {
|
|
|
|
|
$iPageDef=1;
|
|
|
|
|
}
|
|
|
|
|
$iPage=getRequest('cmtpage',0) ? (int)getRequest('cmtpage',0) : $iPageDef;
|
2011-06-06 14:58:19 +03:00
|
|
|
|
$aReturn=$this->Comment_GetCommentsByTargetId($oTopic->getId(),'topic',$iPage,Config::Get('module.comment.nested_per_page'));
|
|
|
|
|
$iMaxIdComment=$aReturn['iMaxIdComment'];
|
2009-08-22 00:01:09 +03:00
|
|
|
|
$aComments=$aReturn['comments'];
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Если используется постраничность для комментариев - формируем ее
|
|
|
|
|
*/
|
2010-09-19 22:27:16 +03:00
|
|
|
|
if (Config::Get('module.comment.use_nested') and Config::Get('module.comment.nested_per_page')) {
|
2012-04-25 17:47:47 +03:00
|
|
|
|
$aPaging=$this->Viewer_MakePaging($aReturn['count'],$iPage,Config::Get('module.comment.nested_per_page'),Config::Get('pagination.pages.count'),'');
|
2010-09-21 12:29:54 +03:00
|
|
|
|
if (!Config::Get('module.comment.nested_page_reverse') and $aPaging) {
|
|
|
|
|
// переворачиваем страницы в обратном порядке
|
|
|
|
|
$aPaging['aPagesLeft']=array_reverse($aPaging['aPagesLeft']);
|
|
|
|
|
$aPaging['aPagesRight']=array_reverse($aPaging['aPagesRight']);
|
|
|
|
|
}
|
2010-09-19 12:27:13 +03:00
|
|
|
|
$this->Viewer_Assign('aPagingCmt',$aPaging);
|
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Отмечаем дату прочтения топика
|
|
|
|
|
*/
|
|
|
|
|
if ($this->oUserCurrent) {
|
2009-09-08 15:02:51 +03:00
|
|
|
|
$oTopicRead=Engine::GetEntity('Topic_TopicRead');
|
2009-01-24 11:54:59 +02:00
|
|
|
|
$oTopicRead->setTopicId($oTopic->getId());
|
|
|
|
|
$oTopicRead->setUserId($this->oUserCurrent->getId());
|
|
|
|
|
$oTopicRead->setCommentCountLast($oTopic->getCountComment());
|
|
|
|
|
$oTopicRead->setCommentIdLast($iMaxIdComment);
|
|
|
|
|
$oTopicRead->setDateRead(date("Y-m-d H:i:s"));
|
|
|
|
|
$this->Topic_SetTopicRead($oTopicRead);
|
2009-05-09 20:53:25 +03:00
|
|
|
|
}
|
2008-10-26 13:58:52 +02:00
|
|
|
|
/**
|
|
|
|
|
* Выставляем SEO данные
|
|
|
|
|
*/
|
2012-03-21 02:16:46 +02:00
|
|
|
|
$sTextSeo=strip_tags($oTopic->getText());
|
|
|
|
|
$this->Viewer_SetHtmlDescription(func_text_words($sTextSeo, Config::Get('seo.description_words_count')));
|
2008-10-26 13:58:52 +02:00
|
|
|
|
$this->Viewer_SetHtmlKeywords($oTopic->getTags());
|
2012-12-26 18:54:55 +02:00
|
|
|
|
$this->Viewer_SetHtmlCanonical($oTopic->getUrl());
|
2012-06-10 11:33:03 +03:00
|
|
|
|
/**
|
|
|
|
|
* Вызов хуков
|
|
|
|
|
*/
|
|
|
|
|
$this->Hook_Run('topic_show',array("oTopic"=>$oTopic));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Загружаем переменные в шаблон
|
2011-06-06 14:58:19 +03:00
|
|
|
|
*/
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$this->Viewer_Assign('oTopic',$oTopic);
|
2011-06-06 14:58:19 +03:00
|
|
|
|
$this->Viewer_Assign('aComments',$aComments);
|
2009-01-10 21:23:36 +02:00
|
|
|
|
$this->Viewer_Assign('iMaxIdComment',$iMaxIdComment);
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем title страницы
|
|
|
|
|
*/
|
2009-06-05 16:57:11 +03:00
|
|
|
|
$this->Viewer_AddHtmlTitle($oTopic->getBlog()->getTitle());
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$this->Viewer_AddHtmlTitle($oTopic->getTitle());
|
2009-08-20 10:43:06 +03:00
|
|
|
|
$this->Viewer_SetHtmlRssAlternate(Router::GetPath('rss').'comments/'.$oTopic->getId().'/',$oTopic->getTitle());
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем шаблон вывода
|
2011-06-06 14:58:19 +03:00
|
|
|
|
*/
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$this->SetTemplateAction('topic');
|
|
|
|
|
}
|
2011-05-05 19:21:19 +03:00
|
|
|
|
/**
|
|
|
|
|
* Страница со списком читателей блога
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
protected function EventShowUsers() {
|
|
|
|
|
$sBlogUrl=$this->sCurrentEvent;
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем есть ли блог с таким УРЛ
|
2011-06-06 14:58:19 +03:00
|
|
|
|
*/
|
2011-05-05 19:21:19 +03:00
|
|
|
|
if (!($oBlog=$this->Blog_GetBlogByUrl($sBlogUrl))) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Меню
|
|
|
|
|
*/
|
|
|
|
|
$this->sMenuSubItemSelect='';
|
|
|
|
|
$this->sMenuSubBlogUrl=$oBlog->getUrlFull();
|
|
|
|
|
/**
|
|
|
|
|
* Текущая страница
|
|
|
|
|
*/
|
|
|
|
|
$iPage= $this->GetParamEventMatch(1,2) ? $this->GetParamEventMatch(1,2) : 1;
|
|
|
|
|
$aBlogUsersResult=$this->Blog_GetBlogUsersByBlogId($oBlog->getId(),ModuleBlog::BLOG_USER_ROLE_USER,$iPage,Config::Get('module.blog.users_per_page'));
|
|
|
|
|
$aBlogUsers=$aBlogUsersResult['collection'];
|
|
|
|
|
/**
|
|
|
|
|
* Формируем постраничность
|
2011-06-06 14:58:19 +03:00
|
|
|
|
*/
|
2012-04-25 17:47:47 +03:00
|
|
|
|
$aPaging=$this->Viewer_MakePaging($aBlogUsersResult['count'],$iPage,Config::Get('module.blog.users_per_page'),Config::Get('pagination.pages.count'),$oBlog->getUrlFull().'users');
|
2011-05-05 19:21:19 +03:00
|
|
|
|
$this->Viewer_Assign('aPaging',$aPaging);
|
|
|
|
|
/**
|
|
|
|
|
* Вызов хуков
|
|
|
|
|
*/
|
|
|
|
|
$this->Hook_Run('blog_collective_show_users',array('oBlog'=>$oBlog));
|
|
|
|
|
/**
|
|
|
|
|
* Загружаем переменные в шаблон
|
2011-06-06 14:58:19 +03:00
|
|
|
|
*/
|
2011-05-05 19:21:19 +03:00
|
|
|
|
$this->Viewer_Assign('aBlogUsers',$aBlogUsers);
|
|
|
|
|
$this->Viewer_Assign('iCountBlogUsers',$aBlogUsersResult['count']);
|
|
|
|
|
$this->Viewer_Assign('oBlog',$oBlog);
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем title страницы
|
|
|
|
|
*/
|
2011-05-05 19:21:19 +03:00
|
|
|
|
$this->Viewer_AddHtmlTitle($oBlog->getTitle());
|
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем шаблон вывода
|
|
|
|
|
*/
|
|
|
|
|
$this->SetTemplateAction('users');
|
|
|
|
|
}
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Вывод топиков из определенного блога
|
|
|
|
|
*
|
|
|
|
|
*/
|
2009-06-07 20:20:58 +03:00
|
|
|
|
protected function EventShowBlog() {
|
2012-03-31 21:33:36 +03:00
|
|
|
|
$sPeriod=1; // по дефолту 1 день
|
2012-12-12 08:06:38 +02:00
|
|
|
|
if (in_array(getRequestStr('period'),array(1,7,30,'all'))) {
|
|
|
|
|
$sPeriod=getRequestStr('period');
|
2012-03-31 21:33:36 +03:00
|
|
|
|
}
|
2011-06-06 14:58:19 +03:00
|
|
|
|
$sBlogUrl=$this->sCurrentEvent;
|
2012-06-16 15:02:20 +03:00
|
|
|
|
$sShowType=in_array($this->GetParamEventMatch(0,0),array('bad','new','newall','discussed','top')) ? $this->GetParamEventMatch(0,0) : 'good';
|
2012-03-31 21:33:36 +03:00
|
|
|
|
if (!in_array($sShowType,array('discussed','top'))) {
|
|
|
|
|
$sPeriod='all';
|
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Проверяем есть ли блог с таким УРЛ
|
2011-06-06 14:58:19 +03:00
|
|
|
|
*/
|
2008-09-21 09:36:57 +03:00
|
|
|
|
if (!($oBlog=$this->Blog_GetBlogByUrl($sBlogUrl))) {
|
|
|
|
|
return parent::EventNotFound();
|
2009-09-18 23:36:07 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Определяем права на отображение закрытого блога
|
2011-06-06 14:58:19 +03:00
|
|
|
|
*/
|
|
|
|
|
if($oBlog->getType()=='close'
|
|
|
|
|
and (!$this->oUserCurrent
|
2009-10-17 03:27:22 +03:00
|
|
|
|
or !in_array(
|
2012-04-06 17:57:51 +03:00
|
|
|
|
$oBlog->getId(),
|
|
|
|
|
$this->Blog_GetAccessibleBlogsByUser($this->oUserCurrent)
|
2009-09-18 23:36:07 +03:00
|
|
|
|
)
|
2012-04-06 17:57:51 +03:00
|
|
|
|
)
|
|
|
|
|
) {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$bPrivateBlog=true;
|
2009-09-18 23:36:07 +03:00
|
|
|
|
} else {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$bPrivateBlog=false;
|
2009-09-18 23:36:07 +03:00
|
|
|
|
}
|
2009-05-03 22:50:26 +03:00
|
|
|
|
/**
|
|
|
|
|
* Меню
|
|
|
|
|
*/
|
2012-06-16 15:02:20 +03:00
|
|
|
|
$this->sMenuSubItemSelect=$sShowType=='newall' ? 'new' : $sShowType;
|
2013-08-05 14:54:03 +03:00
|
|
|
|
$this->sNavTopicsSubUrl=$oBlog->getUrlFull();
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Передан ли номер страницы
|
|
|
|
|
*/
|
2011-06-06 14:58:19 +03:00
|
|
|
|
$iPage= $this->GetParamEventMatch(($sShowType=='good')?0:1,2) ? $this->GetParamEventMatch(($sShowType=='good')?0:1,2) : 1;
|
2012-05-04 11:19:37 +03:00
|
|
|
|
if ($iPage==1 and !getRequest('period') and in_array($sShowType,array('discussed','top'))) {
|
|
|
|
|
$this->Viewer_SetHtmlCanonical($oBlog->getUrlFull().$sShowType.'/');
|
|
|
|
|
}
|
2011-06-06 14:58:19 +03:00
|
|
|
|
|
2014-01-25 14:39:19 +02:00
|
|
|
|
if (!$bPrivateBlog) {
|
2010-03-31 17:39:44 +03:00
|
|
|
|
/**
|
2012-04-06 17:57:51 +03:00
|
|
|
|
* Получаем список топиков
|
|
|
|
|
*/
|
2012-03-31 21:33:36 +03:00
|
|
|
|
$aResult=$this->Topic_GetTopicsByBlog($oBlog,$iPage,Config::Get('module.topic.per_page'),$sShowType,$sPeriod=='all' ? null : $sPeriod*60*60*24);
|
|
|
|
|
/**
|
|
|
|
|
* Если нет топиков за 1 день, то показываем за неделю (7)
|
|
|
|
|
*/
|
2012-04-12 18:09:39 +03:00
|
|
|
|
if (in_array($sShowType,array('discussed','top')) and !$aResult['count'] and $iPage==1 and !getRequest('period')) {
|
2012-03-31 21:33:36 +03:00
|
|
|
|
$sPeriod=7;
|
|
|
|
|
$aResult=$this->Topic_GetTopicsByBlog($oBlog,$iPage,Config::Get('module.topic.per_page'),$sShowType,$sPeriod=='all' ? null : $sPeriod*60*60*24);
|
|
|
|
|
}
|
2010-03-31 17:39:44 +03:00
|
|
|
|
$aTopics=$aResult['collection'];
|
|
|
|
|
/**
|
2012-04-06 17:57:51 +03:00
|
|
|
|
* Формируем постраничность
|
|
|
|
|
*/
|
2010-03-31 17:39:44 +03:00
|
|
|
|
$aPaging=($sShowType=='good')
|
2012-04-25 17:47:47 +03:00
|
|
|
|
? $this->Viewer_MakePaging($aResult['count'],$iPage,Config::Get('module.topic.per_page'),Config::Get('pagination.pages.count'),rtrim($oBlog->getUrlFull(),'/'))
|
|
|
|
|
: $this->Viewer_MakePaging($aResult['count'],$iPage,Config::Get('module.topic.per_page'),Config::Get('pagination.pages.count'),$oBlog->getUrlFull().$sShowType,array('period'=>$sPeriod));
|
2010-03-31 17:39:44 +03:00
|
|
|
|
/**
|
2012-04-06 17:57:51 +03:00
|
|
|
|
* Получаем число новых топиков в текущем блоге
|
|
|
|
|
*/
|
2013-08-05 14:54:03 +03:00
|
|
|
|
$this->iCountTopicsSubNew=$this->Topic_GetCountTopicsByBlogNew($oBlog);
|
2010-03-31 17:39:44 +03:00
|
|
|
|
|
|
|
|
|
$this->Viewer_Assign('aPaging',$aPaging);
|
|
|
|
|
$this->Viewer_Assign('aTopics',$aTopics);
|
2012-03-31 21:33:36 +03:00
|
|
|
|
if (in_array($sShowType,array('discussed','top'))) {
|
|
|
|
|
$this->Viewer_Assign('sPeriodSelectCurrent',$sPeriod);
|
|
|
|
|
$this->Viewer_Assign('sPeriodSelectRoot',$oBlog->getUrlFull().$sShowType.'/');
|
|
|
|
|
}
|
2010-03-31 17:39:44 +03:00
|
|
|
|
}
|
2008-10-26 13:58:52 +02:00
|
|
|
|
/**
|
|
|
|
|
* Выставляем SEO данные
|
|
|
|
|
*/
|
2012-03-21 02:16:46 +02:00
|
|
|
|
$sTextSeo=strip_tags($oBlog->getDescription());
|
|
|
|
|
$this->Viewer_SetHtmlDescription(func_text_words($sTextSeo, Config::Get('seo.description_words_count')));
|
2009-01-11 23:57:50 +02:00
|
|
|
|
/**
|
|
|
|
|
* Получаем список юзеров блога
|
|
|
|
|
*/
|
2011-05-05 19:21:19 +03:00
|
|
|
|
$aBlogUsersResult=$this->Blog_GetBlogUsersByBlogId($oBlog->getId(),ModuleBlog::BLOG_USER_ROLE_USER,1,Config::Get('module.blog.users_per_page'));
|
2011-05-05 16:30:01 +03:00
|
|
|
|
$aBlogUsers=$aBlogUsersResult['collection'];
|
|
|
|
|
$aBlogModeratorsResult=$this->Blog_GetBlogUsersByBlogId($oBlog->getId(),ModuleBlog::BLOG_USER_ROLE_MODERATOR);
|
|
|
|
|
$aBlogModerators=$aBlogModeratorsResult['collection'];
|
|
|
|
|
$aBlogAdministratorsResult=$this->Blog_GetBlogUsersByBlogId($oBlog->getId(),ModuleBlog::BLOG_USER_ROLE_ADMINISTRATOR);
|
|
|
|
|
$aBlogAdministrators=$aBlogAdministratorsResult['collection'];
|
2009-11-25 16:06:02 +02:00
|
|
|
|
/**
|
|
|
|
|
* Для админов проекта получаем список блогов и передаем их во вьювер
|
|
|
|
|
*/
|
|
|
|
|
if($this->oUserCurrent and $this->oUserCurrent->isAdministrator()) {
|
|
|
|
|
$aBlogs = $this->Blog_GetBlogs();
|
|
|
|
|
unset($aBlogs[$oBlog->getId()]);
|
2011-06-06 14:58:19 +03:00
|
|
|
|
|
2009-11-25 16:06:02 +02:00
|
|
|
|
$this->Viewer_Assign('aBlogs',$aBlogs);
|
|
|
|
|
}
|
2009-05-09 20:53:25 +03:00
|
|
|
|
/**
|
|
|
|
|
* Вызов хуков
|
|
|
|
|
*/
|
2009-06-07 20:20:58 +03:00
|
|
|
|
$this->Hook_Run('blog_collective_show',array('oBlog'=>$oBlog,'sShowType'=>$sShowType));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Загружаем переменные в шаблон
|
2011-06-06 14:58:19 +03:00
|
|
|
|
*/
|
|
|
|
|
$this->Viewer_Assign('aBlogUsers',$aBlogUsers);
|
2009-01-11 23:57:50 +02:00
|
|
|
|
$this->Viewer_Assign('aBlogModerators',$aBlogModerators);
|
|
|
|
|
$this->Viewer_Assign('aBlogAdministrators',$aBlogAdministrators);
|
2011-05-05 19:21:19 +03:00
|
|
|
|
$this->Viewer_Assign('iCountBlogUsers',$aBlogUsersResult['count']);
|
|
|
|
|
$this->Viewer_Assign('iCountBlogModerators',$aBlogModeratorsResult['count']);
|
2011-06-06 14:58:19 +03:00
|
|
|
|
$this->Viewer_Assign('iCountBlogAdministrators',$aBlogAdministratorsResult['count']+1);
|
2009-09-18 23:36:07 +03:00
|
|
|
|
$this->Viewer_Assign('oBlog',$oBlog);
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Viewer_Assign('bPrivateBlog',$bPrivateBlog);
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем title страницы
|
|
|
|
|
*/
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$this->Viewer_AddHtmlTitle($oBlog->getTitle());
|
2009-08-20 10:43:06 +03:00
|
|
|
|
$this->Viewer_SetHtmlRssAlternate(Router::GetPath('rss').'blog/'.$oBlog->getUrl().'/',$oBlog->getTitle());
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем шаблон вывода
|
|
|
|
|
*/
|
|
|
|
|
$this->SetTemplateAction('blog');
|
|
|
|
|
}
|
|
|
|
|
/**
|
2009-06-24 19:58:21 +03:00
|
|
|
|
* Обработка добавление комментария к топику через ajax
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*
|
2009-06-24 19:58:21 +03:00
|
|
|
|
*/
|
|
|
|
|
protected function AjaxAddComment() {
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
2010-08-21 19:31:41 +03:00
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
2009-06-24 19:58:21 +03:00
|
|
|
|
$this->SubmitComment();
|
2011-06-06 14:58:19 +03:00
|
|
|
|
}
|
2013-03-01 14:58:34 +02:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Проверка на соответсвие коментария требованиям безопасности
|
|
|
|
|
*
|
|
|
|
|
* @param ModuleTopic_EntityTopic $oTopic
|
|
|
|
|
* @param string $sText
|
|
|
|
|
*
|
|
|
|
|
* @return bool result
|
|
|
|
|
*/
|
|
|
|
|
protected function CheckComment($oTopic, $sText) {
|
|
|
|
|
|
|
|
|
|
$bOk = true;
|
|
|
|
|
/**
|
|
|
|
|
* Проверям авторизован ли пользователь
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->User_IsAuthorization()) {
|
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('need_authorization'),$this->Lang_Get('error'));
|
|
|
|
|
$bOk = false;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем топик
|
|
|
|
|
*/
|
|
|
|
|
if (!$oTopic) {
|
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
|
|
|
|
$bOk = false;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Возможность постить коммент в топик в черновиках
|
|
|
|
|
*/
|
|
|
|
|
if (!$oTopic->getPublish() and $this->oUserCurrent->getId()!=$oTopic->getUserId() and !$this->oUserCurrent->isAdministrator()) {
|
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
|
|
|
|
$bOk = false;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем разрешено ли постить комменты
|
|
|
|
|
*/
|
2013-04-08 10:54:55 +03:00
|
|
|
|
if (!$this->ACL_CanPostComment($this->oUserCurrent,$oTopic) and !$this->oUserCurrent->isAdministrator()) {
|
2013-03-01 14:58:34 +02:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('topic_comment_acl'),$this->Lang_Get('error'));
|
2013-04-08 10:54:55 +03:00
|
|
|
|
return;
|
2013-03-01 14:58:34 +02:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем разрешено ли постить комменты по времени
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->ACL_CanPostCommentTime($this->oUserCurrent) and !$this->oUserCurrent->isAdministrator()) {
|
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('topic_comment_limit'),$this->Lang_Get('error'));
|
|
|
|
|
$bOk = false;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем запрет на добавления коммента автором топика
|
|
|
|
|
*/
|
|
|
|
|
if ($oTopic->getForbidComment()) {
|
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('topic_comment_notallow'),$this->Lang_Get('error'));
|
|
|
|
|
$bOk = false;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем текст комментария
|
|
|
|
|
*/
|
|
|
|
|
if (!func_check($sText,'text',2,10000)) {
|
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('topic_comment_add_text_error'),$this->Lang_Get('error'));
|
|
|
|
|
$bOk = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$this->Hook_Run('comment_check', array('oTopic'=>$oTopic, 'sText'=>$sText, 'bOk'=>&$bOk));
|
|
|
|
|
|
|
|
|
|
return $bOk;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Проверка на соответсвие коментария родительскому коментарию
|
|
|
|
|
*
|
|
|
|
|
* @param ModuleTopic_EntityTopic $oTopic
|
|
|
|
|
* @param string $sText
|
|
|
|
|
* @param ModuleComment_EntityComment $oCommentParent
|
|
|
|
|
*
|
|
|
|
|
* @return bool result
|
|
|
|
|
*/
|
|
|
|
|
protected function CheckParentComment($oTopic, $sText, $oCommentParent) {
|
|
|
|
|
|
2013-04-01 10:18:12 +03:00
|
|
|
|
$sParentId = 0;
|
|
|
|
|
if ($oCommentParent) {
|
|
|
|
|
$sParentId = $oCommentParent->GetCommentId();
|
|
|
|
|
}
|
|
|
|
|
|
2013-03-01 14:58:34 +02:00
|
|
|
|
$bOk = true;
|
|
|
|
|
/**
|
|
|
|
|
* Проверям на какой коммент отвечаем
|
|
|
|
|
*/
|
|
|
|
|
if (!func_check($sParentId,'id')) {
|
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
|
|
|
|
$bOk = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($sParentId) {
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем существует ли комментарий на который отвечаем
|
|
|
|
|
*/
|
|
|
|
|
if (!($oCommentParent)) {
|
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
|
|
|
|
$bOk = false;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем из одного топика ли новый коммент и тот на который отвечаем
|
|
|
|
|
*/
|
|
|
|
|
if ($oCommentParent->getTargetId()!=$oTopic->getId()) {
|
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
|
|
|
|
$bOk = false;
|
|
|
|
|
}
|
2013-04-05 13:00:41 +03:00
|
|
|
|
} else {
|
|
|
|
|
$sParentId = NULL;
|
2013-03-01 14:58:34 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Проверка на дублирующий коммент
|
|
|
|
|
*/
|
|
|
|
|
if ($this->Comment_GetCommentUnique($oTopic->getId(),'topic',$this->oUserCurrent->getId(),$sParentId,md5($sText))) {
|
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('topic_comment_spam'),$this->Lang_Get('error'));
|
|
|
|
|
$bOk = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$this->Hook_Run('comment_check_parent', array('oTopic'=>$oTopic, 'sText'=>$sText, 'oCommentParent'=>$oCommentParent, 'bOk'=>&$bOk));
|
|
|
|
|
|
|
|
|
|
return $bOk;
|
|
|
|
|
}
|
|
|
|
|
|
2009-06-24 19:58:21 +03:00
|
|
|
|
/**
|
|
|
|
|
* Обработка добавление комментария к топику
|
2011-06-06 14:58:19 +03:00
|
|
|
|
*
|
2008-09-21 09:36:57 +03:00
|
|
|
|
*/
|
2009-06-24 19:58:21 +03:00
|
|
|
|
protected function SubmitComment() {
|
2013-03-01 14:58:34 +02:00
|
|
|
|
|
|
|
|
|
$oTopic = $this->Topic_GetTopicById(getRequestStr('cmt_target_id'));
|
2014-04-25 08:24:15 +03:00
|
|
|
|
$sText = getRequestStr('comment_text');
|
2013-03-01 14:58:34 +02:00
|
|
|
|
$sParentId = (int)getRequest('reply');
|
|
|
|
|
$oCommentParent = null;
|
|
|
|
|
|
|
|
|
|
if (!$sParentId) {
|
|
|
|
|
/**
|
|
|
|
|
* Корневой комментарий
|
|
|
|
|
*/
|
|
|
|
|
$sParentId=null;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
/**
|
|
|
|
|
* Родительский комментарий
|
|
|
|
|
*/
|
|
|
|
|
$oCommentParent=$this->Comment_GetCommentById($sParentId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Проверка на соответсвие коментария требованиям безопасности
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->CheckComment($oTopic, $sText)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Проверка на соответсвие коментария родительскому коментарию
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->CheckParentComment($oTopic, $sText, $oCommentParent)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2009-06-24 19:58:21 +03:00
|
|
|
|
/**
|
2012-04-06 17:57:51 +03:00
|
|
|
|
* Создаём коммент
|
|
|
|
|
*/
|
2009-09-08 15:02:51 +03:00
|
|
|
|
$oCommentNew=Engine::GetEntity('Comment');
|
2009-06-24 19:58:21 +03:00
|
|
|
|
$oCommentNew->setTargetId($oTopic->getId());
|
|
|
|
|
$oCommentNew->setTargetType('topic');
|
2009-11-18 20:46:16 +02:00
|
|
|
|
$oCommentNew->setTargetParentId($oTopic->getBlog()->getId());
|
2011-06-06 14:58:19 +03:00
|
|
|
|
$oCommentNew->setUserId($this->oUserCurrent->getId());
|
2014-04-25 08:24:15 +03:00
|
|
|
|
$oCommentNew->setText($this->Text_Parser($sText));
|
|
|
|
|
$oCommentNew->setTextSource($sText);
|
2009-06-24 19:58:21 +03:00
|
|
|
|
$oCommentNew->setDate(date("Y-m-d H:i:s"));
|
|
|
|
|
$oCommentNew->setUserIp(func_getIp());
|
|
|
|
|
$oCommentNew->setPid($sParentId);
|
|
|
|
|
$oCommentNew->setTextHash(md5($sText));
|
2011-08-03 11:24:42 +03:00
|
|
|
|
$oCommentNew->setPublish($oTopic->getPublish());
|
2009-06-24 19:58:21 +03:00
|
|
|
|
/**
|
2012-04-06 17:57:51 +03:00
|
|
|
|
* Добавляем коммент
|
|
|
|
|
*/
|
2010-02-07 00:41:47 +02:00
|
|
|
|
$this->Hook_Run('comment_add_before', array('oCommentNew'=>$oCommentNew,'oCommentParent'=>$oCommentParent,'oTopic'=>$oTopic));
|
|
|
|
|
if ($this->Comment_AddComment($oCommentNew)) {
|
|
|
|
|
$this->Hook_Run('comment_add_after', array('oCommentNew'=>$oCommentNew,'oCommentParent'=>$oCommentParent,'oTopic'=>$oTopic));
|
2011-06-06 14:58:19 +03:00
|
|
|
|
|
2009-09-20 21:47:25 +03:00
|
|
|
|
$this->Viewer_AssignAjax('sCommentId',$oCommentNew->getId());
|
2009-06-24 19:58:21 +03:00
|
|
|
|
if ($oTopic->getPublish()) {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
2012-04-06 17:57:51 +03:00
|
|
|
|
* Добавляем коммент в прямой эфир если топик не в черновиках
|
|
|
|
|
*/
|
2009-09-08 18:38:16 +03:00
|
|
|
|
$oCommentOnline=Engine::GetEntity('Comment_CommentOnline');
|
2009-06-24 19:58:21 +03:00
|
|
|
|
$oCommentOnline->setTargetId($oCommentNew->getTargetId());
|
|
|
|
|
$oCommentOnline->setTargetType($oCommentNew->getTargetType());
|
2009-11-18 20:46:16 +02:00
|
|
|
|
$oCommentOnline->setTargetParentId($oCommentNew->getTargetParentId());
|
2009-06-24 19:58:21 +03:00
|
|
|
|
$oCommentOnline->setCommentId($oCommentNew->getId());
|
2011-06-06 14:58:19 +03:00
|
|
|
|
|
2009-06-24 19:58:21 +03:00
|
|
|
|
$this->Comment_AddCommentOnline($oCommentOnline);
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
2008-10-25 23:31:29 +03:00
|
|
|
|
/**
|
2012-04-06 17:57:51 +03:00
|
|
|
|
* Сохраняем дату последнего коммента для юзера
|
|
|
|
|
*/
|
2009-06-24 19:58:21 +03:00
|
|
|
|
$this->oUserCurrent->setDateCommentLast(date("Y-m-d H:i:s"));
|
|
|
|
|
$this->User_Update($this->oUserCurrent);
|
2014-01-15 14:00:01 +02:00
|
|
|
|
/**
|
|
|
|
|
* Фиксируем ID у media файлов комментария
|
|
|
|
|
*/
|
|
|
|
|
$this->Media_ReplaceTargetTmpById('comment',$oCommentNew->getId());
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
2012-03-10 15:40:59 +02:00
|
|
|
|
* Список емайлов на которые не нужно отправлять уведомление
|
|
|
|
|
*/
|
|
|
|
|
$aExcludeMail=array($this->oUserCurrent->getMail());
|
2009-06-24 19:58:21 +03:00
|
|
|
|
/**
|
2012-03-10 15:40:59 +02:00
|
|
|
|
* Отправляем уведомление тому на чей коммент ответили
|
|
|
|
|
*/
|
2009-06-24 19:58:21 +03:00
|
|
|
|
if ($oCommentParent and $oCommentParent->getUserId()!=$oTopic->getUserId() and $oCommentNew->getUserId()!=$oCommentParent->getUserId()) {
|
|
|
|
|
$oUserAuthorComment=$oCommentParent->getUser();
|
2012-03-10 15:40:59 +02:00
|
|
|
|
$aExcludeMail[]=$oUserAuthorComment->getMail();
|
2009-06-24 19:58:21 +03:00
|
|
|
|
$this->Notify_SendCommentReplyToAuthorParentComment($oUserAuthorComment,$oTopic,$oCommentNew,$this->oUserCurrent);
|
2009-09-09 20:39:26 +03:00
|
|
|
|
}
|
2012-03-10 15:40:59 +02:00
|
|
|
|
/**
|
2012-04-06 17:57:51 +03:00
|
|
|
|
* Отправка уведомления автору топика
|
|
|
|
|
*/
|
2013-06-30 06:02:51 +03:00
|
|
|
|
$this->Subscribe_Send('topic_new_comment',$oTopic->getId(),Config::Get('module.notify.prefix').'.comment_new.tpl',$this->Lang_Get('notify_subject_comment_new'),array(
|
2012-03-10 15:40:59 +02:00
|
|
|
|
'oTopic' => $oTopic,
|
|
|
|
|
'oComment' => $oCommentNew,
|
|
|
|
|
'oUserComment' => $this->oUserCurrent,
|
|
|
|
|
),$aExcludeMail);
|
2012-04-06 17:57:51 +03:00
|
|
|
|
/**
|
|
|
|
|
* Добавляем событие в ленту
|
|
|
|
|
*/
|
|
|
|
|
$this->Stream_write($oCommentNew->getUserId(), 'add_comment', $oCommentNew->getId(), $oTopic->getPublish() && $oTopic->getBlog()->getType()!='close');
|
2009-06-24 19:58:21 +03:00
|
|
|
|
} else {
|
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
2011-06-06 14:58:19 +03:00
|
|
|
|
}
|
2010-10-03 15:48:39 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получение новых комментариев
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
protected function AjaxResponseComment() {
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
2010-10-03 15:48:39 +03:00
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Пользователь авторизован?
|
|
|
|
|
*/
|
2010-10-03 15:48:39 +03:00
|
|
|
|
if (!$this->oUserCurrent) {
|
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('need_authorization'),$this->Lang_Get('error'));
|
|
|
|
|
return;
|
|
|
|
|
}
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Топик существует?
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
$idTopic=getRequestStr('idTarget',null,'post');
|
2010-10-03 15:48:39 +03:00
|
|
|
|
if (!($oTopic=$this->Topic_GetTopicById($idTopic))) {
|
2014-01-28 09:47:36 +02:00
|
|
|
|
return $this->EventErrorDebug();
|
2010-10-03 15:48:39 +03:00
|
|
|
|
}
|
2013-04-01 11:54:39 +03:00
|
|
|
|
/**
|
|
|
|
|
* Есть доступ к комментариям этого топика? Закрытый блог?
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->ACL_IsAllowShowBlog($oTopic->getBlog(),$this->oUserCurrent)) {
|
2014-01-28 09:47:36 +02:00
|
|
|
|
return $this->EventErrorDebug();
|
2013-04-01 11:54:39 +03:00
|
|
|
|
}
|
2011-06-06 14:58:19 +03:00
|
|
|
|
|
2012-12-12 08:06:38 +02:00
|
|
|
|
$idCommentLast=getRequestStr('idCommentLast',null,'post');
|
|
|
|
|
$selfIdComment=getRequestStr('selfIdComment',null,'post');
|
2010-10-03 15:48:39 +03:00
|
|
|
|
$aComments=array();
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Если используется постраничность, возвращаем только добавленный комментарий
|
|
|
|
|
*/
|
2011-06-06 14:58:19 +03:00
|
|
|
|
if (getRequest('bUsePaging',null,'post') and $selfIdComment) {
|
2010-10-03 15:48:39 +03:00
|
|
|
|
if ($oComment=$this->Comment_GetCommentById($selfIdComment) and $oComment->getTargetId()==$oTopic->getId() and $oComment->getTargetType()=='topic') {
|
2014-06-11 12:17:16 +03:00
|
|
|
|
$oViewerLocal = $this->Viewer_GetLocalViewer();
|
2010-10-03 15:48:39 +03:00
|
|
|
|
|
2014-06-11 12:17:16 +03:00
|
|
|
|
$oViewerLocal->Assign('oUserCurrent', $this->oUserCurrent);
|
|
|
|
|
$oViewerLocal->Assign('bOneComment', true, true);
|
|
|
|
|
$oViewerLocal->Assign('bShowFavourite', true, true);
|
|
|
|
|
$oViewerLocal->Assign('bShowVote', true, true);
|
|
|
|
|
$oViewerLocal->Assign('oComment', $oComment, true);
|
|
|
|
|
|
|
|
|
|
$sHtml = $oViewerLocal->Fetch($this->Comment_GetTemplateCommentByTarget($oTopic->getId(),'topic'));
|
|
|
|
|
|
|
|
|
|
$aCmt = array();
|
|
|
|
|
$aCmt[] = array(
|
|
|
|
|
'html' => $sHtml,
|
2010-10-03 15:48:39 +03:00
|
|
|
|
'obj' => $oComment,
|
|
|
|
|
);
|
|
|
|
|
} else {
|
|
|
|
|
$aCmt=array();
|
|
|
|
|
}
|
|
|
|
|
$aReturn['comments']=$aCmt;
|
|
|
|
|
$aReturn['iMaxIdComment']=$selfIdComment;
|
|
|
|
|
} else {
|
2011-06-06 14:58:19 +03:00
|
|
|
|
$aReturn=$this->Comment_GetCommentsNewByTargetId($oTopic->getId(),'topic',$idCommentLast);
|
2010-10-03 15:48:39 +03:00
|
|
|
|
}
|
|
|
|
|
$iMaxIdComment=$aReturn['iMaxIdComment'];
|
2011-06-06 14:58:19 +03:00
|
|
|
|
|
2010-10-03 15:48:39 +03:00
|
|
|
|
$oTopicRead=Engine::GetEntity('Topic_TopicRead');
|
|
|
|
|
$oTopicRead->setTopicId($oTopic->getId());
|
|
|
|
|
$oTopicRead->setUserId($this->oUserCurrent->getId());
|
|
|
|
|
$oTopicRead->setCommentCountLast($oTopic->getCountComment());
|
|
|
|
|
$oTopicRead->setCommentIdLast($iMaxIdComment);
|
|
|
|
|
$oTopicRead->setDateRead(date("Y-m-d H:i:s"));
|
|
|
|
|
$this->Topic_SetTopicRead($oTopicRead);
|
2011-06-06 14:58:19 +03:00
|
|
|
|
|
2010-10-03 15:48:39 +03:00
|
|
|
|
$aCmts=$aReturn['comments'];
|
|
|
|
|
if ($aCmts and is_array($aCmts)) {
|
|
|
|
|
foreach ($aCmts as $aCmt) {
|
|
|
|
|
$aComments[]=array(
|
|
|
|
|
'html' => $aCmt['html'],
|
|
|
|
|
'idParent' => $aCmt['obj']->getPid(),
|
|
|
|
|
'id' => $aCmt['obj']->getId(),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
2011-06-06 14:58:19 +03:00
|
|
|
|
|
2010-10-03 15:48:39 +03:00
|
|
|
|
$this->Viewer_AssignAjax('iMaxIdComment',$iMaxIdComment);
|
|
|
|
|
$this->Viewer_AssignAjax('aComments',$aComments);
|
|
|
|
|
}
|
2009-09-22 00:08:00 +03:00
|
|
|
|
/**
|
2011-06-06 14:58:19 +03:00
|
|
|
|
* Обработка ajax запроса на отправку
|
2009-09-22 00:08:00 +03:00
|
|
|
|
* пользователям приглашения вступить в закрытый блог
|
|
|
|
|
*/
|
|
|
|
|
protected function AjaxAddBlogInvite() {
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
2010-08-21 19:31:41 +03:00
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
2014-04-03 10:36:30 +03:00
|
|
|
|
$aUsers=getRequest('aUserList',null,'post');
|
2014-02-06 11:43:12 +02:00
|
|
|
|
$sBlogId=getRequestStr('iTargetId',null,'post');
|
2009-09-22 00:08:00 +03:00
|
|
|
|
/**
|
|
|
|
|
* Если пользователь не авторизирован, возвращаем ошибку
|
|
|
|
|
*/
|
2011-06-06 14:58:19 +03:00
|
|
|
|
if (!$this->User_IsAuthorization()) {
|
2009-09-22 00:08:00 +03:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('need_authorization'),$this->Lang_Get('error'));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
$this->oUserCurrent=$this->User_GetUserCurrent();
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем существование блога
|
|
|
|
|
*/
|
2014-04-03 10:36:30 +03:00
|
|
|
|
if(!$oBlog=$this->Blog_GetBlogById($sBlogId) or !is_array($aUsers)) {
|
2014-01-28 09:47:36 +02:00
|
|
|
|
return $this->EventErrorDebug();
|
2009-09-22 00:08:00 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем, имеет ли право текущий пользователь добавлять invite в blog
|
|
|
|
|
*/
|
2011-06-06 14:58:19 +03:00
|
|
|
|
$oBlogUser=$this->Blog_GetBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId());
|
2009-09-22 00:08:00 +03:00
|
|
|
|
$bIsAdministratorBlog=$oBlogUser ? $oBlogUser->getIsAdministrator() : false;
|
|
|
|
|
if ($oBlog->getOwnerId()!=$this->oUserCurrent->getId() and !$this->oUserCurrent->isAdministrator() and !$bIsAdministratorBlog) {
|
2014-01-28 09:47:36 +02:00
|
|
|
|
return $this->EventErrorDebug();
|
2011-06-06 14:58:19 +03:00
|
|
|
|
}
|
2009-09-22 00:08:00 +03:00
|
|
|
|
/**
|
2011-06-06 14:58:19 +03:00
|
|
|
|
* Получаем список пользователей блога (любого статуса)
|
|
|
|
|
* Это полный АХТУНГ - исправить!
|
2009-09-22 00:08:00 +03:00
|
|
|
|
*/
|
2011-05-05 16:30:01 +03:00
|
|
|
|
$aBlogUsersResult = $this->Blog_GetBlogUsersByBlogId(
|
2009-09-22 00:08:00 +03:00
|
|
|
|
$oBlog->getId(),
|
|
|
|
|
array(
|
2010-05-27 17:02:43 +03:00
|
|
|
|
ModuleBlog::BLOG_USER_ROLE_BAN,
|
|
|
|
|
ModuleBlog::BLOG_USER_ROLE_REJECT,
|
|
|
|
|
ModuleBlog::BLOG_USER_ROLE_INVITE,
|
|
|
|
|
ModuleBlog::BLOG_USER_ROLE_USER,
|
|
|
|
|
ModuleBlog::BLOG_USER_ROLE_MODERATOR,
|
|
|
|
|
ModuleBlog::BLOG_USER_ROLE_ADMINISTRATOR
|
2011-05-05 16:30:01 +03:00
|
|
|
|
),null // пока костылем
|
2009-09-22 00:08:00 +03:00
|
|
|
|
);
|
2011-05-05 16:30:01 +03:00
|
|
|
|
$aBlogUsers=$aBlogUsersResult['collection'];
|
2009-09-22 00:08:00 +03:00
|
|
|
|
|
|
|
|
|
$aResult=array();
|
|
|
|
|
/**
|
|
|
|
|
* Обрабатываем добавление по каждому из переданных логинов
|
|
|
|
|
*/
|
|
|
|
|
foreach ($aUsers as $sUser) {
|
|
|
|
|
$sUser=trim($sUser);
|
|
|
|
|
if ($sUser=='') {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
/**
|
2011-06-06 14:58:19 +03:00
|
|
|
|
* Если пользователь пытается добавить инвайт
|
2009-09-22 00:08:00 +03:00
|
|
|
|
* самому себе, возвращаем ошибку
|
|
|
|
|
*/
|
|
|
|
|
if(strtolower($sUser)==strtolower($this->oUserCurrent->getLogin())) {
|
|
|
|
|
$aResult[]=array(
|
|
|
|
|
'bStateError'=>true,
|
|
|
|
|
'sMsgTitle'=>$this->Lang_Get('error'),
|
2014-01-25 14:39:19 +02:00
|
|
|
|
'sMsg'=>$this->Lang_Get('blog.invite.notices.add_self')
|
2011-06-06 14:58:19 +03:00
|
|
|
|
);
|
2009-09-22 00:08:00 +03:00
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Если пользователь не найден или неактивен,
|
|
|
|
|
* возвращаем ошибку
|
|
|
|
|
*/
|
|
|
|
|
if (!$oUser=$this->User_GetUserByLogin($sUser) or $oUser->getActivate()!=1) {
|
|
|
|
|
$aResult[]=array(
|
|
|
|
|
'bStateError'=>true,
|
|
|
|
|
'sMsgTitle'=>$this->Lang_Get('error'),
|
2011-08-28 22:23:28 +03:00
|
|
|
|
'sMsg'=>$this->Lang_Get('user_not_found',array('login'=>htmlspecialchars($sUser))),
|
|
|
|
|
'sUserLogin'=>htmlspecialchars($sUser)
|
2009-09-22 00:08:00 +03:00
|
|
|
|
);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(!isset($aBlogUsers[$oUser->getId()])) {
|
|
|
|
|
/**
|
|
|
|
|
* Создаем нового блог-пользователя со статусом INVITED
|
|
|
|
|
*/
|
|
|
|
|
$oBlogUserNew=Engine::GetEntity('Blog_BlogUser');
|
|
|
|
|
$oBlogUserNew->setBlogId($oBlog->getId());
|
|
|
|
|
$oBlogUserNew->setUserId($oUser->getId());
|
2010-05-27 17:02:43 +03:00
|
|
|
|
$oBlogUserNew->setUserRole(ModuleBlog::BLOG_USER_ROLE_INVITE);
|
2011-06-06 14:58:19 +03:00
|
|
|
|
|
2009-09-22 00:08:00 +03:00
|
|
|
|
if($this->Blog_AddRelationBlogUser($oBlogUserNew)) {
|
2014-02-06 11:43:12 +02:00
|
|
|
|
$oViewer = $this->Viewer_GetLocalViewer();
|
|
|
|
|
$oViewer->Assign('oUser', $oUser);
|
2014-02-06 12:11:35 +02:00
|
|
|
|
$oViewer->Assign('bUserListSmallShowActions', true);
|
2014-02-06 11:43:12 +02:00
|
|
|
|
|
2009-09-22 00:08:00 +03:00
|
|
|
|
$aResult[]=array(
|
|
|
|
|
'bStateError'=>false,
|
|
|
|
|
'sMsgTitle'=>$this->Lang_Get('attention'),
|
2014-01-25 14:39:19 +02:00
|
|
|
|
'sMsg'=>$this->Lang_Get('blog.invite.notices.add',array('login'=>htmlspecialchars($sUser))),
|
2011-08-28 22:23:28 +03:00
|
|
|
|
'sUserLogin'=>htmlspecialchars($sUser),
|
2012-04-20 13:52:17 +03:00
|
|
|
|
'sUserWebPath'=>$oUser->getUserWebPath(),
|
2014-01-25 14:39:19 +02:00
|
|
|
|
'sUserAvatar48'=>$oUser->getProfileAvatarPath(48),
|
2014-02-06 11:43:12 +02:00
|
|
|
|
'iUserId'=>$oUser->getId(),
|
2014-04-28 13:32:22 +03:00
|
|
|
|
'sHtml'=>$oViewer->Fetch("components/user_list_small/user_list_small_item.blog_invite.tpl")
|
2009-09-22 00:08:00 +03:00
|
|
|
|
);
|
|
|
|
|
$this->SendBlogInvite($oBlog,$oUser);
|
|
|
|
|
} else {
|
|
|
|
|
$aResult[]=array(
|
|
|
|
|
'bStateError'=>true,
|
|
|
|
|
'sMsgTitle'=>$this->Lang_Get('error'),
|
|
|
|
|
'sMsg'=>$this->Lang_Get('system_error'),
|
2011-08-28 22:23:28 +03:00
|
|
|
|
'sUserLogin'=>htmlspecialchars($sUser)
|
2011-06-06 14:58:19 +03:00
|
|
|
|
);
|
2009-09-22 00:08:00 +03:00
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
/**
|
|
|
|
|
* Попытка добавить приглашение уже существующему пользователю,
|
|
|
|
|
* возвращаем ошибку (сначала определяя ее точный текст)
|
|
|
|
|
*/
|
|
|
|
|
switch (true) {
|
2010-05-27 17:02:43 +03:00
|
|
|
|
case ($aBlogUsers[$oUser->getId()]->getUserRole()==ModuleBlog::BLOG_USER_ROLE_INVITE):
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$sErrorMessage=$this->Lang_Get('blog.invite.notices.already_invited',array('login'=>htmlspecialchars($sUser)));
|
2009-09-22 00:08:00 +03:00
|
|
|
|
break;
|
2010-05-27 17:02:43 +03:00
|
|
|
|
case ($aBlogUsers[$oUser->getId()]->getUserRole()>ModuleBlog::BLOG_USER_ROLE_GUEST):
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$sErrorMessage=$this->Lang_Get('blog.invite.notices.already_joined',array('login'=>htmlspecialchars($sUser)));
|
2009-09-22 00:08:00 +03:00
|
|
|
|
break;
|
2010-05-27 17:02:43 +03:00
|
|
|
|
case ($aBlogUsers[$oUser->getId()]->getUserRole()==ModuleBlog::BLOG_USER_ROLE_REJECT):
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$sErrorMessage=$this->Lang_Get('blog.invite.notices.reject',array('login'=>htmlspecialchars($sUser)));
|
2009-09-22 00:08:00 +03:00
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
$sErrorMessage=$this->Lang_Get('system_error');
|
|
|
|
|
}
|
|
|
|
|
$aResult[]=array(
|
|
|
|
|
'bStateError'=>true,
|
|
|
|
|
'sMsgTitle'=>$this->Lang_Get('error'),
|
|
|
|
|
'sMsg'=>$sErrorMessage,
|
2011-08-28 22:23:28 +03:00
|
|
|
|
'sUserLogin'=>htmlspecialchars($sUser)
|
2009-09-22 00:08:00 +03:00
|
|
|
|
);
|
|
|
|
|
continue;
|
2011-06-06 14:58:19 +03:00
|
|
|
|
}
|
2009-09-22 00:08:00 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Передаем во вьевер массив с результатами обработки по каждому пользователю
|
|
|
|
|
*/
|
2014-04-03 10:36:30 +03:00
|
|
|
|
$this->Viewer_AssignAjax('aUserList',$aResult);
|
2009-09-22 00:08:00 +03:00
|
|
|
|
}
|
2010-04-03 23:38:00 +03:00
|
|
|
|
/**
|
2011-06-06 14:58:19 +03:00
|
|
|
|
* Обработка ajax запроса на отправку
|
2010-04-03 23:38:00 +03:00
|
|
|
|
* повторного приглашения вступить в закрытый блог
|
|
|
|
|
*/
|
|
|
|
|
protected function AjaxReBlogInvite() {
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
2010-08-21 19:31:41 +03:00
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
2014-04-03 10:36:30 +03:00
|
|
|
|
$sUserId=getRequestStr('iUserId',null,'post');
|
|
|
|
|
$sBlogId=getRequestStr('iTargetId',null,'post');
|
2010-04-03 23:38:00 +03:00
|
|
|
|
/**
|
|
|
|
|
* Если пользователь не авторизирован, возвращаем ошибку
|
|
|
|
|
*/
|
2011-06-06 14:58:19 +03:00
|
|
|
|
if (!$this->User_IsAuthorization()) {
|
2010-04-03 23:38:00 +03:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('need_authorization'),$this->Lang_Get('error'));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
$this->oUserCurrent=$this->User_GetUserCurrent();
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем существование блога
|
|
|
|
|
*/
|
|
|
|
|
if(!$oBlog=$this->Blog_GetBlogById($sBlogId)) {
|
2014-01-28 09:47:36 +02:00
|
|
|
|
return $this->EventErrorDebug();
|
2010-04-03 23:38:00 +03:00
|
|
|
|
}
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Пользователь существует и активен?
|
|
|
|
|
*/
|
2010-04-03 23:38:00 +03:00
|
|
|
|
if (!$oUser=$this->User_GetUserById($sUserId) or $oUser->getActivate()!=1) {
|
2014-01-28 09:47:36 +02:00
|
|
|
|
return $this->EventErrorDebug();
|
2010-04-03 23:38:00 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем, имеет ли право текущий пользователь добавлять invite в blog
|
|
|
|
|
*/
|
2011-06-06 14:58:19 +03:00
|
|
|
|
$oBlogUser=$this->Blog_GetBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId());
|
2010-04-03 23:38:00 +03:00
|
|
|
|
$bIsAdministratorBlog=$oBlogUser ? $oBlogUser->getIsAdministrator() : false;
|
|
|
|
|
if ($oBlog->getOwnerId()!=$this->oUserCurrent->getId() and !$this->oUserCurrent->isAdministrator() and !$bIsAdministratorBlog) {
|
2014-01-28 09:47:36 +02:00
|
|
|
|
return $this->EventErrorDebug();
|
2010-04-03 23:38:00 +03:00
|
|
|
|
}
|
2014-01-28 11:34:44 +02:00
|
|
|
|
/**
|
|
|
|
|
* Попытка отправить инвайт пользователю, который не состоит в данном блоге
|
|
|
|
|
*/
|
|
|
|
|
if (!($oBlogUser=$this->Blog_GetBlogUserByBlogIdAndUserId($oBlog->getId(),$oUser->getId()))) {
|
|
|
|
|
return $this->EventErrorDebug();
|
|
|
|
|
}
|
2010-05-27 17:02:43 +03:00
|
|
|
|
if ($oBlogUser->getUserRole()==ModuleBlog::BLOG_USER_ROLE_INVITE) {
|
2010-04-03 23:38:00 +03:00
|
|
|
|
$this->SendBlogInvite($oBlog,$oUser);
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Message_AddNoticeSingle($this->Lang_Get('blog.invite.notices.add',array('login'=>$oUser->getLogin())),$this->Lang_Get('attention'));
|
2010-04-03 23:38:00 +03:00
|
|
|
|
} else {
|
2014-01-28 09:47:36 +02:00
|
|
|
|
return $this->EventErrorDebug();
|
2011-06-06 14:58:19 +03:00
|
|
|
|
}
|
2010-04-03 23:38:00 +03:00
|
|
|
|
}
|
2012-06-17 08:24:48 +03:00
|
|
|
|
/**
|
|
|
|
|
* Обработка ajax запроса на удаление вступить в закрытый блог
|
|
|
|
|
*/
|
|
|
|
|
protected function AjaxRemoveBlogInvite() {
|
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
2014-02-06 11:43:12 +02:00
|
|
|
|
$sUserId=getRequestStr('iUserId',null,'post');
|
|
|
|
|
$sBlogId=getRequestStr('iTargetId',null,'post');
|
2012-06-17 08:24:48 +03:00
|
|
|
|
/**
|
|
|
|
|
* Если пользователь не авторизирован, возвращаем ошибку
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->User_IsAuthorization()) {
|
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('need_authorization'),$this->Lang_Get('error'));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
$this->oUserCurrent=$this->User_GetUserCurrent();
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем существование блога
|
|
|
|
|
*/
|
|
|
|
|
if(!$oBlog=$this->Blog_GetBlogById($sBlogId)) {
|
2014-01-28 09:47:36 +02:00
|
|
|
|
return $this->EventErrorDebug();
|
2012-06-17 08:24:48 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Пользователь существует и активен?
|
|
|
|
|
*/
|
|
|
|
|
if (!$oUser=$this->User_GetUserById($sUserId) or $oUser->getActivate()!=1) {
|
2014-01-28 09:47:36 +02:00
|
|
|
|
return $this->EventErrorDebug();
|
2012-06-17 08:24:48 +03:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем, имеет ли право текущий пользователь добавлять invite в blog
|
|
|
|
|
*/
|
|
|
|
|
$oBlogUser=$this->Blog_GetBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId());
|
|
|
|
|
$bIsAdministratorBlog=$oBlogUser ? $oBlogUser->getIsAdministrator() : false;
|
|
|
|
|
if ($oBlog->getOwnerId()!=$this->oUserCurrent->getId() and !$this->oUserCurrent->isAdministrator() and !$bIsAdministratorBlog) {
|
2014-01-28 09:47:36 +02:00
|
|
|
|
return $this->EventErrorDebug();
|
2012-06-17 08:24:48 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$oBlogUser=$this->Blog_GetBlogUserByBlogIdAndUserId($oBlog->getId(),$oUser->getId());
|
|
|
|
|
if ($oBlogUser->getUserRole()==ModuleBlog::BLOG_USER_ROLE_INVITE) {
|
|
|
|
|
/**
|
|
|
|
|
* Удаляем связь/приглашение
|
|
|
|
|
*/
|
|
|
|
|
$this->Blog_DeleteRelationBlogUser($oBlogUser);
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Message_AddNoticeSingle($this->Lang_Get('blog.invite.notices.remove',array('login'=>$oUser->getLogin())),$this->Lang_Get('attention'));
|
2012-06-17 08:24:48 +03:00
|
|
|
|
} else {
|
2014-01-28 09:47:36 +02:00
|
|
|
|
return $this->EventErrorDebug();
|
2012-06-17 08:24:48 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
2009-09-22 00:08:00 +03:00
|
|
|
|
/**
|
2011-06-06 14:58:19 +03:00
|
|
|
|
* Выполняет отправку приглашения в блог
|
2009-09-22 00:08:00 +03:00
|
|
|
|
* (по внутренней почте и на email)
|
|
|
|
|
*
|
2010-05-27 18:16:20 +03:00
|
|
|
|
* @param ModuleBlog_EntityBlog $oBlog
|
|
|
|
|
* @param ModuleUser_EntityUser $oUser
|
2009-09-22 00:08:00 +03:00
|
|
|
|
*/
|
|
|
|
|
protected function SendBlogInvite($oBlog,$oUser) {
|
|
|
|
|
$sTitle=$this->Lang_Get(
|
2014-01-25 14:39:19 +02:00
|
|
|
|
'blog.invite.email.title',
|
2009-09-22 00:08:00 +03:00
|
|
|
|
array(
|
|
|
|
|
'blog_title'=>$oBlog->getTitle()
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
|
2013-08-08 14:00:37 +03:00
|
|
|
|
require_once Config::Get('path.framework.libs_vendor.server').'/XXTEA/encrypt.php';
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Формируем код подтверждения в URL
|
|
|
|
|
*/
|
2009-09-22 00:08:00 +03:00
|
|
|
|
$sCode=$oBlog->getId().'_'.$oUser->getId();
|
2010-04-03 23:38:00 +03:00
|
|
|
|
$sCode=rawurlencode(base64_encode(xxtea_encrypt($sCode, Config::Get('module.blog.encrypt'))));
|
2009-09-22 00:08:00 +03:00
|
|
|
|
|
|
|
|
|
$aPath=array(
|
|
|
|
|
'accept'=>Router::GetPath('blog').'invite/accept/?code='.$sCode,
|
|
|
|
|
'reject'=>Router::GetPath('blog').'invite/reject/?code='.$sCode
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
$sText=$this->Lang_Get(
|
2014-01-25 14:39:19 +02:00
|
|
|
|
'blog.invite.email.text',
|
2009-09-22 00:08:00 +03:00
|
|
|
|
array(
|
|
|
|
|
'login'=>$this->oUserCurrent->getLogin(),
|
|
|
|
|
'accept_path'=>$aPath['accept'],
|
|
|
|
|
'reject_path'=>$aPath['reject'],
|
|
|
|
|
'blog_title'=>$oBlog->getTitle()
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
$oTalk=$this->Talk_SendTalk($sTitle,$sText,$this->oUserCurrent,array($oUser),false,false);
|
|
|
|
|
/**
|
|
|
|
|
* Отправляем пользователю заявку
|
|
|
|
|
*/
|
2009-09-24 20:46:01 +03:00
|
|
|
|
$this->Notify_SendBlogUserInvite(
|
|
|
|
|
$oUser,$this->oUserCurrent,$oBlog,
|
|
|
|
|
Router::GetPath('talk').'read/'.$oTalk->getId().'/'
|
|
|
|
|
);
|
2009-09-22 00:08:00 +03:00
|
|
|
|
/**
|
|
|
|
|
* Удаляем отправляющего юзера из переписки
|
2011-06-06 14:58:19 +03:00
|
|
|
|
*/
|
2009-09-22 00:08:00 +03:00
|
|
|
|
$this->Talk_DeleteTalkUserByArray($oTalk->getId(),$this->oUserCurrent->getId());
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Обработка отправленого пользователю приглашения вступить в блог
|
|
|
|
|
*/
|
2011-06-06 14:58:19 +03:00
|
|
|
|
protected function EventInviteBlog() {
|
2013-08-08 14:00:37 +03:00
|
|
|
|
require_once Config::Get('path.framework.libs_vendor.server').'/XXTEA/encrypt.php';
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получаем код подтверждения из ревеста и дешефруем его
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
$sCode=xxtea_decrypt(base64_decode(rawurldecode(getRequestStr('code'))), Config::Get('module.blog.encrypt'));
|
2010-04-03 23:38:00 +03:00
|
|
|
|
if (!$sCode) {
|
|
|
|
|
return $this->EventNotFound();
|
|
|
|
|
}
|
2009-09-22 00:08:00 +03:00
|
|
|
|
list($sBlogId,$sUserId)=explode('_',$sCode,2);
|
2011-06-06 14:58:19 +03:00
|
|
|
|
|
2009-09-22 00:08:00 +03:00
|
|
|
|
$sAction=$this->GetParam(0);
|
|
|
|
|
/**
|
|
|
|
|
* Получаем текущего пользователя
|
|
|
|
|
*/
|
|
|
|
|
if(!$this->User_IsAuthorization()) {
|
|
|
|
|
return $this->EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
$this->oUserCurrent = $this->User_GetUserCurrent();
|
|
|
|
|
/**
|
|
|
|
|
* Если приглашенный пользователь не является авторизированным
|
|
|
|
|
*/
|
|
|
|
|
if($this->oUserCurrent->getId()!=$sUserId) {
|
|
|
|
|
return $this->EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Получаем указанный блог
|
|
|
|
|
*/
|
|
|
|
|
if((!$oBlog=$this->Blog_GetBlogById($sBlogId)) || $oBlog->getType()!='close') {
|
|
|
|
|
return $this->EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Получаем связь "блог-пользователь" и проверяем,
|
|
|
|
|
* чтобы ее тип был INVITE или REJECT
|
|
|
|
|
*/
|
|
|
|
|
if(!$oBlogUser=$this->Blog_GetBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId())) {
|
|
|
|
|
return $this->EventNotFound();
|
|
|
|
|
}
|
2010-05-27 17:02:43 +03:00
|
|
|
|
if($oBlogUser->getUserRole()>ModuleBlog::BLOG_USER_ROLE_GUEST) {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$sMessage=$this->Lang_Get('blog.invite.alerts.already_joined');
|
2009-09-22 00:08:00 +03:00
|
|
|
|
$this->Message_AddError($sMessage,$this->Lang_Get('error'),true);
|
|
|
|
|
Router::Location(Router::GetPath('talk'));
|
2011-06-06 14:58:19 +03:00
|
|
|
|
return ;
|
2009-09-22 00:08:00 +03:00
|
|
|
|
}
|
2010-05-27 17:02:43 +03:00
|
|
|
|
if(!in_array($oBlogUser->getUserRole(),array(ModuleBlog::BLOG_USER_ROLE_INVITE,ModuleBlog::BLOG_USER_ROLE_REJECT))) {
|
2009-09-22 00:08:00 +03:00
|
|
|
|
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'),true);
|
|
|
|
|
Router::Location(Router::GetPath('talk'));
|
|
|
|
|
return ;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Обновляем роль пользователя до читателя
|
|
|
|
|
*/
|
2010-05-27 17:02:43 +03:00
|
|
|
|
$oBlogUser->setUserRole(($sAction=='accept')?ModuleBlog::BLOG_USER_ROLE_USER:ModuleBlog::BLOG_USER_ROLE_REJECT);
|
2009-09-22 00:08:00 +03:00
|
|
|
|
if(!$this->Blog_UpdateRelationBlogUser($oBlogUser)) {
|
|
|
|
|
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'),true);
|
|
|
|
|
Router::Location(Router::GetPath('talk'));
|
2011-06-06 14:58:19 +03:00
|
|
|
|
return ;
|
2010-04-25 16:08:56 +03:00
|
|
|
|
}
|
|
|
|
|
if ($sAction=='accept') {
|
|
|
|
|
/**
|
|
|
|
|
* Увеличиваем число читателей блога
|
|
|
|
|
*/
|
|
|
|
|
$oBlog->setCountUser($oBlog->getCountUser()+1);
|
|
|
|
|
$this->Blog_UpdateBlog($oBlog);
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$sMessage=$this->Lang_Get('blog.invite.alerts.accepted');
|
2011-07-31 19:52:50 +03:00
|
|
|
|
/**
|
|
|
|
|
* Добавляем событие в ленту
|
|
|
|
|
*/
|
|
|
|
|
$this->Stream_write($oBlogUser->getUserId(), 'join_blog', $oBlog->getId());
|
2010-04-25 16:08:56 +03:00
|
|
|
|
} else {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$sMessage=$this->Lang_Get('blog.invite.alerts.rejected');
|
2011-06-06 14:58:19 +03:00
|
|
|
|
}
|
2009-09-22 00:08:00 +03:00
|
|
|
|
$this->Message_AddNotice($sMessage,$this->Lang_Get('attention'),true);
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Перенаправляем на страницу личной почты
|
|
|
|
|
*/
|
2011-06-06 14:58:19 +03:00
|
|
|
|
Router::Location(Router::GetPath('talk'));
|
2009-09-22 00:08:00 +03:00
|
|
|
|
}
|
2009-11-25 02:37:01 +02:00
|
|
|
|
/**
|
|
|
|
|
* Удаление блога
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
protected function EventDeleteBlog() {
|
|
|
|
|
$this->Security_ValidateSendForm();
|
|
|
|
|
/**
|
|
|
|
|
* Проверяем передан ли в УРЛе номер блога
|
|
|
|
|
*/
|
|
|
|
|
$sBlogId=$this->GetParam(0);
|
|
|
|
|
if (!$oBlog=$this->Blog_GetBlogById($sBlogId)) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Проверям авторизован ли пользователь
|
|
|
|
|
*/
|
|
|
|
|
if (!$this->User_IsAuthorization()) {
|
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('not_access'),$this->Lang_Get('error'));
|
|
|
|
|
return Router::Action('error');
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* проверяем есть ли право на удаление топика
|
2009-11-25 16:06:02 +02:00
|
|
|
|
*/
|
2009-11-25 02:37:01 +02:00
|
|
|
|
if (!$bAccess=$this->ACL_IsAllowDeleteBlog($oBlog,$this->oUserCurrent)) {
|
|
|
|
|
return parent::EventNotFound();
|
|
|
|
|
}
|
2013-07-10 11:29:36 +03:00
|
|
|
|
$aTopics = $this->Topic_GetTopicsByBlogId($sBlogId,1,100000); // нужно переделать функционал переноса топиков в дргугой блог
|
2009-11-25 02:37:01 +02:00
|
|
|
|
switch ($bAccess) {
|
2010-05-27 17:02:43 +03:00
|
|
|
|
case ModuleACL::CAN_DELETE_BLOG_EMPTY_ONLY :
|
2009-11-25 02:37:01 +02:00
|
|
|
|
if(is_array($aTopics) and count($aTopics)) {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('blog.remove.alerts.not_empty'),$this->Lang_Get('error'),true);
|
2011-04-25 18:45:01 +03:00
|
|
|
|
Router::Location($oBlog->getUrlFull());
|
2009-11-25 02:37:01 +02:00
|
|
|
|
}
|
|
|
|
|
break;
|
2010-05-27 17:02:43 +03:00
|
|
|
|
case ModuleACL::CAN_DELETE_BLOG_WITH_TOPICS :
|
2009-11-25 02:37:01 +02:00
|
|
|
|
/**
|
|
|
|
|
* Если указан идентификатор блога для перемещения,
|
2009-11-25 16:06:02 +02:00
|
|
|
|
* то делаем попытку переместить топики.
|
2011-06-06 14:58:19 +03:00
|
|
|
|
*
|
2009-11-25 16:06:02 +02:00
|
|
|
|
* (-1) - выбран пункт меню "удалить топики".
|
2009-11-25 02:37:01 +02:00
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
if($sBlogIdNew=getRequestStr('topic_move_to') and ($sBlogIdNew!=-1) and is_array($aTopics) and count($aTopics)) {
|
2009-11-25 02:37:01 +02:00
|
|
|
|
if(!$oBlogNew = $this->Blog_GetBlogById($sBlogIdNew)){
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('blog.remove.alerts.move_error'),$this->Lang_Get('error'),true);
|
2011-04-25 18:45:01 +03:00
|
|
|
|
Router::Location($oBlog->getUrlFull());
|
2009-11-25 02:37:01 +02:00
|
|
|
|
}
|
2009-11-25 16:06:02 +02:00
|
|
|
|
/**
|
|
|
|
|
* Если выбранный блог является персональным, возвращаем ошибку
|
|
|
|
|
*/
|
|
|
|
|
if($oBlogNew->getType()=='personal') {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('blog.remove.alerts.move_personal_error'),$this->Lang_Get('error'),true);
|
2011-04-25 18:45:01 +03:00
|
|
|
|
Router::Location($oBlog->getUrlFull());
|
2009-11-25 16:06:02 +02:00
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Перемещаем топики
|
|
|
|
|
*/
|
|
|
|
|
$this->Topic_MoveTopics($sBlogId,$sBlogIdNew);
|
2009-11-25 02:37:01 +02:00
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
default:
|
2011-06-06 14:58:19 +03:00
|
|
|
|
return parent::EventNotFound();
|
2009-11-25 02:37:01 +02:00
|
|
|
|
}
|
2009-11-25 16:06:02 +02:00
|
|
|
|
/**
|
|
|
|
|
* Удаляяем блог и перенаправляем пользователя к списку блогов
|
|
|
|
|
*/
|
2011-06-06 14:58:19 +03:00
|
|
|
|
$this->Hook_Run('blog_delete_before', array('sBlogId'=>$sBlogId));
|
2009-11-25 02:37:01 +02:00
|
|
|
|
if($this->Blog_DeleteBlog($sBlogId)) {
|
2011-06-06 14:58:19 +03:00
|
|
|
|
$this->Hook_Run('blog_delete_after', array('sBlogId'=>$sBlogId));
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Message_AddNoticeSingle($this->Lang_Get('blog.remove.alerts.success'),$this->Lang_Get('attention'),true);
|
2009-11-25 02:37:01 +02:00
|
|
|
|
Router::Location(Router::GetPath('blogs'));
|
|
|
|
|
} else {
|
2011-04-25 18:45:01 +03:00
|
|
|
|
Router::Location($oBlog->getUrlFull());
|
2009-11-25 02:37:01 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
2010-10-02 16:39:50 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получение описания блога
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
protected function AjaxBlogInfo() {
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
2010-10-02 16:39:50 +03:00
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
2012-12-12 08:06:38 +02:00
|
|
|
|
$sBlogId=getRequestStr('idBlog',null,'post');
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Определяем тип блога и получаем его
|
|
|
|
|
*/
|
2010-10-02 16:39:50 +03:00
|
|
|
|
if ($sBlogId==0) {
|
2011-06-06 14:58:19 +03:00
|
|
|
|
if ($this->oUserCurrent) {
|
2010-10-02 16:39:50 +03:00
|
|
|
|
$oBlog=$this->Blog_GetPersonalBlogByUserId($this->oUserCurrent->getId());
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$oBlog=$this->Blog_GetBlogById($sBlogId);
|
|
|
|
|
}
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* если блог найден, то возвращаем описание
|
|
|
|
|
*/
|
2014-01-25 15:42:41 +02:00
|
|
|
|
if (isset($oBlog)) {
|
2010-10-02 16:39:50 +03:00
|
|
|
|
$sText=$oBlog->getDescription();
|
2013-06-13 03:55:33 +03:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* если блог персональный — возвращаем текущий языковой эквивалент
|
|
|
|
|
*/
|
|
|
|
|
if ($sBlogId==0) {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$sText = $this->Lang_Get('blog.personal_description');
|
2013-06-13 03:55:33 +03:00
|
|
|
|
}
|
2010-10-02 16:39:50 +03:00
|
|
|
|
$this->Viewer_AssignAjax('sText',$sText);
|
2014-01-28 09:47:36 +02:00
|
|
|
|
} else {
|
|
|
|
|
return $this->EventErrorDebug();
|
2010-10-02 16:39:50 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Подключение/отключение к блогу
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
protected function AjaxBlogJoin() {
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем формат Ajax ответа
|
|
|
|
|
*/
|
2010-10-02 16:39:50 +03:00
|
|
|
|
$this->Viewer_SetResponseAjax('json');
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Пользователь авторизован?
|
|
|
|
|
*/
|
2010-10-02 16:39:50 +03:00
|
|
|
|
if (!$this->oUserCurrent) {
|
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('need_authorization'),$this->Lang_Get('error'));
|
|
|
|
|
return;
|
|
|
|
|
}
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Блог существует?
|
|
|
|
|
*/
|
2012-12-12 08:06:38 +02:00
|
|
|
|
$idBlog=getRequestStr('idBlog',null,'post');
|
2010-10-02 16:39:50 +03:00
|
|
|
|
if (!($oBlog=$this->Blog_GetBlogById($idBlog))) {
|
2014-01-28 09:47:36 +02:00
|
|
|
|
return $this->EventErrorDebug();
|
2010-10-02 16:39:50 +03:00
|
|
|
|
}
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Проверяем тип блога
|
|
|
|
|
*/
|
2010-10-02 16:39:50 +03:00
|
|
|
|
if (!in_array($oBlog->getType(),array('open','close'))) {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('blog.join.notices.error_invite'),$this->Lang_Get('error'));
|
2010-10-02 16:39:50 +03:00
|
|
|
|
return;
|
|
|
|
|
}
|
2012-04-29 17:58:36 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получаем текущий статус пользователя в блоге
|
|
|
|
|
*/
|
2010-10-02 16:39:50 +03:00
|
|
|
|
$oBlogUser=$this->Blog_GetBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId());
|
|
|
|
|
if (!$oBlogUser || ($oBlogUser->getUserRole()<ModuleBlog::BLOG_USER_ROLE_GUEST && $oBlog->getType()=='close')) {
|
|
|
|
|
if ($oBlog->getOwnerId()!=$this->oUserCurrent->getId()) {
|
|
|
|
|
/**
|
|
|
|
|
* Присоединяем юзера к блогу
|
|
|
|
|
*/
|
|
|
|
|
$bResult=false;
|
|
|
|
|
if($oBlogUser) {
|
|
|
|
|
$oBlogUser->setUserRole(ModuleBlog::BLOG_USER_ROLE_USER);
|
|
|
|
|
$bResult = $this->Blog_UpdateRelationBlogUser($oBlogUser);
|
|
|
|
|
} elseif($oBlog->getType()=='open') {
|
|
|
|
|
$oBlogUserNew=Engine::GetEntity('Blog_BlogUser');
|
|
|
|
|
$oBlogUserNew->setBlogId($oBlog->getId());
|
|
|
|
|
$oBlogUserNew->setUserId($this->oUserCurrent->getId());
|
|
|
|
|
$oBlogUserNew->setUserRole(ModuleBlog::BLOG_USER_ROLE_USER);
|
|
|
|
|
$bResult = $this->Blog_AddRelationBlogUser($oBlogUserNew);
|
|
|
|
|
}
|
|
|
|
|
if ($bResult) {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Message_AddNoticeSingle($this->Lang_Get('blog.join.notices.join_success'),$this->Lang_Get('attention'));
|
2010-10-02 16:39:50 +03:00
|
|
|
|
$this->Viewer_AssignAjax('bState',true);
|
|
|
|
|
/**
|
|
|
|
|
* Увеличиваем число читателей блога
|
|
|
|
|
*/
|
|
|
|
|
$oBlog->setCountUser($oBlog->getCountUser()+1);
|
2011-06-06 14:58:19 +03:00
|
|
|
|
$this->Blog_UpdateBlog($oBlog);
|
2010-10-02 16:39:50 +03:00
|
|
|
|
$this->Viewer_AssignAjax('iCountUser',$oBlog->getCountUser());
|
2011-07-31 19:52:50 +03:00
|
|
|
|
/**
|
|
|
|
|
* Добавляем событие в ленту
|
|
|
|
|
*/
|
|
|
|
|
$this->Stream_write($this->oUserCurrent->getId(), 'join_blog', $oBlog->getId());
|
2012-03-24 11:01:23 +02:00
|
|
|
|
/**
|
|
|
|
|
* Добавляем подписку на этот блог в ленту пользователя
|
|
|
|
|
*/
|
|
|
|
|
$this->Userfeed_subscribeUser($this->oUserCurrent->getId(), ModuleUserfeed::SUBSCRIBE_TYPE_BLOG, $oBlog->getId());
|
2011-06-06 14:58:19 +03:00
|
|
|
|
} else {
|
2010-10-02 16:39:50 +03:00
|
|
|
|
$sMsg=($oBlog->getType()=='close')
|
2014-01-25 14:39:19 +02:00
|
|
|
|
? $this->Lang_Get('blog.join.notices.error_invite')
|
2012-04-06 17:57:51 +03:00
|
|
|
|
: $this->Lang_Get('system_error');
|
2010-10-02 16:39:50 +03:00
|
|
|
|
$this->Message_AddErrorSingle($sMsg,$this->Lang_Get('error'));
|
|
|
|
|
return;
|
|
|
|
|
}
|
2011-06-06 14:58:19 +03:00
|
|
|
|
} else {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Message_AddErrorSingle($this->Lang_Get('blog.join.notices.error_self'),$this->Lang_Get('attention'));
|
2010-10-02 16:39:50 +03:00
|
|
|
|
return;
|
|
|
|
|
}
|
2011-06-06 14:58:19 +03:00
|
|
|
|
}
|
2010-10-02 16:39:50 +03:00
|
|
|
|
if ($oBlogUser && $oBlogUser->getUserRole()>ModuleBlog::BLOG_USER_ROLE_GUEST) {
|
|
|
|
|
/**
|
|
|
|
|
* Покидаем блог
|
2011-06-06 14:58:19 +03:00
|
|
|
|
*/
|
2010-10-02 16:39:50 +03:00
|
|
|
|
if ($this->Blog_DeleteRelationBlogUser($oBlogUser)) {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$this->Message_AddNoticeSingle($this->Lang_Get('blog.join.notices.leave_success'),$this->Lang_Get('attention'));
|
2011-06-06 14:58:19 +03:00
|
|
|
|
$this->Viewer_AssignAjax('bState',false);
|
2010-10-02 16:39:50 +03:00
|
|
|
|
/**
|
|
|
|
|
* Уменьшаем число читателей блога
|
|
|
|
|
*/
|
|
|
|
|
$oBlog->setCountUser($oBlog->getCountUser()-1);
|
|
|
|
|
$this->Blog_UpdateBlog($oBlog);
|
|
|
|
|
$this->Viewer_AssignAjax('iCountUser',$oBlog->getCountUser());
|
2012-03-24 11:01:23 +02:00
|
|
|
|
/**
|
|
|
|
|
* Удаляем подписку на этот блог в ленте пользователя
|
|
|
|
|
*/
|
|
|
|
|
$this->Userfeed_unsubscribeUser($this->oUserCurrent->getId(), ModuleUserfeed::SUBSCRIBE_TYPE_BLOG, $oBlog->getId());
|
2011-06-06 14:58:19 +03:00
|
|
|
|
} else {
|
2014-01-28 09:47:36 +02:00
|
|
|
|
return $this->EventErrorDebug();
|
2010-10-02 16:39:50 +03:00
|
|
|
|
}
|
2011-06-06 14:58:19 +03:00
|
|
|
|
}
|
2010-10-02 16:39:50 +03:00
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Выполняется при завершении работы экшена
|
|
|
|
|
*
|
|
|
|
|
*/
|
2011-06-06 14:58:19 +03:00
|
|
|
|
public function EventShutdown() {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Загружаем в шаблон необходимые переменные
|
|
|
|
|
*/
|
2009-02-14 13:56:04 +02:00
|
|
|
|
$this->Viewer_Assign('sMenuHeadItemSelect',$this->sMenuHeadItemSelect);
|
2008-09-21 09:36:57 +03:00
|
|
|
|
$this->Viewer_Assign('sMenuItemSelect',$this->sMenuItemSelect);
|
|
|
|
|
$this->Viewer_Assign('sMenuSubItemSelect',$this->sMenuSubItemSelect);
|
|
|
|
|
$this->Viewer_Assign('sMenuSubBlogUrl',$this->sMenuSubBlogUrl);
|
|
|
|
|
$this->Viewer_Assign('iCountTopicsCollectiveNew',$this->iCountTopicsCollectiveNew);
|
|
|
|
|
$this->Viewer_Assign('iCountTopicsPersonalNew',$this->iCountTopicsPersonalNew);
|
|
|
|
|
$this->Viewer_Assign('iCountTopicsBlogNew',$this->iCountTopicsBlogNew);
|
|
|
|
|
$this->Viewer_Assign('iCountTopicsNew',$this->iCountTopicsNew);
|
2013-08-05 14:54:03 +03:00
|
|
|
|
$this->Viewer_Assign('iCountTopicsSubNew',$this->iCountTopicsSubNew);
|
|
|
|
|
$this->Viewer_Assign('sNavTopicsSubUrl',$this->sNavTopicsSubUrl);
|
2011-06-06 14:58:19 +03:00
|
|
|
|
|
2010-05-27 17:02:43 +03:00
|
|
|
|
$this->Viewer_Assign('BLOG_USER_ROLE_GUEST', ModuleBlog::BLOG_USER_ROLE_GUEST);
|
|
|
|
|
$this->Viewer_Assign('BLOG_USER_ROLE_USER', ModuleBlog::BLOG_USER_ROLE_USER);
|
|
|
|
|
$this->Viewer_Assign('BLOG_USER_ROLE_MODERATOR', ModuleBlog::BLOG_USER_ROLE_MODERATOR);
|
|
|
|
|
$this->Viewer_Assign('BLOG_USER_ROLE_ADMINISTRATOR', ModuleBlog::BLOG_USER_ROLE_ADMINISTRATOR);
|
|
|
|
|
$this->Viewer_Assign('BLOG_USER_ROLE_INVITE', ModuleBlog::BLOG_USER_ROLE_INVITE);
|
|
|
|
|
$this->Viewer_Assign('BLOG_USER_ROLE_REJECT', ModuleBlog::BLOG_USER_ROLE_REJECT);
|
|
|
|
|
$this->Viewer_Assign('BLOG_USER_ROLE_BAN', ModuleBlog::BLOG_USER_ROLE_BAN);
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
2014-01-28 09:47:36 +02:00
|
|
|
|
}
|