2008-09-28 13:45:18 +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
*
---------------------------------------------------------
*/
/**
* Обработка УРЛа вида / link / - управление своими топиками ( тип : ссылка )
*
*/
class ActionLink extends Action {
2009-02-14 13:56:04 +02:00
/**
* Главное меню
*
* @ var unknown_type
*/
protected $sMenuHeadItemSelect = 'blog' ;
2008-09-28 13:45:18 +03:00
/**
* Меню
*
* @ var unknown_type
*/
protected $sMenuItemSelect = 'link' ;
/**
* СубМеню
*
* @ var unknown_type
*/
protected $sMenuSubItemSelect = 'add' ;
/**
* Текущий юзер
*
* @ var unknown_type
*/
protected $oUserCurrent = null ;
/**
* Инициализация
*
* @ return unknown
*/
2008-09-28 20:28:37 +03:00
public function Init () {
2008-09-28 13:45:18 +03:00
$this -> oUserCurrent = $this -> User_GetUserCurrent ();
$this -> SetDefaultEvent ( 'add' );
$this -> Viewer_AddHtmlTitle ( 'Ссылки' );
}
/**
* Регистрируем евенты
*
*/
protected function RegisterEvent () {
$this -> AddEvent ( 'add' , 'EventAdd' );
$this -> AddEvent ( 'edit' , 'EventEdit' );
$this -> AddEvent ( 'go' , 'EventGo' );
}
/**********************************************************************************
************************ РЕАЛИЗАЦИЯ ЭКШЕНА ***************************************
**********************************************************************************
*/
/**
* Переход по ссылке
*
* @ return unknown
*/
protected function EventGo () {
/**
* Получаем номер топика из УРЛ и проверяем существует ли он
*/
$sTopicId = $this -> GetParam ( 0 );
if ( ! $oTopic = $this -> Topic_GetTopicById ( $sTopicId , $this -> oUserCurrent )) {
return parent :: EventNotFound ();
}
/**
* проверяем является ли топик ссылкой
*/
if ( $oTopic -> getType () != 'link' ) {
return parent :: EventNotFound ();
}
/**
* увелививаем число переходов по ссылке
*/
$oTopic -> setLinkCountJump ( $oTopic -> getLinkCountJump () + 1 );
$this -> Topic_UpdateTopic ( $oTopic );
/**
* собственно сам переход по ссылке
*/
func_header_location ( $oTopic -> getLinkUrl ());
}
/**
* Редактирование ссылки
*
* @ return unknown
*/
protected function EventEdit () {
2008-09-28 20:28:37 +03:00
/**
* Проверяем авторизован ли юзер
*/
if ( ! $this -> User_IsAuthorization ()) {
$this -> Message_AddErrorSingle ( 'Для того чтобы что то написать, сначало нужно войти под своим аккаунтом.' , 'Нет доступа' );
return Router :: Action ( 'error' );
}
2008-09-28 13:45:18 +03:00
/**
* Меню
*/
$this -> sMenuSubItemSelect = '' ;
2008-10-01 21:53:51 +03:00
$this -> sMenuItemSelect = 'link' ;
2008-09-28 13:45:18 +03:00
/**
* Получаем номер топика из УРЛ и проверяем существует ли он
*/
$sTopicId = $this -> GetParam ( 0 );
if ( ! $oTopic = $this -> Topic_GetTopicById ( $sTopicId , $this -> oUserCurrent )) {
return parent :: EventNotFound ();
}
/**
2008-11-04 23:46:28 +02:00
* проверяем кто владелец топика , либо модератор и администратор блога
2008-09-28 13:45:18 +03:00
*/
2008-11-04 23:46:28 +02:00
$oBlogUser = $this -> Blog_GetRelationBlogUserByBlogIdAndUserId ( $oTopic -> getBlogId (), $this -> oUserCurrent -> getId ());
$bIsAdministratorBlog = $oBlogUser ? $oBlogUser -> getIsAdministrator () : false ;
$bIsModeratorBlog = $oBlogUser ? $oBlogUser -> getIsModerator () : false ;
if ( $oTopic -> getUserId () != $this -> oUserCurrent -> getId () and ! $this -> oUserCurrent -> isAdministrator () and ! $bIsAdministratorBlog and ! $bIsModeratorBlog and $oTopic -> getBlogOwnerId () != $this -> oUserCurrent -> getId ()) {
2008-09-28 13:45:18 +03:00
return parent :: EventNotFound ();
}
/**
* Добавляем блок вывода информации о блоге
*/
2008-10-16 18:15:19 +03:00
$this -> Viewer_AddBlocks ( 'right' , array ( 'block.blogInfo.tpl' ));
2008-09-28 13:45:18 +03:00
/**
* Получаем данные для отображения формы
2008-10-04 00:07:32 +03:00
* Если админ то делаем доступными все блоги
2008-09-28 13:45:18 +03:00
*/
$aAllowBlogsUser = array ();
2008-10-04 00:07:32 +03:00
$aBlogsOwner = array ();
if ( $this -> oUserCurrent -> isAdministrator ()) {
$aBlogsOwner = $this -> Blog_GetBlogs ();
} else {
$aBlogsOwner = $this -> Blog_GetBlogsByOwnerId ( $this -> oUserCurrent -> getId ());
$aBlogsUser = $this -> Blog_GetRelationBlogUsersByUserId ( $this -> oUserCurrent -> getId ());
foreach ( $aBlogsUser as $oBlogUser ) {
$oBlog = $this -> Blog_GetBlogById ( $oBlogUser -> getBlogId ());
// делаем через "or" чтоб дать возможность юзеру отредактировать свой топик в блоге в котором он уже не может постить, т.е . для тех топиков что были запощены раньше и был доступ в блог
if ( $this -> ACL_CanAddTopic ( $this -> oUserCurrent , $oBlog ) or $oTopic -> getBlogId () == $oBlog -> getId ()) {
$aAllowBlogsUser [] = $oBlogUser ;
}
2008-09-28 13:45:18 +03:00
}
}
/**
* Загружаем переменные в шаблон
*/
$this -> Viewer_Assign ( 'aBlogsUser' , $aAllowBlogsUser );
$this -> Viewer_Assign ( 'aBlogsOwner' , $aBlogsOwner );
$this -> Viewer_AddHtmlTitle ( 'Редактирование ссылки' );
/**
* Устанавливаем шаблон вывода
*/
$this -> SetTemplateAction ( 'add' );
/**
* Проверяем отправлена ли форма с данными ( хотяб одна кнопка )
*/
if ( isset ( $_REQUEST [ 'submit_topic_publish' ]) or isset ( $_REQUEST [ 'submit_topic_save' ])) {
/**
* Обрабатываем отправку формы
*/
return $this -> SubmitEdit ( $oTopic );
} else {
/**
* Заполняем поля формы для редактирования
* Только перед отправкой формы !
*/
$_REQUEST [ 'topic_title' ] = $oTopic -> getTitle ();
$_REQUEST [ 'topic_link_url' ] = $oTopic -> getLinkUrl ();
$_REQUEST [ 'topic_text' ] = $oTopic -> getTextSource ();
$_REQUEST [ 'topic_tags' ] = $oTopic -> getTags ();
$_REQUEST [ 'blog_id' ] = $oTopic -> getBlogId ();
$_REQUEST [ 'topic_id' ] = $oTopic -> getId ();
2008-10-11 00:02:31 +03:00
$_REQUEST [ 'topic_publish_index' ] = $oTopic -> getPublishIndex ();
2008-10-25 23:31:29 +03:00
$_REQUEST [ 'topic_forbid_comment' ] = $oTopic -> getForbidComment ();
2008-09-28 13:45:18 +03:00
}
}
/**
* Добавление ссылки
*
* @ return unknown
*/
protected function EventAdd () {
2008-09-28 20:28:37 +03:00
/**
* Проверяем авторизован ли юзер
*/
if ( ! $this -> User_IsAuthorization ()) {
$this -> Message_AddErrorSingle ( 'Для того чтобы что то написать, сначало нужно войти под своим аккаунтом.' , 'Нет доступа' );
return Router :: Action ( 'error' );
}
2008-09-28 13:45:18 +03:00
/**
* Меню
*/
$this -> sMenuSubItemSelect = 'add' ;
/**
* Добавляем блок вывода информации о блоге
*/
2008-10-16 18:15:19 +03:00
$this -> Viewer_AddBlocks ( 'right' , array ( 'block.blogInfo.tpl' ));
2008-09-28 13:45:18 +03:00
/**
* Получаем данные для отображения формы
*/
$aAllowBlogsUser = array ();
2008-10-04 00:07:32 +03:00
$aBlogsOwner = array ();
if ( $this -> oUserCurrent -> isAdministrator ()) {
$aBlogsOwner = $this -> Blog_GetBlogs ();
} else {
$aBlogsOwner = $this -> Blog_GetBlogsByOwnerId ( $this -> oUserCurrent -> getId ());
$aBlogsUser = $this -> Blog_GetRelationBlogUsersByUserId ( $this -> oUserCurrent -> getId ());
foreach ( $aBlogsUser as $oBlogUser ) {
$oBlog = $this -> Blog_GetBlogById ( $oBlogUser -> getBlogId ());
if ( $this -> ACL_CanAddTopic ( $this -> oUserCurrent , $oBlog )) {
$aAllowBlogsUser [] = $oBlogUser ;
}
2008-09-28 13:45:18 +03:00
}
}
/**
* Загружаем переменные в шаблон
*/
$this -> Viewer_Assign ( 'aBlogsUser' , $aAllowBlogsUser );
$this -> Viewer_Assign ( 'aBlogsOwner' , $aBlogsOwner );
$this -> Viewer_AddHtmlTitle ( 'Добавление ссылки' );
/**
* Обрабатываем отправку формы
*/
return $this -> SubmitAdd ();
}
/**
* Обработка добавлени топика
*
* @ return unknown
*/
protected function SubmitAdd () {
/**
* Проверяем отправлена ли форма с данными ( хотяб одна кнопка )
*/
if ( ! isset ( $_REQUEST [ 'submit_topic_publish' ]) and ! isset ( $_REQUEST [ 'submit_topic_save' ])) {
return false ;
}
/**
* Проверка корректности полей формы
*/
if ( ! $this -> checkTopicFields ()) {
return false ;
}
/**
* Определяем в какой блог делаем запись
*/
$iBlogId = getRequest ( 'blog_id' );
if ( $iBlogId == 0 ) {
2008-10-04 00:07:32 +03:00
$oBlog = $this -> Blog_GetPersonalBlogByUserId ( $this -> oUserCurrent -> getId ());
2008-09-28 13:45:18 +03:00
} else {
$oBlog = $this -> Blog_GetBlogById ( $iBlogId );
}
/**
* Если блог не определен выдаем предупреждение
*/
if ( ! $oBlog ) {
$this -> Message_AddErrorSingle ( 'Пытаетесь запостить топик в неизвестный блог?' , 'Ошибка' );
return false ;
}
/**
* Проверка состоит ли юзер в блоге в который постит
*/
2008-10-04 00:07:32 +03:00
if ( ! $this -> Blog_GetRelationBlogUserByBlogIdAndUserId ( $oBlog -> getId (), $this -> oUserCurrent -> getId ()) and ! $this -> oUserCurrent -> isAdministrator ()) {
2008-09-28 13:45:18 +03:00
if ( $oBlog -> getOwnerId () != $this -> oUserCurrent -> getId ()) {
$this -> Message_AddErrorSingle ( 'Вы не состоите в этом блоге!' , 'Ошибка' );
return false ;
}
}
/**
* Проверяем есть ли права на постинг топика в этот блог
*/
2008-10-04 00:07:32 +03:00
if ( ! $this -> ACL_CanAddTopic ( $this -> User_GetUserCurrent (), $oBlog ) and ! $this -> oUserCurrent -> isAdministrator ()) {
2008-09-28 13:45:18 +03:00
$this -> Message_AddErrorSingle ( 'Вы еще не достаточно окрепли чтобы постить в этот блог' , 'Ошибка' );
return false ;
}
/**
* Теперь можно смело добавлять топик к блогу
*/
$oTopic = new TopicEntity_Topic ();
$oTopic -> setBlogId ( $oBlog -> getId ());
$oTopic -> setUserId ( $this -> oUserCurrent -> getId ());
$oTopic -> setType ( 'link' );
$oTopic -> setTitle ( getRequest ( 'topic_title' ));
$oTopic -> setText ( htmlspecialchars ( getRequest ( 'topic_text' )));
$oTopic -> setTextShort ( htmlspecialchars ( getRequest ( 'topic_text' )));
$oTopic -> setTextSource ( getRequest ( 'topic_text' ));
$oTopic -> setLinkUrl ( getRequest ( 'topic_link_url' ));
$oTopic -> setTags ( getRequest ( 'topic_tags' ));
$oTopic -> setDateAdd ( date ( " Y-m-d H:i:s " ));
$oTopic -> setUserIp ( func_getIp ());
2008-10-26 20:53:08 +02:00
$oTopic -> setCutText ( null );
2008-09-28 13:45:18 +03:00
/**
* Публикуем или сохраняем
*/
if ( isset ( $_REQUEST [ 'submit_topic_publish' ])) {
$oTopic -> setPublish ( 1 );
2009-02-15 10:10:07 +02:00
$oTopic -> setPublishDraft ( 1 );
2008-09-28 13:45:18 +03:00
} else {
$oTopic -> setPublish ( 0 );
2009-02-15 10:10:07 +02:00
$oTopic -> setPublishDraft ( 0 );
2008-09-28 13:45:18 +03:00
}
2008-10-11 00:02:31 +03:00
/**
* Принудительный вывод на главную
*/
$oTopic -> setPublishIndex ( 0 );
if ( $this -> oUserCurrent -> isAdministrator ()) {
if ( getRequest ( 'topic_publish_index' )) {
$oTopic -> setPublishIndex ( 1 );
}
}
2008-10-25 23:31:29 +03:00
/**
* Запрет на комментарии к топику
*/
$oTopic -> setForbidComment ( 0 );
if ( getRequest ( 'topic_forbid_comment' )) {
$oTopic -> setForbidComment ( 1 );
}
2008-09-28 13:45:18 +03:00
/**
* Добавляем топик
*/
if ( $this -> Topic_AddTopic ( $oTopic )) {
//Делаем рассылку спама всем, кто состоит в этом блоге
if ( $oTopic -> getPublish () == 1 and $oBlog -> getType () != 'personal' ) {
$aBlogUsers = $this -> Blog_GetRelationBlogUsersByBlogId ( $oBlog -> getId ());
foreach ( $aBlogUsers as $oBlogUser ) {
if ( $oBlogUser -> getUserId () == $this -> oUserCurrent -> getId ()) {
continue ;
2008-10-21 07:58:03 +03:00
}
$this -> Notify_SendTopicNewToSubscribeBlog ( $oBlogUser , $oTopic , $oBlog , $this -> oUserCurrent );
2008-09-28 13:45:18 +03:00
}
}
func_header_location ( DIR_WEB_ROOT . '/blog/' . $oTopic -> getId () . '.html' );
} else {
$this -> Message_AddErrorSingle ( 'Возникли технические неполадки при добавлении топика, пожалуйста повторите позже.' , 'Внутреняя ошибка' );
return Router :: Action ( 'error' );
}
}
/**
* Обработка редактирования топика
*
* @ param unknown_type $oTopic
* @ return unknown
*/
protected function SubmitEdit ( $oTopic ) {
/**
* Проверка корректности полей формы
*/
if ( ! $this -> checkTopicFields ()) {
return false ;
}
/**
* Определяем в какой блог делаем запись
*/
$iBlogId = getRequest ( 'blog_id' );
if ( $iBlogId == 0 ) {
2008-10-04 00:07:32 +03:00
$oBlog = $this -> Blog_GetPersonalBlogByUserId ( $oTopic -> getUserId ());
2008-09-28 13:45:18 +03:00
} else {
$oBlog = $this -> Blog_GetBlogById ( $iBlogId );
}
/**
* Если блог не определен выдаем предупреждение
*/
if ( ! $oBlog ) {
$this -> Message_AddErrorSingle ( 'Пытаетесь запостить топик в неизвестный блог?' , 'Ошибка' );
return false ;
}
/**
* Проверка состоит ли юзер в блоге в который постит
2008-11-04 23:54:55 +02:00
* Если нужно разрешить редактировать топик в блоге в котором юзер уже не состоит
* Если юзер является администратором либо модератором блога , то разрешаем ему перенос в другой блог
2008-09-28 13:45:18 +03:00
*/
2008-11-04 23:54:55 +02:00
$oBlogUser = $this -> Blog_GetRelationBlogUserByBlogIdAndUserId ( $oTopic -> getBlogId (), $this -> oUserCurrent -> getId ());
$bIsAdministratorBlog = $oBlogUser ? $oBlogUser -> getIsAdministrator () : false ;
$bIsModeratorBlog = $oBlogUser ? $oBlogUser -> getIsModerator () : false ;
if ( ! $this -> Blog_GetRelationBlogUserByBlogIdAndUserId ( $oBlog -> getId (), $this -> oUserCurrent -> getId ()) and ! $this -> oUserCurrent -> isAdministrator () and ! $bIsAdministratorBlog and ! $bIsModeratorBlog and $oTopic -> getBlogOwnerId () != $this -> oUserCurrent -> getId ()) {
2008-09-28 13:45:18 +03:00
if ( $oBlog -> getOwnerId () != $this -> oUserCurrent -> getId ()) {
2008-10-04 00:07:32 +03:00
$this -> Message_AddErrorSingle ( 'Вы не состоите в этом блоге!' , 'Ошибка' );
2008-09-28 13:45:18 +03:00
return false ;
}
}
/**
* Проверяем есть ли права на постинг топика в этот блог
* Условие $oBlog -> getId () != $oTopic -> getBlogId () для того чтоб разрешить отредактировать топик в блоге в который сейчас юзер не имеет права на постинг , но раньше успел в него запостить этот топик
*/
2008-10-04 00:07:32 +03:00
if ( ! $this -> ACL_CanAddTopic ( $this -> oUserCurrent , $oBlog ) and $oBlog -> getId () != $oTopic -> getBlogId () and ! $this -> oUserCurrent -> isAdministrator ()) {
2008-09-28 13:45:18 +03:00
$this -> Message_AddErrorSingle ( 'Вы еще не достаточно окрепли чтобы постить в этот блог' , 'Ошибка' );
return false ;
}
/**
* Теперь можно смело редактировать топик
*/
$oTopic -> setBlogId ( $oBlog -> getId ());
$oTopic -> setTitle ( getRequest ( 'topic_title' ));
$oTopic -> setText ( htmlspecialchars ( getRequest ( 'topic_text' )));
$oTopic -> setTextShort ( htmlspecialchars ( getRequest ( 'topic_text' )));
$oTopic -> setTextSource ( getRequest ( 'topic_text' ));
$oTopic -> setLinkUrl ( getRequest ( 'topic_link_url' ));
$oTopic -> setTags ( getRequest ( 'topic_tags' ));
$oTopic -> setUserIp ( func_getIp ());
/**
* Публикуем или сохраняем в черновиках
*/
if ( isset ( $_REQUEST [ 'submit_topic_publish' ])) {
$oTopic -> setPublish ( 1 );
2009-02-15 10:10:07 +02:00
if ( $oTopic -> getPublishDraft () == 0 ) {
$oTopic -> setPublishDraft ( 1 );
$oTopic -> setDateAdd ( date ( " Y-m-d H:i:s " ));
}
2008-09-28 13:45:18 +03:00
} else {
$oTopic -> setPublish ( 0 );
2008-10-11 00:02:31 +03:00
}
/**
* Принудительный вывод на главную
*/
if ( $this -> oUserCurrent -> isAdministrator ()) {
if ( getRequest ( 'topic_publish_index' )) {
$oTopic -> setPublishIndex ( 1 );
} else {
$oTopic -> setPublishIndex ( 0 );
}
}
2008-10-25 23:31:29 +03:00
/**
* Запрет на комментарии к топику
*/
$oTopic -> setForbidComment ( 0 );
if ( getRequest ( 'topic_forbid_comment' )) {
$oTopic -> setForbidComment ( 1 );
}
2008-09-28 13:45:18 +03:00
/**
* Сохраняем топик
*/
2008-11-04 23:46:28 +02:00
if ( $this -> Topic_UpdateTopic ( $oTopic )) {
if ( ! $oTopic -> getPublish () and ! $this -> oUserCurrent -> isAdministrator () and $this -> oUserCurrent -> getId () != $oTopic -> getUserId ()) {
func_header_location ( $oTopic -> getBlogUrlFull ());
}
2008-09-28 13:45:18 +03:00
func_header_location ( DIR_WEB_ROOT . '/blog/' . $oTopic -> getId () . '.html' );
} else {
$this -> Message_AddErrorSingle ( 'Возникли технические неполадки при изменении топика, пожалуйста повторите позже.' , 'Внутреняя ошибка' );
return Router :: Action ( 'error' );
}
}
/**
* Проверка полей формы
*
* @ return unknown
*/
protected function checkTopicFields () {
$bOk = true ;
/**
* Проверяем есть ли блог в кторый постим
*/
if ( ! func_check ( getRequest ( 'blog_id' ), 'id' )) {
$this -> Message_AddError ( 'Что то не то с блогом..' , 'Ошибка' );
$bOk = false ;
}
/**
* Проверяем есть ли заголовок топика
*/
if ( ! func_check ( getRequest ( 'topic_title' ), 'text' , 2 , 200 )) {
$this -> Message_AddError ( 'Название топика должно быть от 2 до 200 символов' , 'Ошибка' );
$bOk = false ;
}
/**
* Проверяем есть ли ссылка
*/
if ( ! func_check ( getRequest ( 'topic_link_url' ), 'text' , 3 , 200 )) {
2009-02-01 13:33:02 +02:00
$this -> Message_AddError ( 'Ссылка должна быть от 2 до 200 символов' , 'Ошибка' );
2008-09-28 13:45:18 +03:00
$bOk = false ;
}
/**
* Проверяем есть ли описание топика - ссылки
*/
if ( ! func_check ( getRequest ( 'topic_text' ), 'text' , 10 , 500 )) {
$this -> Message_AddError ( 'Описание ссылки должно быть от 10 до 500 символов' , 'Ошибка' );
$bOk = false ;
}
/**
* Проверяем есть ли теги ( метки )
*/
if ( ! func_check ( getRequest ( 'topic_tags' ), 'text' , 2 , 500 )) {
$this -> Message_AddError ( 'Метки топика должны быть от 2 до 50 символов с общей диной не более 500 символов' , 'Ошибка' );
$bOk = false ;
}
/**
* проверяем ввод тегов
*/
$sTags = getRequest ( 'topic_tags' );
$aTags = explode ( ',' , $sTags );
$aTagsNew = array ();
foreach ( $aTags as $sTag ) {
$sTag = trim ( $sTag );
if ( func_check ( $sTag , 'text' , 2 , 50 )) {
$aTagsNew [] = $sTag ;
}
}
if ( ! count ( $aTagsNew )) {
$this -> Message_AddError ( 'Проверьте правильность меток' , 'Ошибка' );
$bOk = false ;
} else {
$_REQUEST [ 'topic_tags' ] = join ( ',' , $aTagsNew );
}
return $bOk ;
}
/**
* При завершении экшена загружаем необходимые переменные
*
*/
public function EventShutdown () {
2009-02-14 13:56:04 +02:00
$this -> Viewer_Assign ( 'sMenuHeadItemSelect' , $this -> sMenuHeadItemSelect );
2008-09-28 13:45:18 +03:00
$this -> Viewer_Assign ( 'sMenuItemSelect' , $this -> sMenuItemSelect );
$this -> Viewer_Assign ( 'sMenuSubItemSelect' , $this -> sMenuSubItemSelect );
}
}
?>