Das ist zwar nicht ganz das was du suchst, da es so nicht über das ACP konfiguriert wird, aber mir hat es trotzdem ausgereicht:
öffne die functions_post.php
In der Funktion "prepare_message" gibt es eine Stelle
Hiernach fügst du ein
Code: Alles auswählen
//---- EDITED FROM HERE ----
global $db,$userdata;
$group_id= 1; //Hier die Gruppe eintragen die das Tag benutzen darf.
$sql = 'SELECT user_id FROM '. USER_GROUP_TABLE . ' WHERE (group_id=$group_id) AND user_id='.$userdata['user_id'];
if (!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain group data', '', __LINE__, __FILE__, $sql);
}
if(!$db->sql_numrows($result) && $userdata['user_level'] != ADMIN)
{
//Remove forbidden tags from posted message
$message = preg_replace("#\[IMG\](.*?)\[/IMG\]#is","[URL]\\1[/URL]",$message);
}
//---- END EDIT ----
Dieser Code ersetzt beim Posten automatisch alle IMG Tags durch URL Tags sofern der User das IMG Tag nicht benutzen darf, weil er nicht in der Usergruppe ist. Das lässt sich natürlich auch erweitern um beliebige andere Ersetzungen und auch auf mehrere erlaubte Gruppen (im SQL Befehl dann eben nicht group_id = $group_id sondern eine group_id IN (1,2,3...) Konstruktion) erweitern. Man könnte das natürlich auch in das ACP übernehmen (statt der SQL Abfrage dann eben eine Auth Abfrage. Möchte man, dass diese Beschränkung nur in gewissen Foren gilt und nicht allgemein muss man die Foren_id in der man gerade ist abfragen, dazu sind aber mehr Änderungen erforderlich, da die Funktion prepare_message die forum_id nicht übergeben bekommt und somit auch nicht kennt. Für mich hat diese Änderung aber so ausgereicht, ich habe so einen Code (ein selbsterstellter) der nur von mir und meiner Moderatorengruppe verwendet werden kann.
EDIT: Ich glaube das ist nicht das was du meinst, denn das bezieht sich nur auf das Posten. Wenn man eine Betrachtungsberechtigung einbauen möchte, dann würde man das besser in die bbcode.php in Ähnlicher Art einfügen:
einfach in der Funktion bbencode_first_pass direkt nach der ersten Klammer einfügen:
Code: Alles auswählen
global $db,$userdata;
$sql = 'SELECT user_id FROM '. USER_GROUP_TABLE . ' WHERE (group_id=8) AND user_id='.$userdata['user_id'];
if (!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain group data', '', __LINE__, __FILE__, $sql);
}
if(!$db->sql_numrows($result) && $userdata['user_level'] != ADMIN)
{
$text = preg_replace("#\[img\]((http|ftp|https|ftps)://)([^ \?&=\#\"\n\r\t<]*?(\.(jpg|jpeg|gif|png)))\[/img\]#sie", "'[URL]\\1' . str_replace(' ', '%20', '\\3') . '[/URL]'", $text);
}
Das macht im Prinzip das gleiche, allerdings wird jetzt sowohl beim Posting als auch bei der Anzeige ersetzt. Das lässt sich natürlich auch auf Gäste beschränken, dann einfach statt
Code: Alles auswählen
$sql = 'SELECT user_id FROM '. USER_GROUP_TABLE . ' WHERE (group_id=8) AND user_id='.$userdata['user_id'];
if (!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain group data', '', __LINE__, __FILE__, $sql);
}
if(!$db->sql_numrows($result) && $userdata['user_level'] != ADMIN)
das hier:
Code: Alles auswählen
if($userdata['user_id'] == ANONYMOUS || !$userdata['session_logged_in'])
Dann würde bei allen Gästen das ganze durch eine URL ersetzt. Alternativ kann man die Bilder natürlich auch durch statischen Text ersetzen, dazu einfach die Ersetzung im preg_replace anpassen.
Wichtig: Alle Dateien vor der Änderung sichern! Ich habe das nicht vollständig getestet und übernehme keine Garantie!