Пример #1
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;
    }
Пример #2
0
 /**
  * Расчет рейтинга и силы при голосовании за блог
  *
  * @param ModuleUser_EntityUser $oUser Объект пользователя, который голосует
  * @param ModuleBlog_EntityBlog $oBlog Объект блога
  * @param int $iValue
  *
  * @return int
  */
 public function VoteBlog($oUser, $oBlog, $iValue)
 {
     if (!C::Get('plugin.simplerating.blog.vote')) {
         return 0;
     }
     if (!C::Get('plugin.simplerating.blog.dislike') && $iValue < 0) {
         return 0;
     }
     /**
      * Устанавливаем рейтинг блога
      */
     $oBlog->setRating((double) $oBlog->getRating() + $iValue * (double) C::Get('plugin.simplerating.blog.add'));
     /**
      * Убавляем рейтинг голосующего, если нужно
      */
     if (C::Get('plugin.simplerating.blog_user_remove')) {
         $oUser->setRating((double) $oUser->getRating() + (double) C::Get('plugin.simplerating.blog.user_remove'));
         $this->User_Update($oUser);
     }
     return (double) C::Get('plugin.simplerating.blog.add');
 }
Пример #3
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;
 }
Пример #4
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;
 }
Пример #5
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;
 }
Пример #6
0
 /**
  * Обновляет блог
  *
  * @param ModuleBlog_EntityBlog $oBlog
  * @return unknown
  */
 public function UpdateBlog(ModuleBlog_EntityBlog $oBlog)
 {
     $oBlog->setDateEdit(date("Y-m-d H:i:s"));
     $res = $this->oMapperBlog->UpdateBlog($oBlog);
     if ($res) {
         //чистим зависимые кеши
         $this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array('blog_update', "blog_update_{$oBlog->getId()}", "topic_update"));
         $this->Cache_Delete("blog_{$oBlog->getId()}");
         return true;
     }
     return false;
 }
Пример #7
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);
     }
 }
Пример #8
0
 /**
  * Отправляет юзеру уведомление о новом топике в блоге, в котором он состоит
  *
  * @param ModuleUser_EntityUser $oUserTo Объект пользователя кому отправляем
  * @param ModuleTopic_EntityTopic $oTopic Объект топика
  * @param ModuleBlog_EntityBlog $oBlog Объект блога
  * @param ModuleUser_EntityUser $oUserTopic Объект пользователя, написавшего топик
  * @return bool
  */
 public function SendNotifyTopicNewToSubscribeBlog(ModuleUser_EntityUser $oUserTo, ModuleTopic_EntityTopic $oTopic, ModuleBlog_EntityBlog $oBlog, ModuleUser_EntityUser $oUserTopic)
 {
     /**
      * Проверяем можно ли юзеру рассылать уведомление
      */
     if (!$oUserTo->getSettingsNoticeNewTopic()) {
         return false;
     }
     $this->Notify_Send($oUserTo, 'topic_new.tpl', $this->Lang_Get('emails.topic_new.subject') . ' «' . htmlspecialchars($oBlog->getTitle()) . '»', array('oUserTo' => $oUserTo, 'oTopic' => $oTopic, 'oBlog' => $oBlog, 'oUserTopic' => $oUserTopic));
     return true;
 }
Пример #9
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;
 }
Пример #10
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;
 }
Пример #11
0
 /**
  * Расчет рейтинга и силы при голосовании за блог
  *
  * @param ModuleUser_EntityUser $oUser	Объект пользователя, который голосует
  * @param ModuleBlog_EntityBlog $oBlog	Объект блога
  * @param int $iValue
  * @return int
  */
 public function VoteBlog(ModuleUser_EntityUser $oUser, ModuleBlog_EntityBlog $oBlog, $iValue)
 {
     $oBlog->setRating($oBlog->getRating() + $iValue);
     return $iValue;
 }
Пример #12
0
 /**
  * Удаляет аватар блога с сервера
  *
  * @param ModuleBlog_EntityBlog $oBlog	Блог
  */
 public function DeleteBlogAvatar($oBlog)
 {
     /**
      * Если аватар есть, удаляем его и его рейсайзы
      */
     if ($oBlog->getAvatar()) {
         $aSize = array_merge(Config::Get('module.blog.avatar_size'), array(48));
         foreach ($aSize as $iSize) {
             $this->Image_RemoveFile($this->Image_GetServerPath($oBlog->getAvatarPath($iSize)));
         }
     }
 }
