Здравствуйте уважаемое сообщество Сам с друпалом знаком не долго и вот возникла такая необходимость, сделать так чтобы пользователь (автор ноды) мог её редактировать только в течении например 2 часов или 1 дня. Каким образом можно это реализовать? Поиск по этому сайту ничего подходящего не дал.
Буду очень благодарен за помощь.
Комментарии
Да, тоже интересно, присоединяюсь к вопросу.
Тема мне тоже интересна, по-моему логично таким образом защитить некий важный или сайтообразующий контент.
Т.е. пользователь приносит на сайт какую-то информацию, редактирует ее до нужной кондиции и затем инфа переходит в собственность сайта.
Но что интересно, информации по-вопросу практически не нашел, во здесь еще.
Готовое решение наверняка есть, только им никто не поделится забесплатно. Не будем ждать волшебника "в голубом вертолете" попробуем сами найти ответ. От каждого по мысли и строчки кода - напишим функцию.
1. Некая функция постоянно активна и прочесывает все/нужные ноды на предмет устаревания даты
2. При попытки пользователя открыть нужную ноду на редактирование - отбирать у него права на ноду и мягко извиняться.
3. Некая функция запускается раз в сутки и прочесывает все/нужные ноды на предмет устаревания даты
По пункту 1: не знаю пока как реализовать и по-моему в корне неверно, лишние машинные затраты
По пункту 2: думаю, что в состоянии написать кое-какой код
По пункту 3: не знаю пока как реализовать, но на мой взгляд самый лучший вариант
Вот еще ссылка в тему
Нашел импортное решение, модуль node_expire, немного поупражнялся. Не понравилось: зависимость от другого модуля rules + если я правильно понял по истечении срока действия пользователь может открыть ноду на редактирование, но не может сохранить изменения (выдается сообщение)...
По пункту №2. Все-таки написал кое-как свой модуль, насколько он "правильный" не ручаюсь. Взят конкретный случай: после создания ноды Page, по истечении срока, пользователь не сможет редактировать свою ноду. Понятно, что в настройках должно стоять разрешение на редактирование только своих нод.
создаем папку /sites/all/modules/noedit
в ней файл noedit.info с содержимым:
name = "Noedit"
description = "Zapret nody na redaktirovanie"
core = "6.x"
еще один файл noedit.module с содержимым:
// $Id: noedit.module,v 0.1 2009/04/16 00:37:32 Serg_M Exp $
function noedit_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL){
switch($op){
case 'load':
if ($node->type == 'page') {
$time_limit = '30';
if (time() - $node->created > $time_limit) {
$node->uid = '1';
}
}
break;
}
}
в переменную $time_limit = 'время в секундах', например 1 сутки = 86400 сек.
Стандартное подключение модуля + чистка кэша.
P.S. вроде грамотнее делать _nodeapi() через "prepare" но у меня не получалось принудительно закрывать форму открытую на редактирование, т.е. после истечения срока пользователь мог еще 1 раз отредактировать материал... а может через node_access()? Кто бы дал волшебного пендаля в нужном направлении.
Спасибо, полезная вещь. Было бы здорово, если бы модуль довести до конечного пользователя в виде полностью готового модуля с админкой, которая позволяет выбирать тип материала и время. И залить модуль на орг. Еще раз спасибо.
хотите быть спонсором модуля? не вопрос.
Serg_M - вообщето не грамотно. там в другом месте надо пытаться влезть
и не обязательно uid ноды менять.
2 типа материала. 2 роли с разными правами.
1 SQL меняет тип материала в таблице.
Хотя среди модулей 2 или 3 были с уже готовым функционалом. На вскидку - не помню...
вась, зачем? таких готовых нет. Есть модули снимающие и ставящие на публикацию и все
А тут с разрешениями надо играться и прсекать попытки редактирования ноды.
Зачем менять структуру БД и делать через задницу если надо делать так как надо?
Собрал в силу сегодняшних своих знаний, может и неграмотно, но работает. Информативность Вашей подсказки для меня = 0, если можно название функции или кусочек кода.
Если замечание про uid из данного кода, то идет не присваивание, а временная подмена (право/авторство на ноду сохраняется за пользователем).