1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-08-05 08:17:47 +02:00

Cache moderator names? Output moderators for all forums in viewforum. Alter a few things in templates

git-svn-id: file:///svn/phpbb/trunk@3061 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
Paul S. Owen
2002-11-18 21:04:45 +00:00
parent ce40939e60
commit 6e910ca116
11 changed files with 287 additions and 212 deletions

View File

@@ -454,6 +454,110 @@ function config_cache_write($match, $data)
return;
}
// Cache moderators, called whenever permissions are
// changed via admin_permissions. Changes of username
// and group names must be carried through for the
// moderators table
function cache_moderators($forum_id = false)
{
global $db;
if (!empty($forum_id) && is_array($forum_id))
{
$forum_sql = 'AND forum_id IN (' . implode(', ', $forum_id) . ')';
}
else
{
$forum_sql = ($forum_id) ? 'AND forum_id = ' . $forum_id : '';
}
// Clear table
$db->sql_query('TRUNCATE ' . MODERATOR_TABLE);
// Holding array
$m_sql = array();
$user_id_sql = '';
$sql = "SELECT a.forum_id, u.user_id, u.username
FROM " . ACL_OPTIONS_TABLE . " o, " . ACL_USERS_TABLE . " a, " . USERS_TABLE . " u
WHERE o.auth_value = 'm_'
AND a.auth_option_id = o.auth_option_id
AND a.auth_allow_deny = 1
AND u.user_id = a.user_id
$forum_sql";
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
$m_sql['f_' . $row['forum_id'] . '_u_' . $row['user_id']] = $row['forum_id'] . ', ' . $row['user_id'] . ', \'' . $row['username'] . '\', NULL, NULL';
$user_id_sql .= (($user_id_sql) ? ', ' : '') . $row['user_id'];
}
$db->sql_freeresult($result);
// Remove users who have group memberships with DENY moderator permissions
if ($user_id_sql)
{
$sql = "SELECT a.forum_id, ug.user_id
FROM " . ACL_OPTIONS_TABLE . " o, " . ACL_GROUPS_TABLE . " a, " . USER_GROUP_TABLE . " ug
WHERE o.auth_value = 'm_'
AND a.auth_option_id = o.auth_option_id
AND a.auth_allow_deny = 0
AND a.group_id = ug.group_id
AND ug.user_id IN ($user_id_sql)
$forum_sql";
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
unset($m_sql['f_' . $row['forum_id'] . '_u_' . $row['user_id']]);
}
$db->sql_freeresult($result);
}
$sql = "SELECT a.forum_id, g.group_name, g.group_id
FROM " . ACL_OPTIONS_TABLE . " o, " . ACL_GROUPS_TABLE . " a, " . GROUPS_TABLE . " g
WHERE o.auth_value = 'm_'
AND a.auth_option_id = o.auth_option_id
AND a.auth_allow_deny = 1
AND g.group_id = a.group_id
AND g.group_type NOT IN (" . GROUP_HIDDEN . ", " . GROUP_SPECIAL . ")
$forum_sql";
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
$m_sql['f_' . $row['forum_id'] . '_g_' . $row['group_id']] = $row['forum_id'] . ', NULL, NULL, ' . $row['group_id'] . ', \'' . $row['group_name'] . '\'';
}
$db->sql_freeresult($result);
if (sizeof($m_sql))
{
switch (SQL_LAYER)
{
case 'mysql':
case 'mysql4':
$sql = 'INSERT INTO ' . MODERATOR_TABLE . ' (forum_id, user_id, username, group_id, groupname) VALUES ' . implode(', ', preg_replace('#^(.*)$#', '(\1)', $m_sql));
$result = $db->sql_query($sql);
$db->sql_freeresult($result);
break;
case 'mssql':
$sql = 'INSERT INTO ' . MODERATOR_TABLE . ' (forum_id, user_id, username, group_id, groupname)
VALUES ' . implode(' UNION ALL ', preg_replace('#^(.*)$#', 'SELECT \1', $m_sql));
$result = $db->sql_query($sql);
$db->sql_freeresult($result);
break;
default:
foreach ($m_sql as $k => $sql)
{
$result = $db->sql_query('INSERT INTO ' . MODERATOR_TABLE . " (forum_id, user_id, username, group_id, groupname) VALUES ($sql)");
$db->sql_freeresult($result);
}
}
}
}
// Extension of auth class for changing permissions
class auth_admin extends auth
{