1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-05-17 08:18:18 +03:00

доработан функционал администрирования и модерирования блогов

This commit is contained in:
Mzhelskiy Maxim 2008-10-17 19:52:11 +00:00
parent 8fe77caca3
commit 4e79ec3c1a
11 changed files with 111 additions and 44 deletions

View file

@ -221,9 +221,11 @@ class ActionBlog extends Action {
return Router::Action('error');
}
/**
* Явлется ли авторизованный пользователь хозяином блога
* Явлется ли авторизованный пользователь хозяином блога, либо его администратором
*/
if ($oBlog->getOwnerId()!=$this->oUserCurrent->getId() and !$this->oUserCurrent->isAdministrator()) {
$oBlogUser=$this->Blog_GetRelationBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId());
$bIsAdministratorBlog=$oBlogUser ? $oBlogUser->getIsAdministrator() : false;
if ($oBlog->getOwnerId()!=$this->oUserCurrent->getId() and !$this->oUserCurrent->isAdministrator() and !$bIsAdministratorBlog) {
return parent::EventNotFound();
}
$this->Viewer_AddHtmlTitle($oBlog->getTitle());
@ -302,9 +304,11 @@ class ActionBlog extends Action {
return Router::Action('error');
}
/**
* Явлется ли авторизованный пользователь хозяином блога
* Явлется ли авторизованный пользователь хозяином блога, либо его администратором
*/
if ($oBlog->getOwnerId()!=$this->oUserCurrent->getId() and !$this->oUserCurrent->isAdministrator()) {
$oBlogUser=$this->Blog_GetRelationBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId());
$bIsAdministratorBlog=$oBlogUser ? $oBlogUser->getIsAdministrator() : false;
if ($oBlog->getOwnerId()!=$this->oUserCurrent->getId() and !$this->oUserCurrent->isAdministrator() and !$bIsAdministratorBlog) {
return parent::EventNotFound();
}
/**
@ -567,11 +571,17 @@ class ActionBlog extends Action {
/**
* Проверяем есть ли такой топик
*/
if (!($oTopic=$this->Topic_GetTopicById($iTopicId,$this->oUserCurrent,1))) {
if (!($oTopic=$this->Topic_GetTopicById($iTopicId,null,-1))) {
return parent::EventNotFound();
}
/**
* Если запросили не персональный топик то перенаправляем на страницу для вывода коллектиного топика
* Проверяем права на просмотр топика
*/
if (!$oTopic->getPublish() and $this->oUserCurrent->getId()!=$oTopic->getUserId() and !$this->oUserCurrent->isAdministrator()) {
return parent::EventNotFound();
}
/**
* Если запросили не персональный топик то перенаправляем на страницу для вывода коллективного топика
*/
if ($oTopic->getBlogType()!='personal') {
func_header_location(DIR_WEB_ROOT.'/blog/'.$oTopic->getBlogUrl().'/'.$oTopic->getId().'.html');
@ -639,12 +649,18 @@ class ActionBlog extends Action {
$this->sMenuSubItemSelect='';
/**
* Проверяем есть ли такой топик
*/
if (!($oTopic=$this->Topic_GetTopicById($iTopicId,$this->oUserCurrent,1))) {
*/
if (!($oTopic=$this->Topic_GetTopicById($iTopicId,null,-1))) {
return parent::EventNotFound();
}
/**
* Если запросили топик из персонального блогато перенаправляем на страницу вывода коллективного топика
* Проверяем права на просмотр топика
*/
if (!$oTopic->getPublish() and $this->oUserCurrent->getId()!=$oTopic->getUserId() and !$this->oUserCurrent->isAdministrator()) {
return parent::EventNotFound();
}
/**
* Если запросили топик из персонального блога то перенаправляем на страницу вывода коллективного топика
*/
if ($oTopic->getBlogType()=='personal') {
func_header_location(DIR_WEB_ROOT.'/blog/'.$oTopic->getId().'.html');
@ -727,8 +743,9 @@ class ActionBlog extends Action {
* Проверяем является ли текущий пользователь пользователем блога
*/
$bNeedJoin=true;
$oBlogUser=null;
if ($this->oUserCurrent) {
if ($this->Blog_GetRelationBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId())) {
if ($oBlogUser=$this->Blog_GetRelationBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId())) {
$bNeedJoin=false;
}
}
@ -757,6 +774,7 @@ class ActionBlog extends Action {
/**
* Загружаем переменные в шаблон
*/
$this->Viewer_Assign('oBlogUser',$oBlogUser);
$this->Viewer_Assign('aPaging',$aPaging);
$this->Viewer_Assign('aTopics',$aTopics);
$this->Viewer_Assign('oBlog',$oBlog);
@ -792,9 +810,10 @@ class ActionBlog extends Action {
/**
* Проверяем является ли текущий пользователь пользователем блога
*/
$oBlogUser=null;
$bNeedJoin=true;
if ($this->oUserCurrent) {
if ($this->Blog_GetRelationBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId())) {
if ($oBlogUser=$this->Blog_GetRelationBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId())) {
$bNeedJoin=false;
}
}
@ -823,6 +842,7 @@ class ActionBlog extends Action {
/**
* Загружаем переменные в шаблон
*/
$this->Viewer_Assign('oBlogUser',$oBlogUser);
$this->Viewer_Assign('aPaging',$aPaging);
$this->Viewer_Assign('aTopics',$aTopics);
$this->Viewer_Assign('oBlog',$oBlog);
@ -859,8 +879,9 @@ class ActionBlog extends Action {
* Проверяем является ли текущий пользователь пользователем блога
*/
$bNeedJoin=true;
$oBlogUser=null;
if ($this->oUserCurrent) {
if ($this->Blog_GetRelationBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId())) {
if ($oBlogUser=$this->Blog_GetRelationBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId())) {
$bNeedJoin=false;
}
}
@ -889,7 +910,8 @@ class ActionBlog extends Action {
$this->iCountTopicsBlogNew=$this->Topic_GetCountTopicsByBlogNew($oBlog);
/**
* Загружаем переменные в шаблон
*/
*/
$this->Viewer_Assign('oBlogUser',$oBlogUser);
$this->Viewer_Assign('aPaging',$aPaging);
$this->Viewer_Assign('aTopics',$aTopics);
$this->Viewer_Assign('oBlog',$oBlog);
@ -932,8 +954,9 @@ class ActionBlog extends Action {
* Проверяем является ли текущий пользователь пользователем блога
*/
$bNeedJoin=true;
$oBlogUser=null;
if ($this->oUserCurrent) {
if ($this->Blog_GetRelationBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId())) {
if ($oBlogUser=$this->Blog_GetRelationBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId())) {
$bNeedJoin=false;
}
}
@ -941,7 +964,9 @@ class ActionBlog extends Action {
* Загружаем переменные в шаблон
*/
$this->Viewer_Assign('oBlog',$oBlog);
$this->Viewer_Assign('aBlogUsers',$aBlogUsers);
$this->Viewer_Assign('iCountBlogUsers',count($aBlogUsers));
$this->Viewer_Assign('aBlogUsers',$aBlogUsers);
$this->Viewer_Assign('oBlogUser',$oBlogUser);
$this->Viewer_Assign('aBlogModerators',$aBlogModerators);
$this->Viewer_Assign('aBlogAdministrators',$aBlogAdministrators);
$this->Viewer_Assign('bNeedJoin',$bNeedJoin);

View file

@ -88,13 +88,17 @@ class ActionTopic extends Action {
* Получаем номер топика из УРЛ и проверяем существует ли он
*/
$sTopicId=$this->GetParam(0);
if (!$oTopic=$this->Topic_GetTopicById($sTopicId,$this->oUserCurrent)) {
if (!$oTopic=$this->Topic_GetTopicById($sTopicId,null,-1)) {
return parent::EventNotFound();
}
/**
* проверяем кто владелец топика
* проверяем кто владелец топика, либо модератор и администратор блога
*/
if ($oTopic->getUserId()!=$this->oUserCurrent->getId() and !$this->oUserCurrent->isAdministrator()) {
$oBlogUser=$this->Blog_GetRelationBlogUserByBlogIdAndUserId($oTopic->getBlogId(),$this->oUserCurrent->getId());
$bIsAdministratorBlog=$oBlogUser ? $oBlogUser->getIsAdministrator() : false;
$bIsModeratorBlog=$oBlogUser ? $oBlogUser->getIsModerator() : false;
if ($oTopic->getUserId()!=$this->oUserCurrent->getId() and !$this->oUserCurrent->isAdministrator() and !$bIsAdministratorBlog and !$bIsModeratorBlog) {
return parent::EventNotFound();
}
/**
@ -418,8 +422,13 @@ class ActionTopic extends Action {
/**
* Проверка состоит ли юзер в блоге в который постит
* Если нужно разрешить редактировать топик в блоге в котором юзер уже не стоит
* Если юзер является администратором либо модератором блога, то разрешаем ему перенос в другой блог
*/
if (!$this->Blog_GetRelationBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId()) and !$this->oUserCurrent->isAdministrator()) {
$oBlogUser=$this->Blog_GetRelationBlogUserByBlogIdAndUserId($oTopic->getBlogId(),$this->oUserCurrent->getId());
$bIsAdministratorBlog=$oBlogUser ? $oBlogUser->getIsAdministrator() : false;
$bIsModeratorBlog=$oBlogUser ? $oBlogUser->getIsModerator() : false;
if (!$this->Blog_GetRelationBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId()) and !$this->oUserCurrent->isAdministrator() and !$bIsAdministratorBlog and !$bIsModeratorBlog) {
if ($oBlog->getOwnerId()!=$this->oUserCurrent->getId()) {
$this->Message_AddErrorSingle('Вы не состоите в этом блоге!','Ошибка');
return false;

View file

@ -114,7 +114,8 @@ class Topic extends Module {
return false;
}
/**
* Получить топик по айдишнику
* Получить топик по айдишнику учитывая его доступность(publish)
* если publish=-1 то publish не учитывается при выборке
*
* @param unknown_type $sId
* @param unknown_type $oUser
@ -131,14 +132,12 @@ class Topic extends Module {
$s2=$this->oUserCurrent->getId();
}
if (false === ($data = $this->Cache_Get("topic_{$sId}_{$s}_{$s2}_{$iPublish}"))) {
if ($data = $this->oMapperTopic->GetTopicById($sId,$oUser,$iPublish)) {
dump("get topic from DB");
dump("topic_update_{$data->getId()}");
if ($data = $this->oMapperTopic->GetTopicById($sId,$oUser,$iPublish)) {
$this->Cache_Set($data, "topic_{$sId}_{$s}_{$s2}_{$iPublish}", array("topic_update_{$data->getId()}","blog_update_{$data->getBlogId()}"), 60*5);
}
}
return $data;
}
}
/**
* Получает список топиков из избранного
*

View file

@ -129,7 +129,12 @@ class TopicEntity_Topic extends Entity
public function getUserQuestionIsVote() {
return $this->_aData['user_question_is_vote'];
}
public function getUserIsBlogAdministrator() {
return $this->_aData['user_is_blog_administrator'];
}
public function getUserIsBlogModerator() {
return $this->_aData['user_is_blog_moderator'];
}
/***************************************************************************************************************************************************
* методы расширения типов топика

View file

@ -111,9 +111,12 @@ class Mapper_Topic extends Mapper {
if (is_object($this->oUserCurrent)) {
$iCurrentUserId=$this->oUserCurrent->getId();
}
$sWhereUser='';
if ($oUser) {
$sWhereUser=' OR t.user_id = '.(int)$oUser->getId();
$sWhereUser=' 1=1 ';
if ($iPublish!=-1) { //можно считать это костылём..
$sWhereUser=' t.topic_publish = '.(int)$iPublish.' ';
if ($oUser) {
$sWhereUser.=' OR t.user_id = '.(int)$oUser->getId();
}
}
$sql = "SELECT
t.*,
@ -147,8 +150,7 @@ class Mapper_Topic extends Mapper {
WHERE
t.topic_id = ?d
AND
(
t.topic_publish = ?d
(
".$sWhereUser."
)
AND
@ -168,7 +170,9 @@ class Mapper_Topic extends Mapper {
b.blog_title as blog_title,
IF(tv.topic_id IS NULL,0,1) as user_is_vote,
tv.vote_delta as user_vote_delta,
IF(tqv.topic_id IS NULL,0,1) as user_question_is_vote
IF(tqv.topic_id IS NULL,0,1) as user_question_is_vote,
bu.is_moderator as user_is_blog_moderator,
bu.is_administrator as user_is_blog_administrator
FROM
(
SELECT
@ -178,8 +182,7 @@ class Mapper_Topic extends Mapper {
WHERE
t.topic_id = ?d
AND
(
t.topic_publish = ?d
(
".$sWhereUser."
)
) AS t_fast
@ -192,6 +195,14 @@ class Mapper_Topic extends Mapper {
FROM ".DB_TABLE_TOPIC_VOTE."
WHERE user_voter_id = ?d
) AS tv ON t_fast.topic_id=tv.topic_id
LEFT JOIN (
SELECT
is_moderator,
is_administrator,
blog_id
FROM ".DB_TABLE_BLOG_USER."
WHERE user_id = ?d
) AS bu ON t_fast.blog_id=bu.blog_id
LEFT JOIN (
SELECT
topic_id
@ -200,7 +211,7 @@ class Mapper_Topic extends Mapper {
) AS tqv ON t_fast.topic_id=tqv.topic_id
JOIN ".DB_TABLE_TOPIC_CONTENT." AS tc ON t_fast.topic_id=tc.topic_id
";
if ($aRow=$this->oDb->selectRow($sql,$sId,$iPublish,$iCurrentUserId,$iCurrentUserId)) {
if ($aRow=$this->oDb->selectRow($sql,$sId,$iCurrentUserId,$iCurrentUserId,$iCurrentUserId)) {
return new TopicEntity_Topic($aRow);
}
return null;
@ -266,7 +277,9 @@ class Mapper_Topic extends Mapper {
u.user_login as user_login,
IF(tv.topic_id IS NULL,0,1) as user_is_vote,
tv.vote_delta as user_vote_delta,
IF(tqv.topic_id IS NULL,0,1) as user_question_is_vote
IF(tqv.topic_id IS NULL,0,1) as user_question_is_vote,
bu.is_moderator as user_is_blog_moderator,
bu.is_administrator as user_is_blog_administrator
FROM (
SELECT
t.*,
@ -300,12 +313,20 @@ class Mapper_Topic extends Mapper {
FROM ".DB_TABLE_TOPIC_QUESTION_VOTE."
WHERE user_voter_id = ?d
) AS tqv ON t_fast.topic_id=tqv.topic_id
LEFT JOIN (
SELECT
is_moderator,
is_administrator,
blog_id
FROM ".DB_TABLE_BLOG_USER."
WHERE user_id = ?d
) AS bu ON t_fast.blog_id=bu.blog_id
JOIN ".DB_TABLE_TOPIC_CONTENT." AS tc ON t_fast.topic_id=tc.topic_id
;
";
$aTopics=array();
if ($aRows=$this->oDb->select($sql,($iCurrPage-1)*$iPerPage, $iPerPage, $iCurrentUserId,$iCurrentUserId)) {
if ($aRows=$this->oDb->select($sql,($iCurrPage-1)*$iPerPage, $iPerPage, $iCurrentUserId,$iCurrentUserId, $iCurrentUserId)) {
foreach ($aRows as $aTopic) {
$aTopics[]=new TopicEntity_Topic($aTopic);
}

View file

@ -12,6 +12,7 @@
<div class="backoffice">
{if $aBlogUsers}
<form action="" method="POST" id="thisform" enctype="multipart/form-data">
@ -25,6 +26,9 @@
{foreach from=$aBlogUsers item=oBlogUser}
<tr>
<td><a href="{$DIR_WEB_ROOT}/profile/{$oBlogUser->getUserLogin()}/">{$oBlogUser->getUserLogin()}</a></td>
{if $oBlogUser->getUserId()==$oUserCurrent->getId()}
<td colspan="3" align="center">это вы &mdash; настоящий администратор!</td>
{else}
<td align="center">
<input type="radio" name="user_rank[{$oBlogUser->getUserId()}]" value="administrator" {if $oBlogUser->getIsAdministrator()}checked{/if}>
</td>
@ -34,6 +38,7 @@
<td align="center">
<input type="radio" name="user_rank[{$oBlogUser->getUserId()}]" value="reader" {if !$oBlogUser->getIsAdministrator() and !$oBlogUser->getIsModerator()}checked{/if}>
</td>
{/if}
</tr>
{/foreach}
@ -46,7 +51,10 @@
</p>
<div class="form_note">После нажатия на кнопку &laquo;Сохранить&raquo;, права пользователей будут сохранены</div>
{else}
в блоге никто не состоит
{/if}
<p>Может быть, перейти на <a href="{$DIR_WEB_ROOT}/topic/add/">страницу создания топиков</a>?</p>
<input type="hidden" name="blog_id" value="{$_aRequest.blog_id}">
</form>

View file

@ -79,7 +79,7 @@
</span>
{/if}
<a href="{$DIR_WEB_ROOT}/rss/blog/{$oBlog->getUrl()}/" title="RSS лента"><IMG height=12 src="{$DIR_STATIC_SKIN}/img/rss_small.gif" width=12></a>
{if $oUserCurrent and ($oUserCurrent->getId()==$oBlog->getOwnerId() or $oUserCurrent->isAdministrator() )}
{if $oUserCurrent and ($oUserCurrent->getId()==$oBlog->getOwnerId() or $oUserCurrent->isAdministrator() or ($oBlogUser and $oBlogUser->getIsAdministrator()) )}
<a href="{$DIR_WEB_ROOT}/blog/edit/{$oBlog->getId()}/" title="отредактировать блог"><img src="{$DIR_STATIC_SKIN}/img/blog_edit.gif" border="0" title="отредактировать блог"></a>
{/if}
</div>

View file

@ -81,7 +81,7 @@
</span>
{/if}
<a href="{$DIR_WEB_ROOT}/rss/blog/{$oBlog->getUrl()}/" title="RSS лента"><IMG height=12 src="{$DIR_STATIC_SKIN}/img/rss_small.gif" width=12></a>
{if $oUserCurrent and ($oUserCurrent->getId()==$oBlog->getOwnerId() or $oUserCurrent->isAdministrator() )}
{if $oUserCurrent and ($oUserCurrent->getId()==$oBlog->getOwnerId() or $oUserCurrent->isAdministrator() or ($oBlogUser and $oBlogUser->getIsAdministrator()) )}
<a href="{$DIR_WEB_ROOT}/blog/edit/{$oBlog->getId()}/" title="отредактировать блог"><img src="{$DIR_STATIC_SKIN}/img/blog_edit.gif" border="0" title="отредактировать блог"></a>
{/if}
</div>
@ -112,7 +112,7 @@
<div id="userslist">
<div class="company_part">
<h1>Пользователи ({$oBlog->getCountUser()})</h1>
<h1>Читатели ({$iCountBlogUsers})</h1>
<table class="part_company_01"><tr><td>
{if $aBlogUsers}
@ -120,7 +120,7 @@
<p class="groups_contacts_list"><a href="{$DIR_WEB_ROOT}/profile/{$oBlogUser->getUserLogin()}/" class="auth"><img class="img_border" src="{$oBlogUser->getUserProfileAvatarPath(48)}" width="48" height="48" alt="" title="{$oBlogUser->getUserLogin()}" border="0"></a><br><a href="{$DIR_WEB_ROOT}/profile/{$oBlogUser->getUserLogin()}/" class="groups_auth">{$oBlogUser->getUserLogin()}</a></p>
{/foreach}
{else}
Пользователей здесь не замеченно
Читателей здесь не замеченно
{/if}
</td></tr></table>

View file

@ -21,7 +21,7 @@
{/if}
<TD class="{$sel}width10"></TD>
<TD class="{$sel}subitem1 center">
<A class=tags_f href="{$DIR_WEB_ROOT}/topic/saved/">Сохранённые</A>
<A class=tags_f href="{$DIR_WEB_ROOT}/topic/saved/">Черновики</A>
</TD>
<TD class="{$sel}border2px width10"></TD>

View file

@ -10,7 +10,7 @@
<img src="{$DIR_STATIC_SKIN}/img/topic_unpublish.gif" border="0" title="топик находится в черновиках">
{/if}
{$oTopic->getTitle()|escape:'html'}
{if $oUserCurrent and ( $oUserCurrent->getId()==$oTopic->getUserId() or $oUserCurrent->isAdministrator() )}
{if $oUserCurrent and ( $oUserCurrent->getId()==$oTopic->getUserId() or $oUserCurrent->isAdministrator() or $oTopic->getUserIsBlogAdministrator() or $oTopic->getUserIsBlogModerator())}
<a href="{$DIR_WEB_ROOT}/{$oTopic->getType()}/edit/{$oTopic->getId()}/" title="отредактировать топик"><img src="{$DIR_STATIC_SKIN}/img/blog_edit.gif" border="0" title="отредактировать топик"></a>
{/if}
<a href="{$DIR_WEB_ROOT}/rss/comments/{$oTopic->getId()}/" title="RSS лента"><IMG height=12 src="{$DIR_STATIC_SKIN}/img/rss_small.gif" width=12></a>

View file

@ -14,7 +14,7 @@
{/if}
<a href="{if $oTopic->getType()=='link'}{$DIR_WEB_ROOT}/link/go/{$oTopic->getId()}/{else}{$oTopic->getUrl()}{/if}" class="headline_l">{$oTopic->getTitle()|escape:'html'}</a>
{if $oUserCurrent and ($oUserCurrent->getId()==$oTopic->getUserId() or $oUserCurrent->isAdministrator())}
{if $oUserCurrent and ($oUserCurrent->getId()==$oTopic->getUserId() or $oUserCurrent->isAdministrator() or $oTopic->getUserIsBlogAdministrator() or $oTopic->getUserIsBlogModerator())}
<a href="{$DIR_WEB_ROOT}/{$oTopic->getType()}/edit/{$oTopic->getId()}/" title="отредактировать топик"><img src="{$DIR_STATIC_SKIN}/img/blog_edit.gif" border="0" title="отредактировать топик"></a>
{/if}