Seite 1 von 2

BBCode -- Text nur für bestimmte Gruppe sichtbar

Verfasst: 21.07.2013 16:51
von Helmut
Hallo,

ich suche eine Möglichkeit, in einem Posting bestimmte Textstellen nur für eine bestimmte Gruppe sichtbar zu machen. Am besten wäre ein BBCode, aber ich habe es noch nicht hin bekommen.

Für Templates ist es kein Problem, das geht das Snippet Gruppenzugehörigkeiten eines Benutzers prüfen, das funktioniert aber nicht innerhalb vom Postingtext (<!-- IF S_IN_GROUP --> ...) als BBCode. Hat von euch jemand eine Lösung wie ich das umsetzen könnte?


Es geht hier nicht darum dass der BBCode nur von bestimmten Gruupen benutzt werden kann, das habe ich schon umgesetzt.

Gruß Helmut

Re: BBCode -- Text nur für bestimmte Gruppe sichtbar

Verfasst: 21.07.2013 19:46
von BNa
Von hier an lesen: https://www.phpbb.com/community/viewtop ... #p12861373

und [b]S_IN_GROUP[/b] in die relevante Lang Datei einfriemeln :wink:

Es müssen alle aktiven Sprachen editiert werden..

Re: BBCode -- Text nur für bestimmte Gruppe sichtbar

Verfasst: 21.07.2013 20:44
von Helmut
Hallo BNa,

danke dir für die Antwort, aber irgendwie klappt das nicht dass die Anweisung ausgeführt wird.

Ich habe in der entsprechenden lang Datei folgendes eingefügt:

Code: Alles auswählen

    'BOARD_GROUP_BEGIN'        => '<!-- IF S_IN_GROUP -->',
    'BOARD_GROUP_END'        => '<!-- ENDIF -->',
Als BBCode:

Code: Alles auswählen

[IN_GROUP]{TEXT}[/IN_GROUP]
und als Ersetzung

Code: Alles auswählen

<span>{L_BOARD_GROUP_BEGIN}{TEXT}{L_BOARD_GROUP_END}</span>
Im Quelltext taucht es dann als <span><!-- IF S_IN_GROUP -->[...]<!-- ENDIF --></span> entsprechend auf, wird daber nicht ausgeführt.
Ich habe dann den Code <!-- IF S_IN_GROUP -->[...]<!-- ENDIF --> in der entsprechenden Template Datei direkt nach {postrow.MESSAGE} gehängt, dann geht es. Mir scheint dass diese <!-- ... --> Anweisungen im Postingtext nicht entsprechend verarbeitet bzw. geparst werden. Das scheint, als ob die ganze Sache doch etwas aufwendiger ist.

Gruß Helmut

Re: BBCode -- Text nur für bestimmte Gruppe sichtbar

Verfasst: 22.07.2013 18:09
von BNa
Nicht ganz richtiger Ansatz.

Lies nochmal
https://www.phpbb.com/community/viewtop ... #p12861373

Ansonsten Beispiel

Öffne

language/de/common.php

Finde

Code: Alles auswählen

