Viewer_AddBlocks('right',array('actions/ActionProfile/sidebar.tpl')); } protected function RegisterEvent() { $this->AddEvent('friendoffer','EventFriendOffer'); $this->AddEvent('ajaxfriendadd', 'EventAjaxFriendAdd'); $this->AddEvent('ajaxfrienddelete', 'EventAjaxFriendDelete'); $this->AddEventPreg('/^[\w\-\_]+$/i','/^(whois)?$/i','EventWhois'); $this->AddEventPreg('/^[\w\-\_]+$/i','/^favourites$/i','/^comments$/i','/^(page(\d+))?$/i','EventFavouriteComments'); $this->AddEventPreg('/^[\w\-\_]+$/i','/^favourites$/i','/^(page(\d+))?$/i','EventFavourite'); } /********************************************************************************** ************************ РЕАЛИЗАЦИЯ ЭКШЕНА *************************************** ********************************************************************************** */ /** * Выводит список избранноего юзера * */ protected function EventFavourite() { /** * Получаем логин из УРЛа */ $sUserLogin=$this->sCurrentEvent; /** * Проверяем есть ли такой юзер */ if (!($this->oUserProfile=$this->User_GetUserByLogin($sUserLogin))) { return parent::EventNotFound(); } /** * Передан ли номер страницы */ $iPage=$this->GetParamEventMatch(1,2) ? $this->GetParamEventMatch(1,2) : 1; /** * Получаем список избранных топиков */ $aResult=$this->Topic_GetTopicsFavouriteByUserId($this->oUserProfile->getId(),$iPage,Config::Get('module.topic.per_page')); $aTopics=$aResult['collection']; /** * Формируем постраничность */ $aPaging=$this->Viewer_MakePaging($aResult['count'],$iPage,Config::Get('module.topic.per_page'),4,Router::GetPath('profile').$this->oUserProfile->getLogin().'/favourites'); /** * Загружаем переменные в шаблон */ $this->Viewer_Assign('aPaging',$aPaging); $this->Viewer_Assign('aTopics',$aTopics); $this->Viewer_AddHtmlTitle($this->Lang_Get('user_menu_profile').' '.$this->oUserProfile->getLogin()); $this->Viewer_AddHtmlTitle($this->Lang_Get('user_menu_profile_favourites')); /** * Устанавливаем шаблон вывода */ $this->SetTemplateAction('favourites'); } /** * Выводит список избранноего юзера * */ protected function EventFavouriteComments() { /** * Получаем логин из УРЛа */ $sUserLogin=$this->sCurrentEvent; /** * Проверяем есть ли такой юзер */ if (!($this->oUserProfile=$this->User_GetUserByLogin($sUserLogin))) { return parent::EventNotFound(); } /** * Передан ли номер страницы */ $iPage=$this->GetParamEventMatch(2,2) ? $this->GetParamEventMatch(2,2) : 1; /** * Получаем список избранных комментариев */ $aResult=$this->Comment_GetCommentsFavouriteByUserId($this->oUserProfile->getId(),$iPage,Config::Get('module.comment.per_page')); $aComments=$aResult['collection']; /** * Формируем постраничность */ $aPaging=$this->Viewer_MakePaging($aResult['count'],$iPage,Config::Get('module.comment.per_page'),4,Router::GetPath('profile').$this->oUserProfile->getLogin().'/favourites/comments'); /** * Загружаем переменные в шаблон */ $this->Viewer_Assign('aPaging',$aPaging); $this->Viewer_Assign('aComments',$aComments); $this->Viewer_AddHtmlTitle($this->Lang_Get('user_menu_profile').' '.$this->oUserProfile->getLogin()); $this->Viewer_AddHtmlTitle($this->Lang_Get('user_menu_profile_favourites_comments')); /** * Устанавливаем шаблон вывода */ $this->SetTemplateAction('comments'); } /** * Показывает инфу профиля * */ protected function EventWhois() { /** * Получаем логин из УРЛа */ $sUserLogin=$this->sCurrentEvent; /** * Проверяем есть ли такой юзер */ if (!($this->oUserProfile=$this->User_GetUserByLogin($sUserLogin))) { return parent::EventNotFound(); } /** * Получаем список друзей */ $aUsersFriend=$this->User_GetUsersFriend($this->oUserProfile->getId()); if (Config::Get('general.reg.invite')) { /** * Получаем список тех кого пригласил юзер */ $aUsersInvite=$this->User_GetUsersInvite($this->oUserProfile->getId()); $this->Viewer_Assign('aUsersInvite',$aUsersInvite); /** * Получаем того юзера, кто пригласил текущего */ $oUserInviteFrom=$this->User_GetUserInviteFrom($this->oUserProfile->getId()); $this->Viewer_Assign('oUserInviteFrom',$oUserInviteFrom); } /** * Получаем список юзеров блога */ $aBlogUsers=$this->Blog_GetBlogUsersByUserId($this->oUserProfile->getId(),0); $aBlogModerators=$this->Blog_GetBlogUsersByUserId($this->oUserProfile->getId(),1); $aBlogAdministrators=$this->Blog_GetBlogUsersByUserId($this->oUserProfile->getId(),2); /** * Получаем список блогов которые создал юзер */ $aBlogsOwner=$this->Blog_GetBlogsByOwnerId($this->oUserProfile->getId()); /** * Вызов хуков */ $this->Hook_Run('profile_whois_show',array("oUserProfile"=>$this->oUserProfile)); /** * Загружаем переменные в шаблон */ $this->Viewer_Assign('aBlogUsers',$aBlogUsers); $this->Viewer_Assign('aBlogModerators',$aBlogModerators); $this->Viewer_Assign('aBlogAdministrators',$aBlogAdministrators); $this->Viewer_Assign('aBlogsOwner',$aBlogsOwner); $this->Viewer_Assign('aUsersFriend',$aUsersFriend); $this->Viewer_AddHtmlTitle($this->Lang_Get('user_menu_profile').' '.$this->oUserProfile->getLogin()); $this->Viewer_AddHtmlTitle($this->Lang_Get('user_menu_profile_whois')); /** * Устанавливаем шаблон вывода */ $this->SetTemplateAction('whois'); } /** * Добавление пользователя в друзья, по отправленной заявке */ public function EventFriendOffer() { $sUserId=$this->GetParam(1); $sAction=$this->GetParam(0); /** * Получаем текущего пользователя */ if(!$this->User_IsAuthorization()) { return $this->EventNotFound(); } $oUserCurrent = $this->User_GetUserCurrent(); /** * Получаем объект пользователя приславшего заявку, * если пользователь не найден, переводим в раздел сообщений (Talk) - * так как пользователь мог перейти сюда либо из talk-сообщений, * либо из e-mail письма-уведомления */ if(!$oUser=$this->User_GetUserById($sUserId)) { $this->Message_AddError($this->Lang_Get('user_not_found'),$this->Lang_Get('error'),true); $this->Message_Shutdown(); func_header_location(Router::GetPath('talk')); return ; } /** * Получаем связь дружбы из базы данных. * Если связь не найдена либо статус отличен от OFFER, * переходим в раздел Talk и возвращаем сообщение об ошибке */ $oFriend=$this->User_GetFriend($oUserCurrent->getId(),$oUser->getId(),0); if(!$oFriend || ($oFriend->getFriendStatus()!=LsUser::USER_FRIEND_OFFER+LsUser::USER_FRIEND_NULL)) { $sMessage=($oFriend) ? $this->Lang_Get('user_friend_offer_already_done') : $this->Lang_Get('user_friend_offer_not_found'); $this->Message_AddError($sMessage,$this->Lang_Get('error'),true); $this->Message_Shutdown(); func_header_location(Router::GetPath('talk')); return ; } /** * Устанавливаем новый статус связи */ $oFriend->setStatusTo( ($sAction=='accept') ? LsUser::USER_FRIEND_ACCEPT : LsUser::USER_FRIEND_REJECT ); if ($this->User_UpdateFriend($oFriend)) { $sMessage=($sAction=='accept') ? $this->Lang_Get('user_friend_add_ok') : $this->Lang_Get('user_friend_offer_reject'); $this->Message_AddNoticeSingle($sMessage,$this->Lang_Get('attention'),true); } else { $this->Message_AddErrorSingle( $this->Lang_Get('system_error'), $this->Lang_Get('error'), true ); } $this->Message_Shutdown(); func_header_location(Router::GetPath('talk')); } public function EventAjaxFriendAdd() { $this->Viewer_SetResponseAjax(); $sUserId=getRequest('idUser'); $sUserText=getRequest('userText',''); /** * Если пользователь не авторизирован, возвращаем ошибку */ if (!$this->User_IsAuthorization()) { $this->Message_AddErrorSingle( $this->Lang_Get('need_authorization'), $this->Lang_Get('error') ); return; } $this->oUserCurrent=$this->User_GetUserCurrent(); /** * При попытке добавить в друзья себя, возвращаем ошибку */ if ($this->oUserCurrent->getId()==$sUserId) { $this->Message_AddErrorSingle( $this->Lang_Get('user_friend_add_self'), $this->Lang_Get('error') ); return; } /** * Если пользователь не найден, возвращаем ошибку */ if( !$oUser=$this->User_GetUserById($sUserId) ) { $this->Message_AddErrorSingle( $this->Lang_Get('user_not_found'), $this->Lang_Get('error') ); return; } $this->oUserProfile=$oUser; /** * Получаем статус дружбы между пользователями */ $oFriend=$this->User_GetFriend($oUser->getId(),$this->oUserCurrent->getId()); /** * Если связи ранее не было в базе данных, добавляем новую */ if( !$oFriend ) { $this->SubmitAddFriend($oUser,$sUserText,$oFriend); return; } /** * Если статус связи соответствует статусам отправленной и акцептованной заявки, * то предупреждаем что этот пользователь уже является нашим другом */ if($oFriend->getFriendStatus()==LsUser::USER_FRIEND_OFFER + LsUser::USER_FRIEND_ACCEPT) { $this->Message_AddErrorSingle( $this->Lang_Get('user_friend_already_exist'), $this->Lang_Get('error') ); return; } /** * Если пользователь ранее отклонил нашу заявку, * возвращаем сообщение об ошибке */ if($oFriend->getUserFrom()==$this->oUserCurrent->getId() && $oFriend->getStatusTo()==LsUser::USER_FRIEND_REJECT ) { $this->Message_AddErrorSingle( $this->Lang_Get('user_friend_offer_reject'), $this->Lang_Get('error') ); return; } /** * Если дружба была удалена, то проверяем кто ее удалил * и разрешаем восстановить только удалившему */ if($oFriend->getFriendStatus()>LsUser::USER_FRIEND_DELETE && $oFriend->getFriendStatus()getStatusByUserId($this->oUserCurrent->getId()); if($iStatusCurrent==LsUser::USER_FRIEND_DELETE) { /** * Меняем статус с удаленного, на акцептованное */ $oFriend->setStatusByUserId(LsUser::USER_FRIEND_ACCEPT,$this->oUserCurrent->getId()); if($this->User_UpdateFriend($oFriend)) { $this->Message_AddNoticeSingle($this->Lang_Get('user_friend_add_ok'),$this->Lang_Get('attention')); $oViewerLocal=$this->GetViewerLocal(); $oViewerLocal->Assign('oUserFriend',$oFriend); $this->Viewer_AssingAjax('sToggleText',$oViewerLocal->Fetch("actions/ActionProfile/friend_item.tpl")); } else { $this->Message_AddErrorSingle( $this->Lang_Get('system_error'), $this->Lang_Get('error') ); } return; } else { $this->Message_AddErrorSingle( $this->Lang_Get('user_friend_add_deleted'), $this->Lang_Get('error') ); return; } } } /** * Функция создает локальный объект вьювера для рендеринга html-объектов в ajax запросах * * @return LsViewer */ protected function GetViewerLocal() { /** * Получаем HTML код inject-объекта */ if (!class_exists('LsViewer')) { require_once(Config::Get('path.root.engine')."/modules/viewer/Viewer.class.php"); } $oViewerLocal=new LsViewer(Engine::getInstance()); $oViewerLocal->Init(); $oViewerLocal->VarAssign(); $oViewerLocal->Assign('aLang',$this->Lang_GetLangMsg()); $oViewerLocal->Assign('oUserCurrent',$this->oUserCurrent); $oViewerLocal->Assign('oUserProfile',$this->oUserProfile); $oViewerLocal->Assign('USER_FRIEND_NULL',LsUser::USER_FRIEND_NULL); $oViewerLocal->Assign('USER_FRIEND_OFFER',LsUser::USER_FRIEND_OFFER); $oViewerLocal->Assign('USER_FRIEND_ACCEPT',LsUser::USER_FRIEND_ACCEPT); $oViewerLocal->Assign('USER_FRIEND_REJECT',LsUser::USER_FRIEND_REJECT); $oViewerLocal->Assign('USER_FRIEND_DELETE',LsUser::USER_FRIEND_DELETE); return $oViewerLocal; } protected function SubmitAddFriend($oUser,$sUserText,$oFriend=null) { $oFriendNew=new UserEntity_Friend(); $oFriendNew->setUserTo($oUser->getId()); $oFriendNew->setUserFrom($this->oUserCurrent->getId()); // Добавляем заявку в друзья $oFriendNew->setStatusFrom(LsUser::USER_FRIEND_OFFER); $oFriendNew->setStatusTo(LsUser::USER_FRIEND_NULL); $bStateError=($oFriend) ? !$this->User_UpdateFriend($oFriendNew) : !$this->User_AddFriend($oFriendNew); if ( !$bStateError ) { $this->Message_AddNoticeSingle($this->Lang_Get('user_friend_offer_send'),$this->Lang_Get('attention')); // Отправляем пользователю заявку $this->Notify_SendUserFriendNew($oUser,$this->oUserCurrent); $sTitle=$this->Lang_Get( 'user_friend_offer_title', array( 'login'=>$this->oUserCurrent->getLogin(), 'friend'=>$oUser->getLogin() ) ); $sText=$this->Lang_Get( 'user_friend_offer_text', array( 'login'=>$this->oUserCurrent->getLogin(), 'accept_path'=>Router::GetPath('profile').'friendoffer/accept/'.$this->oUserCurrent->getId(), 'reject_path'=>Router::GetPath('profile').'friendoffer/reject/'.$this->oUserCurrent->getId(), 'user_text'=>$sUserText ) ); $this->Talk_SendTalk($sTitle,$sText,$this->oUserCurrent,array($oUser),false,false); } else { $this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error')); } $oViewerLocal=$this->GetViewerLocal(); $oViewerLocal->Assign('oUserFriend',$oFriendNew); $this->Viewer_AssingAjax('sToggleText',$oViewerLocal->Fetch("actions/ActionProfile/friend_item.tpl")); } /** * Удаление пользователя из друзей */ public function EventAjaxFriendDelete() { $this->Viewer_SetResponseAjax(); $sUserId=getRequest('idUser'); /** * Если пользователь не авторизирован, возвращаем ошибку */ if (!$this->User_IsAuthorization()) { $this->Message_AddErrorSingle( $this->Lang_Get('need_authorization'), $this->Lang_Get('error') ); return; } $this->oUserCurrent=$this->User_GetUserCurrent(); /** * При попытке добавить в друзья себя, возвращаем ошибку */ if ($this->oUserCurrent->getId()==$sUserId) { $this->Message_AddErrorSingle( $this->Lang_Get('user_friend_add_self'), $this->Lang_Get('error') ); return; } /** * Если пользователь не найден, возвращаем ошибку */ if( !$oUser=$this->User_GetUserById($sUserId) ) { $this->Message_AddErrorSingle( $this->Lang_Get('user_friend_del_no'), $this->Lang_Get('error') ); return; } $this->oUserProfile=$oUser; /** * Получаем статус дружбы между пользователями. * Если статус не определен, или отличается от принятой заявки, * возвращаем ошибку */ if( !($oFriend=$this->User_GetFriend($oUser->getId(),$this->oUserCurrent->getId())) || $oFriend->getFriendStatus()!=LsUser::USER_FRIEND_ACCEPT+LsUser::USER_FRIEND_OFFER ) { $this->Message_AddErrorSingle( $this->Lang_Get('user_friend_del_no'), $this->Lang_Get('error') ); return; } if( $this->User_DeleteFriend($oFriend) ) { $this->Message_AddNoticeSingle($this->Lang_Get('user_friend_del_ok'),$this->Lang_Get('attention')); $oViewerLocal=$this->GetViewerLocal(); $oViewerLocal->Assign('oUserFriend',$oFriend); $this->Viewer_AssingAjax('sToggleText',$oViewerLocal->Fetch("actions/ActionProfile/friend_item.tpl")); return; } else { $this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error')); return; } } /** * Выполняется при завершении работы экшена */ public function EventShutdown() { if (!$this->oUserProfile) { return ; } /** * Загружаем в шаблон необходимые переменные */ $iCountTopicFavourite=$this->Topic_GetCountTopicsFavouriteByUserId($this->oUserProfile->getId()); $iCountTopicUser=$this->Topic_GetCountTopicsPersonalByUser($this->oUserProfile->getId(),1); $iCountCommentUser=$this->Comment_GetCountCommentsByUserId($this->oUserProfile->getId(),'topic'); $iCountCommentFavourite=$this->Comment_GetCountCommentsFavouriteByUserId($this->oUserProfile->getId()); $this->Viewer_Assign('oUserProfile',$this->oUserProfile); $this->Viewer_Assign('iCountTopicUser',$iCountTopicUser); $this->Viewer_Assign('iCountCommentUser',$iCountCommentUser); $this->Viewer_Assign('iCountTopicFavourite',$iCountTopicFavourite); $this->Viewer_Assign('iCountCommentFavourite',$iCountCommentFavourite); $this->Viewer_Assign('USER_FRIEND_NULL',LsUser::USER_FRIEND_NULL); $this->Viewer_Assign('USER_FRIEND_OFFER',LsUser::USER_FRIEND_OFFER); $this->Viewer_Assign('USER_FRIEND_ACCEPT',LsUser::USER_FRIEND_ACCEPT); $this->Viewer_Assign('USER_FRIEND_REJECT',LsUser::USER_FRIEND_REJECT); $this->Viewer_Assign('USER_FRIEND_DELETE',LsUser::USER_FRIEND_DELETE); } } ?>