Seite 2 von 3

Re: $user->data['group_id'] für user_group_table ?

Verfasst: 23.01.2009 22:41
von 4seven
Hallo Helmut,
ein paar posts vorher 4seven hat geschrieben:Die Core-Funktion habe ich anfänglich für 3 meiner Mods benutzt, fand sie aber zu unflexibel für mutliple Gruppen-Abfragen, so das ich auf $user->data['group_id'] umschwenkte.
Die andere Variante bringt mE mehr Side-Effects. Die Hauptgruppe ist was festes, auf was man sich verlassen kann.Solange ich keine flexible Abfrage für mein Anliegen in diesem Thread habe, bleibe ich auch dabei. Solange, wie ich keine ähnlich flexible Syntax für die Abfragen der user_group_table wie für die user_table_habe (halt eben $user->data['group_id'])

Was ich brauche ist eine $user_group->data['group_id'] - Leider bin ich kein SQL-Genie und scheitere schon an einer echo-Ausgabe dieser Konstruktion.

Wie gesagt, ich bräuchte eine einfach Abfrage, ala:
In welche(r)/n Gruppe/n (nicht Hauptgruppe/n) ist das Mitglied, was gerade jetzt die Seite betrachtet?

Re: $user->data['group_id'] für user_group_table ?

Verfasst: 24.01.2009 00:43
von Helmut
Hallo 4seven,

achso, du wolltest eine Liste aller group_id des Users haben und nicht ob der jeweilige gerade eingeloggte User in einer bestimmten Gruppe ist.

Hier mal eine einfache Abfrage der phpbb_user_group:

Code: Alles auswählen

// zu überprüfender User
$benutzer_id = $user->data['user_id'];

//Abfrage der Gruppen ID's
$sql = 'SELECT user_id, group_id
        FROM ' . USER_GROUP_TABLE . "
        WHERE user_id = $benutzer_id
        ORDER BY group_id ASC ";
$result = $db->sql_query($sql);
while ($g_data = $db->sql_fetchrow($result))
{    
        $g_select .= $g_data['group_id'] . ', ';        
}
 
Du hast dann alle group_id des eingeloggten Users in $g_select drinnen, welche durch ein Komma getrennt sind.

Gruß Helmut

Re: $user->data['group_id'] für user_group_table ?

Verfasst: 24.01.2009 00:45
von Miriam
Das wäre so möglich:

Code: Alles auswählen

$sql = 'SELECT ug.group_id, g.group_name FROM ' . USER_GROUP_TABLE . ' ug
            LEFT JOIN ' . GROUPS_TABLE . ' g ON g.group_id = ug.group_id
            WHERE ug.user_id = ' . $user->data['user_id'] . '
            AND ug.group_id <> ' . $user->data['group_id'] . '
            AND ug.user_pending = 0';
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
    $groups_row[$row['group_id']] = $row['group_name'];
}
$db->sql_freeresult($result); 
Der jeweilige Key des Arrays $groups_row ist die Gruppen-ID und der Value der Gruppenname der Gruppen (ausser Hauptgruppe), denen der betrachtende User angehört und in diesen Gruppen aktiviert wurde.

//Edit: Zu spät.

Re: $user->data['group_id'] für user_group_table ?

Verfasst: 24.01.2009 02:23
von 4seven
Ihr seid genial :grin:
Vielen vielen Dank 8)

Ein Ansatz wäre jetzt, die statischen abfragen mit $is_in_group und die flexiblen mit $user->data['group_id'], bzw der neuen Variable zu mixen. Vielleicht gelingt das ja unfallfrei.

Re: $user->data['group_id'] für user_group_table ?

Verfasst: 24.01.2009 10:40
von Helmut
Hallo 4seven,

so ganz habe ich jetzt noch nicht begriffen, was du genau als Ergebnis der Abfrage haben willst.

In $user->data['group_id'] steht ja immer die Hauptgruppe des eingeloggten Users drinnen und mit dem Beispiel oben bekommst du eine Liste aller group_id in denen der User Mitglied ist.

Oder wolltest du eine Liste aller verfügbaren Gruppen und eine weitere Liste der Gruppen, in denen der User Mitglied ist?

Gruß Helmut

Re: $user->data['group_id'] für user_group_table ?

Verfasst: 24.01.2009 14:36
von 4seven
Hallo Helmut,

ich möchte einen Switch bauen, mit dem man entscheiden kann, ob man BBCodes für Hauptgruppen restriktieren will oder eben für normale Gruppen. Demnach passt die Info schon. Zur Zeit bastel ich an der Abfrage, was scheinbar nicht ganz so einfach ist, da ich ja vorher mit dem ACP-Feld bestimmen konnte, welche Hauptgruppen dürfen, nun aber die Abfrage ein ganz anderen Ansatz hat, wo überprüft werden muss, ob irgendeine der normalen Gruppen des Hauptgrupplers mit den Eingetragenen Group_IDs übereinstimmt. Aber, das pack ich schon :wink:

greez

Re: $user->data['group_id'] für user_group_table ?

Verfasst: 24.01.2009 14:46
von Miriam
Du könntest z.B. Dein Objekt $user etwas aufrüsten, indem Du diese Funktion in die includes/functions_user.php packst =>
  • Code: Alles auswählen

    function member_of_groups($main_group_included = false, $as_array = false)
    {
        global $db, $user;
        
        $main_group_inc = ($main_group_included) ? ('AND group_id <> ' . $user->data['group_id']) : '';
        $sql = 'SELECT group_id
                    FROM ' . USER_GROUP_TABLE . '
                    WHERE user_id = ' . $user->data['user_id'] . '
                    AND user_pending = 0 '
                    . $main_group_inc;
        $result = $db->sql_query($sql);
        $member_of = array();
        while ($row = $db->sql_fetchrow($result))
        {    
            $member_of[] = $row['group_id'];        
        }
        $db->sql_freeresult($result);
        $user->data['member_of_groups'] = ($as_array) ? $member_of : implode(',', $member_of);
        return true;
    } 
Die kannst Du dann mittels oder aufrufen (je nachdem, ob die Hauptgruppe mit drin sein soll oder nicht und ob die Rückgabe als Array erfolgen soll oder als Liste).

Nach dem Aufruf kannst Du auf eine Komma-separierte Liste oder ein Array der Gruppen-IDs zugreifen.

Wenn Du etwas an den Gruppen änderst solltest Du danach durch nochmaliges Aufrufen der Funktion das Objekt aktualisieren. 

Re: $user->data['group_id'] für user_group_table ?

Verfasst: 24.01.2009 14:54
von 4seven
Klasse, kaum hab ich den einen Input verarbeitet, kommt gleich wieder son Hammerteil.. :grin:

Vielen Dank, Miriam

Re: $user->data['group_id'] für user_group_table ?

Verfasst: 24.01.2009 14:55
von Miriam
Habe oben noch das print() rausgenommen.. *oops* :oops:

Re: $user->data['group_id'] für user_group_table ?

Verfasst: 24.01.2009 14:57
von 4seven
*g - auch grad gesehen :geek: