예제 #1
0
 /**
  * Обновляет блог в БД
  *
  * @param ModuleBlog_EntityBlog $oBlog	Объект блога
  * @return bool
  */
 public function UpdateBlog(ModuleBlog_EntityBlog $oBlog)
 {
     $sql = "UPDATE " . Config::Get('db.table.blog') . " \n\t\t\tSET \n\t\t\t\tblog_title= ?,\n\t\t\t\tblog_description= ?,\n\t\t\t\tblog_type= ?,\n\t\t\t\tblog_date_edit= ?,\n\t\t\t\tblog_rating= ?f,\n\t\t\t\tblog_count_vote = ?d,\n\t\t\t\tblog_count_user= ?d,\n\t\t\t\tblog_count_topic= ?d,\n\t\t\t\tblog_limit_rating_topic= ?f ,\n\t\t\t\tblog_url= ?,\n\t\t\t\tblog_avatar= ?\n\t\t\tWHERE\n\t\t\t\tblog_id = ?d\n\t\t";
     if ($this->oDb->query($sql, $oBlog->getTitle(), $oBlog->getDescription(), $oBlog->getType(), $oBlog->getDateEdit(), $oBlog->getRating(), $oBlog->getCountVote(), $oBlog->getCountUser(), $oBlog->getCountTopic(), $oBlog->getLimitRatingTopic(), $oBlog->getUrl(), $oBlog->getAvatar(), $oBlog->getId())) {
         return true;
     }
     return false;
 }
예제 #2
0
    protected function updateCommunityCat(ModuleBlog_EntityBlog $oBlog)
    {
        $sql = 'UPDATE ' . Config::Get('db.table.blog') . ' 
			SET 
				blog_cat = ?
			WHERE
				blog_id = ?d';
        if ($this->oDb->query($sql, $oBlog->getCategory(), $oBlog->getId()) !== null) {
            return true;
        }
        return false;
    }
예제 #3
0
 /**
  * Выполняет отправку приглашения в блог 
  * (по внутренней почте и на email)
  *
  * @param ModuleBlog_EntityBlog $oBlog
  * @param ModuleUser_EntityUser $oUser
  */
 protected function SendBlogInvite($oBlog, $oUser)
 {
     $sTitle = $this->Lang_Get('blog_user_invite_title', array('blog_title' => $oBlog->getTitle()));
     require_once Config::Get('path.root.engine') . '/lib/external/XXTEA/encrypt.php';
     $sCode = $oBlog->getId() . '_' . $oUser->getId();
     $sCode = rawurlencode(base64_encode(xxtea_encrypt($sCode, Config::Get('module.blog.encrypt'))));
     $aPath = array('accept' => Router::GetPath('blog') . 'invite/accept/?code=' . $sCode, 'reject' => Router::GetPath('blog') . 'invite/reject/?code=' . $sCode);
     $sText = $this->Lang_Get('blog_user_invite_text', array('login' => $this->oUserCurrent->getLogin(), 'accept_path' => $aPath['accept'], 'reject_path' => $aPath['reject'], 'blog_title' => $oBlog->getTitle()));
     $oTalk = $this->Talk_SendTalk($sTitle, $sText, $this->oUserCurrent, array($oUser), false, false);
     /**
      * Отправляем пользователю заявку
      */
     $this->Notify_SendBlogUserInvite($oUser, $this->oUserCurrent, $oBlog, Router::GetPath('talk') . 'read/' . $oTalk->getId() . '/');
     /**
      * Удаляем отправляющего юзера из переписки
      */
     $this->Talk_DeleteTalkUserByArray($oTalk->getId(), $this->oUserCurrent->getId());
 }
예제 #4
0
 /**
  * Рассылает уведомления о новом топике подписчикам блога
  *
  * @param ModuleBlog_EntityBlog   $oBlog         Объект блога
  * @param ModuleTopic_EntityTopic $oTopic        Объект топика
  * @param ModuleUser_EntityUser   $oUserTopic    Объект пользователя
  */
 public function SendNotifyTopicNew($oBlog, $oTopic, $oUserTopic)
 {
     $aBlogUsersResult = E::ModuleBlog()->GetBlogUsersByBlogId($oBlog->getId(), null, null);
     // нужно постранично пробегаться по всем
     /** @var ModuleBlog_EntityBlogUser[] $aBlogUsers */
     $aBlogUsers = $aBlogUsersResult['collection'];
     foreach ($aBlogUsers as $oBlogUser) {
         if ($oBlogUser->getUserId() == $oUserTopic->getId()) {
             continue;
         }
         E::ModuleNotify()->SendTopicNewToSubscribeBlog($oBlogUser->getUser(), $oTopic, $oBlog, $oUserTopic);
     }
     //отправляем создателю блога
     if ($oBlog->getOwnerId() != $oUserTopic->getId()) {
         E::ModuleNotify()->SendTopicNewToSubscribeBlog($oBlog->getOwner(), $oTopic, $oBlog, $oUserTopic);
     }
 }
예제 #5
0
 /**
  * Проверка полей блога
  *
  * @param ModuleBlog_EntityBlog|null $oBlog
  *
  * @return bool
  */
 protected function checkBlogFields($oBlog = null)
 {
     $bOk = true;
     // * Проверяем есть ли название блога
     if (!F::CheckVal(F::GetRequestStr('blog_title'), 'text', 2, 200)) {
         E::ModuleMessage()->AddError(E::ModuleLang()->Get('blog_create_title_error'), E::ModuleLang()->Get('error'));
         $bOk = false;
     } else {
         // * Проверяем есть ли уже блог с таким названием
         if ($oBlogExists = E::ModuleBlog()->GetBlogByTitle(F::GetRequestStr('blog_title'))) {
             if (!$oBlog || $oBlog->getId() != $oBlogExists->getId()) {
                 E::ModuleMessage()->AddError(E::ModuleLang()->Get('blog_create_title_error_unique'), E::ModuleLang()->Get('error'));
                 $bOk = false;
             }
         }
     }
     return $bOk;
 }
예제 #6
0
 /**
  * Получает число новых топиков из блога
  *
  * @param ModuleBlog_EntityBlog $oBlog Объект блога
  * @return int
  */
 public function GetCountTopicsByBlogNew($oBlog)
 {
     $sDate = date("Y-m-d H:00:00", time() - Config::Get('module.topic.new_time'));
     $aFilter = array('topic_publish' => 1, 'blog_id' => $oBlog->getId(), 'topic_new' => $sDate);
     return $this->GetCountTopicsByFilter($aFilter);
 }
예제 #7
0
 /**
  * Рассылает уведомления о новом топике подписчикам блога
  *
  * @param ModuleBlog_EntityBlog $oBlog	Объект блога
  * @param ModuleTopic_EntityTopic $oTopic	Объект топика
  * @param ModuleUser_EntityUser $oUserTopic	Объект пользователя
  */
 public function SendNotifyTopicNew($oBlog, $oTopic, $oUserTopic)
 {
     $aBlogUsersResult = $this->Blog_GetBlogUsersByBlogId($oBlog->getId(), null, null);
     // нужно постранично пробегаться по всем
     $aBlogUsers = $aBlogUsersResult['collection'];
     foreach ($aBlogUsers as $oBlogUser) {
         if ($oBlogUser->getUserId() == $oUserTopic->getId()) {
             continue;
         }
         $this->Notify_SendTopicNewToSubscribeBlog($oBlogUser->getUser(), $oTopic, $oBlog, $oUserTopic);
     }
     //отправляем создателю блога
     if ($oBlog->getOwnerId() != $oUserTopic->getId()) {
         $this->Notify_SendTopicNewToSubscribeBlog($oBlog->getOwner(), $oTopic, $oBlog, $oUserTopic);
     }
 }
예제 #8
0
 /**
  * Проверяет может ли пользователь голосовать за конкретный блог
  *
  * @param Entity_User $oUser
  * @param Entity_Blog $oBlog
  * @return bool
  */
 public function CanVoteBlog(ModuleUser_EntityUser $oUser, ModuleBlog_EntityBlog $oBlog)
 {
     /**
      * Если блог закрытый, проверяем является ли пользователь его читателем
      */
     if ($oBlog->getType() == 'close') {
         $oBlogUser = $this->Blog_GetBlogUserByBlogIdAndUserId($oBlog->getId(), $oUser->getId());
         if (!$oBlogUser || $oBlogUser->getUserRole() < ModuleBlog::BLOG_USER_ROLE_GUEST) {
             return self::CAN_VOTE_BLOG_ERROR_CLOSE;
         }
     }
     if ($oUser->getRating() >= Config::Get('acl.vote.blog.rating')) {
         return self::CAN_VOTE_BLOG_TRUE;
     }
     return self::CAN_VOTE_BLOG_FALSE;
 }
예제 #9
0
 /**
  * Вспомогательный метод проверки прав пользователя блога
  *
  * @param ModuleBlog_EntityBlog $oBlog
  * @param ModuleUser_EntityUser $oUser
  * @param string                $sRights
  *
  * @return bool
  */
 protected function _checkBlogUserRights($oBlog, $oUser, $sRights)
 {
     $sUserRole = '';
     $bCurrentUser = false;
     $bResult = false;
     if (!$oBlog) {
         return false;
     }
     // Если пользователь не передан, то берется текущий
     if (!$oUser) {
         if ($oUser = E::ModuleUser()->GetUserCurrent()) {
             $bCurrentUser = true;
         } else {
             return false;
         }
     } elseif (E::ModuleUser()->GetUserCurrent() && E::ModuleUser()->GetUserCurrent()->getId() == $oUser->getId()) {
         $bCurrentUser = true;
     }
     $sCacheKey = 'acl_blog_user_rights' . serialize(array($oBlog->GetId(), $oUser ? $oUser->GetId() : 0, $bCurrentUser, $sRights));
     // Сначала проверяем кеш
     if (is_int($xCacheResult = E::ModuleCache()->Get($sCacheKey, 'tmp'))) {
         return $xCacheResult;
     }
     if ($bCurrentUser) {
         // Blog owner has any rights
         if ($oBlog->getUserOwnerId() == $oUser->getId()) {
             return true;
         }
         // * Для авторизованного пользователя данный код будет работать быстрее
         if ($oBlog->getUserIsAdministrator()) {
             $sUserRole = 'administrator';
         } elseif ($oBlog->getUserIsModerator()) {
             $sUserRole = 'moderator';
         }
     } else {
         $oBlogUser = E::ModuleBlog()->GetBlogUserByBlogIdAndUserId($oBlog->getId(), $oUser->getId());
         if ($oBlogUser) {
             if ($oBlogUser->IsBlogAdministrator()) {
                 $sUserRole = 'administrator';
             } elseif ($oBlogUser->IsBlogModerator()) {
                 $sUserRole = 'moderator';
             }
         }
     }
     if ($sUserRole) {
         $aUserRights = $this->GetUserRights('blogs', $sUserRole);
         $bResult = isset($aUserRights[$sRights]) && (bool) $aUserRights[$sRights];
     }
     E::ModuleCache()->Set($sCacheKey, $bResult ? 1 : 0, array('blog_update', 'user_update'), 0, 'tmp');
     return $bResult;
 }
예제 #10
0
 /**
  * Выполняет отправку приглашения в блог
  * (по внутренней почте и на email)
  *
  * @param ModuleBlog_EntityBlog $oBlog
  * @param ModuleUser_EntityUser $oUser
  */
 protected function SendBlogInvite($oBlog, $oUser)
 {
     $sTitle = E::ModuleLang()->Get('blog_user_invite_title', array('blog_title' => $oBlog->getTitle()));
     F::IncludeLib('XXTEA/encrypt.php');
     //  Формируем код подтверждения в URL
     $sCode = $oBlog->getId() . '_' . $oUser->getId();
     $sCode = rawurlencode(base64_encode(xxtea_encrypt($sCode, Config::Get('module.blog.encrypt'))));
     $aPath = array('accept' => R::GetPath('blog') . 'invite/accept/?code=' . $sCode, 'reject' => R::GetPath('blog') . 'invite/reject/?code=' . $sCode);
     // Сформируем название типа блога на языке приложения.
     // Это может быть либо название, либо текстовка.
     $sBlogType = mb_strtolower(preg_match('~^\\{\\{(.*)\\}\\}$~', $sBlogType = $oBlog->getBlogType()->getTypeName(), $aMatches) ? E::ModuleLang()->Get($aMatches[1]) : $sBlogType, 'UTF-8');
     $sText = E::ModuleLang()->Get('blog_user_invite_text', array('login' => $this->oUserCurrent->getLogin(), 'accept_path' => $aPath['accept'], 'reject_path' => $aPath['reject'], 'blog_title' => $oBlog->getTitle(), 'blog_type' => $sBlogType));
     $oTalk = E::ModuleTalk()->SendTalk($sTitle, $sText, $this->oUserCurrent, array($oUser), false, false);
     //  Отправляем пользователю заявку
     E::ModuleNotify()->SendBlogUserInvite($oUser, $this->oUserCurrent, $oBlog, R::GetPath('talk') . 'read/' . $oTalk->getId() . '/');
     //  Удаляем отправляющего юзера из переписки
     E::ModuleTalk()->DeleteTalkUserByArray($oTalk->getId(), $this->oUserCurrent->getId());
 }
