예제 #1
0
 public function EventAjaxChangeOrderFields()
 {
     // * Устанавливаем формат ответа
     E::ModuleViewer()->SetResponseAjax('json');
     if (!E::ModuleUser()->IsAuthorization()) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('need_authorization'), E::ModuleLang()->Get('error'));
         return;
     }
     if (!$this->oUserCurrent->isAdministrator()) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('need_authorization'), E::ModuleLang()->Get('error'));
         return;
     }
     if (!F::GetRequest('order')) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
         return;
     }
     if (is_array(F::GetRequest('order'))) {
         foreach (F::GetRequest('order') as $oOrder) {
             if (is_numeric($oOrder['order']) && is_numeric($oOrder['id']) && ($oField = E::ModuleTopic()->GetContentFieldById($oOrder['id']))) {
                 $oField->setFieldSort($oOrder['order']);
                 E::ModuleTopic()->UpdateContentField($oField);
             }
         }
         E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('action.admin.save_sort_success'));
         return;
     } else {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
         return;
     }
 }
예제 #2
0
 /**
  * Проверяет является ли текущий пользователь администратором
  *
  * @param bool $bReturnUser Возвращать или нет объект пользователя
  *
  * @return bool|ModuleUser_EntityUser
  */
 public function GetIsAdmin($bReturnUser = false)
 {
     if ($this->oUserCurrent and $this->oUserCurrent->isAdministrator()) {
         return $bReturnUser ? $this->oUserCurrent : true;
     }
     return false;
 }
예제 #3
0
 /**
  * Авторизовывает юзера
  *
  * @param ModuleUser_EntityUser $oUser	Объект пользователя
  * @param bool $bRemember	Запоминать пользователя или нет
  * @param string $sKey	Ключ авторизации для куков
  * @return bool
  */
 public function Authorization(ModuleUser_EntityUser $oUser, $bRemember = true, $sKey = null)
 {
     if (!Config::Get('plugin.blacklist.check_authorization') || $oUser && $oUser->isAdministrator() || $oUser && !$this->PluginBlacklist_ModuleBlacklist_blackMail($oUser->getMail(), $oUser->getLogin())) {
         return parent::Authorization($oUser, $bRemember, $sKey);
     }
     $this->Message_AddErrorSingle($this->Lang_Get(Config::Get('plugin.blacklist.check_ip_exact') ? 'plugin.blacklist.user_in_exact_blacklist' : 'plugin.blacklist.user_in_blacklist'));
     return false;
 }
예제 #4
0
 /**
  * @param string                $sAction
  * @param ModuleUser_EntityUser $oUser
  * @param array                 $aParams
  *
  * @return bool|string
  */
 public function CheckRuleAction($sAction, $oUser, $aParams = array())
 {
     if ($oUser->isAdministrator()) {
         return true;
     }
     // * Проверка на наличие блокировок
     list($iBlockType, $sBlockTarget) = $this->GetTypeAndTargetByAction($sAction);
     $xResult = $this->CheckRuleBlock($iBlockType, $sBlockTarget, $oUser, $aParams);
     if (true !== $xResult) {
         return $xResult ? $xResult : false;
     }
     // * Проверка на запрещающие правила
     $bSkip = false;
     $aType = (array) Config::Get('plugin.magicrules.rule_disallow.' . $sAction . '.type');
     if ($iBlockType == self::BLOCK_TYPE_VOTE && isset($aParams['vote_value']) && count($aType) && !in_array($this->aVoteMirrow[$aParams['vote_value']], $aType)) {
         $bSkip = true;
     }
     $aGroups = (array) Config::Get('plugin.magicrules.rule_disallow.' . $sAction . '.groups');
     if (!$bSkip && count($aGroups)) {
         $sMsg = $this->_text(Config::Get('plugin.magicrules.rule_disallow.' . $sAction . '.msg'));
         foreach ($aGroups as $aRule) {
             $bCheck = true;
             foreach ($aRule as $sOption => $xValue) {
                 if (!$this->CheckRuleDisallowActionParam($sOption, $xValue, $oUser, $aParams)) {
                     $bCheck = false;
                     break;
                 }
             }
             if ($bCheck) {
                 return $sMsg ? $sMsg : false;
             }
         }
     }
     // * Проверка на разрешающие правила
     $aGroups = (array) Config::Get('plugin.magicrules.rule_allow.' . $sAction . '.groups');
     if (!count($aGroups)) {
         return true;
     }
     $sMsg = $this->_text(Config::Get('plugin.magicrules.rule_allow.' . $sAction . '.msg'));
     foreach ($aGroups as $aRule) {
         $bCheck = true;
         foreach ($aRule as $sOption => $xValue) {
             if (!$this->CheckRuleActionParam($sOption, $xValue, $oUser, $aParams)) {
                 $bCheck = false;
                 break;
             }
         }
         if ($bCheck) {
             return true;
         }
     }
     return $sMsg ? $sMsg : false;
 }
 /**
  * Инициализация
  *
  * @return null
  */
 public function Init()
 {
     /**
      * Проверяем авторизован ли юзер
      */
     if (!$this->User_IsAuthorization()) {
         $this->Message_AddErrorSingle($this->Lang_Get('not_access'));
         return Router::Action('error');
     }
     /**
      * Получаем текущего юзера
      */
     $this->oUserCurrent = $this->User_GetUserCurrent();
     /**
      * Проверяем является ли юзер администратором
      */
     if (!$this->oUserCurrent->isAdministrator()) {
         $this->Message_AddErrorSingle($this->Lang_Get('not_access'));
         return Router::Action('error');
     }
     $this->SetDefaultEvent('report');
 }
예제 #6
0
 /**
  * Обработка ajax запроса на удаление вступить в закрытый блог
  */
 protected function AjaxRemoveBlogInvite()
 {
     /**
      * Устанавливаем формат Ajax ответа
      */
     $this->Viewer_SetResponseAjax('json');
     $sUserId = getRequestStr('idUser', null, 'post');
     $sBlogId = getRequestStr('idBlog', null, 'post');
     /**
      * Если пользователь не авторизирован, возвращаем ошибку
      */
     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))) {
         $this->Message_AddErrorSingle($this->Lang_Get('system_error'), $this->Lang_Get('error'));
         return;
     }
     /**
      * Пользователь существует и активен?
      */
     if (!($oUser = $this->User_GetUserById($sUserId)) or $oUser->getActivate() != 1) {
         $this->Message_AddErrorSingle($this->Lang_Get('system_error'), $this->Lang_Get('error'));
         return;
     }
     /**
      * Проверяем, имеет ли право текущий пользователь добавлять 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) {
         $this->Message_AddErrorSingle($this->Lang_Get('system_error'), $this->Lang_Get('error'));
         return;
     }
     $oBlogUser = $this->Blog_GetBlogUserByBlogIdAndUserId($oBlog->getId(), $oUser->getId());
     if ($oBlogUser->getUserRole() == ModuleBlog::BLOG_USER_ROLE_INVITE) {
         /**
          * Удаляем связь/приглашение
          */
         $this->Blog_DeleteRelationBlogUser($oBlogUser);
         $this->Message_AddNoticeSingle($this->Lang_Get('blog_user_invite_remove_ok', array('login' => $oUser->getLogin())), $this->Lang_Get('attention'));
     } else {
         $this->Message_AddErrorSingle($this->Lang_Get('system_error'), $this->Lang_Get('error'));
     }
 }
 /**
  * Показ и обработка формы приглаешний
  *
  */
 protected function EventInvite()
 {
     /**
      * Только при активном режиме инвайтов
      */
     if (!Config::Get('general.reg.invite')) {
         return parent::EventNotFound();
     }
     $this->sMenuItemSelect = 'invite';
     $this->sMenuSubItemSelect = '';
     $this->Viewer_AddHtmlTitle($this->Lang_Get('settings_menu_invite'));
     /**
      * Если отправили форму
      */
     if (isPost('submit_invite')) {
         $this->Security_ValidateSendForm();
         $bError = false;
         /**
          * Есть права на отправку инфайтов?
          */
         if (!$this->ACL_CanSendInvite($this->oUserCurrent) and !$this->oUserCurrent->isAdministrator()) {
             $this->Message_AddError($this->Lang_Get('settings_invite_available_no'), $this->Lang_Get('error'));
             $bError = true;
         }
         /**
          * Емайл корректен?
          */
         if (!func_check(getRequestStr('invite_mail'), 'mail')) {
             $this->Message_AddError($this->Lang_Get('settings_invite_mail_error'), $this->Lang_Get('error'));
             $bError = true;
         }
         /**
          * Запускаем выполнение хуков
          */
         $this->Hook_Run('settings_invate_send_before', array('oUser' => $this->oUserCurrent));
         /**
          * Если нет ошибок, то отправляем инвайт
          */
         if (!$bError) {
             $oInvite = $this->User_GenerateInvite($this->oUserCurrent);
             $this->Notify_SendInvite($this->oUserCurrent, getRequestStr('invite_mail'), $oInvite);
             $this->Message_AddNoticeSingle($this->Lang_Get('settings_invite_submit_ok'));
             $this->Hook_Run('settings_invate_send_after', array('oUser' => $this->oUserCurrent));
         }
     }
     $this->Viewer_Assign('iCountInviteAvailable', $this->User_GetCountInviteAvailable($this->oUserCurrent));
     $this->Viewer_Assign('iCountInviteUsed', $this->User_GetCountInviteUsed($this->oUserCurrent->getId()));
     //	$this->Viewer_Assign('oAceUserProfile', $this->PluginAceadminpanel_Admin_GetUserByLogin($this->oUserProfile->getLogin()));
 }
