Задача: оповестить пользователей через jabber о создании новой ноды.
Написал модуль, который позволяет отправлять xmpp сообщения пользователям. Поставил модуль Rules (http://drupal.org/project/rules) и на событие "After saving new content" добавил выполнение собственного php кода, откуда и отправляю сообщения.
Для управления доступом к нодам использую модуль http://drupal.org/project/taxonomy_access
Столкнулся с такой проблемой:
При выполнении php кода для события (Rules) можно работать с созданной нодой, но права на нее еще не расставлены. Т.е. примерный ход событий такой:
1. Создание ноды
2. Отлавливается событие (Rules) -> обработка события (php)
3. Выставление прав на ноду
Как сделать так, чтобы уже в обработке события расставить права на ноду? Это надо чтобы отправлять оповещение только имеющим доступ к ноде пользователям.
Комментарии
Как можно отловить с помощью хуков (или еще как) полное сохранение нода с уже установленными правами на него?
Решил проблему следующим образом.
На событие "after saving new content" делаю "redirect to page" на собственную страницу, в которой вызываю необходимый мне скрипт. При этом в урле передаю nid созданного нода. После того как скрипт отрабатывается я через него делаю обратный переход на страницу созданного объекта.
<?php
global $base_url;
$nid = $_GET['nid'];
$node = node_load($nid);
if ($node) {
$result = db_query_range('SELECT DISTINCT u.* FROM {users} u ORDER BY u.access DESC', 0, 100);
while ($data = db_fetch_object($result)) {
$account = user_load(array('uid' => $data->uid));
if (node_access('view', $node, $account) && ($data->uid != $node->uid) && ($data->name != 'root')){
$message = t('author создал type <title> url', array('author' => $node->name, 'type' => t($node->type),'owner' => $owner->name, 'title' => $node->title, 'url' => $base_url . '/node/' . $node->nid));
xmpp_sendmessage($data->name, $message);
}
}
drupal_goto('node/' . $nid);
}
?>
Подскажите, пож-та!)
Не могу найти, как правильно задать путь при action "redirect page". Мне после создания ноды надо перенаправить на страницу редактирования ноды, т.е необходимо передать nid
проблема решена! У меня не был установлен модуль Token, с ним заработал путь node/[node:nid]