Смена владельца на узле публикации в Drupal - PullRequest
1 голос
/ 26 августа 2009

Пользователи на моем сайте могут добавлять узлы произвольного типа (назовем это «Player»), но не могут публиковать их. Эффективно они должны модерировать перед публикацией. После того, как администратор / модератор опубликовал их, я хочу, чтобы владелец / издатель был заменен соответствующим администратором / модератором. Это делается для того, чтобы пользователь не мог их редактировать, а также для отслеживания того, кто их утвердил и т. Д.

Как мне это сделать? Я думал, что это может быть связано с действиями / правилами / рабочим процессом / рабочим процессом-ng и т. Д., Но я рассмотрел каждое из них и не могу понять, как заставить его работать!

Ответы [ 3 ]

3 голосов
/ 26 августа 2009

Другая альтернатива - написать короткий модуль, который включает ссылку «одобрить», используя hook_link (). Укажите эту ссылку на обратный вызов меню, который меняет владельца узла с текущего пользователя на пользователя, который щелкнул ссылку «Подтвердить».

Это может быть хороший, чистый способ решения этой проблемы, но требует немного ноу-хау Drupal. Однако, если вы спросите кого-то в IRC-канале #drupal на irc.freenode.net, он может показать вам, как начать работу, или даже закодировать его как дополнительный модуль для вас.

1 голос
/ 28 августа 2009

Просто чтобы добавить больше информации - BrainV помог мне разработать следующий код для пользовательского модуля, который называется publishtrigger. Я хотел, чтобы кнопка подтверждения опубликовала узел Player, а затем назначил его пользователю «contentadmin», который в моем случае имеет ID 6 ...

<?php
/**
 * Implementation of hook_perm().
 */
function publishtrigger_perm() {
  return array('approve nodes');
}

    /**
 * Implementation of hook_menu().
 */
function publishtrigger_menu() {
  $items['approve/%'] = array(
    'title' => 'Approve',
    'page callback' => 'publishtrigger_approve_node',
    'page arguments' => array(1),
    'access arguments' => array('approve nodes'),
    'type' => MENU_CALLBACK,
  );
  return $items;
}

/**
 * Implementation of hook_link().
 */
function publishtrigger_link($type, $object, $teaser = FALSE) {

  // Show this link at the bottom of nodes of the Player type which are not yet
  // owned by contentadmin (UID 6).
  if ($type == 'node' && $object->type == 'player') {

    // Make sure user has permission to approve nodes.
    if (user_access('approve nodes')) {
      $links = array();
      if ($object->uid != 6 || $object->status == 0) {
        // Node is not owned by contentadmin (UID 6), and therefore not approved.
        $links['approve_link'] = array(
          'title' => 'Approve',
          'href' => 'approve/' . $object->nid,
        );
      }
      else {
        // Node is already approved
        $links['approve_link'] = array('title' => 'Already approved');
      }
      return $links;
    }
  }
}

/**
 * When this code is run, adjust the owner of the indicated node to 'contentadmin',
 * UID 6.
 *
 * @param $nid
 *  The node id of the node we want to change the owner of.
 */
function publishtrigger_approve_node($nid) {
  // Load the node.
  $node = node_load($nid);

  // Set the UID to 6 (for contentadmin).
  $node->uid = 6;

  // Publish the node
  $node->status = 1;

  // Save the node again.
  node_save($node);

  // Go back to the node page
  drupal_goto($node->path);
}
1 голос
/ 26 августа 2009

Вы можете сделать это вручную при редактировании узлов проигрывателя. В конце есть группа из двух настроек, где вы можете изменить создателя узла и время создания.

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

...