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

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

Вы не вошли.

Объявление

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

#1 2010-10-13 10:59:07

Visman
Administrator
Из Сибирь
Зарегистрирован: 2009-06-08
Сообщений: 2,236
Сайт

[MOD] Перемещение сообщений 1.1

Адаптация моего мода с PunBB 1.2.
Стандартный перенос мне не нравится, т.к. заставляет сначала сделать новую тему из переносимых постов, потом перенести эту тему в нужный раздел, затем слить две темы в одну.
Этим модом я добавляю дополнительную кнопку Перенести в Модерировать тему по нажатию которой сначала нужно выбрать раздел, а затем тему в которую будут перенесены выделенные сообщения.
Мод будет влючен в мою сборку начиная с ревизии 25!

1. Открываем файл moderate.php.
2. Находим

            <p class="conr modbuttons"><input type="submit" name="split_posts" value="<?php echo $lang_misc['Split'] ?>"<?php echo $button_status ?> /> <input type="submit" name="delete_posts" value="<?php echo $lang_misc['Delete'] ?>"<?php echo $button_status ?> /></p>

и меняем на

            <p class="conr modbuttons"><input type="submit" name="move_posts" value="<?php echo $lang_misc['Move'] ?>"<?php echo $button_status ?> /> <input type="submit" name="split_posts" value="<?php echo $lang_misc['Split'] ?>"<?php echo $button_status ?> /> <input type="submit" name="delete_posts" value="<?php echo $lang_misc['Delete'] ?>"<?php echo $button_status ?> /></p>

3. Находим

    // Delete one or more posts
    if (isset($_POST['delete_posts']) || isset($_POST['delete_posts_comply']))

и меняем на

    // Перемещение одного и более сообщений в другую тему
    if (isset($_POST['move_posts']) || isset($_POST['move_posts_forum']) || isset($_POST['move_posts_topic']))
    {
        $posts = $_POST['posts'];
        if (empty($posts))
            message($lang_misc['No posts selected']);

        if (isset($_POST['move_posts_forum']) || isset($_POST['move_posts_topic']))
        {
            confirm_referrer('moderate.php');

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

            $move_to_forum = isset($_POST['move_to_forum']) ? intval($_POST['move_to_forum']) : 0;
            if ($move_to_forum < 1)
                message($lang_common['Bad request']);

            $result = $db->query('SELECT f.id FROM '.$db->prefix.'forums AS f LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE f.id='.$move_to_forum.' AND (fp.read_forum IS NULL OR fp.read_forum=1) AND f.redirect_url IS NULL') or error('Unable to fetch forum', __FILE__, __LINE__, $db->error());
            if (!$db->num_rows($result))
                message($lang_common['Bad request']);

            if (isset($_POST['move_posts_topic']))
            {
                $move_to_topic = isset($_POST['move_to_topic']) ? intval($_POST['move_to_topic']) : 0;
                if ($move_to_topic < 1 || $move_to_topic == $tid)
                    message($lang_common['Bad request']);

                $result = $db->query('SELECT id FROM '.$db->prefix.'topics WHERE id='.$move_to_topic.' AND forum_id='.$move_to_forum) or error('Unable to fetch topic', __FILE__, __LINE__, $db->error());
                if (!$db->num_rows($result))
                    message($lang_common['Bad request']);

                // Verify that the post IDs are valid
                $result = $db->query('SELECT 1 FROM '.$db->prefix.'posts WHERE id IN('.$posts.') AND topic_id='.$tid) or error('Unable to check posts', __FILE__, __LINE__, $db->error());

                if ($db->num_rows($result) != s ubstr_count($posts, ',') + 1)
                    message($lang_common['Bad request']);

                // перемещаем
                $add_text = '[color=#808080][i] '.$lang_misc['Post from topic'].' "'.$cur_topic['subject'].'"[/i]. '.$pun_user['username'].'[/color]'."\n\n";
                $db->query('UPDATE '.$db->prefix.'posts  SET topic_id='.$move_to_topic.', message=CONCAT(\''.$db->escape($add_text).'\', message) WHERE topic_id='.$tid.' AND id IN('.$posts.')') or error('Unable to update posts/topic', __FILE__, __LINE__, $db->error());

                // обновим темы
                $num_posts_deleted = s ubstr_count($posts, ',') + 1;
                $result = $db->query('SELECT id, poster, posted FROM '.$db->prefix.'posts WHERE topic_id='.$tid.' ORDER BY id DESC LIMIT 1') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
                $last_post = $db->fetch_assoc($result);
                $db->query('UPDATE '.$db->prefix.'topics SET last_post='.$last_post['posted'].', last_post_id='.$last_post['id'].', last_poster=\''.$db->escape($last_post['poster']).'\', num_replies=num_replies-'.$num_posts_deleted.' WHERE id='.$tid) or error('Unable to update topic', __FILE__, __LINE__, $db->error());
                $result = $db->query('SELECT id, poster, posted FROM '.$db->prefix.'posts WHERE topic_id='.$move_to_topic.' ORDER BY id DESC LIMIT 1') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
                $last_post = $db->fetch_assoc($result);
                $db->query('UPDATE '.$db->prefix.'topics SET last_post='.$last_post['posted'].', last_post_id='.$last_post['id'].', last_poster=\''.$db->escape($last_post['poster']).'\', num_replies=num_replies+'.$num_posts_deleted.' WHERE id='.$move_to_topic) or error('Unable to update topic', __FILE__, __LINE__, $db->error());

                // обновим форумы
                update_forum($fid);
                if ($fid != $move_to_forum)
                    update_forum($move_to_forum);

                redirect('viewtopic.php?id='.$tid, $lang_misc['Move posts redirect']);
            }

            $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $lang_misc['Moderate']);
            define('PUN_ACTIVE_PAGE', 'index');
            require PUN_ROOT.'header.php';

            $result = $db->query('SELECT id, subject FROM '.$db->prefix.'topics WHERE forum_id='.$move_to_forum.' AND id<>'.$tid.' ORDER BY sticky DESC, last_post DESC') or error('Unable to fetch forum', __FILE__, __LINE__, $db->error());
            if (!$db->num_rows($result))
                message($lang_common['Bad request']);

?>
<div class="blockform">
    <h2><span><?php echo $lang_misc['Move posts'] ?></span></h2>
    <div class="box">
        <form method="post" action="moderate.php?fid=<?php echo $fid ?>&amp;tid=<?php echo $tid ?>">
            <div class="inform">
                <fieldset>
                    <legend><?php echo $lang_misc['Move legend'] ?></legend>
                    <div class="infldset">
                        <label><?php echo $lang_misc['Move to'].' '.$lang_common['Topic'] ?>
                            <select name="move_to_topic">
<?php
            while ($cur_topic = $db->fetch_assoc($result))
                echo "\t\t\t\t\t\t\t\t".'<option value="'.$cur_topic['id'].'">'.pun_htmlspecialchars($cur_topic['subject']).'</option>'."\n";
?>
                            </select>
                        </label>
                        <input type="hidden" name="posts" value="<?php echo $posts ?>" />
                        <input type="hidden" name="move_to_forum" value="<?php echo $move_to_forum ?>" />
                    </div>
                </fieldset>
            </div>
            <p class="buttons"><input type="submit" name="move_posts_topic" value="<?php echo $lang_misc['Move'] ?>" /><a href="javascript:history.go(-1)"><?php echo $lang_common['Go back'] ?></a></p>
        </form>
    </div>
</div>
<?php

            require PUN_ROOT.'footer.php';
        }

        $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $lang_misc['Moderate']);
        define('PUN_ACTIVE_PAGE', 'index');
        require PUN_ROOT.'header.php';

?>
<div class="blockform">
    <h2><span><?php echo $lang_misc['Move posts'] ?></span></h2>
    <div class="box">
        <form method="post" action="moderate.php?fid=<?php echo $fid ?>&amp;tid=<?php echo $tid ?>">
            <div class="inform">
                <fieldset>
                    <legend><?php echo $lang_misc['Move legend'] ?></legend>
                    <div class="infldset">
                        <label><?php echo $lang_misc['Move to'].' '.$lang_common['Forum'] ?>
                        <select name="move_to_forum">