예제 #8
0
 /**
  * Проверяет может ли пользователь создавать запись по времени
  */
 public function CanPostTestimonialTime(ModuleUser_EntityUser $oUser)
 {
     // Для администраторов ограничение по времени не действует
     if ($oUser->isAdministrator() or Config::Get('plugin.testimonials.acl.create.limit_time') == 0 or $oUser->getRating() >= Config::Get('plugin.testimonials.acl.create.limit_time_rating')) {
         return true;
     }
     /**
      * Проверяем, если топик опубликованный меньше чем acl.create.topic.limit_time секунд назад
      */
     $aTestimonials = $this->PluginTestimonials_Testimonials_GetTestimonialsItemsByFilter(array('#page' => array(1, 20), '#order' => array('id' => 'desc'), 'user_id' => $oUser->getId(), 'date_add >' => date("Y-m-d H:i:s", time() - Config::Get('plugin.testimonials.acl.create.limit_time'))));
     if (isset($aTestimonials['count']) and $aTestimonials['count'] > 0) {
         return false;
     }
     return true;
 }
예제 #9
0
 /**
  * Показ и обработка формы приглаешний
  *
  */
 protected function EventInvite()
 {
     /**
      * Только при активном режиме инвайтов
      */
     if (!Config::Get('general.reg.invite')) {
         return parent::EventNotFound();
     }
     $this->sMenuItemSelect = 'invite';
     $this->sMenuSubItemSelect = '';
     E::ModuleViewer()->AddHtmlTitle(E::ModuleLang()->Get('settings_menu_invite'));
     /**
      * Если отправили форму
      */
     if (isPost('submit_invite')) {
         E::ModuleSecurity()->ValidateSendForm();
         $bError = false;
         /**
          * Есть права на отправку инфайтов?
          */
         if (!E::ModuleACL()->CanSendInvite($this->oUserCurrent) && !$this->oUserCurrent->isAdministrator()) {
             E::ModuleMessage()->AddError(E::ModuleLang()->Get('settings_invite_available_no'), E::ModuleLang()->Get('error'));
             $bError = true;
         }
         /**
          * Емайл корректен?
          */
         if (!F::CheckVal(F::GetRequestStr('invite_mail'), 'mail')) {
             E::ModuleMessage()->AddError(E::ModuleLang()->Get('settings_invite_mail_error'), E::ModuleLang()->Get('error'));
             $bError = true;
         }
         /**
          * Запускаем выполнение хуков
          */
         E::ModuleHook()->Run('settings_invate_send_before', array('oUser' => $this->oUserCurrent));
         /**
          * Если нет ошибок, то отправляем инвайт
          */
         if (!$bError) {
             $oInvite = E::ModuleUser()->GenerateInvite($this->oUserCurrent);
             E::ModuleNotify()->SendInvite($this->oUserCurrent, F::GetRequestStr('invite_mail'), $oInvite);
             E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('settings_invite_submit_ok'));
             E::ModuleHook()->Run('settings_invate_send_after', array('oUser' => $this->oUserCurrent));
         }
     }
     E::ModuleViewer()->Assign('iCountInviteAvailable', E::ModuleUser()->GetCountInviteAvailable($this->oUserCurrent));
     E::ModuleViewer()->Assign('iCountInviteUsed', E::ModuleUser()->GetCountInviteUsed($this->oUserCurrent->getId()));
 }
예제 #10
0
 /**
  * Обработка ajax-запроса на удаление приглашения подписаться на приватный блог
  *
  */
 protected function AjaxRemoveBlogInvite()
 {
     //  Устанавливаем формат Ajax ответа
     E::ModuleViewer()->SetResponseAjax('json');
     $sUserId = F::GetRequestStr('idUser', null, 'post');
     $sBlogId = F::GetRequestStr('idBlog', null, 'post');
     //  Если пользователь не авторизирован, возвращаем ошибку
     if (!E::ModuleUser()->IsAuthorization()) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('need_authorization'), E::ModuleLang()->Get('error'));
         return;
     }
     $this->oUserCurrent = E::ModuleUser()->GetUserCurrent();
     //  Проверяем существование блога
     if (!($oBlog = E::ModuleBlog()->GetBlogById($sBlogId))) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
         return;
     }
     $this->oCurrentBlog = $oBlog;
     //  Пользователь существует и активен?
     $oUser = E::ModuleUser()->GetUserById($sUserId);
     if (!$oUser || $oUser->getActivate() != 1) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
         return;
     }
     //  Проверяем, имеет ли право текущий пользователь добавлять invite в blog
     $oBlogUser = E::ModuleBlog()->GetBlogUserByBlogIdAndUserId($oBlog->getId(), $this->oUserCurrent->getId());
     $bBlogAdministrator = $oBlogUser ? $oBlogUser->IsBlogAdministrator() : false;
     if ($oBlog->getOwnerId() != $this->oUserCurrent->getId() && !$this->oUserCurrent->isAdministrator() && !$this->oUserCurrent->isModerator() && !$bBlogAdministrator) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
         return;
     }
     $oBlogUser = E::ModuleBlog()->GetBlogUserByBlogIdAndUserId($oBlog->getId(), $oUser->getId());
     if ($oBlogUser->getUserRole() == ModuleBlog::BLOG_USER_ROLE_INVITE) {
         //  Удаляем связь/приглашение
         E::ModuleBlog()->DeleteRelationBlogUser($oBlogUser);
         E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('blog_user_invite_remove_ok', array('login' => $oUser->getLogin())), E::ModuleLang()->Get('attention'));
     } else {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
     }
 }
예제 #11
0
파일: Blog.class.php 프로젝트: lifecom/test
 /**
  * Получаем массив идентификаторов блогов, 
  * которые являются закрытыми для пользователя
  *
  * @param  ModuleUser_EntityUser $oUser
  * @return array
  */
 public function GetInaccessibleBlogsByUser($oUser = null)
 {
     if ($oUser && $oUser->isAdministrator()) {
         return array();
     }
     $sUserId = $oUser ? $oUser->getId() : 'quest';
     if (false === ($aCloseBlogs = $this->Cache_Get("blog_inaccessible_user_{$sUserId}"))) {
         $aCloseBlogs = array();
         $aCloseBlogs = $this->oMapperBlog->GetCloseBlogs();
         if ($oUser) {
             /**
              * Получаем массив идентификаторов блогов, 
              * которые являются откытыми для данного пользователя
              */
             $aOpenBlogs = array();
             $aOpenBlogs = $this->GetBlogUsersByUserId($oUser->getId(), null, true);
             $aCloseBlogs = array_diff($aCloseBlogs, $aOpenBlogs);
         }
         // Сохраняем в кеш
         if ($oUser) {
             $this->Cache_Set($aCloseBlogs, "blog_inaccessible_user_{$sUserId}", array('blog_new', 'blog_update', "blog_relation_change_{$oUser->getId()}"), 60 * 60 * 24);
         } else {
             $this->Cache_Set($aCloseBlogs, "blog_inaccessible_user_{$sUserId}", array('blog_new', 'blog_update'), 60 * 60 * 24 * 3);
         }
     }
     return $aCloseBlogs;
 }
