← Скрипты · Защита анкеты

lockedЗащита принятой анкеты

бесплатно

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

howЧто блокируется

  • В выбранных разделах у первого сообщения темы исчезает штатная кнопка «Редактировать».
  • При прямом переходе по адресу формы редактирования игрок возвращается в тему.
  • Администраторы и модераторы сохраняют доступ; список групп-исключений можно изменить.
  • Хронологию и остальные сообщения темы скрипт не затрагивает.

setupКак поставить

  1. Вставьте код

    Администрирование → Формы → HTML верх. Вставьте код ниже целиком.

  2. Укажите разделы

    В forumIds впишите номера разделов с анкетами. Из адреса viewforum.php?id=6 нужна цифра 6.

  3. Проверьте исключения

    В bypassGroupIds перечислены группы, которым разрешено редактирование. По умолчанию 1, 2 — администраторы и модераторы.

<!-- Запрет редактирования первого поста © Mojito Studio
     Прямая ссылка — при поддержке kozhilya: https://forumd.ru/profile.php?id=7032 -->
<script>
window.MojitoFirstPostLock = {
    forumIds: [6], // id форумов для которых работает скрипт
    bypassGroupIds: [1, 2] // группы пользователей для которых скрипт не работает
};

(function(config) {
    if (typeof window.GroupID === 'undefined') return;
    if (config.bypassGroupIds.includes(Number(window.GroupID))) return;
    const selectors = config.forumIds.map(function(forumId) {
        return '#pun-viewtopic[data-forum-id="' + Number(forumId) + '"] div.topicpost li.pl-edit';
    });
    if (!selectors.length) return;
    const style = document.createElement('style');
    style.textContent = selectors.join(',') + '{display:none!important}';
    document.head.appendChild(style);
})(window.MojitoFirstPostLock);

$(document).ready(async function() {
    const loadForumId = window.MojitoFirstPostLock.forumIds;
    const loadForumGroups = window.MojitoFirstPostLock.bypassGroupIds;

    if ($('#pun-viewtopic').length) {
        const forumId = parseInt($('#pun-viewtopic').attr('data-forum-id'));
        if (loadForumId.includes(forumId)) {
            if (loadForumGroups.includes(GroupID)) {
                return;
            }
            await new Promise(resolve => setTimeout(resolve, 100));
            $('div.topicpost li.pl-edit').remove();
        }
    }

    if ($('#pun-edit').length) {
        const forumId = +$('.crumbs a[href*="viewforum"]').attr('href').match(/[?&]id=(\d+)/)[1];
        if (loadForumId.includes(forumId)) {
            if (loadForumGroups.includes(GroupID)) {
                return;
            }
            const topicId = +$('.crumbs a[href*="viewtopic"]').attr('href').match(/[?&]id=(\d+)/)[1];
            const firstPostId = +(await (await fetch(`/api.php?method=post.get&topic_id=${topicId}&fields=id&limit=1`)).json()).response[0].id;
            const thisPostId = +location.search.match(/[?&]id=(\d+)/)[1];
            if (thisPostId != firstPostId) {
                return;
            }
            await new Promise(resolve => setTimeout(resolve, 100));
            window.location.replace(`/viewtopic.php?id=${topicId}`);
        }
    }
});
</script>

Защита прямого перехода разработана при поддержке kozhilya.


moreНужен другой скрипт?

Этот скрипт можно использовать бесплатно. Если нужна другая механика для форума — опишите задачу.

Написать в Telegram