Hallo,
Ich habe gerade den Auftrag abgeschlossen die Tag-Erstellung (Tags auswählen dürfen alle User) nur einer bestimmten Usergruppe zu ermöglichen.
Da dies evt. auch andere User hier interessieren könnte:
Achtung: derzeit nicht updatesicher, werde evt. später eine updatesichere Version nachreichen.
Ersetzt in der datei TL-ROOT/system/modules/tags/TagField.php die function savetags durch folgende Funktion. Weiters müsst die 10 in
PHP-Code:
if($this->User->isMemberOf(10) OR $this->User->isAdmin)
durch die ID eurer, zur Festlegung der Tags bestimmten, Gruppe ersetzen.
PHP-Code:
protected function saveTags($value)
{
if (!$this->blnSubmitInput)
{
$this->import('BackendUser','User');
$this->import('Database');
// Nur wenn der aktuelle Benutzer der "Tags"-Gruppe angehört oder Admin ist
// ist er auch berechtigt neue Tags zu erstellen
// ergo -> Standardverfahren!
if($this->User->isMemberOf(10) OR $this->User->isAdmin)
{
$this->Database->prepare("DELETE FROM tl_tag WHERE from_table = ? AND id = ?")
->execute($this->table, $this->currentRecord);
$tags = array_filter(trimsplit(",", $value), 'strlen');
foreach ($tags as $tag)
{
$this->Database->prepare("INSERT INTO tl_tag (id, tag, from_table) VALUES (?, ?, ?)")
->execute($this->currentRecord, $tag, $this->table);
}
return "";
}
// Wenn der eingeloggte User nicht Mitglied der Gruppe "Tags" ist
// ergo -> Custom-Verfahren
else{
// Bisher im System vorhandene Tags abfragen!
$res = $this->Database->prepare("SELECT `tag` FROM tl_tag WHERE from_table = ?")
->execute($this->table);
$AllTags = $res->fetchAllAssoc();
$tags = array_filter(trimsplit(",", $value), 'strlen');
$tags_for_this_record = array();
foreach($AllTags as $AT)
{
$i = 0;
foreach ($tags as $tag)
{
if($AT['tag'] == $tag)
{
if(!in_array($tag,$tags_for_this_record))
{
$tags_for_this_record[] = $tag;
}
}
$i++;
}
}
// Löschen aller zu diesem Datensatz eigetragenen Tags
$this->Database->prepare("DELETE FROM tl_tag WHERE from_table = ? AND id = ?")
->execute($this->table, $this->currentRecord);
// Eintragen der neuen Tags
foreach ($tags_for_this_record as $t4r)
{
$this->Database->prepare("INSERT INTO tl_tag (id, tag, from_table) VALUES (?, ?, ?)")
->execute($this->currentRecord, $t4r, $this->table);
}
}
return "";
}
else return $value;
}
Ich hoffe Ich konnte damit jemanden helfen ;-)
Lesezeichen