<?php

        $result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name FROM '.$db->prefix.'categories AS c INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_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.redirect_url IS NULL AND f.num_topics>0 ORDER BY c.disp_position, c.id, f.disp_position') or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error());

        $cur_category = 0;
        while ($cur_forum = $db->fetch_assoc($result))
        {
            if ($cur_forum['cid'] != $cur_category)    // A new category since last iteration?
            {
                if ($cur_category)
                    echo "\t\t\t\t\t\t\t".'</optgroup>'."\n";

                echo "\t\t\t\t\t\t\t".'<optgroup label="'.pun_htmlspecialchars($cur_forum['cat_name']).'">'."\n";
                $cur_category = $cur_forum['cid'];
            }
            echo "\t\t\t\t\t\t\t\t".'<option value="'.$cur_forum['fid'].'">'.pun_htmlspecialchars($cur_forum['forum_name']).'</option>'."\n";
        }

?>
                            </optgroup>
                        </select>
                        </label>
                        <input type="hidden" name="posts" value="<?php echo implode(',', array_keys($posts)) ?>" />
                    </div>
                </fieldset>
            </div>
            <p class="buttons"><input type="submit" name="move_posts_forum" value="<?php echo $lang_misc['Move'] ?>" /><a href="javascript:history.go(-1)"><?php echo $lang_common['Go back'] ?></a></p>
        </form>
    </div>
</div>
<?php

        require PUN_ROOT.'footer.php';
    // Перемещение одного и более сообщений в другую тему
    }
    // Delete one or more posts
    else if (isset($_POST['delete_posts']) || isset($_POST['delete_posts_comply']))

4. Сохраняем файл moderate.php.
5. В языковые файлы misc.php добавляем новые элементы массива.
Для русского языка:

'Move posts' => 'Переместить сообщения',
'Move posts redirect' => 'Сообщения перемещены. Переадресация &hellip;',
'Post from topic' => 'Это сообщение перенесено из темы',

Для английского:

'Move posts' => 'Move posts',
'Move posts redirect' => 'Posts moved. Redirecting …',
'Post from topic' => 'This post is moved from topic',

Поверх этого ставите изменения из 4 поста этой темы.

Редактировался Visman (2010-10-22 17:24:36)

Offline

#2 2010-10-17 15:49:17

Luca
Участник
Зарегистрирован: 2009-10-08
Сообщений: 164

Re: [MOD] Перемещение сообщений 1.1

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

Есть ли выход?

Предлагаю сделать возможность выводить тему одним листом и выделять все нужные сообщения прям в ней.

Offline

#3 2010-10-17 16:51:05

Visman
Administrator
Из Сибирь
Зарегистрирован: 2009-06-08
Сообщений: 2,236
Сайт

Re: [MOD] Перемещение сообщений 1.1

Сейчас выхода нет.
Для этого надо плагин "Все/All" с ветки 1.2 переносить в ветку 1.4 в раздел модерации.

Offline

#4 2010-10-22 17:22:29

Visman
Administrator
Из Сибирь
Зарегистрирован: 2009-06-08
Сообщений: 2,236
Сайт

Re: [MOD] Перемещение сообщений 1.1

Обновление плагина до версии 1.1.
Ставить на установленную версию 1.0

1. Открываем файл moderate.php.
2. Находим

                $result = $db->query('SELECT id, poster, posted FROM '.$db->prefix.'posts WHERE topic_id='.$move_to_topic.' ORDER BY id DESC LIMIT 1') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
                $last_post = $db->fetch_assoc($result);
                $db->query('UPDATE '.$db->prefix.'topics SET last_post='.$last_post['posted'].', last_post_id='.$last_post['id'].', last_poster=\''.$db->escape($last_post['poster']).'\', num_replies=num_replies+'.$num_posts_deleted.' WHERE id='.$move_to_topic) or error('Unable to update topic', __FILE__, __LINE__, $db->error());