예제 #11
0
 /**
  * Загружает аватар в блог
  *
  * @param array                 $aFile - Массив $_FILES при загрузке аватара
  * @param ModuleBlog_EntityBlog $oBlog - Блог
  *
  * @return bool
  */
 public function UploadBlogAvatar($aFile, $oBlog)
 {
     $sTmpFile = E::ModuleUploader()->UploadLocal($aFile);
     if ($sTmpFile && ($oImg = E::ModuleImg()->CropSquare($sTmpFile))) {
         if ($sTmpFile = $oImg->Save($sTmpFile)) {
             if ($oStoredFile = E::ModuleUploader()->StoreImage($sTmpFile, 'blog_avatar', $oBlog->getId())) {
                 return $oStoredFile->GetUrl();
             }
         }
     }
     // * В случае ошибки, возвращаем false
     return false;
 }
예제 #12
0
 /**
  * Проверяет можно или нет пользователю управлять пользователями блога
  *
  * @param  ModuleBlog_EntityBlog $oBlog	Блог
  * @param  ModuleUser_EntityUser $oUser	Пользователь
  * @return bool
  */
 public function IsAllowAdminBlog($oBlog, $oUser)
 {
     if ($oUser->isAdministrator()) {
         return true;
     }
     /**
      * Разрешаем если это создатель блога
      */
     if ($oBlog->getOwnerId() == $oUser->getId()) {
         return true;
     }
     /**
      * Явлется ли авторизованный пользователь администратором блога
      */
     $oBlogUser = $this->Blog_GetBlogUserByBlogIdAndUserId($oBlog->getId(), $oUser->getId());
     if ($oBlogUser && $oBlogUser->getIsAdministrator()) {
         return true;
     }
     return false;
 }
예제 #13
0
 /**
  * Обновляет блог в БД
  *
  * @param ModuleBlog_EntityBlog $oBlog    Объект блога
  *
  * @return bool
  */
 public function UpdateBlog($oBlog)
 {
     $sql = "\n            UPDATE ?_blog\n            SET\n                blog_title = ?,\n                blog_description = ?,\n                blog_type = ?,\n                blog_date_edit = ?,\n                blog_rating = ?f,\n                blog_count_vote = ?d,\n                blog_count_user = ?d,\n                blog_count_topic = ?d,\n                blog_limit_rating_topic = ?f ,\n                blog_url = ?,\n                blog_avatar = ?\n            WHERE\n                blog_id = ?d\n        ";
     $bResult = $this->oDb->query($sql, $oBlog->getTitle(), $oBlog->getDescription(), $oBlog->getType(), $oBlog->getDateEdit(), $oBlog->getRating(), $oBlog->getCountVote(), $oBlog->getCountUser(), $oBlog->getCountTopic(), $oBlog->getLimitRatingTopic(), $oBlog->getUrl(), $oBlog->getAvatar(), $oBlog->getId());
     return $bResult !== false;
 }
예제 #14
0
 /**
  * Проверяет можно или нет пользователю удалять данный блог
  *
  * @param ModuleBlog_EntityBlog $oBlog    Блог
  * @param ModuleUser_EntityUser $oUser    Пользователь
  *
  * @return bool|int
  */
 public function IsAllowDeleteBlog($oBlog, $oUser)
 {
     // * Разрешаем если это админ сайта
     if ($oUser->isAdministrator() || $oUser->isModerator()) {
         return self::CAN_DELETE_BLOG_WITH_TOPICS;
     }
     // * Разрешаем владелецу, но только пустой
     if ($oBlog->getOwnerId() == $oUser->getId()) {
         return self::CAN_DELETE_BLOG_EMPTY_ONLY;
     }
     $oBlogUser = E::ModuleBlog()->GetBlogUserByBlogIdAndUserId($oBlog->getId(), $oUser->getId());
     if ($oBlogUser && $oBlogUser->IsBlogAdministrator()) {
         return self::CAN_DELETE_BLOG_EMPTY_ONLY;
     }
     return false;
 }
