예제 #1
0
 /**
  * Deletes user
  *
  * @return bool
  */
 protected function _eventUsersCmdDelete()
 {
     E::ModuleSecurity()->ValidateSendForm();
     $aUsersId = F::Str2Array(F::GetRequest('adm_user_list'), ',', true);
     $bResult = true;
     foreach ($aUsersId as $iUserId) {
         if ($iUserId == $this->oUserCurrent->GetId()) {
             E::ModuleMessage()->AddError(E::ModuleLang()->Get('action.admin.cannot_del_self'), null, true);
             $bResult = false;
             break;
         } elseif ($oUser = E::ModuleUser()->GetUserById($iUserId)) {
             if ($oUser->IsAdministrator()) {
                 E::ModuleMessage()->AddError(E::ModuleLang()->Get('action.admin.cannot_del_admin'), null, true);
                 $bResult = false;
                 break;
             } elseif (!F::GetRequest('adm_user_del_confirm') && !F::GetRequest('adm_bulk_confirm')) {
                 E::ModuleMessage()->AddError(E::ModuleLang()->Get('action.admin.cannot_del_confirm'), null, true);
                 $bResult = false;
                 break;
             } else {
                 E::ModuleAdmin()->DelUser($oUser->GetId());
                 E::ModuleMessage()->AddNotice(E::ModuleLang()->Get('action.admin.user_deleted', array('user' => $oUser->getLogin())), null, true);
             }
         } else {
             E::ModuleMessage()->AddError(E::ModuleLang()->Get('action.admin.user_not_found'), null, true);
             $bResult = false;
             break;
         }
     }
     return $bResult;
 }
