aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/auth.php
diff options
context:
space:
mode:
Diffstat (limited to 'phpBB/includes/auth.php')
-rw-r--r--phpBB/includes/auth.php84
1 files changed, 57 insertions, 27 deletions
diff --git a/phpBB/includes/auth.php b/phpBB/includes/auth.php
index 28b3384d9c..c8aa56adc2 100644
--- a/phpBB/includes/auth.php
+++ b/phpBB/includes/auth.php
@@ -520,8 +520,6 @@ class auth
' . (($sql_user) ? 'AND a.' . $sql_user : '') . "
$sql_forum
$sql_opts",
-
- 'ORDER_BY' => 'a.forum_id, ao.auth_option'
));
$result = $db->sql_query($sql);
@@ -533,60 +531,92 @@ class auth
$db->sql_freeresult($result);
// Now grab group settings ... ACL_NEVER overrides ACL_YES so act appropriatley
- $sql = $db->sql_build_query('SELECT', array(
+ $sql_ary[] = $db->sql_build_query('SELECT', array(
'SELECT' => 'ug.user_id, ao.auth_option, a.forum_id, a.auth_setting, a.auth_role_id, r.auth_setting as role_auth_setting',
'FROM' => array(
- ACL_GROUPS_TABLE => 'a',
+ USER_GROUP_TABLE => 'ug',
+ ACL_OPTIONS_TABLE => 'ao',
+ ACL_GROUPS_TABLE => 'a'
),
'LEFT_JOIN' => array(
array(
- 'FROM' => array(USER_GROUP_TABLE => 'ug'),
- 'ON' => 'a.group_id = ug.group_id'
- ),
- array(
'FROM' => array(ACL_ROLES_DATA_TABLE => 'r'),
'ON' => 'a.auth_role_id = r.role_id'
+ )
+ ),
+
+ 'WHERE' => 'ao.auth_option_id = a.auth_option_id
+ AND a.group_id = ug.group_id
+ AND ug.user_pending = 0
+ ' . (($sql_user) ? 'AND ug.' . $sql_user : '') . "
+ $sql_forum
+ $sql_opts"
+ ));
+
+ $sql_ary[] = $db->sql_build_query('SELECT', array(
+ 'SELECT' => 'ug.user_id, a.forum_id, a.auth_setting, a.auth_role_id, r.auth_setting as role_auth_setting, ao.auth_option' ,
+
+ 'FROM' => array(
+ ACL_OPTIONS_TABLE => 'ao'
+
+ ),
+
+ 'LEFT_JOIN' => array(
+
+ array(
+ 'FROM' => array(ACL_ROLES_DATA_TABLE => 'r'),
+ 'ON' => 'r.auth_option_id = ao.auth_option_id'
),
array(
- 'FROM' => array(ACL_OPTIONS_TABLE => 'ao'),
- 'ON' => '(ao.auth_option_id = a.auth_option_id OR ao.auth_option_id = r.auth_option_id)'
+ 'FROM' => array(ACL_GROUPS_TABLE => 'a'),
+ 'ON' => 'a.auth_role_id = r.role_id'
),
+ array(
+ 'FROM' => array(USER_GROUP_TABLE => 'ug'),
+ 'ON' => 'ug.group_id = a.group_id'
+ )
+
),
'WHERE' => 'ug.user_pending = 0
' . (($sql_user) ? 'AND ug.' . $sql_user : '') . "
$sql_forum
- $sql_opts",
+ $sql_opts"
));
- $result = $db->sql_query($sql);
+
- while ($row = $db->sql_fetchrow($result))
+ foreach ($sql_ary as $sql)
{
- if (!isset($hold_ary[$row['user_id']][$row['forum_id']][$row['auth_option']]) || (isset($hold_ary[$row['user_id']][$row['forum_id']][$row['auth_option']]) && $hold_ary[$row['user_id']][$row['forum_id']][$row['auth_option']] != ACL_NEVER))
- {
- $setting = ($row['auth_role_id']) ? $row['role_auth_setting'] : $row['auth_setting'];
- $hold_ary[$row['user_id']][$row['forum_id']][$row['auth_option']] = $setting;
+ $result = $db->sql_query($sql);
- // Check for existence of ACL_YES if an option got set to ACL_NEVER
- if ($setting == ACL_NEVER)
+ while ($row = $db->sql_fetchrow($result))
+ {
+ if (!isset($hold_ary[$row['user_id']][$row['forum_id']][$row['auth_option']]) || (isset($hold_ary[$row['user_id']][$row['forum_id']][$row['auth_option']]) && $hold_ary[$row['user_id']][$row['forum_id']][$row['auth_option']] != ACL_NEVER))
{
- $flag = substr($row['auth_option'], 0, strpos($row['auth_option'], '_') + 1);
-
- if (isset($hold_ary[$row['user_id']][$row['forum_id']][$flag]) && $hold_ary[$row['user_id']][$row['forum_id']][$flag] == ACL_YES)
+ $setting = ($row['auth_role_id']) ? $row['role_auth_setting'] : $row['auth_setting'];
+ $hold_ary[$row['user_id']][$row['forum_id']][$row['auth_option']] = $setting;
+
+ // Check for existence of ACL_YES if an option got set to ACL_NEVER
+ if ($setting == ACL_NEVER)
{
- unset($hold_ary[$row['user_id']][$row['forum_id']][$flag]);
-
- if (in_array(ACL_YES, $hold_ary[$row['user_id']][$row['forum_id']]))
+ $flag = substr($row['auth_option'], 0, strpos($row['auth_option'], '_') + 1);
+
+ if (isset($hold_ary[$row['user_id']][$row['forum_id']][$flag]) && $hold_ary[$row['user_id']][$row['forum_id']][$flag] == ACL_YES)
{
- $hold_ary[$row['user_id']][$row['forum_id']][$flag] = ACL_YES;
+ unset($hold_ary[$row['user_id']][$row['forum_id']][$flag]);
+
+ if (in_array(ACL_YES, $hold_ary[$row['user_id']][$row['forum_id']]))
+ {
+ $hold_ary[$row['user_id']][$row['forum_id']][$flag] = ACL_YES;
+ }
}
}
}
}
+ $db->sql_freeresult($result);
}
- $db->sql_freeresult($result);
return $hold_ary;
}