Gruppenzugehörigkeit prüfen
Verfasst: 30.08.2007 19:57
Hier noch ein nettes Snippet von S2B
Am Ende (vor dem ?>) in die includes/functions.php einfügen:
Beispiele zur Verwendung:
Edit: Kleinen Fehler ausgebügelt. Danke an Punkface.
Am Ende (vor dem ?>) in die includes/functions.php einfügen:
Code: Alles auswählen
//
// Überprüft die Zugehörigkeit eines Benutzers zu einer oder mehreren Gruppen
//
function user_in_group($group_ids, $user_id = false, $and = false)
{
global $db, $userdata;
static $cache = array();
if (!$user_id)
{
$user_id = $userdata['user_id'];
}
if (is_string($group_ids))
{
$group_ids = explode(',', $group_ids);
}
elseif (is_int($group_ids))
{
$group_ids = array($group_ids);
}
$check_ids = array();
for ($i = 0, $count = count($group_ids); $i < $count; $i++)
{
$group_ids[$i] = intval($group_ids[$i]);
if (!isset($cache[$user_id][$group_ids[$i]]))
{
$check_ids[] = $group_ids[$i];
}
}
if (!empty($check_ids))
{
if (!isset($cache[$user_id]))
{
$cache[$user_id] = array();
}
foreach ($check_ids as $check_id)
{
$cache[$user_id][$check_id] = false;
}
$sql = 'SELECT g.group_id
FROM ' . USER_GROUP_TABLE . ' ug, ' . GROUPS_TABLE . ' g
WHERE g.group_id = ug.group_id
AND (ug.user_id = ' . intval($user_id) . '
OR g.group_moderator = ' . intval($user_id) . ')
AND ug.group_id IN(' . implode(', ', $check_ids) . ')
GROUP BY g.group_id';
if (!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain groups', '', __LINE__, __FILE__, $sql);
}
while ($row = $db->sql_fetchrow($result))
{
$cache[$user_id][$row['group_id']] = true;
}
$db->sql_freeresult($result);
}
if ($and)
{
foreach ($group_ids as $group_id)
{
if (!$cache[$user_id][$group_id])
{
return false;
}
}
return true;
}
else
{
foreach ($group_ids as $group_id)
{
if ($cache[$user_id][$group_id])
{
return true;
}
}
return false;
}
}
Code: Alles auswählen
user_in_group(3); // aktueller Benutzer in Gruppe 3?
user_in_group('3,5'); // aktueller Benutzer in Gruppen 3 oder 5?
user_in_group(array(3, 5)); // aktueller Benutzer in Gruppen 3 oder 5?
user_in_group('3,5', false, true); // aktueller Benutzer in Gruppen 3 und 5?
user_in_group('3,5,8', $user_id); // Benutzer mit der ID $user_id in Gruppen 3, 5 oder 8?
user_in_group('3,5,8', $user_id, true); // Benutzer mit der ID $user_id in Gruppen 3, 5 und 8?
Edit: Kleinen Fehler ausgebügelt. Danke an Punkface.