Seite 1 von 1

[img] parsen

Verfasst: 02.03.2005 00:09
von Dave
Wie parse ich nur für bestimmte User (Die User ID kann ich gerne angeben) sowas wie:

Code: Alles auswählen

[img]www.domain.de/signatur.php[/img]
Will es Ja nicht direkt für alle User freigeben :wink:

Verfasst: 02.03.2005 00:45
von D@ve
Also den entsprechenden regexp findest Du in der includes/bbcode.php bei Zeile 280 rum:

Code: Alles auswählen

// [img]image_url_here[/img] code..
$text = preg_replace("#\[img\]((ht|f)tp://)([^ \?&=\"\n\r\t<]*?(\.(jpg|jpeg|gif|png)))\[/img\]#sie", "'[img:$uid]\\1' . str_replace(' ', '%20', '\\3') . '[/img:$uid]'", $text);
Hab gerade bei einem 2.0.5 das ich noch auf der Platte habe nachgeschaut, da sah das so aus:

Code: Alles auswählen

// [img]image_url_here[/img] code..
$text = preg_replace("#\[img\]((ht|f)tp://)([^\r\n\t<\"]*?)\[/img\]#sie", "'[img:$uid]\\1' . str_replace(' ', '%20', '\\3') . '[/img:$uid]'", $text);
Du könntest Dir jetzt die Funktion so umbauen, dass Du beim Aufruf noch einen zusätzlichen Parameter einbaust:

Code: Alles auswählen

function bbencode_first_pass($text, $uid,$allow_php_images)
{
.
.
.
// [img]image_url_here[/img] code..
if ($allow_php_images)
{
    $text = preg_replace("#\[img\]((ht|f)tp://)([^\r\n\t<\"]*?)\[/img\]#sie", "'[img:$uid]\\1' . str_replace(' ', '%20', '\\3') . '[/img:$uid]'", $text);
} else
   {
       $text = preg_replace("#\[img\]((ht|f)tp://)([^ \?&=\"\n\r\t<]*?(\.(jpg|jpeg|gif|png)))\[/img\]#sie", "'[img:$uid]\\1' . str_replace(' ', '%20', '\\3') . '[/img:$uid]'", $text);
   }
Jetzt fügst Du in der config Tabelle noch einen neuen Wert user_allow_php_img ein, wo Du mit Semikolon getrennt die IDs der User einträgst, die das benutzen dürfen.

Beim Aufruf der Funktion in der functions_post.php (ca Zeile 100) musste jetzt halt noch entsprechend die config auslesen und benutzen:

Code: Alles auswählen

$php_img_user_list = explode(";",$board_config['user_allow_php_img']);
$user_allow_php_img = ( in_array($userdata['user_id'], $php_img_user_list)) ? true : false;
$message = bbencode_first_pass($message, $bbcode_uid, $user_allow_php_img);
Achtung alle Angaben ohne Gewähr, hab das jetzt nur grob runtergeschrieben und nix getestet. Obige Lösung hat den Vorteil, dass Du fast ohne Änderungen der DB auskommst. Da ich mal davon ausgehe, dass es sich nur um ein paar Moderatoren handelt, die das dürfen ist das auch einfach zu warten.
Alternative wäre halt ein zusätzliches Feld in der Users-Tabelle, wo Du das dann - ins ACP integriert - für jeden User einzeln aktivieren oder deaktiveren könntest (halt aufwendiger)...

Gruß, Dave

Verfasst: 02.03.2005 09:01
von Dave
Änderungen an der DB habe ich sowieso nicht vor sondern das wird im Code gemacht.
Danke für deinen Tipp... Aber wieso nimmst du die von 2.0.5 wenn du einfach ein php als endung bei der jetzigen hinzufügen kannst?

Code: Alles auswählen

$text = preg_replace("#\[img\]((ht|f)tp://)([^ \?&=\"\n\r\t<]*?(\.(jpg|jpeg|gif|png|php)))\[/img\]#sie", "'[img:$uid]\\1' . str_replace(' ', '%20', '\\3') . '[/img:$uid]'", $text);

Verfasst: 02.03.2005 12:29
von D@ve
Dave hat geschrieben:Änderungen an der DB habe ich sowieso nicht vor sondern das wird im Code gemacht.
Danke für deinen Tipp... Aber wieso nimmst du die von 2.0.5 wenn du einfach ein php als endung bei der jetzigen hinzufügen kannst?

Code: Alles auswählen

$text = preg_replace("#\[img\]((ht|f)tp://)([^ \?&="\n\r\t<]*?(\.(jpg|jpeg|gif|png|php)))\[/img\]#sie", "'[img:$uid]\\1' . str_replace(' ', '%20', '\\3') . '[/img:$uid]'", $text);
Weil ich keinen Plan von regulären Ausdrücken hab :D

Verfasst: 02.03.2005 12:37
von Blutgerinsel
D@ve hat geschrieben:Weil ich keinen Plan von regulären Ausdrücken hab :D
Ja jetzt match es auch auf php Dateien da aber nur authentifizierte User dies tun können sollte man noch das Userlevel etc. übergeben und abprüfen und dann ggf. das normale Pattern anwenden oder das für authentifizierte...........

Man könnte auch darüber nachdenken eine weitere Funktion der Übersichtlichkeitswillen einzuspannen mittels preg_replace_callback....

Jedenfalls wären Kommentare sinnvoll um auf eine eigene Änderung hinzuweisen :wink: