Русское сообщество fluxbb

Быстрый лёгкий надёжный форумный движок

Вы не вошли.

Объявление

Вы можете внести свой вклад в содержание сайта. Жертвователи попадут в почетную группу "Спонсоры". Поддержать сайт.

#1 2006-04-18 08:41:41

Гном
Гость

Запретить удаление.

Никто не знает как сделать так чтобы модераторы не могли удалять или править посты сделанные админом?

#2 2006-04-18 09:04:19

hcs
Гость

Re: Запретить удаление.

Добавить проверку на group_id автора редактируемого или удаляемого поста

#3 2006-04-18 09:52:45

Гном
Гость

Re: Запретить удаление.

Спасибо за подсказку.
Но знания не хватает sad

Пока я только знаю что нужно как-то связать эти переменные:

if

$pun_user['g_id'] == PUN_ADMIN

$pun_user['g_id'] == PUN_MOD

message($lang_common['No permission']);

Можешь связать плз хотябы для запрета на удаление, на edit уже по аналогии можно?


Вот есть аналогия, но я не знаю как:

// Do we have permission to edit this post?
if (($pun_user['g_delete_posts'] == '0' ||
    ($pun_user['g_delete_topics'] == '0' && $is_topic_post) ||
    $cur_post['poster_id'] != $pun_user['id'] ||
    $cur_post['closed'] == '1') &&
    !$is_admmod)
    message($lang_common['No permission']);

#4 2006-04-18 14:34:48

hcs
Гость

Re: Запретить удаление.

попробуй добавить после последнего этот фрагмент:

if ($cur_post['group_id'] == PUN_ADMIN && $pun_user['group_id']!== PUN_ADMIN) 
    message($lang_common['No permission']);

это в файле edit.php
еще надо подправить запрос в строке ~39 добавь после

fp.post_replies, fp.post_topics,

вот это

fp.group_id,

Редактировался hcs (2006-04-18 14:35:17)

#5 2006-04-18 17:37:07

Гном
Гость

Re: Запретить удаление.

hcs пишет:

попробуй добавить после последнего этот фрагмент:

if ($cur_post['group_id'] == PUN_ADMIN && $pun_user['group_id']!== PUN_ADMIN) 
    message($lang_common['No permission']);