и меняем на

                $result = $db->query('SELECT id, poster, posted FROM '.$db->prefix.'posts WHERE topic_id='.$move_to_topic.' ORDER BY id DESC LIMIT 1') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
                $last_post = $db->fetch_assoc($result);
                $result = $db->query('SELECT id, poster, posted FROM '.$db->prefix.'posts WHERE topic_id='.$move_to_topic.' ORDER BY id LIMIT 1') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
                $first_post = $db->fetch_assoc($result);
                $db->query('UPDATE '.$db->prefix.'topics SET posted='.$first_post['posted'].', first_post_id='.$first_post['id'].', poster=\''.$db->escape($first_post['poster']).'\', last_post='.$last_post['posted'].', last_post_id='.$last_post['id'].', last_poster=\''.$db->escape($last_post['poster']).'\', num_replies=num_replies+'.$num_posts_deleted.' WHERE id='.$move_to_topic) or error('Unable to update topic', __FILE__, __LINE__, $db->error());

3. Сохраняем файл moderate.php.

Исправление учитывает вероятность смены первого поста в теме приемнике при переносе более ранних сообщений из темы источника.

Offline

#5 2012-10-21 16:45:54

terix
Участник
Зарегистрирован: 2012-10-06
Сообщений: 6

Re: [MOD] Перемещение сообщений 1.1

Подскажите, для 1.5 версии нормально встанет?

Offline

#6 2012-10-21 16:59:39

Visman
Administrator
Из Сибирь
Зарегистрирован: 2009-06-08
Сообщений: 2,236
Сайт

Re: [MOD] Перемещение сообщений 1.1

@terix, точно не скажу, но кажется ни чего в нем не менял используя в своей сборке.

Offline

#7 2012-10-21 20:26:39

terix
Участник
Зарегистрирован: 2012-10-06
Сообщений: 6

Re: [MOD] Перемещение сообщений 1.1

Затестил на локалхосте мод.
Создал новый топик, в него перенес сообщения из старого, в итоге вышло что в новом топике первыми идут сообщения перенесенные, а после уже первая месага из нового.
На старых версиях не было такого? Или это глюк на 1.5
Как я понимаю, это происходит в следствие того, что дата переносимых постов не меняется.

Редактировался terix (2012-10-21 20:31:29)

Offline

#8 2012-10-22 04:54:07

Visman
Administrator
Из Сибирь
Зарегистрирован: 2009-06-08
Сообщений: 2,236
Сайт

Re: [MOD] Перемещение сообщений 1.1

@terix, ни дата, ни порядковый номер переносимых постов не меняется. Из-за этого они встают не в конец топика назначения, а по порядку создания постов в форуме.

Offline

#9 2012-10-22 05:37:44

terix
Участник
Зарегистрирован: 2012-10-06
Сообщений: 6

Re: [MOD] Перемещение сообщений 1.1

Подскажите, пожалуйста, в каком месте вашего мода копать, чтобы задать текущую дату для переносимых постов.

Offline

#10 2012-10-22 09:15:41

Visman
Administrator
Из Сибирь
Зарегистрирован: 2009-06-08
Сообщений: 2,236
Сайт

Re: [MOD] Перемещение сообщений 1.1

Перемещение и изменение постов идет тут

                // перемещаем
                $add_text = '[color=#808080][i] '.$lang_misc['Post from topic'].' "'.$cur_topic['subject'].'"[/i]. '.$pun_user['username'].'[/color]'."\n\n";
                $db->query('UPDATE '.$db->prefix.'posts  SET topic_id='.$move_to_topic.', message=CONCAT(\''.$db->escape($add_text).'\', message) WHERE topic_id='.$tid.' AND id IN('.$posts.')') or error('Unable to update posts/topic', __FILE__, __LINE__, $db->error());

т.е. в SET кроме изменения полей topic_id и message можно добавить изменение поля posted. Но думаю это ни чего толкового не даст, так как вся сортировка постов в топиках идет по их id, а не по дате.
Думаю для вставки переносимых постов в конец темы нужно пересоздавать эти посты в базе с новыми id.

Offline

#11 2012-10-22 11:48:53

terix
Участник
Зарегистрирован: 2012-10-06
Сообщений: 6

Re: [MOD] Перемещение сообщений 1.1

Ясно, спасибо.

Offline

Подвал доски

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