예제 #12
0
 /**
  * Обработка редактирования топика
  *
  * @param ModuleTopic_EntityTopic $oTopic
  * @return mixed
  */
 protected function SubmitEdit($oTopic)
 {
     $oTopic->_setValidateScenario('link');
     /**
      * Сохраняем старое значение идентификатора блога
      */
     $sBlogIdOld = $oTopic->getBlogId();
     /**
      * Заполняем поля для валидации
      */
     $oTopic->setBlogId(getRequestStr('blog_id'));
     $oTopic->setTitle(strip_tags(getRequestStr('topic_title')));
     $oTopic->setLinkUrl(getRequestStr('topic_link_url'));
     $oTopic->setTextSource(getRequestStr('topic_text'));
     $oTopic->setTags(getRequestStr('topic_tags'));
     $oTopic->setUserIp(func_getIp());
     /**
      * Проверка корректности полей формы
      */
     if (!$this->checkTopicFields($oTopic)) {
         return false;
     }
     /**
      * Определяем в какой блог делаем запись
      */
     $iBlogId = $oTopic->getBlogId();
     if ($iBlogId == 0) {
         $oBlog = $this->Blog_GetPersonalBlogByUserId($oTopic->getUserId());
     } else {
         $oBlog = $this->Blog_GetBlogById($iBlogId);
     }
     /**
      * Если блог не определен выдаем предупреждение
      */
     if (!$oBlog) {
         $this->Message_AddErrorSingle($this->Lang_Get('topic_create_blog_error_unknown'), $this->Lang_Get('error'));
         return false;
     }
     /**
      * Проверяем права на постинг в блог
      */
     if (!$this->ACL_IsAllowBlog($oBlog, $this->oUserCurrent)) {
         $this->Message_AddErrorSingle($this->Lang_Get('topic_create_blog_error_noallow'), $this->Lang_Get('error'));
         return false;
     }
     /**
      * Проверяем разрешено ли постить топик по времени
      */
     if (isPost('submit_topic_publish') and !$oTopic->getPublishDraft() and !$this->ACL_CanPostTopicTime($this->oUserCurrent)) {
         $this->Message_AddErrorSingle($this->Lang_Get('topic_time_limit'), $this->Lang_Get('error'));
         return;
     }
     /**
      * Теперь можно смело редактировать топик
      */
     $oTopic->setBlogId($oBlog->getId());
     $oTopic->setText($this->Text_Parser($oTopic->getTextSource()));
     $oTopic->setTextShort($oTopic->getText());
     /**
      * Публикуем или сохраняем в черновиках
      */
     $bSendNotify = false;
     if (isset($_REQUEST['submit_topic_publish'])) {
         $oTopic->setPublish(1);
         if ($oTopic->getPublishDraft() == 0) {
             $oTopic->setPublishDraft(1);
             $oTopic->setDateAdd(date("Y-m-d H:i:s"));
             $bSendNotify = true;
         }
     } else {
         $oTopic->setPublish(0);
     }
     /**
      * Принудительный вывод на главную
      */
     if ($this->ACL_IsAllowPublishIndex($this->oUserCurrent)) {
         if (getRequest('topic_publish_index')) {
             $oTopic->setPublishIndex(1);
         } else {
             $oTopic->setPublishIndex(0);
         }
     }
     /**
      * Запрет на комментарии к топику
      */
     $oTopic->setForbidComment(0);
     if (getRequest('topic_forbid_comment')) {
         $oTopic->setForbidComment(1);
     }
     $this->Hook_Run('topic_edit_before', array('oTopic' => $oTopic, 'oBlog' => $oBlog));
     /**
      * Сохраняем топик
      */
     if ($this->Topic_UpdateTopic($oTopic)) {
         $this->Hook_Run('topic_edit_after', array('oTopic' => $oTopic, 'oBlog' => $oBlog, 'bSendNotify' => &$bSendNotify));
         /**
          * Обновляем данные в комментариях, если топик был перенесен в новый блог
          */
         if ($sBlogIdOld != $oTopic->getBlogId()) {
             $this->Comment_UpdateTargetParentByTargetId($oTopic->getBlogId(), 'topic', $oTopic->getId());
             $this->Comment_UpdateTargetParentByTargetIdOnline($oTopic->getBlogId(), 'topic', $oTopic->getId());
         }
         /**
          * Обновляем количество топиков в блоге
          */
         if ($sBlogIdOld != $oTopic->getBlogId()) {
             $this->Blog_RecalculateCountTopicByBlogId($sBlogIdOld);
         }
         $this->Blog_RecalculateCountTopicByBlogId($oTopic->getBlogId());
         /**
          * Добавляем событие в ленту
          */
         $this->Stream_write($oTopic->getUserId(), 'add_topic', $oTopic->getId(), $oTopic->getPublish() && $oBlog->getType() != 'close');
         /**
          * Рассылаем о новом топике подписчикам блога
          */
         if ($bSendNotify) {
             $this->Topic_SendNotifyTopicNew($oBlog, $oTopic, $this->oUserCurrent);
         }
         if (!$oTopic->getPublish() and !$this->oUserCurrent->isAdministrator() and $this->oUserCurrent->getId() != $oTopic->getUserId()) {
             Router::Location($oBlog->getUrlFull());
         }
         Router::Location($oTopic->getUrl());
     } else {
         $this->Message_AddErrorSingle($this->Lang_Get('system_error'));
         return Router::Action('error');
     }
 }
예제 #13
0
 /**
  * Проверяет можно или нет пользователю редактировать пост
  *
  * @param  object $oPost
  * @param  object $oUser
  * @return bool
  */
 public function IsAllowEditForumPost($oPost, ModuleUser_EntityUser $oUser)
 {
     /**
      * Разрешаем если это админ сайта
      */
     if ($oUser->isAdministrator()) {
         return true;
     }
     /**
      * Если модератор форума
      */
     $oModerator = $this->PluginForum_Forum_GetModeratorByForumIdAndUserId($oPost->getTopic()->getForumId(), $oUser->getId());
     if ($oModerator && $oModerator->getAllowEditPost()) {
         return true;
     }
     /**
      * Разрешаем если это автор топика
      */
     if ($oPost->getUserId() == $oUser->getId()) {
         $sDateComment = strtotime($oPost->getDateAdd());
         if ($sDateComment > time() - Config::Get('plugin.forum.acl.edit.post.time')) {
             return true;
         }
     }
     return false;
 }
예제 #14
0
 /**
  * Добавление нового участника разговора (ajax)
  *
  */
 public function AjaxAddTalkUser()
 {
     /**
      * Устанавливаем формат Ajax ответа
      */
     $this->Viewer_SetResponseAjax('json');
     $aUsers = getRequest('users', null, 'post');
     $idTalk = getRequestStr('target_id', null, 'post');
     /**
      * Валидация
      */
     if (!is_array($aUsers)) {
         return $this->EventErrorDebug();
     }
     /**
      * Если пользователь не авторизирован, возвращаем ошибку
      */
     if (!$this->User_IsAuthorization()) {
         $this->Message_AddErrorSingle($this->Lang_Get('common.error.need_authorization'), $this->Lang_Get('common.error.error'));
         return;
     }
     /**
      * Если разговор не найден, или пользователь не является его автором (или админом), возвращаем ошибку
      */
     if (!($oTalk = $this->Talk_GetTalkById($idTalk)) || $oTalk->getUserId() != $this->oUserCurrent->getId() && !$this->oUserCurrent->isAdministrator()) {
         $this->Message_AddErrorSingle($this->Lang_Get('talk.notices.not_found'), $this->Lang_Get('common.error.error'));
         return;
     }
     /**
      * Получаем список всех участников разговора
      */
     $aTalkUsers = $oTalk->getTalkUsers();
     /**
      * Получаем список пользователей, которые не принимают письма
      */
     $aUserInBlacklist = $this->Talk_GetBlacklistByTargetId($this->oUserCurrent->getId());
     /**
      * Ограничения на максимальное число участников разговора
      */
     if (count($aTalkUsers) >= Config::Get('module.talk.max_users') and !$this->oUserCurrent->isAdministrator()) {
         $this->Message_AddError($this->Lang_Get('talk.add.notices.users_error_many'), $this->Lang_Get('common.error.error'));
         return;
     }
     /**
      * Обрабатываем добавление по каждому переданному логину пользователя
      */
     foreach ($aUsers as $sUser) {
         $sUser = trim($sUser);
         if ($sUser == '') {
             continue;
         }
         /**
          * Попытка добавить себя
          */
         if (strtolower($sUser) == strtolower($this->oUserCurrent->getLogin())) {
             $aResult[] = array('bStateError' => true, 'sMsgTitle' => $this->Lang_Get('common.error.error'), 'sMsg' => $this->Lang_Get('user_list_add.notices.error_self'));
             continue;
         }
         if (($oUser = $this->User_GetUserByLogin($sUser)) && $oUser->getActivate() == 1) {
             if (!in_array($oUser->getId(), $aUserInBlacklist)) {
                 if (array_key_exists($oUser->getId(), $aTalkUsers)) {
                     switch ($aTalkUsers[$oUser->getId()]->getUserActive()) {
                         /**
                          * Если пользователь ранее был удален админом разговора, то добавляем его снова
                          */
                         case ModuleTalk::TALK_USER_DELETE_BY_AUTHOR:
                             if ($this->Talk_AddTalkUser(Engine::GetEntity('Talk_TalkUser', array('talk_id' => $idTalk, 'user_id' => $oUser->getId(), 'date_last' => null, 'talk_user_active' => ModuleTalk::TALK_USER_ACTIVE)))) {
                                 $this->Talk_SendNotifyTalkNew($oUser, $this->oUserCurrent, $oTalk);
                                 $oViewer = $this->Viewer_GetLocalViewer();
                                 $oViewer->Assign('user', $oUser, true);
                                 $oViewer->Assign('showActions', true, true);
                                 $aResult[] = array('bStateError' => false, 'sMsgTitle' => $this->Lang_Get('common.attention'), 'sMsg' => $this->Lang_Get('user_list_add.notices.success_add', array('login', htmlspecialchars($sUser))), 'user_id' => $oUser->getId(), 'user_login' => $oUser->getLogin(), 'html' => $oViewer->Fetch("component@talk.participants-item"));
                                 $bState = true;
                             } else {
                                 $aResult[] = array('bStateError' => true, 'sMsgTitle' => $this->Lang_Get('common.error.error'), 'sMsg' => $this->Lang_Get('common.error.system.base'));
                             }
                             break;
                             /**
                              * Если пользователь является активным участником разговора, возвращаем ошибку
                              */
                         /**
                          * Если пользователь является активным участником разговора, возвращаем ошибку
                          */
                         case ModuleTalk::TALK_USER_ACTIVE:
                             $aResult[] = array('bStateError' => true, 'sMsgTitle' => $this->Lang_Get('common.error.error'), 'sMsg' => $this->Lang_Get('user_list_add.notices.error_already_added', array('login' => htmlspecialchars($sUser))));
                             break;
                             /**
                              * Если пользователь удалил себя из разговора самостоятельно, то блокируем повторное добавление
                              */
                         /**
                          * Если пользователь удалил себя из разговора самостоятельно, то блокируем повторное добавление
                          */
                         case ModuleTalk::TALK_USER_DELETE_BY_SELF:
                             $aResult[] = array('bStateError' => true, 'sMsgTitle' => $this->Lang_Get('common.error.error'), 'sMsg' => $this->Lang_Get('talk.users.notices.deleted', array('login' => htmlspecialchars($sUser))));
                             break;
                         default:
                             $aResult[] = array('bStateError' => true, 'sMsgTitle' => $this->Lang_Get('common.error.error'), 'sMsg' => $this->Lang_Get('common.error.system.base'));
                     }
                 } elseif ($this->Talk_AddTalkUser(Engine::GetEntity('Talk_TalkUser', array('talk_id' => $idTalk, 'user_id' => $oUser->getId(), 'date_last' => null, 'talk_user_active' => ModuleTalk::TALK_USER_ACTIVE)))) {
                     $this->Talk_SendNotifyTalkNew($oUser, $this->oUserCurrent, $oTalk);
                     $oViewer = $this->Viewer_GetLocalViewer();
                     $oViewer->Assign('user', $oUser, true);
                     $oViewer->Assign('showActions', true, true);
                     $aResult[] = array('bStateError' => false, 'sMsgTitle' => $this->Lang_Get('common.attention'), 'sMsg' => $this->Lang_Get('user_list_add.notices.success_add', array('login', htmlspecialchars($sUser))), 'user_id' => $oUser->getId(), 'html' => $oViewer->Fetch("component@talk.participants-item"));
                     $bState = true;
                 } else {
                     $aResult[] = array('bStateError' => true, 'sMsgTitle' => $this->Lang_Get('common.error.error'), 'sMsg' => $this->Lang_Get('common.error.system.base'));
                 }
             } else {
                 /**
                  * Добавляем пользователь не принимает сообщения
                  */
                 $aResult[] = array('bStateError' => true, 'sMsgTitle' => $this->Lang_Get('common.error.error'), 'sMsg' => $this->Lang_Get('talk.blacklist.notices.blocked', array('login' => htmlspecialchars($sUser))));
             }
         } else {
             /**
              * Пользователь не найден в базе данных или не активен
              */
             $aResult[] = array('bStateError' => true, 'sMsgTitle' => $this->Lang_Get('common.error.error'), 'sMsg' => $this->Lang_Get('user.notices.not_found', array('login' => htmlspecialchars($sUser))));
         }
     }
     /**
      * Передаем во вьевер массив результатов обработки по каждому пользователю
      */
     $this->Viewer_AssignAjax('users', $aResult);
 }
예제 #15
0
 /**
  * Проверяет может ли пользователь публиковать на главной
  *
  * @param  Entity_User $oUser
  * @return bool
  */
 public function IsAllowPublishIndex(ModuleUser_EntityUser $oUser)
 {
     if ($oUser->isAdministrator()) {
         return true;
     }
     return false;
 }
 protected function EventAjaxEdit()
 {
     $this->Viewer_SetResponseAjax();
     $aTopicRequest = getRequest('topic');
     if (!(isset($aTopicRequest['id']) and $oTopic = $this->Topic_GetTopicById($aTopicRequest['id']))) {
         return $this->EventErrorDebug();
     }
     if (!$this->Topic_IsAllowTopicType($oTopic->getType())) {
         return $this->EventErrorDebug();
     }
     /**
      * Проверяем разрешено ли постить топик по времени
      */
     if (!isPost('is_draft') and !$oTopic->getPublishDraft() and !$this->ACL_CanPostTopicTime($this->oUserCurrent)) {
         $this->Message_AddErrorSingle($this->Lang_Get('topic.add.notices.time_limit'), $this->Lang_Get('common.error.error'));
         return;
     }
     /**
      * Если права на редактирование
      */
     if (!$this->ACL_IsAllowEditTopic($oTopic, $this->oUserCurrent)) {
         return $this->EventErrorDebug();
     }
     /**
      * Сохраняем старое значение идентификатора основного блога и всех блогов
      */
     $sBlogIdOld = $oTopic->getBlogId();
     $aBlogsIdOld = $oTopic->getBlogsId();
     $oTopic->_setDataSafe(getRequest('topic'));
     $oTopic->setProperties(getRequest('property'));
     $oTopic->setUserCreator($this->oUserCurrent);
     $oTopic->setUserIp(func_getIp());
     if (!$oTopic->getTags() or !$oTopic->getTypeObject()->getParam('allow_tags')) {
         $oTopic->setTags('');
     }
     /**
      * Публикуем или сохраняем в черновиках
      */
     $bSendNotify = false;
     if (!isset($_REQUEST['is_draft'])) {
         $oTopic->setPublish(1);
         if ($oTopic->getPublishDraft() == 0) {
             $oTopic->setPublishDraft(1);
             $oTopic->setDatePublish(date("Y-m-d H:i:s"));
             $bSendNotify = true;
         }
     } else {
         $oTopic->setPublish(0);
     }
     /**
      * Принудительный вывод на главную
      */
     if ($this->ACL_IsAllowTopicPublishIndex($this->oUserCurrent)) {
         if (isset($_REQUEST['topic']['topic_publish_index'])) {
             $oTopic->setPublishIndex(1);
         } else {
             $oTopic->setPublishIndex(0);
         }
     }
     /**
      * Принудительный запрет вывода на главную
      */
     if ($this->ACL_IsAllowTopicSkipIndex($this->oUserCurrent)) {
         if (isset($_REQUEST['topic']['topic_skip_index'])) {
             $oTopic->setSkipIndex(1);
         } else {
             $oTopic->setSkipIndex(0);
         }
     }
     /**
      * Запрет на комментарии к топику
      */
     $oTopic->setForbidComment(0);
     if (isset($_REQUEST['topic']['topic_forbid_comment'])) {
         $oTopic->setForbidComment(1);
     }
     /**
      * Дата редактирования контента
      */
     $oTopic->setDateEditContent(date('Y-m-d H:i:s'));
     $this->Hook_Run('topic_edit_validate_before', array('oTopic' => $oTopic));
     if ($oTopic->_Validate()) {
         $oBlog = $oTopic->getBlog();
         /**
          * Получаемый и устанавливаем разрезанный текст по тегу <cut>
          */
         if ($oTopic->getTypeObject()->getParam('allow_text')) {
             list($sTextShort, $sTextNew, $sTextCut) = $this->Text_Cut($oTopic->getTextSource());
             $oTopic->setCutText($sTextCut);
             // TODO: передача параметров в Topic_Parser пока не используется - нужно заменить на этот вызов все места с парсингом топика
             $oTopic->setText($this->Topic_Parser($sTextNew, $oTopic));
             if ($sTextShort != $sTextNew) {
                 $oTopic->setTextShort($this->Topic_Parser($sTextShort, $oTopic));
             } else {
                 $oTopic->setTextShort('');
             }
         } else {
             $oTopic->setCutText('');
             $oTopic->setText('');
             $oTopic->setTextShort('');
             $oTopic->setTextSource('');
         }
         $this->Hook_Run('topic_edit_before', array('oTopic' => $oTopic, 'oBlog' => $oBlog));
         /**
          * Сохраняем топик
          */
         if ($this->Topic_UpdateTopic($oTopic)) {
             $this->Hook_Run('topic_edit_after', array('oTopic' => $oTopic, 'oBlog' => $oBlog, 'bSendNotify' => &$bSendNotify));
             /**
              * Обновляем данные в комментариях, если топик был перенесен в новый блог
              */
             if ($sBlogIdOld != $oTopic->getBlogId()) {
                 $this->Comment_UpdateTargetParentByTargetId($oTopic->getBlogId(), 'topic', $oTopic->getId());
                 $this->Comment_UpdateTargetParentByTargetIdOnline($oTopic->getBlogId(), 'topic', $oTopic->getId());
             }
             /**
              * Обновляем количество топиков в блоге
              */
             if ($aBlogsIdOld != $oTopic->getBlogsId()) {
                 $this->Blog_RecalculateCountTopicByBlogId($aBlogsIdOld);
             }
             $this->Blog_RecalculateCountTopicByBlogId($oTopic->getBlogsId());
             /**
              * Добавляем событие в ленту
              */
             $this->Stream_write($oTopic->getUserId(), 'add_topic', $oTopic->getId(), $oTopic->getPublish() && $oBlog->getType() != 'close');
             /**
              * Рассылаем о новом топике подписчикам блога
              */
             if ($bSendNotify) {
                 $this->Topic_SendNotifyTopicNew($oTopic, $oTopic->getUser());
             }
             if (!$oTopic->getPublish() and !$this->oUserCurrent->isAdministrator() and $this->oUserCurrent->getId() != $oTopic->getUserId()) {
                 $sUrlRedirect = $oBlog->getUrlFull();
             } else {
                 $sUrlRedirect = $oTopic->getUrl();
             }
             $this->Viewer_AssignAjax('sUrlRedirect', $sUrlRedirect);
             $this->Message_AddNotice('Обновление прошло успешно', $this->Lang_Get('common.attention'));
         } else {
             $this->Message_AddErrorSingle($this->Lang_Get('common.error.system.base'));
         }
     } else {
         $this->Message_AddError($oTopic->_getValidateError(), $this->Lang_Get('common.error.error'));
     }
 }
예제 #17
0
 /**
  * Получаем массив идентификаторов блогов, которые являются закрытыми для пользователя
  *
  * @param  ModuleUser_EntityUser|null $oUser	Пользователь
  * @return array
  */
 public function GetInaccessibleBlogsByUser($oUser = null)
 {
     if ($oUser && $oUser->isAdministrator()) {
         return array();
     }
     $sUserId = $oUser ? $oUser->getId() : 'quest';
     if (false === ($aCloseBlogs = $this->Cache_Get("blog_inaccessible_user_{$sUserId}"))) {
         $aCloseBlogs = array_merge($this->oMapperBlog->GetHalfcloseBlogs(), $this->oMapperBlog->GetCloseBlogs());
         if ($oUser) {
             /**
              * Получаем массив идентификаторов блогов,
              * которые являются откытыми для данного пользователя
              */
             $aOpenBlogs = $this->GetBlogUsersByUserId($oUser->getId(), null, true);
             /**
              * Получаем закрытые блоги, где пользователь является автором
              */
             $aOwnerBlogs = $this->GetBlogsByFilter(array('type' => 'close', 'user_owner_id' => $oUser->getId()), array(), 1, 100, array());
             $aOwnerBlogs = array_keys($aOwnerBlogs['collection']);
             $aCloseBlogs = array_diff($aCloseBlogs, $aOpenBlogs, $aOwnerBlogs);
         }
         /**
          * Сохраняем в кеш
          */
         if ($oUser) {
             $this->Cache_Set($aCloseBlogs, "blog_inaccessible_user_{$sUserId}", array('blog_new', 'blog_update', "blog_relation_change_{$oUser->getId()}"), 60 * 60 * 24);
         } else {
             $this->Cache_Set($aCloseBlogs, "blog_inaccessible_user_{$sUserId}", array('blog_new', 'blog_update'), 60 * 60 * 24 * 3);
         }
     }
     return $aCloseBlogs;
 }
예제 #18
0
 /**
  * Добавление нового участника разговора (ajax)
  *
  */
 public function AjaxAddTalkUser()
 {
     // * Устанавливаем формат Ajax ответа
     E::ModuleViewer()->SetResponseAjax('json');
     $sUsers = F::GetRequestStr('users', null, 'post');
     $idTalk = F::GetRequestStr('idTalk', null, 'post');
     // * Если пользователь не авторизирован, возвращаем ошибку
     if (!E::ModuleUser()->IsAuthorization()) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('need_authorization'), E::ModuleLang()->Get('error'));
         return;
     }
     // * Если разговор не найден, или пользователь не является его автором (или админом), возвращаем ошибку
     if (!($oTalk = E::ModuleTalk()->GetTalkById($idTalk)) || $oTalk->getUserId() != $this->oUserCurrent->getId() && !$this->oUserCurrent->isAdministrator()) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('talk_not_found'), E::ModuleLang()->Get('error'));
         return;
     }
     // * Получаем список всех участников разговора
     $aTalkUsers = $oTalk->getTalkUsers();
     $aUsers = explode(',', $sUsers);
     // * Получаем список пользователей, которые не принимают письма
     $aUserInBlacklist = E::ModuleTalk()->GetBlacklistByTargetId($this->oUserCurrent->getId());
     // * Ограничения на максимальное число участников разговора
     if (count($aTalkUsers) >= Config::Get('module.talk.max_users') && !$this->oUserCurrent->isAdministrator()) {
         E::ModuleMessage()->AddError(E::ModuleLang()->Get('talk_create_users_error_many'), E::ModuleLang()->Get('error'));
         return;
     }
     // * Обрабатываем добавление по каждому переданному логину пользователя
     foreach ($aUsers as $sUser) {
         $sUser = trim($sUser);
         if ($sUser == '') {
             continue;
         }
         // * Попытка добавить себя
         if (strtolower($sUser) == strtolower($this->oUserCurrent->getLogin())) {
             $aResult[] = array('bStateError' => true, 'sMsgTitle' => E::ModuleLang()->Get('error'), 'sMsg' => E::ModuleLang()->Get('talk_speaker_add_self'));
             continue;
         }
         if (($oUser = E::ModuleUser()->GetUserByLogin($sUser)) && $oUser->getActivate() == 1) {
             if (!in_array($oUser->getId(), $aUserInBlacklist)) {
                 if (array_key_exists($oUser->getId(), $aTalkUsers)) {
                     switch ($aTalkUsers[$oUser->getId()]->getUserActive()) {
                         // * Если пользователь ранее был удален админом разговора, то добавляем его снова
                         case ModuleTalk::TALK_USER_DELETE_BY_AUTHOR:
                             if (E::ModuleTalk()->AddTalkUser(E::GetEntity('Talk_TalkUser', array('talk_id' => $idTalk, 'user_id' => $oUser->getId(), 'date_last' => null, 'talk_user_active' => ModuleTalk::TALK_USER_ACTIVE)))) {
                                 E::ModuleNotify()->SendTalkNew($oUser, $this->oUserCurrent, $oTalk);
                                 $aResult[] = array('bStateError' => false, 'sMsgTitle' => E::ModuleLang()->Get('attention'), 'sMsg' => E::ModuleLang()->Get('talk_speaker_add_ok', array('login', htmlspecialchars($sUser))), 'sUserId' => $oUser->getId(), 'sUserLogin' => $oUser->getLogin(), 'sUserLink' => $oUser->getUserWebPath(), 'sUserWebPath' => $oUser->getUserWebPath(), 'sUserAvatar48' => $oUser->getAvatarUrl(48));
                                 $bState = true;
                             } else {
                                 $aResult[] = array('bStateError' => true, 'sMsgTitle' => E::ModuleLang()->Get('error'), 'sMsg' => E::ModuleLang()->Get('system_error'));
                             }
                             break;
                             // * Если пользователь является активным участником разговора, возвращаем ошибку
                         // * Если пользователь является активным участником разговора, возвращаем ошибку
                         case ModuleTalk::TALK_USER_ACTIVE:
                             $aResult[] = array('bStateError' => true, 'sMsgTitle' => E::ModuleLang()->Get('error'), 'sMsg' => E::ModuleLang()->Get('talk_speaker_user_already_exist', array('login' => htmlspecialchars($sUser))));
                             break;
                             // * Если пользователь удалил себя из разговора самостоятельно, то блокируем повторное добавление
                         // * Если пользователь удалил себя из разговора самостоятельно, то блокируем повторное добавление
                         case ModuleTalk::TALK_USER_DELETE_BY_SELF:
                             $aResult[] = array('bStateError' => true, 'sMsgTitle' => E::ModuleLang()->Get('error'), 'sMsg' => E::ModuleLang()->Get('talk_speaker_delete_by_self', array('login' => htmlspecialchars($sUser))));
                             break;
                         default:
                             $aResult[] = array('bStateError' => true, 'sMsgTitle' => E::ModuleLang()->Get('error'), 'sMsg' => E::ModuleLang()->Get('system_error'));
                     }
                 } elseif (E::ModuleTalk()->AddTalkUser(E::GetEntity('Talk_TalkUser', array('talk_id' => $idTalk, 'user_id' => $oUser->getId(), 'date_last' => null, 'talk_user_active' => ModuleTalk::TALK_USER_ACTIVE)))) {
                     E::ModuleNotify()->SendTalkNew($oUser, $this->oUserCurrent, $oTalk);
                     $aResult[] = array('bStateError' => false, 'sMsgTitle' => E::ModuleLang()->Get('attention'), 'sMsg' => E::ModuleLang()->Get('talk_speaker_add_ok', array('login', htmlspecialchars($sUser))), 'sUserId' => $oUser->getId(), 'sUserLogin' => $oUser->getLogin(), 'sUserLink' => $oUser->getUserWebPath(), 'sUserWebPath' => $oUser->getUserWebPath(), 'sUserAvatar48' => $oUser->getAvatarUrl(48));
                     $bState = true;
                 } else {
                     $aResult[] = array('bStateError' => true, 'sMsgTitle' => E::ModuleLang()->Get('error'), 'sMsg' => E::ModuleLang()->Get('system_error'));
                 }
             } else {
                 // * Добавляем пользователь не принимает сообщения
                 $aResult[] = array('bStateError' => true, 'sMsgTitle' => E::ModuleLang()->Get('error'), 'sMsg' => E::ModuleLang()->Get('talk_user_in_blacklist', array('login' => htmlspecialchars($sUser))));
             }
         } else {
             // * Пользователь не найден в базе данных или не активен
             $aResult[] = array('bStateError' => true, 'sMsgTitle' => E::ModuleLang()->Get('error'), 'sMsg' => E::ModuleLang()->Get('user_not_found', array('login' => htmlspecialchars($sUser))));
         }
     }
     // * Передаем во вьевер массив результатов обработки по каждому пользователю
     E::ModuleViewer()->AssignAjax('aUsers', $aResult);
 }
예제 #19
0
 /**
  * Проверка на ограничение по времени на постинг на стене
  *
  * @param ModuleUser_EntityUser $oUser    Пользователь
  * @param ModuleWall_EntityWall $oWall    Объект сообщения на стене
  *
  * @return bool
  */
 public function CanAddWallTime($oUser, $oWall)
 {
     // * Для администраторов ограничение по времени не действует
     if ($oUser->isAdministrator() || $oUser->isModerator() || Config::Get('acl.create.wall.limit_time') == 0 || $oUser->getRating() >= Config::Get('acl.create.wall.limit_time_rating')) {
         return true;
     }
     if ($oWall->getUserId() == $oWall->getWallUserId()) {
         return true;
     }
     // * Получаем последнее сообщение
     $aWall = E::ModuleWall()->GetWall(array('user_id' => $oWall->getUserId()), array('id' => 'desc'), 1, 1, array());
     // * Если сообщений нет
     if ($aWall['count'] == 0) {
         return true;
     }
     $oWallLast = array_shift($aWall['collection']);
     $sDate = strtotime($oWallLast->getDateAdd());
     if ($sDate && time() - $sDate < Config::Get('acl.create.wall.limit_time')) {
         return false;
     }
     return true;
 }
예제 #20
0
 /**
  * Проверяет может ли пользователь создавать комментарии к инбоксу по времени
  *
  * @param  Entity_User $oUser
  * @return bool
  */
 public function CanPostTalkCommentTime(ModuleUser_EntityUser $oUser)
 {
     // Для администраторов ограничение по времени не действует
     if ($oUser->isAdministrator() or Config::Get('acl.create.talk_comment.limit_time') == 0 or $oUser->getRating() >= Config::Get('acl.create.talk_comment.limit_time_rating')) {
         return true;
     }
     /**
      * Проверяем, если топик опубликованный меньше чем acl.create.topic.limit_time секунд назад
      */
     $aTalkComments = $this->Comment_GetCommentsByUserId($oUser->getId(), 'talk', 1, 1);
     /**
      * Если комментариев не было
      */
     if (!is_array($aTalkComments) or $aTalkComments['count'] == 0) {
         return true;
     }
     $oComment = array_shift($aTalkComments['collection']);
     $sDate = strtotime($oComment->getDate());
     if ($sDate and time() - $sDate < Config::Get('acl.create.talk_comment.limit_time')) {
         return false;
     }
     return true;
 }
 /**
  * Обработка добавление комментария к топику через ajax
  */
 protected function AjaxAddComment()
 {
     $this->Viewer_SetResponseAjax();
     $isGuest = false;
     /**
      * Проверям авторизован ли пользователь
      */
     if (!$this->User_IsAuthorization()) {
         $this->oUserCurrent = $this->User_GetUserById(0);
         $isGuest = true;
         if (!Config::Get('plugin.guestcomments.enabled')) {
             $this->Message_AddErrorSingle($this->Lang_Get('need_authorization'), $this->Lang_Get('error'));
             return;
         }
         if (!func_check(getRequest("guest_name"), "text", 2, 20)) {
             $this->Message_AddErrorSingle($this->Lang_Get('plugin.guestcomments.error_name'), $this->Lang_Get('error'));
             return;
         }
         if (!func_check(getRequest("guest_email"), "mail")) {
             $this->Message_AddErrorSingle($this->Lang_Get('plugin.guestcomments.error_mail'), $this->Lang_Get('error'));
             return;
         }
         if (!isset($_SESSION['captcha_keystring']) or $_SESSION['captcha_keystring'] != strtolower(getRequest('captcha'))) {
             $this->Message_AddErrorSingle($this->Lang_Get('plugin.guestcomments.error_captcha'), $this->Lang_Get('error'));
             return;
         }
     }
     /**
      * Проверяем топик
      */
     if (!($oTopic = $this->Topic_GetTopicById(getRequest('cmt_target_id')))) {
         $this->Message_AddErrorSingle($this->Lang_Get('system_error'), $this->Lang_Get('error'));
         return;
     }
     /**
      * Возможность постить коммент в топик в черновиках
      */
     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'));
         return;
     }
     /**
      * Проверяем разрешено ли постить комменты
      */
     if (!$this->ACL_CanPostComment($this->oUserCurrent) and !$this->oUserCurrent->isAdministrator()) {
         $this->Message_AddErrorSingle($this->Lang_Get('topic_comment_acl'), $this->Lang_Get('error'));
         return;
     }
     /**
      * Проверяем разрешено ли постить комменты по времени
      */
     if (!$this->ACL_CanPostCommentTime($this->oUserCurrent) and !$this->oUserCurrent->isAdministrator()) {
         $this->Message_AddErrorSingle($this->Lang_Get('topic_comment_limit'), $this->Lang_Get('error'));
         return;
     }
     /**
      * Проверяем запрет на добавления коммента автором топика
      */
     if ($oTopic->getForbidComment()) {
         $this->Message_AddErrorSingle($this->Lang_Get('topic_comment_notallow'), $this->Lang_Get('error'));
         return;
     }
     /**
      * Проверяем текст комментария
      */
     if ($isGuest == true) {
         $sText = nl2br(strip_tags(getRequest('comment_text')));
     } else {
         $sText = $this->Text_Parser(getRequest('comment_text'));
     }
     if (!func_check($sText, 'text', 2, 10000)) {
         $this->Message_AddErrorSingle($this->Lang_Get('topic_comment_add_text_error'), $this->Lang_Get('error'));
         return;
     }
     /**
      * Проверям на какой коммент отвечаем
      */
     $sParentId = (int) getRequest('reply');
     if (!func_check($sParentId, 'id')) {
         $this->Message_AddErrorSingle($this->Lang_Get('system_error'), $this->Lang_Get('error'));
         return;
     }
     $oCommentParent = null;
     if ($sParentId != 0) {
         /**
          * Проверяем существует ли комментарий на который отвечаем
          */
         if (!($oCommentParent = $this->Comment_GetCommentById($sParentId))) {
             $this->Message_AddErrorSingle($this->Lang_Get('system_error'), $this->Lang_Get('error'));
             return;
         }
         /**
          * Проверяем из одного топика ли новый коммент и тот на который отвечаем
          */
         if ($oCommentParent->getTargetId() != $oTopic->getId()) {
             $this->Message_AddErrorSingle($this->Lang_Get('system_error'), $this->Lang_Get('error'));
             return;
         }
     } else {
         /**
          * Корневой комментарий
          */
         $sParentId = null;
     }
     /**
      * Проверка на дублирующий коммент
      */
     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'));
         return;
     }
     /**
      * Создаём коммент
      */
     $oCommentNew = Engine::GetEntity('Comment');
     $oCommentNew->setTargetId($oTopic->getId());
     $oCommentNew->setTargetType('topic');
     $oCommentNew->setTargetParentId($oTopic->getBlog()->getId());
     $oCommentNew->setUserId($this->oUserCurrent->getId());
     $oCommentNew->setText($sText);
     $oCommentNew->setDate(date("Y-m-d H:i:s"));
     $oCommentNew->setUserIp(func_getIp());
     $oCommentNew->setPid($sParentId);
     $oCommentNew->setTextHash(md5($sText));
     $oCommentNew->setPublish($oTopic->getPublish());
     if ($this->oUserCurrent->getId() == 0) {
         $oCommentNew->setGuestName(getRequest("guest_name"));
         $oCommentNew->setGuestEmail(getRequest("guest_email"));
         unset($_SESSION['captcha_keystring']);
     }
     /**
      * Добавляем коммент
      */
     $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));
         $this->Viewer_AssignAjax('sCommentId', $oCommentNew->getId());
         if ($oTopic->getPublish()) {
             /**
              * Добавляем коммент в прямой эфир если топик не в черновиках
              */
             $oCommentOnline = Engine::GetEntity('Comment_CommentOnline');
             $oCommentOnline->setTargetId($oCommentNew->getTargetId());
             $oCommentOnline->setTargetType($oCommentNew->getTargetType());
             $oCommentOnline->setTargetParentId($oCommentNew->getTargetParentId());
             $oCommentOnline->setCommentId($oCommentNew->getId());
             $this->Comment_AddCommentOnline($oCommentOnline);
         }
         /**
          * Сохраняем дату последнего коммента для юзера
          */
         $this->oUserCurrent->setDateCommentLast(date("Y-m-d H:i:s"));
         $this->User_Update($this->oUserCurrent);
         /**
          * Список емайлов на которые не нужно отправлять уведомление
          */
         $aExcludeMail = array($this->oUserCurrent->getMail());
         /**
          * Отправляем уведомление тому на чей коммент ответили
          */
         if ($oCommentParent and $oCommentParent->getUserId() != $oTopic->getUserId() and $oCommentNew->getUserId() != $oCommentParent->getUserId()) {
             $oUserAuthorComment = $oCommentParent->getUser();
             $aExcludeMail[] = $oUserAuthorComment->getMail();
             $this->Notify_SendCommentReplyToAuthorParentComment($oUserAuthorComment, $oTopic, $oCommentNew, $this->oUserCurrent);
         }
         /**
          * Отправка уведомления автору топика
          */
         $this->Subscribe_Send('topic_new_comment', $oTopic->getId(), 'notify.comment_new.tpl', $this->Lang_Get('notify_subject_comment_new'), array('oTopic' => $oTopic, 'oComment' => $oCommentNew, 'oUserComment' => $this->oUserCurrent), $aExcludeMail);
         /**
          * Добавляем событие в ленту
          */
         $this->Stream_write($oCommentNew->getUserId(), 'add_comment', $oCommentNew->getId(), $oTopic->getPublish() && $oTopic->getBlog()->getType() != 'close');
     } else {
         $this->Message_AddErrorSingle($this->Lang_Get('system_error'), $this->Lang_Get('error'));
     }
 }
 /**
  * Обработка добавление комментария
  *
  * @return bool
  */
 protected function SubmitComment()
 {
     /**
      * Проверям авторизован ли пользователь
      */
     if (!$this->User_IsAuthorization()) {
         $this->Message_AddErrorSingle($this->Lang_Get('need_authorization'), $this->Lang_Get('error'));
         return;
     }
     /* @var $oImage PluginLsgallery_ModuleImage_EntityImage */
     if (!($oImage = $this->PluginLsgallery_Image_GetImageById(getRequest('cmt_target_id')))) {
         $this->Message_AddErrorSingle($this->Lang_Get('system_error'), $this->Lang_Get('error'));
         return;
     }
     /* @var $oAlbum PluginLsgallery_ModuleAlbum_EntityAlbum */
     if (!($oAlbum = $this->PluginLsgallery_Album_GetAlbumById($oImage->getAlbumId()))) {
         $this->Message_AddErrorSingle($this->Lang_Get('system_error'), $this->Lang_Get('error'));
         return;
     }
     if (!$this->ACL_AllowViewAlbumImages($this->oUserCurrent, $oAlbum)) {
         $this->Message_AddErrorSingle($this->Lang_Get('system_error'), $this->Lang_Get('error'));
         return;
     }
     /**
      * Проверяем разрешено ли постить комменты
      */
     if (!$this->ACL_CanPostComment($this->oUserCurrent) and !$this->oUserCurrent->isAdministrator()) {
         $this->Message_AddErrorSingle($this->Lang_Get('topic_comment_acl'), $this->Lang_Get('error'));
         return;
     }
     /**
      * Проверяем разрешено ли постить комменты по времени
      */
     if (!$this->ACL_CanPostCommentTime($this->oUserCurrent) and !$this->oUserCurrent->isAdministrator()) {
         $this->Message_AddErrorSingle($this->Lang_Get('topic_comment_limit'), $this->Lang_Get('error'));
         return;
     }
     /**
      * Проверяем текст комментария
      */
     $sText = $this->Text_Parser(getRequest('comment_text'));
     if (!func_check($sText, 'text', 2, 10000)) {
         $this->Message_AddErrorSingle($this->Lang_Get('topic_comment_add_text_error'), $this->Lang_Get('error'));
         return;
     }
     /**
      * Проверям на какой коммент отвечаем
      */
     $sParentId = (int) getRequest('reply');
     if (!func_check($sParentId, 'id')) {
         $this->Message_AddErrorSingle($this->Lang_Get('system_error'), $this->Lang_Get('error'));
         return;
     }
     $oCommentParent = null;
     if ($sParentId != 0) {
         /**
          * Проверяем существует ли комментарий на который отвечаем
          */
         if (!($oCommentParent = $this->Comment_GetCommentById($sParentId))) {
             $this->Message_AddErrorSingle($this->Lang_Get('system_error'), $this->Lang_Get('error'));
             return;
         }
         /**
          * Проверяем из одного топика ли новый коммент и тот на который отвечаем
          */
         if ($oCommentParent->getTargetId() != $oImage->getId()) {
             $this->Message_AddErrorSingle($this->Lang_Get('system_error'), $this->Lang_Get('error'));
             return;
         }
     } else {
         /**
          * Корневой комментарий
          */
         $sParentId = null;
     }
     /**
      * Проверка на дублирующий коммент
      */
     if ($this->Comment_GetCommentUnique($oImage->getId(), 'image', $this->oUserCurrent->getId(), $sParentId, md5($sText))) {
         $this->Message_AddErrorSingle($this->Lang_Get('topic_comment_spam'), $this->Lang_Get('error'));
         return;
     }
     /**
      * Создаём коммент
      */
     $oCommentNew = Engine::GetEntity('Comment');
     $oCommentNew->setTargetId($oImage->getId());
     $oCommentNew->setTargetType('image');
     $oCommentNew->setTargetParentId($oImage->getAlbumId());
     $oCommentNew->setUserId($this->oUserCurrent->getId());
     $oCommentNew->setText($sText);
     $oCommentNew->setDate(date("Y-m-d H:i:s"));
     $oCommentNew->setUserIp(func_getIp());
     $oCommentNew->setPid($sParentId);
     $oCommentNew->setTextHash(md5($sText));
     $oCommentNew->setPublish(1);
     /**
      * Добавляем коммент
      */
     $this->Hook_Run('image_comment_add_before', array('oCommentNew' => $oCommentNew, 'oCommentParent' => $oCommentParent, 'oImage' => $oImage));
     if ($this->Comment_AddComment($oCommentNew)) {
         $this->Hook_Run('image_comment_add_after', array('oCommentNew' => $oCommentNew, 'oCommentParent' => $oCommentParent, 'oImage' => $oImage));
         $this->Viewer_AssignAjax('sCommentId', $oCommentNew->getId());
         $this->PluginLsgallery_Image_IncreaseImageCountComment($oCommentNew->getTargetId());
         $this->oUserCurrent->setDateCommentLast(date("Y-m-d H:i:s"));
         $this->User_Update($this->oUserCurrent);
     } else {
         $this->Message_AddErrorSingle($this->Lang_Get('system_error'), $this->Lang_Get('error'));
     }
 }