Что-то не работает(((
Пробывал еще так делать:

if ($cur_post['group_id'] == PUN_ADMIN && $pun_user['group_id'] != PUN_ADMIN)
    message($lang_common['No permission']);

Тоже ничего. Переходит к форме удаления.

#6 2006-04-18 19:46:26

hcs
Гость

Re: Запретить удаление.

хм.  group_id в forum_permission не одно и тоже с group_id в users
запрос надо модифицировать глубже, а именно отменить все изменения и делать так:
найти

fp.post_replies, fp.post_topics,

добавить после этого

u.group_id,

найти

INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id

добавить после этого

LEFT JOIN '.$db->prefix.'users AS u ON u.id=p.poster_id

#7 2006-04-18 22:05:26

Гном
Гость

Re: Запретить удаление.

hcs пишет:

хм.  group_id в forum_permission не одно и тоже с group_id в users
запрос надо модифицировать глубже, а именно отменить все изменения и делать так:
найти

Все работает)
Но есть один большой минус. Теперь сам админ не может отредактировать свои посты(

#8 2006-04-18 23:10:07

Гном
Гость

Re: Запретить удаление.

Еще не знаю куда поместить это

u.group_id,

сюда в файле moderate.php (там тоже оказывается можно удалять посты модерам):


   

// Fetch some info about the topic
    $result = $db->query('SELECT t.subject, t.num_replies, f.id AS forum_id, forum_name FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'subscriptions AS s ON (t.id=s.topic_id AND s.user_id='.$pun_user['id'].') LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.id='.$fid.' AND t.id='.$tid.' AND t.moved_to IS NULL') or error('Unable to fetch topic info', __FILE__, __LINE__, $db->error());

#9 2006-04-19 05:13:54

hcs
Гость

Re: Запретить удаление.

помести после

t.subject,

кроме этого перед WHERE нужно добавить

LEFT JOIN '.$db->prefix.'users AS u ON u.id='.$pun_user['id'].'

почему же не редактируется самим админом???
Попробуй изменить условие на это:

if ($cur_post['group_id'] != $pun_user['group_id']) 
    message($lang_common['No permission']);

#10 2006-04-19 09:20:12

Гном
Гость

Re: Запретить удаление.

Не рулит. Теперь админ не может ничьи посты редактировать)
Ладно, все оказалось сложнее. И еще этот файл moderate.php там тоже хрен поймешь чего.
Ладно как-нибудь по другому придумаю.

#11 2006-04-19 10:27:09

hcs
Гость

Re: Запретить удаление.

smile Ну ладно, постараюсь попозже поставить чистый форум и разобраться.

#12 2006-04-19 11:28:11

hcs
Гость

Re: Запретить удаление.

Вобщем всё работает.
Изменения в edit.php
строка 39 ищем:

fp.post_replies, fp.post_topics,

добавляем после этого:

u.group_id,

в этой же строке ищем

INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id

добавляем после этого:

LEFT JOIN '.$db->prefix.'users AS u ON u.id=p.poster_id

строка 59 ищем:

if (($pun_user['g_edit_posts'] == '0' ||
    $cur_post['poster_id'] != $pun_user['id'] ||
    $cur_post['closed'] == '1') &&
    !$is_admmod)
    message($lang_common['No permission']);

добавляем после этого:

if ($cur_post['group_id'] == PUN_ADMIN && $pun_user['group_id']!= PUN_ADMIN) 
    message($lang_common['No permission']);

Изменения в delete.php аналогичны.
Проверено на чистом punbb работает как часы.

#13 2006-04-19 12:28:49

Гном
Гость

Re: Запретить удаление.

Спасибо работает! Но без редакции этого файла: moderate.php где тоже как оказалось модеры могут удалять это не имеет смыслы((( а там по аналогии не сделать(

#14 2006-04-19 12:41:53

hcs
Гость

Re: Запретить удаление.

В moderate.php модераторы могут удалять темы целиком, а не выборочно посты, разве не так?
Какой смысл оставлять целую тему из-за присутсвия в ней поста админа, если несмотря на это требуется тему таки удалить? Сделать это в принципе не сложнее чем правка и удаление отдельных постов, но я не думаю что это правильно и нужно

#15 2006-04-19 19:13:36

Demo
Гость

Re: Запретить удаление.

Попробуй в moderate.php так:

Добавить u.group_id сюда:

// Retrieve the posts (and their respective poster)
    $result = $db->query('SELECT u.title, u.group_id, u.num_posts, g.g_id, g.g_user_title, p.id, p.poster, p.poster_id, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'users AS u ON u.id=p.poster_id INNER JOIN '.$db->prefix.'groups AS g ON g.g_id=u.group_id WHERE p.topic_id='.$tid.' ORDER BY p.id LIMIT '.$start_from.','.$pun_user['disp_posts'], true) or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());

И после этого:

                // Perform the main parsing of the message (BBCode, smilies, censor words 

etc)
        $cur_post['message'] = parse_message($cur_post['message'], 
$cur_post['hide_smilies']);

Добавить это:

$lang_common['No permission'] = "В теме есть посты админа, поэтому удалять их может админ.";

if ($cur_post['group_id'] == PUN_ADMIN && $pun_user['group_id'] != PUN_ADMIN) 
    message($lang_common['No permission']);

#16 2006-04-19 20:15:26

hcs
Гость

Re: Запретить удаление.

Вуаля, новый мод готов. Кто на панрес зальёт? smile

#17 2006-04-19 21:02:20

Гном
Гость

Re: Запретить удаление.

hcs пишет:

В moderate.php модераторы могут удалять темы целиком, а не выборочно посты, разве не так?
Какой смысл оставлять целую тему из-за присутсвия в ней поста админа, если несмотря на это требуется тему таки удалить? Сделать это в принципе не сложнее чем правка и удаление отдельных постов, но я не думаю что это правильно и нужно

Нужно чтобы эти темы с постами админов могли удалять только админы.
Если есть хотябы один пост админа нужно чтобы эта тема была неприкосновенна ни для кого кроме админа.
Вроде логично помоему. Никто не может удалять кроме админа. Нужно чтобы выводилась табличка что удалять ничего нельзя если есть посты админа. Это правильно. Будет соблюдена субординация) и мод будет законченный.
Нельзя ли все же доделать moderate.php?

#18 2006-04-20 04:47:18

hcs
Гость

Re: Запретить удаление.

А код Demo не решает задачу разве?

#19 2006-04-20 13:56:16

Гном
Гость

Re: Запретить удаление.

hcs пишет:

А код Demo не решает задачу разве?

В этом файле еще можно удалять темы из списка форумов. Зачем предохраняться от удаления постов если их можно целыми темами удалять(
Нужно чтобы вообще ничего что постил админ удалить было нельзя кроме него самого.

#20 2006-04-20 18:39:01

hcs
Гость

Re: Запретить удаление.

что делать если модер пытается удалить тему содержащую пост админа?
варианты:
1. вывести список тем, содержащих посты админа, с сообщением что операция не может быть выполнена
2. удалить все темы кроме содержащих посты админа, с информацией при редиректе (фактически втихую)

#21 2006-04-20 18:47:30

Гном
Гость

Re: Запретить удаление.

hcs пишет:

что делать если модер пытается удалить тему содержащую пост админа?
варианты:
1. вывести список тем, содержащих посты админа, с сообщением что операция не может быть выполнена
2. удалить все темы кроме содержащих посты админа, с информацией при редиректе (фактически втихую)

Первый вариант отличный. Это когда в списках тем форума.
И в самой теме еще нужно когда там галочками много постов отмечается также. Там тоже можно удалять.

#22 2006-04-20 20:25:58

hcs
Гость

Re: Запретить удаление.

Пока сделал запрет удаления тем содержащих посты админа, вариант 2.
файл moderate.php
ищем строки ~403

    if (isset($_POST['delete_topics_comply']))
    {
        confirm_referrer('moderate.php');

        if (preg_match('/[^0-9,]/', $topics))
            message($lang_common['Bad request']);

добавляем после этого

        $result = $db->query('SELECT t.subject, p.topic_id, u.group_id  FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'topics AS t ON t.id=p.topic_id LEFT JOIN '.$db->prefix.'users AS u ON u.id=p.poster_id WHERE topic_id IN('.$topics.')') or error('Unable to fetch posts', __FILE__, __LINE__, $db->error());\
        while ($cur_post = $db->fetch_assoc($result)) 
            if ($cur_post['group_id'] == PUN_ADMIN && $pun_user['group_id']!= PUN_ADMIN) {
                $denied_topics[]= $cur_post['topic_id'];
                $denied_subj[]= $cur_post['subject'];
            }
        if (isset($denied_topics)) {
            $test_topics=explode(",", $topics);
            foreach ( $test_topics as $key => $value) {
                foreach ( $denied_topics as $key2 => $value2) {
                    if ($value==$value2) 
                        unset($test_topics[$key]);
                }
            }
            if (count($test_topics)<1) 
                message("Выбранные темы не могут быть удалены, т.к. содержат сообщения администратора");
            $topics=implode(',', $test_topics);
        }

ищем ~460

redirect('viewforum.php?id='.$fid, $lang_misc['Delete topics redirect']);

добавляем перед этим следущее:

        if (isset($denied_topics)) {
            $msg[]="<p>Следующие темы не были удалены, т.к. содержат сообщения Администратора:</p>";
            $msg[]="<ul>";
            foreach ( $denied_topics as $key => $value) {
                $msg[]="<li><a href='/viewtopic.php?id=".$value."'>".$denied_subj[$key] ."</a></li>";
            }
            $msg[]="</ul>";
            $msg=implode("\n", $msg);
            message($msg);
        }

#23 2006-04-20 22:26:46

Гном
Гость

Re: Запретить удаление.

Ну спасиба! Теперь на пунрез...)

Подвал доски

Под управлением FluxBB. Хостинг Hostens