예제 #2
0
 /**
  * Получает список блогов, которые доступны пользователю для заданного действия.
  * Или проверяет на заданное действие конкретный блог
  *
  * @param string                    $sAllow
  * @param ModuleUser_EntityUser     $oUser
  * @param int|ModuleBlog_EntityBlog $xBlog
  * @param bool                      $bCheckOnly
  * @param bool                      $bSortByTitle
  *
  * @return array|bool
  */
 public function GetBlogsAllowTo($sAllow, $oUser, $xBlog = null, $bCheckOnly = false, $bSortByTitle = true)
 {
     /** @var ModuleBlog_EntityBlog $oRequestBlog */
     $oRequestBlog = null;
     if (is_object($xBlog)) {
         $iRequestBlogId = intval($xBlog->GetId());
         $oRequestBlog = $xBlog;
     } else {
         $iRequestBlogId = intval($xBlog);
     }
     $sCacheKey = 'blogs_allow_to_' . serialize(array($sAllow, $oUser ? $oUser->GetId() : 0, $iRequestBlogId, (bool) $bCheckOnly));
     if ($iRequestBlogId && $bCheckOnly) {
         // Если только проверка прав, то проверяем временный кеш
         if (is_int($xCacheResult = E::ModuleCache()->Get($sCacheKey, 'tmp'))) {
             return $xCacheResult;
         }
     }
     if ($oUser->isAdministrator() || $oUser->isModerator()) {
         // Если админ и если проверка на конкретный блог, то возвращаем без проверки
         if ($iRequestBlogId) {
             return $iRequestBlogId;
         }
         $aAdditionalData = array('relation_user');
         $aAllowBlogs = $this->GetBlogs($aAdditionalData);
         if ($iRequestBlogId) {
             return isset($aAllowBlogs[$iRequestBlogId]) ? $aAllowBlogs[$iRequestBlogId] : array();
         }
         if ($bSortByTitle) {
             $this->_sortByTitle($aAllowBlogs);
         }
         return $aAllowBlogs;
     }
     if (false === ($aAllowBlogs = E::ModuleCache()->Get($sCacheKey))) {
         if ($oUser) {
             // User is owner of the blog
             if ($oRequestBlog && $oRequestBlog->getOwnerId() == $oUser->getId()) {
                 return $oRequestBlog;
             }
             // Блоги, созданные пользователем
             $aAllowBlogs = $this->GetBlogsByOwnerId($oUser->getId());
             if ($iRequestBlogId && isset($aAllowBlogs[$iRequestBlogId])) {
                 return $aAllowBlogs[$iRequestBlogId];
             }
             // Блоги, в которых состоит пользователь
             if ($iRequestBlogId) {
                 // Requests one blog
                 $aBlogUsers = $this->GetBlogUsersByArrayBlog($iRequestBlogId, $oUser->getId());
                 if ($oBlogUser = reset($aBlogUsers)) {
                     if (!$oBlogUser->getBlog()) {
                         if (!$oRequestBlog) {
                             $oRequestBlog = $this->GetBlogById($iRequestBlogId);
                         }
                         $oBlogUser->setBlog($oRequestBlog);
                     }
                 }
             } else {
                 // Requests any allowed blogs
                 $aBlogUsers = $this->GetBlogUsersByUserId($oUser->getId());
             }
             foreach ($aBlogUsers as $oBlogUser) {
                 /** @var ModuleBlog_EntityBlogType $oBlog */
                 $oBlog = $oBlogUser->getBlog();
                 /** @var ModuleBlog_EntityBlogType $oBlogType */
                 $oBlogType = $oBlog->GetBlogType();
                 // админа и модератора блога не проверяем
                 if ($oBlogUser->IsBlogAdministrator() || $oBlogUser->IsBlogModerator()) {
                     $aAllowBlogs[$oBlog->getId()] = $oBlog;
                 } elseif ($oBlogUser->getUserRole() !== self::BLOG_USER_ROLE_NOTMEMBER && $oBlogUser->getUserRole() > self::BLOG_USER_ROLE_GUEST) {
                     $bAllow = false;
                     if ($oBlogType) {
                         if ($sAllow == 'write') {
                             $bAllow = $oBlogType->GetAclWrite(self::BLOG_USER_ACL_MEMBER) && $oBlogType->GetMinRateWrite() <= $oUser->getRating() || E::ModuleACL()->CheckBlogEditContent($oBlog, $oUser);
                         } elseif ($sAllow == 'read') {
                             $bAllow = $oBlogType->GetAclRead(self::BLOG_USER_ACL_MEMBER) && $oBlogType->GetMinRateRead() <= $oUser->getRating();
                         } elseif ($sAllow == 'comment') {
                             $bAllow = $oBlogType->GetAclComment(self::BLOG_USER_ACL_MEMBER) && $oBlogType->GetMinRateComment() <= $oUser->getRating();
                         }
                         if ($bAllow) {
                             $aAllowBlogs[$oBlog->getId()] = $oBlog;
                         }
                     }
                 }
                 // Если задан конкретный блог и он найден, то проверять больше не нужно
                 if ($iRequestBlogId && isset($aAllowBlogs[$iRequestBlogId])) {
                     return $aAllowBlogs[$iRequestBlogId];
                 }
             }
         }
         if ($sAllow == 'write') {
             // Блоги, в которые можно писать без вступления
             $aFilter = array('acl_write' => self::BLOG_USER_ACL_USER, 'min_rate_write' => $oUser->GetUserRating());
         } elseif ($sAllow == 'read') {
             // Блоги, которые можно читать без вступления
             $aFilter = array('acl_read' => self::BLOG_USER_ACL_USER, 'min_rate_read' => $oUser->GetUserRating());
         } elseif ($sAllow == 'comment') {
             // Блоги, в которые можно писать без вступления
             $aFilter = array('acl_comment' => self::BLOG_USER_ACL_USER, 'min_rate_comment' => $oUser->GetUserRating());
         }
         // Получаем типы блогов
         if ($aBlogTypes = $this->GetBlogTypes($aFilter, true)) {
             // Получаем ID блогов
             $aCriteria = array('filter' => array('blog_type' => $aBlogTypes));
             // Получаем ID блогов
             $aResult = $this->oMapper->GetBlogsIdByCriteria($aCriteria);
             // Получаем сами блоги
             if ($aResult['data']) {
                 // если задана только проверка, то сам блог(и) не нужен
                 if ($iRequestBlogId && $bCheckOnly) {
                     return in_array($iRequestBlogId, $aResult['data']);
                 }
                 if ($aBlogs = $this->GetBlogsAdditionalData($aResult['data'], array())) {
                     foreach ($aBlogs as $oBlog) {
                         if (!isset($aAllowBlogs[$oBlog->getId()])) {
                             $aAllowBlogs[$oBlog->getId()] = $oBlog;
                         }
                     }
                 }
             }
         }
         if ($iRequestBlogId) {
             return isset($aAllowBlogs[$iRequestBlogId]) ? $aAllowBlogs[$iRequestBlogId] : array();
         }
         if ($bSortByTitle) {
             $this->_sortByTitle($aAllowBlogs);
         }
         E::ModuleCache()->Set($aAllowBlogs, $sCacheKey, array('blog_update', 'user_update'), 'P1D');
     }
     if ($iRequestBlogId && $bCheckOnly) {
         // Если только проверка прав, то сохраняем во временный кеш
         // Чтоб не было ложных сробатываний, используем в этом кеше числовое значение
         E::ModuleCache()->Set($sCacheKey, $aAllowBlogs ? 1 : 0, array('blog_update', 'user_update'), 0, 'tmp');
     }
     return $aAllowBlogs;
 }