예제 #15
0
 /**
  * Загружает аватар в блог
  *
  * @param array $aFile	Массив $_FILES при загрузке аватара
  * @param ModuleBlog_EntityBlog $oBlog	Блог
  * @return bool
  */
 public function UploadBlogAvatar($aFile, $oBlog)
 {
     if (!is_array($aFile) || !isset($aFile['tmp_name'])) {
         return false;
     }
     $sFileTmp = Config::Get('sys.cache.dir') . func_generator();
     if (!move_uploaded_file($aFile['tmp_name'], $sFileTmp)) {
         return false;
     }
     $sPath = $this->Image_GetIdDir($oBlog->getOwnerId()) . "blogs/" . $oBlog->getId() . "/";
     $aParams = $this->Image_BuildParams('avatar');
     $oImage = $this->Image_CreateImageObject($sFileTmp);
     /**
      * Если объект изображения не создан,
      * возвращаем ошибку
      */
     if ($sError = $oImage->get_last_error()) {
         // Вывод сообщения об ошибки, произошедшей при создании объекта изображения
         // $this->Message_AddError($sError,$this->Lang_Get('error'));
         @unlink($sFileTmp);
         return false;
     }
     /**
      * Срезаем квадрат
      */
     $oImage = $this->Image_CropSquare($oImage);
     $aSize = Config::Get('module.blog.avatar_size');
     rsort($aSize, SORT_NUMERIC);
     $sSizeBig = array_shift($aSize);
     if ($oImage && ($sFileAvatar = $this->Image_Resize($sFileTmp, $sPath, "avatar_blog_{$oBlog->getUrl()}_{$sSizeBig}x{$sSizeBig}", Config::Get('view.img_max_width'), Config::Get('view.img_max_height'), $sSizeBig, $sSizeBig, false, $aParams, $oImage))) {
         foreach ($aSize as $iSize) {
             if ($iSize == 0) {
                 $this->Image_Resize($sFileTmp, $sPath, "avatar_blog_{$oBlog->getUrl()}", Config::Get('view.img_max_width'), Config::Get('view.img_max_height'), null, null, false, $aParams, $oImage);
             } else {
                 $this->Image_Resize($sFileTmp, $sPath, "avatar_blog_{$oBlog->getUrl()}_{$iSize}x{$iSize}", Config::Get('view.img_max_width'), Config::Get('view.img_max_height'), $iSize, $iSize, false, $aParams, $oImage);
             }
         }
         @unlink($sFileTmp);
         /**
          * Если все нормально, возвращаем расширение загруженного аватара
          */
         return $this->Image_GetWebPath($sFileAvatar);
     }
     @unlink($sFileTmp);
     /**
      * В случае ошибки, возвращаем false
      */
     return false;
 }
예제 #16
0
 /**
  * Обновляет блог в БД
  *
  * @param ModuleBlog_EntityBlog $oBlog Объект блога
  * @return bool
  */
 public function UpdateBlog(ModuleBlog_EntityBlog $oBlog)
 {
     $sql = "UPDATE " . Config::Get('db.table.blog') . "\n\t\t\tSET \n\t\t\t\tblog_title= ?,\n\t\t\t\tblog_description= ?,\n\t\t\t\tblog_type= ?,\n\t\t\t\tblog_date_edit= ?,\n\t\t\t\tblog_count_vote = ?d,\n\t\t\t\tblog_count_user= ?d,\n\t\t\t\tblog_count_topic= ?d,\n\t\t\t\tblog_limit_rating_topic= ?f ,\n\t\t\t\tblog_url= ?,\n\t\t\t\tblog_skip_index= ?d,\n\t\t\t\tblog_avatar= ?\n\t\t\tWHERE\n\t\t\t\tblog_id = ?d\n\t\t";
     $res = $this->oDb->query($sql, $oBlog->getTitle(), $oBlog->getDescription(), $oBlog->getType(), $oBlog->getDateEdit(), $oBlog->getCountVote(), $oBlog->getCountUser(), $oBlog->getCountTopic(), $oBlog->getLimitRatingTopic(), $oBlog->getUrl(), $oBlog->getSkipIndex(), $oBlog->getAvatar(), $oBlog->getId());
     return $this->IsSuccessful($res);
 }