[img] parsen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Dave
Mitglied
Beiträge: 2085
Registriert: 25.05.2003 15:03
Wohnort: Wuppertal

[img] parsen

Beitrag 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:
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Beitrag 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
There are only 10 types of people in the world: Those who understand binary, and those who don't
Dave
Mitglied
Beiträge: 2085
Registriert: 25.05.2003 15:03
Wohnort: Wuppertal

Beitrag 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);
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Beitrag 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
There are only 10 types of people in the world: Those who understand binary, and those who don't
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag 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:
Antworten

Zurück zu „Coding & Technik“