2009-08-26 6 views
1

Benutzer auf meiner Website können Knoten eines benutzerdefinierten Typs hinzufügen (nennen wir es "Player"), aber können sie nicht veröffentlichen. Effektiv müssen sie vor dem Posten moderieren. Sobald ein Administrator/Moderator sie veröffentlicht hat, möchte ich, dass der Eigentümer/Herausgeber zu dem entsprechenden Administrator/Moderator geändert wird. Dies ist so, dass der Benutzer nicht in der Lage ist, sie zu bearbeiten, und so ist es möglich zu verfolgen, wer sie genehmigt etc.Ändern Sie Besitzer auf Publish-Knoten in Drupal

Wie gehe ich darüber? Ich dachte, es könnte Aktionen/Regeln/Workflow/Workflow-ng usw. beinhalten, aber ich habe mir jeden angeschaut und kann nicht herausfinden, wie man es zum Laufen bringt!

+0

Ich denke, was ich brauche, ist ein benutzerdefinierter Trigger (für wenn ein Der Player-Knoten wechselt von unpublished zu published) und dann kann ich eine Aktion aufrufen, um den Besitzer zu ändern. Ich muss nur herausfinden, wie man den Trigger macht! – x3ja

Antwort

3

Eine andere Alternative ist das Schreiben eines kurzen Moduls, das einen 'approve' Link mit hook_link() enthält. Verweisen Sie auf einen Menü-Callback, der die Eigentümerschaft des Knotens vom aktuellen Benutzer zu dem Benutzer ändert, der auf den Link "Genehmigen" geklickt hat.

Es könnte eine schöne, saubere Lösung sein, erfordert aber ein bisschen Drupal Knowhow. Wenn du jedoch jemanden im #drupal IRC Channel auf irc.freenode.net fragst, könnten sie dir zeigen, wie du anfangen kannst, oder es sogar als ein beigesteuertes Modul für dich programmieren.

1

Sie können dies manuell tun, wenn Sie die Player-Knoten bearbeiten. Am Ende gibt es eine Gruppe von zwei Einstellungen, in der Sie den Ersteller und die Erstellungszeit des Knotens ändern können.

Alternativ können Sie den Benutzern ohne Administratorrechte die Berechtigung erteilen, Knoten zu erstellen, aber ihre Berechtigung zum Bearbeiten dieser Knoten entfernen. Könnte funktionieren, aber könnte für diese Benutzer schmerzhaft sein.

+1

Dies erfordert natürlich, dass der Benutzer über die Berechtigung zum Verwalten von Inhalten verfügt, um diese Einstellungen zu ändern. Dies ist möglicherweise nicht zutreffend, da es möglicherweise andere Inhalte auf der Website gibt. X3ja möchte nicht unbedingt, dass seine Administratoren/Moderatoren frei davon laufen. – BrianV

+0

dave - Danke, aber es ist nicht ganz das, was ich will. Ich möchte, dass Benutzer speichern und zu ihren Einreichungen zurückkehren können, bis sie veröffentlicht werden. Daher glaube ich nicht, dass die zweite Option funktionieren würde. Die erste Option ist ein bisschen zu manuell für meine Admins/Moderatoren :) – x3ja

1

Nur um weitere Informationen hinzuzufügen - BrainV hat mir geholfen, den folgenden Code für ein benutzerdefiniertes Modul zu entwickeln - hier Publishtrigger genannt. Ich wollte die Schaltfläche genehmigen veröffentlichen den Player-Knoten und dann zuweisen Sie den "contentadmin" Benutzer, der ID 6 in meinem Fall hat ...

<?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); 
} 
Verwandte Themen