[решено] Cron. Обновление материала. Ревизия создается от гостя. Как победить?

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

Аватар пользователя MasterDzen MasterDzen 29 января 2013 в 11:37

создал очередь, в обработчике вносятся некоторые изменения в материал,
далее делается node_save.

создается ревизия материала и ей проставляется юзер:
либо гость, если крон запускается по расписанию,
либо админ, если крон дергаю я сам.

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

например:
счас так, до работы крона:

$node->uid == 123;
$node->revision_uid == 321;

после запуска крона получается так:

$node->uid = 123;
$node->revision_uid = 0;

как-то так вот получается..

а хотелось бы..
чтобы после работы крона было так:

$node->uid = 123;
$node->revision_uid = 321;

есть вариант сделать запрос к базе и проапдейтить поля таблицы (пока даже незнаю что и где править Smile )..

но может есть стандартное друпаловское решение?

Комментарии

Аватар пользователя MasterDzen MasterDzen 29 января 2013 в 13:27

"iTux" wrote:
hook_node_presave ?

попробовал.. непомогло =/
после пресэйва, все равно выполняется node_save.. а там есть такой код:

"drupal7" wrote:

// Save the node and node revision.
if ($node->is_new) {
// For new nodes, save new records for both the node itself and the node
// revision.
drupal_write_record('node', $node);
_node_save_revision($node, $user->uid);
$op = 'insert';
}
else {
// For existing nodes, update the node record which matches the value of
// $node->nid.
drupal_write_record('node', $node, 'nid');
// Then, if a new node revision was requested, save a new record for
// that; otherwise, update the node revision record which matches the
// value of $node->vid.
if (!empty($node->revision)) {
_node_save_revision($node, $user->uid);
}
else {
_node_save_revision($node, $user->uid, 'vid');
$update_node = FALSE;
}
$op = 'update';
}

вобщем по-любому создается ревизия от "залогиненого" юзера, гость, если крон сам дёрнулся или я, если я дёрнул..

получилось так:

"masdzen" wrote:

$revision_uid = $node->revision_uid;
node_object_prepare($node);
node_save($node);

$node->revision_uid = $revision_uid;
_node_save_revision($node, $revision_uid, 'vid');

такие дела.

PS: только я не могу вставлять тэг для кода в каментах? при создании материала добавил область с кодом нормально.

Аватар пользователя iTux iTux 29 января 2013 в 17:37

"MasterDzen" wrote:
получилось так:
"masdzen" написал(а):
$revision_uid = $node->revision_uid;
node_object_prepare($node);
node_save($node);
$node->revision_uid = $revision_uid;
_node_save_revision($node, $revision_uid, 'vid');
такие дела.

может

<?php
global $user;
$old_user $user;
$some_user user_load('uid' => $revision_uid);
$user $some_user;
node_object_prepare($node);
node_save($node);
$user old_user;
?>

?

Аватар пользователя MasterDzen MasterDzen 29 января 2013 в 17:57

"iTux" wrote:
<?php
global $user;
$old_user = $user;
$some_user = user_load('uid' => $revision_uid);
$user = $some_user;
node_object_prepare($node);
node_save($node);
$user = old_user;
?>

о.. о таком не думал, надо будет попробовать.