$lang = array_merge($lang, array(
Davor füge ein

Code: Alles auswählen

include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx);

global $user;

// zu überprüfende Gruppen IDs ( Beispiel Gruppen ID 5, 10, 12, 15 )
// Hinweis: Bei mehreren Gruppen muss es ein array() sein!
$gruppen_id = array(5,10,12,15);

// zu überprüfender User ( Beispiel: Der User, der diese Seite aufgerufen hat )
$benutzer_id = $user->data['user_id'];

// Nun erfolgt die eigentliche Prüfung:
$is_in_group = group_memberships($gruppen_id, $benutzer_id , true);


if ($is_in_group == true)
{
    // Teile dem Template System mit, das die Variable "IN_GROUP" den Wert TRUE bekommt
   $template->assign_var('IN_GROUP', true);
}
Nun kannst Du die Variable {L_IN_GROUP} in BBcodes nutzen

Re: BBCode -- Text nur für bestimmte Gruppe sichtbar

Verfasst: 22.07.2013 20:46
von Helmut
Hallo BNa,

auch mit deinem Beispiel geht es nicht, das Problem ist dass der Schalter <!-- IF S_IN_GROUP --> nicht geparst wird und somit unverändert in der ausgegebenen html Datei erscheint. Oder wie genau hast du das mit dem BBCode und der Ersetzung gemeint?

@all
Es muss doch eine Möglichkeit geben, einen funktionierenden BBCode zu erzeugen, bei dem die Gruppenberechtigung abgefragt wird und dann der Text zwischen dem BBCode nur der gewählten Gruppe angezeigt wird.

Gruß Helmut

Re: BBCode -- Text nur für bestimmte Gruppe sichtbar

Verfasst: 22.07.2013 21:04
von BNa
Gibt es ja auch. Bin an der Lösung dran. Ist zwar etwas komplexer aber es folgt genau dem Ansatz, den ich geliefert habe.
Und, wie ich schon schrieb: <!-- IF S_IN_GROUP --> ist irrelevant, da es hier um php geht :wink:

Re: BBCode -- Text nur für bestimmte Gruppe sichtbar

Verfasst: 22.07.2013 21:55
von HabNurNeFrage
Hi,

Ansatz 1: viewtopic.php?f=74&t=227295

Ansatz 2: Bei uns im Forum habe ich spezielle bbCodes, deren Inhalts-Text nur Admins/Mods angezeigt wird.
Allen anderen wird ein Ersatztext eingeblendet:
http://bild4.bplaced.net/phpbb/viewtopi ... ch-f=4&t=3


Ansatz 2 könnte ggf. für einzelne Gruppen so aussehen:

Code: Alles auswählen

if (!function_exists('group_memberships'))
{
    include_once($phpbb_root_path . 'includes/functions_user.'.$phpEx);
}

if ((!$user->data['group_id'] == 1) || ($user->data['user_id'] == ANONYMOUS) || $user->data['is_bot'])
{
    $text = preg_replace('/\[bbcode_group_1(.*?)\].*?\[\/bbcode_group_1(.*?)\]/si', "
        <p>Nur Mitglieder der Gruppe 1 sehen Inhalte an dieser Stelle.</p>
        ", $text);
} 

if ((!$user->data['group_id'] == 2) || ($user->data['user_id'] == ANONYMOUS) || $user->data['is_bot'])
{
        $text = preg_replace('/\[bbcode_group_2(.*?)\].*?\[\/bbcode_group_2(.*?)\]/si', "
        <p>Nur Mitglieder der Gruppe 1 sehen Inhalte an dieser Stelle.</p>
        ", $text);
}   

if ((!$user->data['group_id'] == 3) || ($user->data['user_id'] == ANONYMOUS) || $user->data['is_bot'])
{
        $text = preg_replace('/\[bbcode_group_3(.*?)\].*?\[\/bbcode_group_3(.*?)\]/si', "
        <p>Nur Mitglieder der Gruppe 3 sehen Inhalte an dieser Stelle.</p>
        ", $text);
} 
Hierzu müssen dann vom Namen her zum PHP exakt passende bbCodes angelegt werden.
Hier im Beispiel wäre das bbcode_group_1 (1 entspräche der Group ID und das Ganze ist die Bezeichnung der Nutzung des bbCodes)
Das Beispiel stellt spezielle bbCodes für die Gruppen-IDs 1, 2 und 3 bereit.
Es kann den eigenen Wünschen entsprechend erweitert bzw. beschnitten werden.

LG

Re: BBCode -- Text nur für bestimmte Gruppe sichtbar

Verfasst: 22.07.2013 21:57
von BNa
Sieht bei mir ähnlich aus. Im Grunde nur diesem Mod folgen und etwas abwandeln:
viewtopic.php?f=88&t=194797#p1123772
Die rote Schrift kann ignoriert werden, da es nicht die Funktionalität betraf.

Re: BBCode -- Text nur für bestimmte Gruppe sichtbar

Verfasst: 22.07.2013 23:47
von Helmut
Hallo BNa und HabNurNeFrage,

danke euch für die Infos, damit habe ich es jetzt gelöst. Der Link auf Altersbeschränkungs Spoiler brachte die Lösung. In der Datei functions_content.php habe ich es so gelöst:

Finde in includes/functions_content:

Code: Alles auswählen

static $censors
danach füge ein:

Code: Alles auswählen

global $user, $is_in_group;
finde:

Code: Alles auswählen

 if (sizeof($censors)) 
davor füge ein:

Code: Alles auswählen

    if ($is_in_group == false)
    {
        $text = preg_replace('/\[in_group(.*?)\].*?\[\/in_group(.*?)\]/si', "<span></span>", $text);
    } 
in meinen eingebundenen Seiten kommt dann noch das hier dazu:

Code: Alles auswählen

include_once($phpbb_root_path . 'includes/functions_content.' . $phpEx);

// Die zu prüfenden Gruppen IDs müssen mit Komma getrennt eingetragen werden
$check_group = "7";

$is_in_group = get_group_auth($check_group);

// Wenn der User in dieser Gruppe ist, liefert die Funktion den Wert TRUE zurück.
if ($is_in_group == true)
{
    // Teile dem Template System mit, das die Variable "S_IN_GROUP" den Wert TRUE bekommt
    // In der html Datei kann mit <!-- IF S_IN_GROUP -->  und <!-- ENDIF --> ein Bereich markiert werden.
   $template->assign_var('S_IN_GROUP', true);
}
 
BBCode

Code: Alles auswählen

[in_group]{TEXT}[/in_group]
Ersetzung

Code: Alles auswählen

<span>{TEXT}</span>
Was vielleicht noch interessant wäre, wenn man den alternativen Text wenn der User nicht in der Gruppe ist, auch im BBCode angeben könnte .....


Ich brauche das für die Themenseiten für meine neue Homepage. Die Themenseiten basieren auf dem KB Mod vom [BTK] Tobi, auf der Version 2.0.5, allerdings sehr angepasst.


Gruß Helmut

Re: BBCode -- Text nur für bestimmte Gruppe sichtbar

Verfasst: 23.07.2013 13:44
von HabNurNeFrage
Hi,

meinst Du einen Text, den die Nutzer des bbCodes dann selbst angeben können sollen?
Das wird etwas schwierig...

Einen standard Ersatztext könntest Du im <span> Ersatztext </span> Deines preg_replace Patterns angeben.

Oder Du ersetzt für alle, die nicht in_group sind, das Replace-Pattern mit einem weiteren bbCode:

Code: Alles auswählen

        if (!$is_in_group)
        {
            $text = preg_replace('/\[in_group(.*?)\].*?\[\/in_group(.*?)\]/si', "[not_in_group][/not_in_group]", $text);
        } 

Nun noch eien bbCode [not_in_group]Ersatztext[/not_in_group] - In beiden Fällen ist der Ersatztext aber leider statisch.
Eine dynamische Lösung habe ich nicht im Kopf.

LG