예제 #23
0
 /**
  * Возвращает доступные для создания пользователем типы контента
  *
  * @param ModuleUser_EntityUser $oUser
  *
  * @return ModuleTopic_EntityContentType[]
  */
 public function GetAllowContentTypeByUserId($oUser)
 {
     if ($oUser && ($oUser->isAdministrator() || $oUser->isModerator())) {
         // Для админа и модератора доступны все активные типы контента
         /** @var ModuleTopic_EntityContentType[] $aContentTypes */
         $aContentTypes = E::ModuleTopic()->GetContentTypes(array('content_active' => 1));
         return $aContentTypes;
     }
     // Получим все блоги пользователя
     $aBlogs = E::ModuleBlog()->GetBlogsAllowByUser($oUser, false);
     // Добавим персональный блог пользователю
     if ($oUser) {
         $aBlogs[] = E::ModuleBlog()->GetPersonalBlogByUserId($oUser->getId());
     }
     // Получим типы контента
     /** @var ModuleTopic_EntityContentType[] $aContentTypes */
     $aContentTypes = E::ModuleTopic()->GetContentTypes(array('content_active' => 1));
     $aAllowContentTypes = array();
     /** @var ModuleBlog_EntityBlog $oBlog */
     foreach ($aBlogs as $oBlog) {
         // Пропускаем блог, если в него нельзя добавлять топики
         if (!E::ModuleACL()->CanAddTopic($oUser, $oBlog)) {
             continue;
         }
         if ($aContentTypes) {
             foreach ($aContentTypes as $k => $oContentType) {
                 if ($oBlog->IsContentTypeAllow($oContentType->getContentUrl())) {
                     $aAllowContentTypes[] = $oContentType;
                     // Удалим, что бы повторное не проверять, ведь в каком-то
                     // блоге пользвоателя этот тип контента уже разрешён
                     unset($aContentTypes[$k]);
                 }
             }
         }
     }
     return $aAllowContentTypes;
 }
예제 #24
0
 /**
  * Получаем массив идентификаторов блогов, которые являются закрытыми для пользователя
  *
  * @param  ModuleUser_EntityUser|null $oUser    Пользователь
  *
  * @return array
  */
 public function GetInaccessibleBlogsByUser($oUser = null)
 {
     if ($oUser && ($oUser->isAdministrator() || $oUser->isModerator())) {
         return array();
     }
     $nUserId = $oUser ? $oUser->getId() : 0;
     $sCacheKey = 'blog_inaccessible_user_' . $nUserId;
     if (false === ($aCloseBlogsId = E::ModuleCache()->Get($sCacheKey))) {
         $aCloseBlogsId = $this->oMapper->GetCloseBlogsId($oUser);
         if ($oUser) {
             // * Получаем массив идентификаторов блогов, которые являются откытыми для данного пользователя
             $aOpenBlogsId = $this->GetBlogUsersByUserId($nUserId, null, true);
             // * Получаем закрытые блоги, где пользователь является автором
             $aCloseBlogTypes = $this->GetCloseBlogTypes($oUser);
             if ($aCloseBlogTypes) {
                 $aOwnerBlogs = $this->GetBlogsByFilter(array('type' => $aCloseBlogTypes, 'user_owner_id' => $nUserId), array(), 1, 1000, array());
                 $aOwnerBlogsId = array_keys($aOwnerBlogs['collection']);
                 $aCloseBlogsId = array_diff($aCloseBlogsId, $aOpenBlogsId, $aOwnerBlogsId);
             }
         }
         // * Сохраняем в кеш
         if ($oUser) {
             E::ModuleCache()->Set($aCloseBlogsId, $sCacheKey, array('blog_new', 'blog_update', "blog_relation_change_{$nUserId}"), 'P1D');
         } else {
             E::ModuleCache()->Set($aCloseBlogsId, $sCacheKey, array('blog_new', 'blog_update'), 'P3D');
         }
     }
     return $aCloseBlogsId;
 }
