本文整理汇总了PHP中E::ModuleACL方法的典型用法代码示例。如果您正苦于以下问题:PHP E::ModuleACL方法的具体用法?PHP E::ModuleACL怎么用?PHP E::ModuleACL使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类E
的用法示例。
在下文中一共展示了E::ModuleACL方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: ValidateTimeLimit
/**
* Проверка на ограничение по времени
*
* @param string $sValue Проверяемое значение
* @param array $aParams Параметры
*
* @return bool|string
*/
public function ValidateTimeLimit($sValue, $aParams)
{
if ($oUser = E::ModuleUser()->GetUserById($this->getUserId())) {
if (E::ModuleACL()->CanAddWallTime($oUser, $this)) {
return true;
}
}
return E::ModuleLang()->Get('wall_add_time_limit');
}
示例2: GetAllowContentTypeByUserId
/**
* Возвращает доступные для создания пользователем типы контента
*
* @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;
}
示例3: CanReadBy
/**
* Can this blog be read by the user?
*
* @param ModuleUser_EntityUser $oUser
*
* @return bool
*/
public function CanReadBy($oUser)
{
if ($this->GetBlogType() && $this->GetBlogType()->GetAclRead(ModuleBlog::BLOG_USER_ACL_GUEST)) {
// anybody can read blog
return true;
}
return $oUser && E::ModuleACL()->IsAllowShowBlog($this, $oUser);
}
示例4: EventInvite
/**
* Показ и обработка формы приглаешний
*
*/
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()));
}
示例5: EventUserRights
/**
* Права пользователей
*/
protected function EventUserRights()
{
$this->sMainMenuItem = 'settings';
$this->_setTitle(E::ModuleLang()->Get('action.admin.userrights_menu'));
$this->SetTemplateAction('settings/userrights');
if ($this->IsPost('submit_type_add')) {
return $this->_eventUserRightsEditSubmit();
} else {
$_REQUEST['userrights_administrator'] = E::ModuleACL()->GetUserRights('blogs', 'administrator');
$_REQUEST['userrights_moderator'] = E::ModuleACL()->GetUserRights('blogs', 'moderator');
}
}
示例6: CanDeletedBy
/**
* Can this topic be deleted by the user?
*
* @param ModuleUser_EntityUser $oUser
*
* @return bool
*/
public function CanDeletedBy($oUser)
{
return E::ModuleACL()->IsAllowDeleteTopic($this, $oUser);
}
示例7: SubmitComment
/**
* Обработка добавление комментария к письму
*
*/
protected function SubmitComment()
{
// * Проверям авторизован ли пользователь
if (!E::ModuleUser()->IsAuthorization()) {
E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('need_authorization'), E::ModuleLang()->Get('error'));
return false;
}
// * Проверяем разговор
if (!($oTalk = E::ModuleTalk()->GetTalkById(F::GetRequestStr('cmt_target_id')))) {
E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
return false;
}
if (!($oTalkUser = E::ModuleTalk()->GetTalkUser($oTalk->getId(), $this->oUserCurrent->getId()))) {
E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
return false;
}
// * Проверяем разрешено ли отправлять инбокс по времени
if (!E::ModuleACL()->CanPostTalkCommentTime($this->oUserCurrent)) {
E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('talk_time_limit'), E::ModuleLang()->Get('error'));
return false;
}
// * Проверяем текст комментария
$sText = E::ModuleText()->Parser(F::GetRequestStr('comment_text'));
$iMin = intval(Config::Get('module.talk.min_length'));
$iMax = intval(Config::Get('module.talk.max_length'));
if (!F::CheckVal($sText, 'text', $iMin, $iMax)) {
if ($iMax) {
E::ModuleMessage()->AddError(E::ModuleLang()->Get('talk_create_text_error_len', array('min' => $iMin, 'max' => $iMax)), E::ModuleLang()->Get('error'));
} else {
E::ModuleMessage()->AddError(E::ModuleLang()->Get('talk_create_text_error_min', array('min' => $iMin)), E::ModuleLang()->Get('error'));
}
return false;
}
// * Проверям на какой коммент отвечаем
$sParentId = (int) F::GetRequest('reply');
if (!F::CheckVal($sParentId, 'id')) {
E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
return false;
}
$oCommentParent = null;
if ($sParentId != 0) {
// * Проверяем существует ли комментарий на который отвечаем
if (!($oCommentParent = E::ModuleComment()->GetCommentById($sParentId))) {
E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
return false;
}
// * Проверяем из одного топика ли новый коммент и тот на который отвечаем
if ($oCommentParent->getTargetId() != $oTalk->getId()) {
E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
return false;
}
} else {
// * Корневой комментарий
$sParentId = null;
}
// * Проверка на дублирующий коммент
if (E::ModuleComment()->GetCommentUnique($oTalk->getId(), 'talk', $this->oUserCurrent->getId(), $sParentId, md5($sText))) {
E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('topic_comment_spam'), E::ModuleLang()->Get('error'));
return false;
}
// * Создаём комментарий
/** @var ModuleComment_EntityComment $oCommentNew */
$oCommentNew = E::GetEntity('Comment');
$oCommentNew->setTargetId($oTalk->getId());
$oCommentNew->setTargetType('talk');
$oCommentNew->setUserId($this->oUserCurrent->getId());
$oCommentNew->setText($sText);
$oCommentNew->setDate(F::Now());
$oCommentNew->setUserIp(F::GetUserIp());
$oCommentNew->setPid($sParentId);
$oCommentNew->setTextHash(md5($sText));
$oCommentNew->setPublish(1);
// * Добавляем коммент
E::ModuleHook()->Run('talk_comment_add_before', array('oCommentNew' => $oCommentNew, 'oCommentParent' => $oCommentParent, 'oTalk' => $oTalk));
if (E::ModuleComment()->AddComment($oCommentNew)) {
E::ModuleHook()->Run('talk_comment_add_after', array('oCommentNew' => $oCommentNew, 'oCommentParent' => $oCommentParent, 'oTalk' => $oTalk));
E::ModuleViewer()->AssignAjax('sCommentId', $oCommentNew->getId());
$oTalk->setDateLast(F::Now());
$oTalk->setUserIdLast($oCommentNew->getUserId());
$oTalk->setCommentIdLast($oCommentNew->getId());
$oTalk->setCountComment($oTalk->getCountComment() + 1);
E::ModuleTalk()->UpdateTalk($oTalk);
// * Отсылаем уведомления всем адресатам
$aUsersTalk = E::ModuleTalk()->GetUsersTalk($oTalk->getId(), ModuleTalk::TALK_USER_ACTIVE);
foreach ($aUsersTalk as $oUserTalk) {
if ($oUserTalk->getId() != $oCommentNew->getUserId()) {
E::ModuleNotify()->SendTalkCommentNew($oUserTalk, $this->oUserCurrent, $oTalk, $oCommentNew);
}
}
// * Увеличиваем число новых комментов
E::ModuleTalk()->IncreaseCountCommentNew($oTalk->getId(), $oCommentNew->getUserId());
return true;
} else {
E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
}
return false;
//.........这里部分代码省略.........
示例8: EventVoteUser
/**
* Голосование за пользователя
*
*/
protected function EventVoteUser()
{
// * Пользователь авторизован?
if (!$this->oUserCurrent) {
E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('need_authorization'), E::ModuleLang()->Get('error'));
return;
}
// * Пользователь существует?
if (!($oUser = E::ModuleUser()->GetUserById(F::GetRequestStr('idUser', null, 'post')))) {
E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
return;
}
// * Голосует за себя?
if ($oUser->getId() == $this->oUserCurrent->getId()) {
E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('user_vote_error_self'), E::ModuleLang()->Get('attention'));
return;
}
// * Уже голосовал?
if ($oUserVote = E::ModuleVote()->GetVote($oUser->getId(), 'user', $this->oUserCurrent->getId())) {
E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('user_vote_error_already'), E::ModuleLang()->Get('attention'));
return;
}
// * Имеет право на голосование?
if (!E::ModuleACL()->CanVoteUser($this->oUserCurrent, $oUser)) {
E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('user_vote_error_acl'), E::ModuleLang()->Get('attention'));
return;
}
// * Как проголосовал
$iValue = F::GetRequestStr('value', null, 'post');
if (!in_array($iValue, array('1', '-1'))) {
E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('attention'));
return;
}
// * Голосуем
/** @var ModuleVote_EntityVote $oUserVote */
$oUserVote = E::GetEntity('Vote');
$oUserVote->setTarget($oUser);
$oUserVote->setTargetId($oUser->getId());
$oUserVote->setTargetType('user');
$oUserVote->setVoter($this->oUserCurrent);
$oUserVote->setVoterId($this->oUserCurrent->getId());
$oUserVote->setDirection($iValue);
$oUserVote->setDate(F::Now());
if ($iValue != 0) {
$nDeltaRating = (double) E::ModuleRating()->VoteUser($this->oUserCurrent, $oUser, $iValue);
} else {
$nDeltaRating = 0.0;
}
$oUserVote->setValue($nDeltaRating);
$oUser->setCountVote($oUser->getCountVote() + 1);
if (E::ModuleVote()->AddVote($oUserVote) && E::ModuleUser()->Update($oUser)) {
E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('user_vote_ok'), E::ModuleLang()->Get('attention'));
E::ModuleViewer()->AssignAjax('iRating', number_format($oUser->getRating(), Config::Get('view.skill_length')));
E::ModuleViewer()->AssignAjax('iSkill', number_format($oUser->getSkill(), Config::Get('view.rating_length')));
E::ModuleViewer()->AssignAjax('iCountVote', $oUser->getCountVote());
// * Добавляем событие в ленту
E::ModuleStream()->Write($oUserVote->getVoterId(), 'vote_user', $oUser->getId());
} else {
E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
return;
}
}
示例9: CheckAccessAndGetTarget
/**
* Проверяет доступность того или иного целевого объекта, переопределяется
* плагинами. По умолчанию всё грузить запрещено.
* Если всё нормально и пользователю разрешено сюда загружать картинки,
* то метод возвращает целевой объект, иначе значение FALSE.
*
* @param string $sTarget
* @param int $iTargetId
*
* @return bool
*/
public function CheckAccessAndGetTarget($sTarget, $iTargetId = null)
{
// Проверяем право пользователя на прикрепление картинок к топику
if (mb_strpos($sTarget, 'single-image-uploader') === 0 || $sTarget == 'photoset') {
// Проверям, авторизован ли пользователь
if (!E::IsUser()) {
return FALSE;
}
// Топик редактируется
if ($oTopic = E::ModuleTopic()->GetTopicById($iTargetId)) {
if (!E::ModuleACL()->IsAllowEditTopic($oTopic, E::User())) {
return FALSE;
}
return $oTopic;
}
return TRUE;
}
// Загружать аватарки можно только в свой профиль
if ($sTarget == 'profile_avatar') {
if ($iTargetId && E::IsUser() && $iTargetId == E::UserId()) {
return E::User();
}
return FALSE;
}
// Загружать аватарки можно только в свой профиль
if ($sTarget == 'profile_photo') {
if ($iTargetId && E::IsUser() && $iTargetId == E::UserId()) {
return E::User();
}
return FALSE;
}
if ($sTarget == 'blog_avatar') {
/** @var ModuleBlog_EntityBlog $oBlog */
$oBlog = E::ModuleBlog()->GetBlogById($iTargetId);
if (!E::IsUser()) {
return false;
}
if (!$oBlog) {
// Блог еще не создан
return E::ModuleACL()->CanCreateBlog(E::User()) || E::IsAdminOrModerator();
}
if ($oBlog && (E::ModuleACL()->CheckBlogEditBlog($oBlog, E::User()) || E::IsAdminOrModerator())) {
return $oBlog;
}
return '';
}
if ($sTarget == 'topic') {
if (!E::IsUser()) {
return false;
}
/** @var ModuleTopic_EntityTopic $oTopic */
$oTopic = E::ModuleTopic()->GetTopicById($iTargetId);
if (!$oTopic) {
// Топик еще не создан
return TRUE;
}
if ($oTopic && (E::ModuleACL()->IsAllowEditTopic($oTopic, E::User()) || E::IsAdminOrModerator())) {
return $oTopic;
}
return '';
}
if ($sTarget == 'topic_comment') {
if (!E::IsUser()) {
return false;
}
/** @var ModuleComment_EntityComment $oComment */
$oComment = E::ModuleComment()->GetCommentById($iTargetId);
if (!$oComment) {
// Комментарий еще не создан
return TRUE;
}
if ($oComment && (E::ModuleACL()->CanPostComment(E::User(), $oComment->getTarget()) && E::ModuleAcl()->CanPostCommentTime(E::User()) || E::IsAdminOrModerator())) {
return $oComment;
}
return '';
}
if ($sTarget == 'talk_comment') {
if (!E::IsUser()) {
return false;
}
/** @var ModuleComment_EntityComment $oComment */
$oComment = E::ModuleComment()->GetCommentById($iTargetId);
if (!$oComment) {
// Комментарий еще не создан
return TRUE;
}
if ($oComment && (E::ModuleAcl()->CanPostTalkCommentTime(E::User()) || E::IsAdminOrModerator())) {
return $oComment;
}
//.........这里部分代码省略.........
示例10: EventDeleteBlog
/**
* Удаление блога
*
*/
protected function EventDeleteBlog()
{
E::ModuleSecurity()->ValidateSendForm();
// * Проверяем передан ли в УРЛе номер блога
$nBlogId = intval($this->GetParam(0));
if (!$nBlogId || !($oBlog = E::ModuleBlog()->GetBlogById($nBlogId))) {
return parent::EventNotFound();
}
$this->oCurrentBlog = $oBlog;
// * Проверям авторизован ли пользователь
if (!E::ModuleUser()->IsAuthorization()) {
E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('not_access'), E::ModuleLang()->Get('error'));
return R::Action('error');
}
// * проверяем есть ли право на удаление блога
if (!($nAccess = E::ModuleACL()->IsAllowDeleteBlog($oBlog, $this->oUserCurrent))) {
return parent::EventNotFound();
}
$aTopics = E::ModuleTopic()->GetTopicsByBlogId($nBlogId);
switch ($nAccess) {
case ModuleACL::CAN_DELETE_BLOG_EMPTY_ONLY:
if (is_array($aTopics) && count($aTopics)) {
E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('blog_admin_delete_not_empty'), E::ModuleLang()->Get('error'), true);
R::Location($oBlog->getUrlFull());
}
break;
case ModuleACL::CAN_DELETE_BLOG_WITH_TOPICS:
/*
* Если указан идентификатор блога для перемещения,
* то делаем попытку переместить топики.
*
* (-1) - выбран пункт меню "удалить топики".
*/
$nNewBlogId = intval(F::GetRequestStr('topic_move_to'));
if ($nNewBlogId > 0 && is_array($aTopics) && count($aTopics)) {
if (!($oBlogNew = E::ModuleBlog()->GetBlogById($nNewBlogId))) {
E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('blog_admin_delete_move_error'), E::ModuleLang()->Get('error'), true);
R::Location($oBlog->getUrlFull());
}
// * Если выбранный блог является персональным, возвращаем ошибку
if ($oBlogNew->getType() == 'personal') {
E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('blog_admin_delete_move_personal'), E::ModuleLang()->Get('error'), true);
R::Location($oBlog->getUrlFull());
}
// * Перемещаем топики
E::ModuleTopic()->MoveTopics($nBlogId, $nNewBlogId);
}
break;
default:
return parent::EventNotFound();
}
// * Удаляяем блог и перенаправляем пользователя к списку блогов
E::ModuleHook()->Run('blog_delete_before', array('sBlogId' => $nBlogId));
if ($this->_deleteBlog($oBlog)) {
E::ModuleHook()->Run('blog_delete_after', array('sBlogId' => $nBlogId));
E::ModuleMessage()->AddNoticeSingle(E::ModuleLang()->Get('blog_admin_delete_success'), E::ModuleLang()->Get('attention'), true);
R::Location(R::GetPath('blogs'));
} else {
R::Location($oBlog->getUrlFull());
}
}
示例11: GetBlogsAllowTo
/**
* Получает список блогов, которые доступны пользователю для заданного действия.
* Или проверяет на заданное действие конкретный блог
*
* @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];
}
}
}
//.........这里部分代码省略.........
示例12: EventAjaxPhotoDelete
/**
* AJAX удаление фото
*
*/
protected function EventAjaxPhotoDelete()
{
// * Устанавливаем формат Ajax ответа
E::ModuleViewer()->SetResponseAjax('json');
// * Проверяем авторизован ли юзер
if (!E::ModuleUser()->IsAuthorization()) {
E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('not_access'), E::ModuleLang()->Get('error'));
return false;
}
// * Поиск фото по id
$oPhoto = E::ModuleTopic()->GetTopicPhotoById($this->GetPost('id'));
if ($oPhoto) {
if ($oPhoto->getTopicId()) {
// * Проверяем права на топик
$oTopic = E::ModuleTopic()->GetTopicById($oPhoto->getTopicId());
if ($oTopic && E::ModuleACL()->IsAllowEditTopic($oTopic, $this->oUserCurrent)) {
E::ModuleTopic()->DeleteTopicPhoto($oPhoto);
// * Если удаляем главную фотографию. топика, то её необходимо сменить
if ($oPhoto->getId() == $oTopic->getPhotosetMainPhotoId() && $oTopic->getPhotosetCount() > 1) {
$aPhotos = $oTopic->getPhotosetPhotos(0, 1);
$oTopic->setPhotosetMainPhotoId($aPhotos[0]->getMresourceId());
} elseif ($oTopic->getPhotosetCount() == 1) {
$oTopic->setPhotosetMainPhotoId(null);
}
$oTopic->setPhotosetCount($oTopic->getPhotosetCount() - 1);
E::ModuleTopic()->UpdateTopic($oTopic);
E::ModuleMessage()->AddNotice(E::ModuleLang()->Get('topic_photoset_photo_deleted'), E::ModuleLang()->Get('attention'));
return;
}
E::ModuleMessage()->AddError(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
return;
}
E::ModuleTopic()->DeleteTopicPhoto($oPhoto);
E::ModuleMessage()->AddNotice(E::ModuleLang()->Get('topic_photoset_photo_deleted'), E::ModuleLang()->Get('attention'));
return;
}
E::ModuleMessage()->AddError(E::ModuleLang()->Get('system_error'), E::ModuleLang()->Get('error'));
return;
}
示例13: SnippetPhotoset
/**
* Возвращает html-код фотосета
*
* @param $aData
* @return bool
*/
public function SnippetPhotoset($aData)
{
// Попытаемся определить откуда вызывается сниппет фотосета
// поскольку нужно точно определить целевой объект и его ид
// Редактируется топик.
// Получим его ид. и по нему поднимем необходимый фотосет
$aAdminMatches = array();
if (preg_match('~content\\/edit\\/(\\d+)\\/~', R::GetControllerPath(), $aMatches) || preg_match('~admin\\/content-pages\\/edit\\/(\\d+)\\/~', R::GetControllerPath(), $aAdminMatches)) {
// Найдем топик, из которого будем брать фотосет
$iTopicId = (int) isset($aData['params']['topic']) ? $aData['params']['topic'] : ($aAdminMatches ? FALSE : $aMatches[1]);
// Странно, но топик не нашли - завернём сниппет
if (!($oTopic = E::ModuleTopic()->GetTopicById($iTopicId))) {
return FALSE;
}
// Проверим, можно ли пользователю читать этот топик, а то вдруг
// он запросил картинки из топика закрытого блога - а так нельзя
if (!E::ModuleACL()->IsAllowShowBlog($oTopic->getBlog(), E::User())) {
return FALSE;
}
// Попытаемся найти фотосет
/** @var ModuleMresource_EntityMresource[] $aPhotos */
if (!(($aPhotos = E::ModuleMresource()->GetMresourcesRelByTarget('photoset', $oTopic->getId())) && is_array($aPhotos) && count($aPhotos) > 0)) {
return FALSE;
}
// Фотосет нашли, теперь из него нужно выбрать только те фото,
// которые выбрал пользователь в параметрах from и to
$iFrom = isset($aData['params']['from']) ? $aData['params']['from'] : 0;
$iFrom = (int) str_replace(array('last', 'first'), array(count($aPhotos), 0), $iFrom);
// Пользователи считают картинки с первой, а не с нулевой
if ($iFrom) {
$iFrom -= 1;
}
// Если указана длина, то правый предел игнорируем
if ($iCount = (int) isset($aData['params']['count']) ? $aData['params']['count'] : FALSE) {
$iTo = $iFrom + $iCount - 1;
} else {
$iTo = isset($aData['params']['to']) ? $aData['params']['to'] : count($aPhotos);
$iTo = (int) str_replace(array('last', 'first'), array(count($aPhotos), 0), $iTo);
if ($iTo) {
$iTo -= 1;
}
}
// Пользователь ошибочно указал диапазон. выдумывать ничего не будем,
// просто не выведем фотосет
if ($iTo - $iFrom < 0) {
return FALSE;
}
// Сбросим ключи набора фото, так лучше считать диапазон
$aPhotos = array_values($aPhotos);
foreach ($aPhotos as $k => $v) {
if ($k < $iFrom || $k > $iTo) {
unset($aPhotos[$k]);
}
}
if (!$aPhotos) {
return FALSE;
}
$sPosition = $iTopicId = (int) isset($aData['params']['position']) ? $aData['params']['position'] : 'center';
if (!in_array($sPosition, array('left', 'right'))) {
$sPosition = 'center';
}
// Получим html-код сниппета
$aVars = array('oTopic' => $oTopic, 'aPhotos' => $aPhotos, 'sPosition' => $sPosition, 'sPhotosetHash' => md5(serialize($aData['params'])));
$aData['result'] = trim(E::ModuleViewer()->Fetch('tpls/snippets/snippet.photoset.tpl', $aVars));
return $aData['result'];
}
return FALSE;
}
示例14: isDeletable
/**
* Может ли комментарий быть удален
*
* @return bool
*/
public function isDeletable()
{
if ($this->getTargetType() != 'talk' && ($oUser = E::ModuleUser()->GetUserCurrent())) {
if ($oUser->isAdministrator()) {
return true;
}
if (($oBlog = $this->getTargetBlog()) && E::ModuleACL()->CheckBlogDeleteComment($oBlog, $oUser)) {
return true;
}
}
return false;
}
示例15: _getBlogsAllowTo
/**
* @param string $sAllow
* @param ModuleUser_EntityUser $oUser
* @param int|ModuleBlog_EntityBlog $xBlog
* @param bool $bCheckOnly
*
* @return array|bool|mixed|ModuleBlog_EntityBlog[]
*/
protected function _getBlogsAllowTo($sAllow, $oUser, $xBlog = null, $bCheckOnly = false)
{
/** @var ModuleBlog_EntityBlog $oRequestBlog */
$oRequestBlog = null;
if (is_object($xBlog)) {
$iRequestBlogId = intval($xBlog->GetId());
$oRequestBlog = $xBlog;
} else {
$iRequestBlogId = intval($xBlog);
}
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();
}
return $aAllowBlogs;
}
// 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_EntityBlog $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];
}
}
$aFilter = array();
if ($sAllow == 'list') {
// Blogs which user can list
$aFilter['allow_list'] = true;
} elseif ($sAllow == 'read') {
// Blogs which can be read without subscribing
$aFilter = array('acl_read' => self::BLOG_USER_ACL_USER, 'min_rate_read' => $oUser->GetUserRating());
} elseif ($sAllow == 'comment') {
// Blogs in which user can comment without subscription
$aFilter = array('acl_comment' => self::BLOG_USER_ACL_USER, 'min_rate_comment' => $oUser->GetUserRating());
} elseif ($sAllow == 'write') {
// Blogs in which user can write without subscription
$aFilter = array('acl_write' => self::BLOG_USER_ACL_USER, 'min_rate_write' => $oUser->GetUserRating());
}
// Получаем типы блогов
if ($aFilter && ($aBlogTypes = $this->GetBlogTypes($aFilter, true))) {
// Получаем ID блогов
//.........这里部分代码省略.........