Запрет на редактирование ноды через XXX часов\дней

Главные вкладки

Аватар пользователя Psi-factor Psi-factor 27 марта 2009 в 12:43

Здравствуйте уважаемое сообщество Smile Сам с друпалом знаком не долго и вот возникла такая необходимость, сделать так чтобы пользователь (автор ноды) мог её редактировать только в течении например 2 часов или 1 дня. Каким образом можно это реализовать? Поиск по этому сайту ничего подходящего не дал.
Буду очень благодарен за помощь.

Комментарии

Аватар пользователя Serg_M Serg_M 15 апреля 2009 в 10:17

Тема мне тоже интересна, по-моему логично таким образом защитить некий важный или сайтообразующий контент.
Т.е. пользователь приносит на сайт какую-то информацию, редактирует ее до нужной кондиции и затем инфа переходит в собственность сайта.
Но что интересно, информации по-вопросу практически не нашел, во здесь еще.
Готовое решение наверняка есть, только им никто не поделится забесплатно. Не будем ждать волшебника "в голубом вертолете" попробуем сами найти ответ. От каждого по мысли и строчки кода - напишим функцию.

1. Некая функция постоянно активна и прочесывает все/нужные ноды на предмет устаревания даты
2. При попытки пользователя открыть нужную ноду на редактирование - отбирать у него права на ноду и мягко извиняться.
3. Некая функция запускается раз в сутки и прочесывает все/нужные ноды на предмет устаревания даты

По пункту 1: не знаю пока как реализовать и по-моему в корне неверно, лишние машинные затраты
По пункту 2: думаю, что в состоянии написать кое-какой код
По пункту 3: не знаю пока как реализовать, но на мой взгляд самый лучший вариант

Вот еще ссылка в тему

Аватар пользователя Serg_M Serg_M 18 апреля 2009 в 7:20

Нашел импортное решение, модуль node_expire, немного поупражнялся. Не понравилось: зависимость от другого модуля rules + если я правильно понял по истечении срока действия пользователь может открыть ноду на редактирование, но не может сохранить изменения (выдается сообщение)...

По пункту №2. Все-таки написал кое-как свой модуль, насколько он "правильный" не ручаюсь. Взят конкретный случай: после создания ноды Page, по истечении срока, пользователь не сможет редактировать свою ноду. Понятно, что в настройках должно стоять разрешение на редактирование только своих нод.

создаем папку /sites/all/modules/noedit

в ней файл noedit.info с содержимым:

; $Id: noedit.info,v 0.1 2009/04/16 16:56:19 Serg_M Exp $
name = "Noedit"
description = "Zapret nody na redaktirovanie"
core = "6.x"

еще один файл noedit.module с содержимым:

<?php
// $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()? Кто бы дал волшебного пендаля в нужном направлении.

Аватар пользователя Psi-factor Psi-factor 15 мая 2009 в 14:23

Спасибо, полезная вещь. Было бы здорово, если бы модуль довести до конечного пользователя в виде полностью готового модуля с админкой, которая позволяет выбирать тип материала и время. И залить модуль на орг. Smile Еще раз спасибо.

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 15 мая 2009 в 15:02

"<a href="mailto:Psi-factor@drupal.org">Psi-factor@drupal.org</a>" wrote:
Было бы здорово, если бы модуль довести до конечного пользователя в виде полностью готового модуля с админкой, которая позволяет выбирать тип материала и время. И залить модуль на орг. Smile Еще раз спасибо.

хотите быть спонсором модуля? не вопрос.
Serg_M - вообщето не грамотно. там в другом месте надо пытаться влезть Smile
и не обязательно uid ноды менять.

Аватар пользователя PVasili PVasili 15 мая 2009 в 15:26

2 типа материала. 2 роли с разными правами.
1 SQL меняет тип материала в таблице.
Хотя среди модулей 2 или 3 были с уже готовым функционалом. На вскидку - не помню... Sad

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 15 мая 2009 в 15:54

"PVasili" wrote:
1 SQL меняет тип материала в таблице.

вась, зачем? таких готовых нет. Есть модули снимающие и ставящие на публикацию и все Smile
А тут с разрешениями надо играться и прсекать попытки редактирования ноды.

Зачем менять структуру БД и делать через задницу если надо делать так как надо? Smile

Аватар пользователя Serg_M Serg_M 15 мая 2009 в 15:57

"Ilya1st" wrote:
Serg_M - вообщето не грамотно. там в другом месте надо пытаться влезть Smile и не обязательно uid ноды менять.

Собрал в силу сегодняшних своих знаний, может и неграмотно, но работает. Информативность Вашей подсказки для меня = 0, если можно название функции или кусочек кода.
Если замечание про uid из данного кода, то идет не присваивание, а временная подмена (право/авторство на ноду сохраняется за пользователем).