################################################################# 
## Mod Title: Administration Panel for Super Moderators MOD 
## Mod Version: 1.1.1 
## Author: GateKeeper <gatekeep@optonline.net> http://www.circlesoftus.org:83/ 
## Description: Allows the Administrator of a phpBB 2 board to use there 
##              administration panel to change users to super moderator. 
##              
## 
## Installation Level: moderate 
## Installation Time: 10 Minutes 
## Files To Edit: /phpBB2/admin/admin_ug_auth.php 
## 
################################################################# 
## Security Disclaimer: This MOD Cannot Be Posted To Or Added At Any Non-Official phpBB Sites 
################################################################# 
## TODO: 
##  - Have to add auth, code so that user act's like admininstrator. 
## 
################################################################# 
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD 
################################################################# 
## 
##  Revision History: 
## 
##  v1.1.1 
##  - Fixed problem where super moderator could not return back to regular user. 
## 
##  v1.1.0 
##  - Fixed problem where super moderator would revert back to normal moderator after update of other users or the super moderator. 
##  - Some other minor glitches fixed. 
## 
##  v1.0.0 
##  - This release 
## 
################################################################# 

# 
#-----[ OPEN ]------------------------------------------ 
# 

/phpBB2/admin/admin_ug_auth.php 


# 
#-----[ FIND ]------------------------------------------ 
# 