예제 #3
0
 /**
  * Получает список блогов, которые доступны пользователю для заданного действия.
  * Или проверяет на заданное действие конкретный блог
  *
  * @param string                    $sAllow
  * @param ModuleUser_EntityUser     $oUser
  * @param int|ModuleBlog_EntityBlog $xBlog
  * @param bool                      $bCheckOnly
  * @param bool                      $bSortByTitle
  *
  * @return array|bool
  */
 public function GetBlogsAllowTo($sAllow, $oUser, $xBlog = null, $bCheckOnly = false, $bSortByTitle = true)
 {
     if (empty($oUser)) {
         return null;
     }
     if (is_object($xBlog)) {
         $iRequestBlogId = intval($xBlog->GetId());
     } else {
         $iRequestBlogId = intval($xBlog);
     }
     if (!$iRequestBlogId && $bCheckOnly) {
         return false;
     }
     $sCacheKeyAll = E::ModuleCache()->Key('blogs_allow_to_', $sAllow, $oUser->GetId(), $iRequestBlogId);
     $sCacheKeySorted = $sCacheKeyAll . '_sort';
     $sCacheKeyChecked = $sCacheKeyAll . '_check';
     if ($bCheckOnly) {
         // Если только проверка прав, то проверяем временный кеш
         if (is_int($xCacheResult = E::ModuleCache()->Get($sCacheKeyChecked, 'tmp'))) {
             return $xCacheResult;
         }
         if (($xCacheResult = E::ModuleCache()->Get($sCacheKeySorted, 'tmp,')) && $xCacheResult !== false) {
             // see sorted result in cache
             $xResult = !empty($xCacheResult[$iRequestBlogId]);
         } elseif (($xCacheResult = E::ModuleCache()->Get($sCacheKeyAll, 'tmp,')) && $xCacheResult !== false) {
             // see unsorted result in cache
             $xResult = !empty($xCacheResult[$iRequestBlogId]);
         } else {
             $xResult = $this->_getBlogsAllowTo($sAllow, $oUser, $xBlog, true);
         }
         // Чтоб не было ложных сробатываний, используем в этом кеше числовое значение
         E::ModuleCache()->Set(!empty($xResult) ? 1 : 0, $sCacheKeyChecked, array('blog_update', 'user_update'), 0, 'tmp');
         return $xResult;
     }
     if ($bSortByTitle) {
         // see sorted blogs in cache
         if (($xCacheResult = E::ModuleCache()->Get($sCacheKeySorted, 'tmp,')) && $xCacheResult !== false) {
             return $xCacheResult;
         }
     }
     // see unsorted blogs in cache
     $xCacheResult = E::ModuleCache()->Get($sCacheKeyAll, 'tmp,');
     if ($xCacheResult !== false) {
         if ($bSortByTitle) {
             $this->_sortByTitle($xCacheResult);
             E::ModuleCache()->Set($xCacheResult, $sCacheKeySorted, array('blog_update', 'user_update'), 'P10D', ',tmp');
         }
         return $xCacheResult;
     }
     $aAllowBlogs = $this->_getBlogsAllowTo($sAllow, $oUser, $xBlog, false);
     if ($bSortByTitle) {
         $this->_sortByTitle($aAllowBlogs);
         E::ModuleCache()->Set($aAllowBlogs, $sCacheKeySorted, array('blog_update', 'user_update'), 'P10D', ',tmp');
     } else {
         E::ModuleCache()->Set($aAllowBlogs, $sCacheKeyAll, array('blog_update', 'user_update'), 'P10D', ',tmp');
     }
     return $aAllowBlogs;
 }