Пример #13
0
 /**
  * Удаляет аватар блога с сервера
  *
  * @param ModuleBlog_EntityBlog $oBlog Блог
  */
 public function DeleteBlogAvatar($oBlog)
 {
     /**
      * Если аватар есть, удаляем его и его рейсайзы
      */
     if ($oBlog->getAvatar()) {
         $this->Media_RemoveImageBySizes($oBlog->getAvatar(), Config::Get('module.blog.avatar_size'));
     }
     $oBlog->setAvatar(null);
 }
Пример #14
0
 /**
  * Расчет рейтинга и силы при голосовании за блог
  *
  * @param ModuleUser_EntityUser $oUser    Объект пользователя, который голосует
  * @param ModuleBlog_EntityBlog $oBlog    Объект блога
  * @param int                   $iValue
  *
  * @return int
  */
 public function VoteBlog($oUser, $oBlog, $iValue)
 {
     if (!C::Get('plugin.rating.blog.vote')) {
         return 0;
     }
     if (!C::Get('plugin.rating.blog.dislike') && $iValue < 0) {
         return 0;
     }
     /**
      * Устанавливаем рейтинг блога, используя логарифмическое распределение
      */
     $skill = $oUser->getSkill();
     $iMinSize = C::Get('plugin.rating.blog.min_change');
     //1.13;
     $iMaxSize = C::Get('plugin.rating.blog.max_change');
     //15;
     $iSizeRange = $iMaxSize - $iMinSize;
     $iMinCount = log(0 + 1);
     $iMaxCount = log(C::Get('plugin.rating.blog.max_rating') + 1);
     //500
     $iCountRange = $iMaxCount - $iMinCount;
     if ($iCountRange == 0) {
         $iCountRange = 1;
     }
     if ($skill > C::Get('plugin.rating.blog.left_border') and $skill < C::Get('plugin.rating.blog.right_border')) {
         //50-200
         $skill_new = $skill / C::Get('plugin.rating.blog.mid_divider');
         //20;
     } elseif ($skill >= C::Get('plugin.rating.blog.right_border')) {
         //200
         $skill_new = $skill / C::Get('plugin.rating.blog.right_divider');
         //10;
     } else {
         $skill_new = $skill / C::Get('plugin.rating.blog.left_divider');
         //50;
     }
     $iDelta = $iMinSize + (log($skill_new + 1) - $iMinCount) * ($iSizeRange / $iCountRange);
     /**
      * Сохраняем рейтинг
      */
     $oBlog->setRating($oBlog->getRating() + $iValue * $iDelta);
     return $iValue * $iDelta;
 }
Пример #15
0
 /**
  * Расчет рейтинга и силы при голосовании за блог
  *
  * @param ModuleUser_EntityUser $oUser Объект пользователя, который голосует
  * @param ModuleBlog_EntityBlog $oBlog Объект блога
  * @param int $iValue
  * @return int
  */
 public function VoteBlog(ModuleUser_EntityUser $oUser, ModuleBlog_EntityBlog $oBlog, $iValue)
 {
     /**
      * Устанавливаем рейтинг блога, используя логарифмическое распределение
      */
     $skill = $oUser->getSkill();
     $iMinSize = 1.13;
     $iMaxSize = 15;
     $iSizeRange = $iMaxSize - $iMinSize;
     $iMinCount = log(0 + 1);
     $iMaxCount = log(500 + 1);
     $iCountRange = $iMaxCount - $iMinCount;
     if ($iCountRange == 0) {
         $iCountRange = 1;
     }
     if ($skill > 50 and $skill < 200) {
         $skill_new = $skill / 20;
     } elseif ($skill >= 200) {
         $skill_new = $skill / 10;
     } else {
         $skill_new = $skill / 50;
     }
     $iDelta = $iMinSize + (log($skill_new + 1) - $iMinCount) * ($iSizeRange / $iCountRange);
     /**
      * Сохраняем рейтинг
      */
     $oBlog->setRating($oBlog->getRating() + $iValue * $iDelta);
     return $iValue * $iDelta;
 }
Пример #16
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);
     }
 }
Пример #17
0
 /**
  * Удаляет аватар блога с сервера
  *
  * @param ModuleBlog_EntityBlog $oBlog    Блог
  */
 public function DeleteAvatar($oBlog)
 {
     if ($oBlog) {
         // * Если аватар есть, удаляем его и его рейсайзы (старая схема)
         if ($sUrl = $oBlog->getAvatar()) {
             E::ModuleImg()->Delete(E::ModuleUploader()->Url2Dir($sUrl));
         }
         // Deletes blog avatar from media resources
         E::ModuleMresource()->DeleteMresourcesRelByTarget('blog_avatar', $oBlog->getid());
     }
 }
Пример #18
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;
 }
Пример #19
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());
 }
Пример #20
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());
 }
Пример #21
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);
 }