Drupal (7) Referenzauswahl-Felder (Node / User Reference) haben häufig bestimmte Anforderungen bezüglich ihrer Auswahlwerte. Möchte man so beispielsweise nicht nur alle Nodes eines Typs anbieten, sondern nur "Eigene" Inhalte eines Benutzers, wird es schon schwieriger.
Dafür bietet das Feld allerdings eine alternative Quelle aus "Views", indem man einen View mit einer "Reference" Darstellung auswählt. Klappt wunderbar.
Wie ist nun die folgende Anforderung zu lösen:
- Benutzer sollen nur ihre selbst erstellten Inhalte auswählen können, wenn ein neuer Inhalt erstellt wird.
- Benutzer sollen die Einträge des Inhalts-Autors zu dem dieses Feld gehört auswählen, wenn ein Inhalt bearbeitet wird.
- Administratoren und Verwalter dürfen die Inhalte aller Autoren auswählen
Die Lösung funktioniert über Kontextfelder mit der Auswahl des Benutzers: Uid.
Zusätzlich wird eine Beziehung zum Inhaber benötigt, die hier angewendet werden muss.
Als Standard-Argument nutzt man dann im Uid-Kontextfilter den folgenden PHP-Code
global $user;
if (!empty($user->roles) && (in_array('Verwalter', $user->roles) || in_array('Administrator', $user->roles))) {
// Alle anzeigen für Administratoren!
return 'all';
} else if (arg(1) !== NULL && is_numeric(arg(1))) {
// Werte des Autors verwenden
$arg_nid = check_plain(arg(2));
$node = node_load($arg_nid);
if ($node !== FALSE) {
$author = $node->uid;
return $author;
}
}
// Sonst: Eigene User-ID des eingeloggten Benutzers verwenden!
return $user->uid;
?>
Und schon klappt's!
Viel Erfolg damit. Alle Angaben ohne Gewähr ;)