예제 #25
0
 /**
  * Обработка редактирования топика
  *
  * @param ModuleTopic_EntityTopic $oTopic
  *
  * @return mixed
  */
 protected function SubmitEdit($oTopic)
 {
     $oTopic->_setValidateScenario('topic');
     // * Сохраняем старое значение идентификатора блога
     $iBlogIdOld = $oTopic->getBlogId();
     // * Заполняем поля для валидации
     $iBlogId = F::GetRequestStr('blog_id');
     // if blog_id is empty then save blog not changed
     if (is_numeric($iBlogId)) {
         $oTopic->setBlogId($iBlogId);
     }
     // issue 151 (https://github.com/altocms/altocms/issues/151)
     // Некорректная обработка названия блога
     // $oTopic->setTitle(strip_tags(F::GetRequestStr('topic_title')));
     $oTopic->setTitle(E::ModuleTools()->RemoveAllTags(F::GetRequestStr('topic_title')));
     $oTopic->setTextSource(F::GetRequestStr('topic_text'));
     if ($this->oContentType->isAllow('link')) {
         $oTopic->setSourceLink(F::GetRequestStr('topic_field_link'));
     }
     $oTopic->setTags(F::GetRequestStr('topic_field_tags'));
     $oTopic->setUserIp(F::GetUserIp());
     if ($this->oUserCurrent && ($this->oUserCurrent->isAdministrator() || $this->oUserCurrent->isModerator())) {
         if (F::GetRequestStr('topic_url') && $oTopic->getTopicUrl() != F::GetRequestStr('topic_url')) {
             $sTopicUrl = E::ModuleTopic()->CorrectTopicUrl(F::TranslitUrl(F::GetRequestStr('topic_url')));
             $oTopic->setTopicUrl($sTopicUrl);
         }
     }
     // * Проверка корректности полей формы
     if (!$this->checkTopicFields($oTopic)) {
         return false;
     }
     // * Определяем в какой блог делаем запись
     $nBlogId = $oTopic->getBlogId();
     if ($nBlogId == 0) {
         $oBlog = E::ModuleBlog()->GetPersonalBlogByUserId($oTopic->getUserId());
     } else {
         $oBlog = E::ModuleBlog()->GetBlogById($nBlogId);
     }
     // * Если блог не определен выдаем предупреждение
     if (!$oBlog) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('topic_create_blog_error_unknown'), E::ModuleLang()->Get('error'));
         return false;
     }
     // * Проверяем права на постинг в блог
     if (!E::ModuleACL()->IsAllowBlog($oBlog, $this->oUserCurrent)) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('topic_create_blog_error_noallow'), E::ModuleLang()->Get('error'));
         return false;
     }
     // * Проверяем разрешено ли постить топик по времени
     if (isPost('submit_topic_publish') && !$oTopic->getPublishDraft() && !E::ModuleACL()->CanPostTopicTime($this->oUserCurrent)) {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('topic_time_limit'), E::ModuleLang()->Get('error'));
         return;
     }
     $oTopic->setBlogId($oBlog->getId());
     // * Получаемый и устанавливаем разрезанный текст по тегу <cut>
     list($sTextShort, $sTextNew, $sTextCut) = E::ModuleText()->Cut($oTopic->getTextSource());
     $oTopic->setCutText($sTextCut);
     $oTopic->setText(E::ModuleText()->Parser($sTextNew));
     // Получаем ссылки, полученные при парсинге текста
     $oTopic->setTextLinks(E::ModuleText()->GetLinks());
     $oTopic->setTextShort(E::ModuleText()->Parser($sTextShort));
     // * Изменяем вопрос/ответы, только если еще никто не голосовал
     if ($this->oContentType->isAllow('poll') && F::GetRequestStr('topic_field_question') && F::GetRequest('topic_field_answers', array()) && $oTopic->getQuestionCountVote() == 0) {
         $oTopic->setQuestionTitle(strip_tags(F::GetRequestStr('topic_field_question')));
         $oTopic->clearQuestionAnswer();
         $aAnswers = F::GetRequest('topic_field_answers', array());
         foreach ($aAnswers as $sAnswer) {
             $sAnswer = trim((string) $sAnswer);
             if ($sAnswer) {
                 $oTopic->addQuestionAnswer($sAnswer);
             }
         }
     }
     $aPhotoSetData = E::ModuleMresource()->GetPhotosetData('photoset', $oTopic->getId());
     $oTopic->setPhotosetCount($aPhotoSetData['count']);
     $oTopic->setPhotosetMainPhotoId($aPhotoSetData['cover']);
     // * Publish or save as a draft
     $bSendNotify = false;
     if (isset($_REQUEST['submit_topic_publish'])) {
         // If the topic has not been published then sets date of show (publication date)
         if (!$oTopic->getPublish() && !$oTopic->getDateShow()) {
             $oTopic->setDateShow(F::Now());
         }
         $oTopic->setPublish(1);
         if ($oTopic->getPublishDraft() == 0) {
             $oTopic->setPublishDraft(1);
             $oTopic->setDateAdd(F::Now());
             $bSendNotify = true;
         }
     } else {
         $oTopic->setPublish(0);
     }
     // * Принудительный вывод на главную
     if (E::ModuleACL()->IsAllowPublishIndex($this->oUserCurrent)) {
         if (F::GetRequest('topic_publish_index')) {
             $oTopic->setPublishIndex(1);
         } else {
             $oTopic->setPublishIndex(0);
         }
     }
     // * Запрет на комментарии к топику
     $oTopic->setForbidComment(F::GetRequest('topic_forbid_comment', 0));
     // Если запрет на индексацию не устанавливался вручную, то задаем, как у блога
     $oBlogType = $oBlog->GetBlogType();
     if ($oBlogType && !$oTopic->getIndexIgnoreLock()) {
         $oTopic->setTopicIndexIgnore($oBlogType->GetIndexIgnore());
     } else {
         $oTopic->setTopicIndexIgnore(false);
     }
     $oTopic->setShowPhotoset(F::GetRequest('topic_show_photoset', 0));
     E::ModuleHook()->Run('topic_edit_before', array('oTopic' => $oTopic, 'oBlog' => $oBlog));
     // * Сохраняем топик
     if ($this->_updateTopic($oTopic)) {
         E::ModuleHook()->Run('topic_edit_after', array('oTopic' => $oTopic, 'oBlog' => $oBlog, 'bSendNotify' => &$bSendNotify));
         // * Обновляем данные в комментариях, если топик был перенесен в новый блог
         if ($iBlogIdOld != $oTopic->getBlogId()) {
             E::ModuleComment()->UpdateTargetParentByTargetId($oTopic->getBlogId(), 'topic', $oTopic->getId());
             E::ModuleComment()->UpdateTargetParentByTargetIdOnline($oTopic->getBlogId(), 'topic', $oTopic->getId());
         }
         // * Обновляем количество топиков в блоге
         if ($iBlogIdOld != $oTopic->getBlogId()) {
             E::ModuleBlog()->RecalculateCountTopicByBlogId($iBlogIdOld);
         }
         E::ModuleBlog()->RecalculateCountTopicByBlogId($oTopic->getBlogId());
         // * Добавляем событие в ленту
         E::ModuleStream()->Write($oTopic->getUserId(), 'add_topic', $oTopic->getId(), $oTopic->getPublish() && (!$oBlogType || !$oBlog->getBlogType()->IsPrivate()));
         // * Рассылаем о новом топике подписчикам блога
         if ($bSendNotify) {
             E::ModuleTopic()->SendNotifyTopicNew($oBlog, $oTopic, $oTopic->getUser());
         }
         if (!$oTopic->getPublish() && !$this->oUserCurrent->isAdministrator() && !$this->oUserCurrent->isModerator() && $this->oUserCurrent->getId() != $oTopic->getUserId()) {
             R::Location($oBlog->getUrlFull());
         }
         R::Location($oTopic->getUrl());
     } else {
         E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'));
         F::SysWarning('System Error');
         return R::Action('error');
     }
 }
예제 #26
0
 /**
  * Is allow view images from album
  *
  * @param ModuleUser_EntityUser $oUser
  * @param PluginLsgallery_ModuleAlbum_EntityAlbum $oAlbum
  */
 public function AllowViewAlbumImages($oUser, $oAlbum)
 {
     if ($oAlbum->getType() == PluginLsgallery_ModuleAlbum_EntityAlbum::TYPE_OPEN) {
         return true;
     }
     if (!$oUser) {
         return false;
     }
     if ($oUser->isAdministrator()) {
         return true;
     }
     if ($oUser->getId() == $oAlbum->getUserId()) {
         return true;
     }
     if ($oAlbum->getTitle() == PluginLsgallery_ModuleAlbum_EntityAlbum::TYPE_PERSONAL) {
         return false;
     }
     if ($oAlbum->getType() == PluginLsgallery_ModuleAlbum_EntityAlbum::TYPE_FRIEND) {
         if ($oFriend = $this->User_GetFriend($oUser->getId(), $oAlbum->getUserId())) {
             if ($oFriend->getFriendStatus() == ModuleUser::USER_FRIEND_ACCEPT + ModuleUser::USER_FRIEND_ACCEPT || $oFriend->getFriendStatus() == ModuleUser::USER_FRIEND_ACCEPT + ModuleUser::USER_FRIEND_OFFER) {
                 return true;
             }
         }
     }
     return false;
 }
예제 #27
0
 /**
  * Получаем массив идентификаторов блогов, которые являются закрытыми для пользователя
  *
  * @param  ModuleUser_EntityUser|null $oUser	Пользователь
  * @return array
  */
 public function GetInaccessibleAlbumsByUser($oUser = null)
 {
     if ($oUser && $oUser->isAdministrator()) {
         return array();
     }
     $sUserId = $oUser ? $oUser->getId() : 'guest';
     if (false === ($aPrivateAlbums = $this->Cache_Get("album_inaccessible_user_{$sUserId}"))) {
         $aPrivateAlbums = $this->oMapper->GetCloseAlbums();
         if ($oUser) {
             $aOwnAlbums = $this->GetAlbumsPersonalByUser($oUser->getId());
             $aFriendsAlbums = array();
             $aFriends = $this->User_GetUsersFriend($this->oUserCurrent->getId());
             if ($aFriends['count']) {
                 $aFilter['album_type']['friend'] = array_keys($aFriends['collection']);
                 $aFriendsAlbums = $this->GetAlbumsByFilter($aFilter);
                 $aFriendsAlbums = array_keys($aFriendsAlbums['collection']);
             }
             $aOwnAlbums = array_keys($aOwnAlbums['collection']);
             $aPrivateAlbums = array_diff($aPrivateAlbums, $aOwnAlbums, $aFriendsAlbums);
         }
         /**
          * Сохраняем в кеш
          */
         if ($oUser) {
             $this->Cache_Set($aPrivateAlbums, "album_inaccessible_user_{$sUserId}", array('album_new', 'album_update', "friend_change_user_{$oUser->getId()}"), 60 * 60 * 24);
         } else {
             $this->Cache_Set($aPrivateAlbums, "album_inaccessible_user_{$sUserId}", array('album_new', 'album_update'), 60 * 60 * 24 * 3);
         }
     }
     return $aPrivateAlbums;
 }