else 
{ 
   if ( $mode == 'user' && $HTTP_POST_VARS['userlevel'] == 'user' && $user_level == ADMIN ) 
   { 

# 
#-----[ BEFORE, ADD ]------------------------------------ 
# 

else if ( $mode == 'user' && $HTTP_POST_VARS['userlevel'] == 'supermod' && $user_level != LESS_ADMIN ) 
{ 
   // 
   // Make user an admin (if already user) 
   // 
   if ( $userdata['user_id'] != $user_id ) 
   { 
      // 
      // Update users level, reset 
      // 
      $sql = "UPDATE " . USERS_TABLE . " 
         SET user_level = " . LESS_ADMIN . " 
         WHERE user_id = $user_id"; 
      if(!$result = $db->sql_query($sql)) 
      { 
            message_die(GENERAL_ERROR, "Couldn't update user level", "", __LINE__, __FILE__, $sql); 
      } 

      $sql = "DELETE FROM " . AUTH_ACCESS_TABLE . " 
         WHERE group_id = $group_id 
            AND auth_mod = 0"; 
      if ( !($result = $db->sql_query($sql)) ) 
      { 
         message_die(GENERAL_ERROR, "Couldn't delete auth access info", "", __LINE__, __FILE__, $sql); 
      } 

      // 
      // Delete any entries in auth_access, they are not required if user is becoming an 
      // admin 
      // 
      $sql = "UPDATE " . AUTH_ACCESS_TABLE . " 
         SET auth_view = 0, auth_read = 0, auth_post = 0, auth_reply = 0, auth_edit = 0, auth_delete = 0, auth_sticky = 0, auth_announce = 0 
         WHERE group_id = $group_id"; 
      if ( !($result = $db->sql_query($sql)) ) 
      { 
         message_die(GENERAL_ERROR, "Couldn't update auth access", "", __LINE__, __FILE__, $sql); 
      } 
   } 

   $message = $lang['Auth_updated'] . '<br /><br />' . sprintf($lang['Click_return_userauth'], '<a href="' . append_sid("admin_ug_auth.$phpEx?mode=$mode") . '">', '</a>') . '<br /><br />' . sprintf($lang['Click_return_admin_index'], '<a href="' . append_sid("index.$phpEx?pane=right") . '">', '</a>'); 
   message_die(GENERAL_MESSAGE, $message); 
} 

# 
#-----[ FIND ]------------------------------------------ 
# 
if ( $mode == 'user' && $HTTP_POST_VARS['userlevel'] == 'user' && $user_level == ADMIN ) 
{ 
   // 
   // Make admin a user (if already admin) ... ignore if you're trying 
   // to change yourself from an admin to user! 
   // 
   if ( $userdata['user_id'] != $user_id ) 
   { 
      $sql = "UPDATE " . AUTH_ACCESS_TABLE . " 
         SET auth_view = 0, auth_read = 0, auth_post = 0, auth_reply = 0, auth_edit = 0, auth_delete = 0, auth_sticky = 0, auth_announce = 0 
         WHERE group_id = $group_id"; 
      if ( !($result = $db->sql_query($sql)) ) 
      { 
         message_die(GENERAL_ERROR, 'Could not update auth access', '', __LINE__, __FILE__, $sql); 
      } 
             
      // 
      // Update users level, reset to USER 
      // 
      $sql = "UPDATE " . USERS_TABLE . " 
         SET user_level = " . USER . " 
         WHERE user_id = $user_id"; 
      if ( !($result = $db->sql_query($sql)) ) 
      { 
         message_die(GENERAL_ERROR, 'Could not update user level', '', __LINE__, __FILE__, $sql); 
      } 
   } 

   $message = $lang['Auth_updated'] . '<br /><br />' . sprintf($lang['Click_return_userauth'], '<a href="' . append_sid("admin_ug_auth.$phpEx?mode=$mode") . '">', '</a>') . '<br /><br />' . sprintf($lang['Click_return_admin_index'], '<a href="' . append_sid("index.$phpEx?pane=right") . '">', '</a>'); 
} 

# 
#-----[ AFTER, ADD ]-------------------------------- 
# 
else if ( $mode == 'user' && $HTTP_POST_VARS['userlevel'] == 'user' && $user_level == LESS_ADMIN ) 
{ 
   // 
   // Make super mod a user (if already super mod) ... ignore if you're trying 
   // to change yourself from an super mod to user! 
   // 
   if ( $userdata['user_id'] != $user_id ) 
   { 
      $sql = "UPDATE " . AUTH_ACCESS_TABLE . " 
         SET auth_view = 0, auth_read = 0, auth_post = 0, auth_reply = 0, auth_edit = 0, auth_delete = 0, auth_sticky = 0, auth_announce = 0 
         WHERE group_id = $group_id"; 
      if ( !($result = $db->sql_query($sql)) ) 
      { 
         message_die(GENERAL_ERROR, 'Could not update auth access', '', __LINE__, __FILE__, $sql); 
      } 
             
      // 
      // Update users level, reset to USER 
      // 
      $sql = "UPDATE " . USERS_TABLE . " 
         SET user_level = " . USER . " 
         WHERE user_id = $user_id"; 
      if ( !($result = $db->sql_query($sql)) ) 
      { 
         message_die(GENERAL_ERROR, 'Could not update user level', '', __LINE__, __FILE__, $sql); 
      } 
   } 

   $message = $lang['Auth_updated'] . '<br /><br />' . sprintf($lang['Click_return_userauth'], '<a href="' . append_sid("admin_ug_auth.$phpEx?mode=$mode") . '">', '</a>') . '<br /><br />' . sprintf($lang['Click_return_admin_index'], '<a href="' . append_sid("index.$phpEx?pane=right") . '">', '</a>'); 
} 

# 
#-----[ FIND ]------------------------------------------ 
# 
// 
// Update user level to user for appropriate users 
// 

# 
#-----[ AFTER, REPLACE ]-------------------------------- 
# 
switch ( SQL_LAYER ) 
{ 
   case 'postgresql': 
      $sql = "SELECT u.user_id 
         FROM " . USERS_TABLE . " u, " . USER_GROUP_TABLE . " ug, " . AUTH_ACCESS_TABLE . " aa 
         WHERE ug.user_id = u.user_id 
            AND aa.group_id = ug.group_id 
            AND u.user_level NOT IN (" . USER . ", " . ADMIN . ", " . LESS_ADMIN . ") 
         GROUP BY u.user_id 
         HAVING SUM(aa.auth_mod) = 0 
         UNION ( 
            SELECT u.user_id  
            FROM " . USERS_TABLE . " u 
            WHERE NOT EXISTS ( 
               SELECT aa.auth_mod 
               FROM " . USER_GROUP_TABLE . " ug, " . AUTH_ACCESS_TABLE . " aa 
               WHERE ug.user_id = u.user_id 
                  AND aa.group_id = ug.group_id 
            ) 
            AND u.user_level NOT IN (" . USER . ", " . ADMIN . ", " . LESS_ADMIN . ")  
            GROUP BY u.user_id 
         )"; 
      break; 
   case 'oracle': 
      $sql = "SELECT u.user_id 
         FROM " . USERS_TABLE . " u, " . USER_GROUP_TABLE . " ug, " . AUTH_ACCESS_TABLE . " aa 
         WHERE ug.user_id = u.user_id(+) 
            AND aa.group_id = ug.group_id(+) 
            AND u.user_level NOT IN (" . USER . ", " . ADMIN . ", " . LESS_ADMIN . ") 
         GROUP BY u.user_id 
         HAVING SUM(aa.auth_mod) = 0"; 
      break; 
   default: 
      $sql = "SELECT u.user_id 
         FROM ( ( " . USERS_TABLE . " u  
         LEFT JOIN " . USER_GROUP_TABLE . " ug ON ug.user_id = u.user_id ) 
         LEFT JOIN " . AUTH_ACCESS_TABLE . " aa ON aa.group_id = ug.group_id ) 
         WHERE u.user_level NOT IN (" . USER . ", " . ADMIN . ", " . LESS_ADMIN . ") 
         GROUP BY u.user_id 
         HAVING SUM(aa.auth_mod) = 0"; 
      break; 
} 


# 
#-----[ FIND ]------------------------------------------ 
# 

$is_admin = ( $mode == 'user' ) ? ( ( $ug_info[0]['user_level'] == ADMIN && $ug_info[0]['user_id'] != ANONYMOUS ) ? 1 : 0 ) : 0; 


# 
#-----[ AFTER, ADD ]------------------------------------ 
# 

$is_super = ( $mode == 'user' ) ? ( ( $ug_info[0]['user_level'] == LESS_ADMIN && $ug_info[0]['user_id'] != ANONYMOUS ) ? 1 : 0 ) : 0; 
$is_user = ( $mode == 'user' ) ? ( ( $ug_info[0]['user_level'] == USER || $ug_info[0]['user_level'] == MOD && $ug_info[0]['user_id'] != ANONYMOUS ) ? 1 : 0 ) : 0; 

# 
#-----[ FIND ]------------------------------------------- 
# 

$s_user_type = ( $is_admin ) ? '<select name="userlevel"><option value="admin" selected="selected">' . $lang['Auth_Admin'] . '</option><option value="user">' . $lang['Auth_User'] . '</option></select>' : '<select name="userlevel"><option value="admin">' . $lang['Auth_Admin'] . '</option><option value="user" selected="selected">' . $lang['Auth_User'] . '</option></select>'; 

# 
#-----[ REPLACE WITH ]------------------------------------------- 
# 

$s_user_type = '<select name="userlevel">'; 
$s_user_type .= ($is_admin) ? '<option value="admin" selected=\"selected\">' . $lang['Auth_Admin'] . '</option>' : '<option value="admin">' . $lang['Auth_Admin'] . '</option>'; 
$s_user_type .= ($is_super) ? '<option value="supermod" selected=\"selected\">Super Moderator</option>' : '<option value="supermod">Super Moderator</option>'; 
$s_user_type .= ($is_user) ? '<option value="user" selected=\"selected\">' . $lang['Auth_User'] . '</option>' : '<option value="user">' . $lang['Auth_User'] . '</option>'; 
$s_user_type .= '</select>'; 

# 
#-----[ FIND ]------------------------------------------- 
#

// 
// Update user level to mod for appropriate users 
// 
$sql = "SELECT u.user_id 
         FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . USERS_TABLE . " u  
         WHERE ug.group_id = aa.group_id 
            AND u.user_id = ug.user_id 
            AND u.user_level NOT IN (" . MOD . ", " . ADMIN . ") 
         GROUP BY u.user_id 
         HAVING SUM(aa.auth_mod) > 0"; 

# 
#-----[ REPLACE WITH ]------------------------------------------- 
#

// 
// Update user level to mod for appropriate users 
// 
$sql = "SELECT u.user_id 
         FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . USERS_TABLE . " u  
         WHERE ug.group_id = aa.group_id 
            AND u.user_id = ug.user_id 
            AND u.user_level NOT IN (" . MOD . ", " . ADMIN . ", ". LESS_ADMIN .") 
         GROUP BY u.user_id 
         HAVING SUM(aa.auth_mod) > 0";

# 
#-----[ SAVE/CLOSE FILE ]------------------------------------------ 
# 
# EoM 
