[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/admin/ -> admin_ug_auth.php (source)

   1  <?php
   2  /***************************************************************************
   3   *                            admin_ug_auth.php
   4   *                            -------------------
   5   *   begin                : Saturday, Feb 13, 2001
   6   *   copyright            : (C) 2001 The phpBB Group
   7   *   email                : support@phpbb.com
   8   *
   9   *   $Id: admin_ug_auth.php 8378 2008-02-10 17:18:29Z acydburn $
  10   *
  11   *
  12   ***************************************************************************/
  13  
  14  /***************************************************************************
  15   *
  16   *   This program is free software; you can redistribute it and/or modify
  17   *   it under the terms of the GNU General Public License as published by
  18   *   the Free Software Foundation; either version 2 of the License, or
  19   *   (at your option) any later version.
  20   *
  21   ***************************************************************************/
  22  
  23  define('IN_PHPBB', 1);
  24  
  25  if( !empty($setmodules) )
  26  {
  27      $filename = basename(__FILE__);
  28      $module['Users']['Permissions'] = $filename . "?mode=user";
  29      $module['Groups']['Permissions'] = $filename . "?mode=group";
  30  
  31      return;
  32  }
  33  
  34  //
  35  // Load default header
  36  //
  37  $no_page_header = TRUE;
  38  
  39  $phpbb_root_path = "./../";
  40  require ($phpbb_root_path . 'extension.inc');
  41  require('./pagestart.' . $phpEx);
  42  
  43  $params = array('mode' => 'mode', 'user_id' => POST_USERS_URL, 'group_id' => POST_GROUPS_URL, 'adv' => 'adv');
  44  
  45  while( list($var, $param) = @each($params) )
  46  {
  47      if ( !empty($HTTP_POST_VARS[$param]) || !empty($HTTP_GET_VARS[$param]) )
  48      {
  49          $$var = ( !empty($HTTP_POST_VARS[$param]) ) ? $HTTP_POST_VARS[$param] : $HTTP_GET_VARS[$param];
  50      }
  51      else
  52      {
  53          $$var = "";
  54      }
  55  }
  56  
  57  $user_id = intval($user_id);
  58  $group_id = intval($group_id);
  59  $adv = intval($adv);
  60  $mode = htmlspecialchars($mode);
  61  
  62  //
  63  // Start program - define vars
  64  //
  65  $forum_auth_fields = array('auth_view', 'auth_read', 'auth_post', 'auth_reply', 'auth_edit', 'auth_delete', 'auth_sticky', 'auth_announce', 'auth_vote', 'auth_pollcreate');
  66  
  67  $auth_field_match = array(
  68      'auth_view' => AUTH_VIEW,
  69      'auth_read' => AUTH_READ,
  70      'auth_post' => AUTH_POST,
  71      'auth_reply' => AUTH_REPLY,
  72      'auth_edit' => AUTH_EDIT,
  73      'auth_delete' => AUTH_DELETE,
  74      'auth_sticky' => AUTH_STICKY,
  75      'auth_announce' => AUTH_ANNOUNCE, 
  76      'auth_vote' => AUTH_VOTE, 
  77      'auth_pollcreate' => AUTH_POLLCREATE);
  78  
  79  $field_names = array(
  80      'auth_view' => $lang['View'],
  81      'auth_read' => $lang['Read'],
  82      'auth_post' => $lang['Post'],
  83      'auth_reply' => $lang['Reply'],
  84      'auth_edit' => $lang['Edit'],
  85      'auth_delete' => $lang['Delete'],
  86      'auth_sticky' => $lang['Sticky'],
  87      'auth_announce' => $lang['Announce'], 
  88      'auth_vote' => $lang['Vote'], 
  89      'auth_pollcreate' => $lang['Pollcreate']);
  90  
  91  // ---------------
  92  // Start Functions
  93  //
  94  function check_auth($type, $key, $u_access, $is_admin)
  95  {
  96      $auth_user = 0;
  97  
  98      if( count($u_access) )
  99      {
 100          for($j = 0; $j < count($u_access); $j++)
 101          {
 102              $result = 0;
 103              switch($type)
 104              {
 105                  case AUTH_ACL:
 106                      $result = $u_access[$j][$key];
 107  
 108                  case AUTH_MOD:
 109                      $result = $result || $u_access[$j]['auth_mod'];
 110  
 111                  case AUTH_ADMIN:
 112                      $result = $result || $is_admin;
 113                      break;
 114              }
 115  
 116              $auth_user = $auth_user || $result;
 117          }
 118      }
 119      else
 120      {
 121          $auth_user = $is_admin;
 122      }
 123  
 124      return $auth_user;
 125  }
 126  //
 127  // End Functions
 128  // -------------
 129  
 130  if ( isset($HTTP_POST_VARS['submit']) && ( ( $mode == 'user' && $user_id ) || ( $mode == 'group' && $group_id ) ) )
 131  {
 132      $user_level = '';
 133      if ( $mode == 'user' )
 134      {
 135          //
 136          // Get group_id for this user_id
 137          //
 138          $sql = "SELECT g.group_id, u.user_level
 139              FROM " . USER_GROUP_TABLE . " ug, " . USERS_TABLE . " u, " . GROUPS_TABLE . " g
 140              WHERE u.user_id = $user_id 
 141                  AND ug.user_id = u.user_id 
 142                  AND g.group_id = ug.group_id 
 143                  AND g.group_single_user = " . TRUE;
 144          if ( !($result = $db->sql_query($sql)) )
 145          {
 146              message_die(GENERAL_ERROR, 'Could not select info from user/user_group table', '', __LINE__, __FILE__, $sql);
 147          }
 148  
 149          $row = $db->sql_fetchrow($result);
 150  
 151          $group_id = $row['group_id'];
 152          $user_level = $row['user_level'];
 153  
 154          $db->sql_freeresult($result);
 155      }
 156  
 157      //
 158      // Carry out requests
 159      //
 160      if ( $mode == 'user' && $HTTP_POST_VARS['userlevel'] == 'admin' && $user_level != ADMIN )
 161      {
 162          //
 163          // Make user an admin (if already user)
 164          //
 165          if ( $userdata['user_id'] != $user_id )
 166          {
 167              $sql = "UPDATE " . USERS_TABLE . "
 168                  SET user_level = " . ADMIN . "
 169                  WHERE user_id = $user_id";
 170              if ( !($result = $db->sql_query($sql)) )
 171              {
 172                  message_die(GENERAL_ERROR, 'Could not update user level', '', __LINE__, __FILE__, $sql);
 173              }
 174  
 175              $sql = "DELETE FROM " . AUTH_ACCESS_TABLE . "
 176                  WHERE group_id = $group_id 
 177                      AND auth_mod = 0";
 178              if ( !($result = $db->sql_query($sql)) )
 179              {
 180                  message_die(GENERAL_ERROR, "Couldn't delete auth access info", "", __LINE__, __FILE__, $sql);
 181              }
 182  
 183              //
 184              // Delete any entries in auth_access, they are not required if user is becoming an
 185              // admin
 186              //
 187              $sql = "UPDATE " . AUTH_ACCESS_TABLE . "
 188                  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
 189                  WHERE group_id = $group_id"; 
 190              if ( !($result = $db->sql_query($sql)) )
 191              {
 192                  message_die(GENERAL_ERROR, "Couldn't update auth access", "", __LINE__, __FILE__, $sql);
 193              }
 194          }
 195  
 196          $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>');
 197          message_die(GENERAL_MESSAGE, $message);
 198      }
 199      else
 200      {
 201          if ( $mode == 'user' && $HTTP_POST_VARS['userlevel'] == 'user' && $user_level == ADMIN )
 202          {
 203              //
 204              // Make admin a user (if already admin) ... ignore if you're trying
 205              // to change yourself from an admin to user!
 206              //
 207              if ( $userdata['user_id'] != $user_id )
 208              {
 209                  $sql = "UPDATE " . AUTH_ACCESS_TABLE . "
 210                      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
 211                      WHERE group_id = $group_id";
 212                  if ( !($result = $db->sql_query($sql)) )
 213                  {
 214                      message_die(GENERAL_ERROR, 'Could not update auth access', '', __LINE__, __FILE__, $sql);
 215                  }
 216  
 217                  //
 218                  // Update users level, reset to USER
 219                  //
 220                  $sql = "UPDATE " . USERS_TABLE . "
 221                      SET user_level = " . USER . "
 222                      WHERE user_id = $user_id";
 223                  if ( !($result = $db->sql_query($sql)) )
 224                  {
 225                      message_die(GENERAL_ERROR, 'Could not update user level', '', __LINE__, __FILE__, $sql);
 226                  }
 227              }
 228  
 229              $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>');
 230          }
 231          else
 232          {
 233      
 234              $change_mod_list = ( isset($HTTP_POST_VARS['moderator']) ) ? $HTTP_POST_VARS['moderator'] : array();
 235  
 236              if ( empty($adv) )
 237              {
 238                  $sql = "SELECT f.* 
 239                      FROM " . FORUMS_TABLE . " f, " . CATEGORIES_TABLE . " c
 240                      WHERE f.cat_id = c.cat_id
 241                      ORDER BY c.cat_order, f.forum_order ASC";
 242                  if ( !($result = $db->sql_query($sql)) )
 243                  {
 244                      message_die(GENERAL_ERROR, "Couldn't obtain forum information", "", __LINE__, __FILE__, $sql);
 245                  }
 246  
 247                  $forum_access = $forum_auth_level_fields = array();
 248                  while( $row = $db->sql_fetchrow($result) )
 249                  {
 250                      $forum_access[] = $row;
 251                  }
 252                  $db->sql_freeresult($result);
 253  
 254                  for($i = 0; $i < count($forum_access); $i++)
 255                  {
 256                      $forum_id = $forum_access[$i]['forum_id'];
 257  
 258                      for($j = 0; $j < count($forum_auth_fields); $j++)
 259                      {
 260                          $forum_auth_level_fields[$forum_id][$forum_auth_fields[$j]] = $forum_access[$i][$forum_auth_fields[$j]] == AUTH_ACL;
 261                      }
 262                  }
 263  
 264                  while( list($forum_id, $value) = @each($HTTP_POST_VARS['private']) )
 265                  {
 266                      while( list($auth_field, $exists) = @each($forum_auth_level_fields[$forum_id]) )
 267                      {
 268                          if ($exists)
 269                          {
 270                              $change_acl_list[$forum_id][$auth_field] = $value;
 271                          }
 272                      }
 273                  }
 274              }
 275              else
 276              {
 277                  $change_acl_list = array();
 278                  for($j = 0; $j < count($forum_auth_fields); $j++)
 279                  {
 280                      $auth_field = $forum_auth_fields[$j];
 281  
 282                      while( list($forum_id, $value) = @each($HTTP_POST_VARS['private_' . $auth_field]) )
 283                      {
 284                          $change_acl_list[$forum_id][$auth_field] = $value;
 285                      }
 286                  }
 287              }
 288  
 289              $sql = 'SELECT f.* 
 290                  FROM ' . FORUMS_TABLE . ' f, ' . CATEGORIES_TABLE . ' c
 291                  WHERE f.cat_id = c.cat_id
 292                  ORDER BY c.cat_order, f.forum_order';
 293              if ( !($result = $db->sql_query($sql)) )
 294              {
 295                  message_die(GENERAL_ERROR, "Couldn't obtain forum information", "", __LINE__, __FILE__, $sql);
 296              }
 297  
 298              $forum_access = array();
 299              while( $row = $db->sql_fetchrow($result) )
 300              {
 301                  $forum_access[] = $row;
 302              }
 303              $db->sql_freeresult($result);
 304  
 305              $sql = ( $mode == 'user' ) ? "SELECT aa.* FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE. " g WHERE ug.user_id = $user_id AND g.group_id = ug.group_id AND aa.group_id = ug.group_id AND g.group_single_user = " . TRUE : "SELECT * FROM " . AUTH_ACCESS_TABLE . " WHERE group_id = $group_id";
 306              if ( !($result = $db->sql_query($sql)) )
 307              {
 308                  message_die(GENERAL_ERROR, "Couldn't obtain user/group permissions", "", __LINE__, __FILE__, $sql);
 309              }
 310  
 311              $auth_access = array();
 312              while( $row = $db->sql_fetchrow($result) )
 313              {
 314                  $auth_access[$row['forum_id']] = $row;
 315              }
 316              $db->sql_freeresult($result);
 317  
 318              $forum_auth_action = array();
 319              $update_acl_status = array();
 320              $update_mod_status = array();
 321  
 322              for($i = 0; $i < count($forum_access); $i++)
 323              {
 324                  $forum_id = $forum_access[$i]['forum_id'];
 325  
 326                  if ( 
 327                      ( isset($auth_access[$forum_id]['auth_mod']) && $change_mod_list[$forum_id] != $auth_access[$forum_id]['auth_mod'] ) || 
 328                      ( !isset($auth_access[$forum_id]['auth_mod']) && !empty($change_mod_list[$forum_id]) ) 
 329                  )
 330                  {
 331                      $update_mod_status[$forum_id] = $change_mod_list[$forum_id];
 332  
 333                      if ( !$update_mod_status[$forum_id] )
 334                      {
 335                          $forum_auth_action[$forum_id] = 'delete';
 336                      }
 337                      else if ( !isset($auth_access[$forum_id]['auth_mod']) )
 338                      {
 339                          $forum_auth_action[$forum_id] = 'insert';
 340                      }
 341                      else
 342                      {
 343                          $forum_auth_action[$forum_id] = 'update';
 344                      }
 345                  }
 346  
 347                  for($j = 0; $j < count($forum_auth_fields); $j++)
 348                  {
 349                      $auth_field = $forum_auth_fields[$j];
 350  
 351                      if( $forum_access[$i][$auth_field] == AUTH_ACL && isset($change_acl_list[$forum_id][$auth_field]) )
 352                      {
 353                          if ( ( empty($auth_access[$forum_id]['auth_mod']) && 
 354                              ( isset($auth_access[$forum_id][$auth_field]) && $change_acl_list[$forum_id][$auth_field] != $auth_access[$forum_id][$auth_field] ) || 
 355                              ( !isset($auth_access[$forum_id][$auth_field]) && !empty($change_acl_list[$forum_id][$auth_field]) ) ) ||
 356                              !empty($update_mod_status[$forum_id])
 357                          )
 358                          {
 359                              $update_acl_status[$forum_id][$auth_field] = ( !empty($update_mod_status[$forum_id]) ) ? 0 :  $change_acl_list[$forum_id][$auth_field];
 360  
 361                              if ( isset($auth_access[$forum_id][$auth_field]) && empty($update_acl_status[$forum_id][$auth_field]) && $forum_auth_action[$forum_id] != 'insert' && $forum_auth_action[$forum_id] != 'update' )
 362                              {
 363                                  $forum_auth_action[$forum_id] = 'delete';
 364                              }
 365                              else if ( !isset($auth_access[$forum_id][$auth_field]) && !( $forum_auth_action[$forum_id] == 'delete' && empty($update_acl_status[$forum_id][$auth_field]) ) )
 366                              {
 367                                  $forum_auth_action[$forum_id] = 'insert';
 368                              }
 369                              else if ( isset($auth_access[$forum_id][$auth_field]) && !empty($update_acl_status[$forum_id][$auth_field]) ) 
 370                              {
 371                                  $forum_auth_action[$forum_id] = 'update';
 372                              }
 373                          }
 374                          else if ( ( empty($auth_access[$forum_id]['auth_mod']) && 
 375                              ( isset($auth_access[$forum_id][$auth_field]) && $change_acl_list[$forum_id][$auth_field] == $auth_access[$forum_id][$auth_field] ) ) && $forum_auth_action[$forum_id] == 'delete' )
 376                          {
 377                              $forum_auth_action[$forum_id] = 'update';
 378                          }
 379                      }
 380                  }
 381              }
 382  
 383              //
 384              // Checks complete, make updates to DB
 385              //
 386              $delete_sql = '';
 387              while( list($forum_id, $action) = @each($forum_auth_action) )
 388              {
 389                  if ( $action == 'delete' )
 390                  {
 391                      $delete_sql .= ( ( $delete_sql != '' ) ? ', ' : '' ) . $forum_id;
 392                  }
 393                  else
 394                  {
 395                      if ( $action == 'insert' )
 396                      {
 397                          $sql_field = '';
 398                          $sql_value = '';
 399                          while ( list($auth_type, $value) = @each($update_acl_status[$forum_id]) )
 400                          {
 401                              $sql_field .= ( ( $sql_field != '' ) ? ', ' : '' ) . $auth_type;
 402                              $sql_value .= ( ( $sql_value != '' ) ? ', ' : '' ) . $value;
 403                          }
 404                          $sql_field .= ( ( $sql_field != '' ) ? ', ' : '' ) . 'auth_mod';
 405                          $sql_value .= ( ( $sql_value != '' ) ? ', ' : '' ) . ( ( !isset($update_mod_status[$forum_id]) ) ? 0 : $update_mod_status[$forum_id]);
 406  
 407                          $sql = "INSERT INTO " . AUTH_ACCESS_TABLE . " (forum_id, group_id, $sql_field) 
 408                              VALUES ($forum_id, $group_id, $sql_value)";
 409                      }
 410                      else
 411                      {
 412                          $sql_values = '';
 413                          while ( list($auth_type, $value) = @each($update_acl_status[$forum_id]) )
 414                          {
 415                              $sql_values .= ( ( $sql_values != '' ) ? ', ' : '' ) . $auth_type . ' = ' . $value;
 416                          }
 417                          $sql_values .= ( ( $sql_values != '' ) ? ', ' : '' ) . 'auth_mod = ' . ( ( !isset($update_mod_status[$forum_id]) ) ? 0 : $update_mod_status[$forum_id]);
 418  
 419                          $sql = "UPDATE " . AUTH_ACCESS_TABLE . " 
 420                              SET $sql_values 
 421                              WHERE group_id = $group_id 
 422                                  AND forum_id = $forum_id";
 423                      }
 424                      if( !($result = $db->sql_query($sql)) )
 425                      {
 426                          message_die(GENERAL_ERROR, "Couldn't update private forum permissions", "", __LINE__, __FILE__, $sql);
 427                      }
 428                  }
 429              }
 430  
 431              if ( $delete_sql != '' )
 432              {
 433                  $sql = "DELETE FROM " . AUTH_ACCESS_TABLE . " 
 434                      WHERE group_id = $group_id 
 435                          AND forum_id IN ($delete_sql)";
 436                  if( !($result = $db->sql_query($sql)) )
 437                  {
 438                      message_die(GENERAL_ERROR, "Couldn't delete permission entries", "", __LINE__, __FILE__, $sql);
 439                  }
 440              }
 441  
 442              $l_auth_return = ( $mode == 'user' ) ? $lang['Click_return_userauth'] : $lang['Click_return_groupauth'];
 443              $message = $lang['Auth_updated'] . '<br /><br />' . sprintf($l_auth_return, '<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>');
 444          }
 445  
 446          //
 447          // Update user level to mod for appropriate users
 448          // 
 449          $sql = "SELECT u.user_id 
 450              FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . USERS_TABLE . " u  
 451              WHERE ug.group_id = aa.group_id 
 452                  AND u.user_id = ug.user_id 
 453                  AND ug.user_pending = 0
 454                  AND u.user_level NOT IN (" . MOD . ", " . ADMIN . ") 
 455              GROUP BY u.user_id 
 456              HAVING SUM(aa.auth_mod) > 0";
 457          if ( !($result = $db->sql_query($sql)) )
 458          {
 459              message_die(GENERAL_ERROR, "Couldn't obtain user/group permissions", "", __LINE__, __FILE__, $sql);
 460          }
 461  
 462          $set_mod = '';
 463          while( $row = $db->sql_fetchrow($result) )
 464          {
 465              $set_mod .= ( ( $set_mod != '' ) ? ', ' : '' ) . $row['user_id'];
 466          }
 467          $db->sql_freeresult($result);
 468  
 469          //
 470          // Update user level to user for appropriate users
 471          // 
 472          switch ( SQL_LAYER )
 473          {
 474              case 'postgresql':
 475                  $sql = "SELECT u.user_id 
 476                      FROM " . USERS_TABLE . " u, " . USER_GROUP_TABLE . " ug, " . AUTH_ACCESS_TABLE . " aa
 477                      WHERE ug.user_id = u.user_id 
 478                          AND aa.group_id = ug.group_id 
 479                          AND u.user_level NOT IN (" . USER . ", " . ADMIN . ")
 480                      GROUP BY u.user_id 
 481                      HAVING SUM(aa.auth_mod) = 0 
 482                      UNION (
 483                          SELECT u.user_id  
 484                          FROM " . USERS_TABLE . " u 
 485                          WHERE NOT EXISTS ( 
 486                              SELECT aa.auth_mod 
 487                              FROM " . USER_GROUP_TABLE . " ug, " . AUTH_ACCESS_TABLE . " aa 
 488                              WHERE ug.user_id = u.user_id 
 489                                  AND aa.group_id = ug.group_id
 490                          )
 491                          AND u.user_level NOT IN (" . USER . ", " . ADMIN . ")  
 492                          GROUP BY u.user_id
 493                      )";
 494                  break;
 495              case 'oracle':
 496                  $sql = "SELECT u.user_id 
 497                      FROM " . USERS_TABLE . " u, " . USER_GROUP_TABLE . " ug, " . AUTH_ACCESS_TABLE . " aa 
 498                      WHERE ug.user_id = u.user_id(+)
 499                          AND aa.group_id = ug.group_id(+) 
 500                          AND u.user_level NOT IN (" . USER . ", " . ADMIN . ")
 501                      GROUP BY u.user_id 
 502                      HAVING SUM(aa.auth_mod) = 0";
 503                  break;
 504              default:
 505                  $sql = "SELECT u.user_id 
 506                      FROM ( ( " . USERS_TABLE . " u  
 507                      LEFT JOIN " . USER_GROUP_TABLE . " ug ON ug.user_id = u.user_id ) 
 508                      LEFT JOIN " . AUTH_ACCESS_TABLE . " aa ON aa.group_id = ug.group_id ) 
 509                      WHERE u.user_level NOT IN (" . USER . ", " . ADMIN . ")
 510                      GROUP BY u.user_id 
 511                      HAVING SUM(aa.auth_mod) = 0";
 512                  break;
 513          }
 514          if ( !($result = $db->sql_query($sql)) )
 515          {
 516              message_die(GENERAL_ERROR, "Couldn't obtain user/group permissions", "", __LINE__, __FILE__, $sql);
 517          }
 518  
 519          $unset_mod = "";
 520          while( $row = $db->sql_fetchrow($result) )
 521          {
 522              $unset_mod .= ( ( $unset_mod != '' ) ? ', ' : '' ) . $row['user_id'];
 523          }
 524          $db->sql_freeresult($result);
 525  
 526          if ( $set_mod != '' )
 527          {
 528              $sql = "UPDATE " . USERS_TABLE . " 
 529                  SET user_level = " . MOD . " 
 530                  WHERE user_id IN ($set_mod)";
 531              if( !($result = $db->sql_query($sql)) )
 532              {
 533                  message_die(GENERAL_ERROR, "Couldn't update user level", "", __LINE__, __FILE__, $sql);
 534              }
 535          }
 536  
 537          if ( $unset_mod != '' )
 538          {
 539              $sql = "UPDATE " . USERS_TABLE . " 
 540                  SET user_level = " . USER . " 
 541                  WHERE user_id IN ($unset_mod)";
 542              if( !($result = $db->sql_query($sql)) )
 543              {
 544                  message_die(GENERAL_ERROR, "Couldn't update user level", "", __LINE__, __FILE__, $sql);
 545              }
 546          }
 547  
 548          $sql = 'SELECT user_id FROM ' . USER_GROUP_TABLE . "
 549              WHERE group_id = $group_id";
 550          $result = $db->sql_query($sql);
 551  
 552          $group_user = array();
 553          while ($row = $db->sql_fetchrow($result))
 554          {
 555              $group_user[$row['user_id']] = $row['user_id'];
 556          }
 557          $db->sql_freeresult($result);
 558  
 559          $sql = "SELECT ug.user_id, COUNT(auth_mod) AS is_auth_mod 
 560              FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug 
 561              WHERE ug.user_id IN (" . implode(', ', $group_user) . ") 
 562                  AND aa.group_id = ug.group_id 
 563                  AND aa.auth_mod = 1
 564              GROUP BY ug.user_id";
 565          if ( !($result = $db->sql_query($sql)) )
 566          {
 567              message_die(GENERAL_ERROR, 'Could not obtain moderator status', '', __LINE__, __FILE__, $sql);
 568          }
 569  
 570          while ($row = $db->sql_fetchrow($result))
 571          {
 572              if ($row['is_auth_mod'])
 573              {
 574                  unset($group_user[$row['user_id']]);
 575              }
 576          }
 577          $db->sql_freeresult($result);
 578  
 579          if (sizeof($group_user))
 580          {
 581              $sql = "UPDATE " . USERS_TABLE . " 
 582                  SET user_level = " . USER . " 
 583                  WHERE user_id IN (" . implode(', ', $group_user) . ") AND user_level = " . MOD;
 584              if ( !($result = $db->sql_query($sql)) )
 585              {
 586                  message_die(GENERAL_ERROR, 'Could not update user level', '', __LINE__, __FILE__, $sql);
 587              }
 588          }
 589  
 590          message_die(GENERAL_MESSAGE, $message);
 591      }
 592  }
 593  else if ( ( $mode == 'user' && ( isset($HTTP_POST_VARS['username']) || $user_id ) ) || ( $mode == 'group' && $group_id ) )
 594  {
 595      if ( isset($HTTP_POST_VARS['username']) )
 596      {
 597          $this_userdata = get_userdata($HTTP_POST_VARS['username'], true);
 598          if ( !is_array($this_userdata) )
 599          {
 600              message_die(GENERAL_MESSAGE, $lang['No_such_user']);
 601          }
 602          $user_id = $this_userdata['user_id'];
 603      }
 604  
 605      //
 606      // Front end
 607      //
 608      $sql = "SELECT f.* 
 609          FROM " . FORUMS_TABLE . " f, " . CATEGORIES_TABLE . " c
 610          WHERE f.cat_id = c.cat_id
 611          ORDER BY c.cat_order, f.forum_order ASC";
 612      if ( !($result = $db->sql_query($sql)) )
 613      {
 614          message_die(GENERAL_ERROR, "Couldn't obtain forum information", "", __LINE__, __FILE__, $sql);
 615      }
 616  
 617      $forum_access = array();
 618      while( $row = $db->sql_fetchrow($result) )
 619      {
 620          $forum_access[] = $row;
 621      }
 622      $db->sql_freeresult($result);
 623  
 624      if( empty($adv) )
 625      {
 626          for($i = 0; $i < count($forum_access); $i++)
 627          {
 628              $forum_id = $forum_access[$i]['forum_id'];
 629  
 630              $forum_auth_level[$forum_id] = AUTH_ALL;
 631  
 632              for($j = 0; $j < count($forum_auth_fields); $j++)
 633              {
 634                  $forum_access[$i][$forum_auth_fields[$j]] . ' :: ';
 635                  if ( $forum_access[$i][$forum_auth_fields[$j]] == AUTH_ACL )
 636                  {
 637                      $forum_auth_level[$forum_id] = AUTH_ACL;
 638                      $forum_auth_level_fields[$forum_id][] = $forum_auth_fields[$j];
 639                  }
 640              }
 641          }
 642      }
 643  
 644      $sql = "SELECT u.user_id, u.username, u.user_level, g.group_id, g.group_name, g.group_single_user, ug.user_pending FROM " . USERS_TABLE . " u, " . GROUPS_TABLE . " g, " . USER_GROUP_TABLE . " ug WHERE ";
 645      $sql .= ( $mode == 'user' ) ? "u.user_id = $user_id AND ug.user_id = u.user_id AND g.group_id = ug.group_id" : "g.group_id = $group_id AND ug.group_id = g.group_id AND u.user_id = ug.user_id";
 646      if ( !($result = $db->sql_query($sql)) )
 647      {
 648          message_die(GENERAL_ERROR, "Couldn't obtain user/group information", "", __LINE__, __FILE__, $sql);
 649      }
 650      $ug_info = array();
 651      while( $row = $db->sql_fetchrow($result) )
 652      {
 653          $ug_info[] = $row;
 654      }
 655      $db->sql_freeresult($result);
 656  
 657      $sql = ( $mode == 'user' ) ? "SELECT aa.*, g.group_single_user FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE. " g WHERE ug.user_id = $user_id AND g.group_id = ug.group_id AND aa.group_id = ug.group_id AND g.group_single_user = 1" : "SELECT * FROM " . AUTH_ACCESS_TABLE . " WHERE group_id = $group_id";
 658      if ( !($result = $db->sql_query($sql)) )
 659      {
 660          message_die(GENERAL_ERROR, "Couldn't obtain user/group permissions", "", __LINE__, __FILE__, $sql);
 661      }
 662  
 663      $auth_access = array();
 664      $auth_access_count = array();
 665      while( $row = $db->sql_fetchrow($result) )
 666      {
 667          $auth_access[$row['forum_id']][] = $row; 
 668          $auth_access_count[$row['forum_id']]++;
 669      }
 670      $db->sql_freeresult($result);
 671  
 672      $is_admin = ( $mode == 'user' ) ? ( ( $ug_info[0]['user_level'] == ADMIN && $ug_info[0]['user_id'] != ANONYMOUS ) ? 1 : 0 ) : 0;
 673  
 674      for($i = 0; $i < count($forum_access); $i++)
 675      {
 676          $forum_id = $forum_access[$i]['forum_id'];
 677  
 678          unset($prev_acl_setting);
 679          for($j = 0; $j < count($forum_auth_fields); $j++)
 680          {
 681              $key = $forum_auth_fields[$j];
 682              $value = $forum_access[$i][$key];
 683  
 684              switch( $value )
 685              {
 686                  case AUTH_ALL:
 687                  case AUTH_REG:
 688                      $auth_ug[$forum_id][$key] = 1;
 689                      break;
 690  
 691                  case AUTH_ACL:
 692                      $auth_ug[$forum_id][$key] = ( !empty($auth_access_count[$forum_id]) ) ? check_auth(AUTH_ACL, $key, $auth_access[$forum_id], $is_admin) : 0;
 693                      $auth_field_acl[$forum_id][$key] = $auth_ug[$forum_id][$key];
 694  
 695                      if ( isset($prev_acl_setting) )
 696                      {
 697                          if ( $prev_acl_setting != $auth_ug[$forum_id][$key] && empty($adv) )
 698                          {
 699                              $adv = 1;
 700                          }
 701                      }
 702  
 703                      $prev_acl_setting = $auth_ug[$forum_id][$key];
 704  
 705                      break;
 706  
 707                  case AUTH_MOD:
 708                      $auth_ug[$forum_id][$key] = ( !empty($auth_access_count[$forum_id]) ) ? check_auth(AUTH_MOD, $key, $auth_access[$forum_id], $is_admin) : 0;
 709                      break;
 710  
 711                  case AUTH_ADMIN:
 712                      $auth_ug[$forum_id][$key] = $is_admin;
 713                      break;
 714  
 715                  default:
 716                      $auth_ug[$forum_id][$key] = 0;
 717                      break;
 718              }
 719          }
 720  
 721          //
 722          // Is user a moderator?
 723          //
 724          $auth_ug[$forum_id]['auth_mod'] = ( !empty($auth_access_count[$forum_id]) ) ? check_auth(AUTH_MOD, 'auth_mod', $auth_access[$forum_id], 0) : 0;
 725      }
 726      
 727      $i = 0;
 728      @reset($auth_ug);
 729      while( list($forum_id, $user_ary) = @each($auth_ug) )
 730      {
 731          if ( empty($adv) )
 732          {
 733              if ( $forum_auth_level[$forum_id] == AUTH_ACL )
 734              {
 735                  $allowed = 1;
 736  
 737                  for($j = 0; $j < count($forum_auth_level_fields[$forum_id]); $j++)
 738                  {
 739                      if ( !$auth_ug[$forum_id][$forum_auth_level_fields[$forum_id][$j]] )
 740                      {
 741                          $allowed = 0;
 742                      }
 743                  }
 744  
 745                  $optionlist_acl = '<select name="private[' . $forum_id . ']">';
 746  
 747                  if ( $is_admin || $user_ary['auth_mod'] )
 748                  {
 749                      $optionlist_acl .= '<option value="1">' . $lang['Allowed_Access'] . '</option>';
 750                  }
 751                  else if ( $allowed )
 752                  {
 753                      $optionlist_acl .= '<option value="1" selected="selected">' . $lang['Allowed_Access'] . '</option><option value="0">'. $lang['Disallowed_Access'] . '</option>';
 754                  }
 755                  else
 756                  {
 757                      $optionlist_acl .= '<option value="1">' . $lang['Allowed_Access'] . '</option><option value="0" selected="selected">' . $lang['Disallowed_Access'] . '</option>';
 758                  }
 759  
 760                  $optionlist_acl .= '</select>';
 761              }
 762              else
 763              {
 764                  $optionlist_acl = '&nbsp;';
 765              }
 766          }
 767          else
 768          {
 769              for($j = 0; $j < count($forum_access); $j++)
 770              {
 771                  if ( $forum_access[$j]['forum_id'] == $forum_id )
 772                  {
 773                      for($k = 0; $k < count($forum_auth_fields); $k++)
 774                      {
 775                          $field_name = $forum_auth_fields[$k];
 776  
 777                          if( $forum_access[$j][$field_name] == AUTH_ACL )
 778                          {
 779                              $optionlist_acl_adv[$forum_id][$k] = '<select name="private_' . $field_name . '[' . $forum_id . ']">';
 780  
 781                              if( isset($auth_field_acl[$forum_id][$field_name]) && !($is_admin || $user_ary['auth_mod']) )
 782                              {
 783                                  if( !$auth_field_acl[$forum_id][$field_name] )
 784                                  {
 785                                      $optionlist_acl_adv[$forum_id][$k] .= '<option value="1">' . $lang['ON'] . '</option><option value="0" selected="selected">' . $lang['OFF'] . '</option>';
 786                                  }
 787                                  else
 788                                  {
 789                                      $optionlist_acl_adv[$forum_id][$k] .= '<option value="1" selected="selected">' . $lang['ON'] . '</option><option value="0">' . $lang['OFF'] . '</option>';
 790                                  }
 791                              }
 792                              else
 793                              {
 794                                  if( $is_admin || $user_ary['auth_mod'] )
 795                                  {
 796                                      $optionlist_acl_adv[$forum_id][$k] .= '<option value="1">' . $lang['ON'] . '</option>';
 797                                  }
 798                                  else
 799                                  {
 800                                      $optionlist_acl_adv[$forum_id][$k] .= '<option value="1">' . $lang['ON'] . '</option><option value="0" selected="selected">' . $lang['OFF'] . '</option>';
 801                                  }
 802                              }
 803  
 804                              $optionlist_acl_adv[$forum_id][$k] .= '</select>';
 805  
 806                          }
 807                      }
 808                  }
 809              }
 810          }
 811  
 812          $optionlist_mod = '<select name="moderator[' . $forum_id . ']">';
 813          $optionlist_mod .= ( $user_ary['auth_mod'] ) ? '<option value="1" selected="selected">' . $lang['Is_Moderator'] . '</option><option value="0">' . $lang['Not_Moderator'] . '</option>' : '<option value="1">' . $lang['Is_Moderator'] . '</option><option value="0" selected="selected">' . $lang['Not_Moderator'] . '</option>';
 814          $optionlist_mod .= '</select>';
 815  
 816          $row_class = ( !( $i % 2 ) ) ? 'row2' : 'row1';
 817          $row_color = ( !( $i % 2 ) ) ? $theme['td_color1'] : $theme['td_color2'];
 818  
 819          $template->assign_block_vars('forums', array(
 820              'ROW_COLOR' => '#' . $row_color,
 821              'ROW_CLASS' => $row_class,
 822              'FORUM_NAME' => $forum_access[$i]['forum_name'],
 823  
 824              'U_FORUM_AUTH' => append_sid("admin_forumauth.$phpEx?f=" . $forum_access[$i]['forum_id']),
 825  
 826              'S_MOD_SELECT' => $optionlist_mod)
 827          );
 828  
 829          if( !$adv )
 830          {
 831              $template->assign_block_vars('forums.aclvalues', array(
 832                  'S_ACL_SELECT' => $optionlist_acl)
 833              );
 834          }
 835          else
 836          {
 837              for($j = 0; $j < count($forum_auth_fields); $j++)
 838              {
 839                  $template->assign_block_vars('forums.aclvalues', array(
 840                      'S_ACL_SELECT' => $optionlist_acl_adv[$forum_id][$j])
 841                  );
 842              }
 843          }
 844  
 845          $i++;
 846      }
 847  //    @reset($auth_user);
 848      
 849      if ( $mode == 'user' )
 850      {
 851          $t_username = $ug_info[0]['username'];
 852          $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>';
 853      }
 854      else
 855      {
 856          $t_groupname = $ug_info[0]['group_name'];
 857      }
 858  
 859      $name = array();
 860      $id = array();
 861      for($i = 0; $i < count($ug_info); $i++)
 862      {
 863          if( ( $mode == 'user' && !$ug_info[$i]['group_single_user'] ) || $mode == 'group' )
 864          {
 865              $name[] = ( $mode == 'user' ) ? $ug_info[$i]['group_name'] :  $ug_info[$i]['username'];
 866              $id[] = ( $mode == 'user' ) ? intval($ug_info[$i]['group_id']) : intval($ug_info[$i]['user_id']);
 867          }
 868      }
 869  
 870      $t_usergroup_list = $t_pending_list = '';
 871      if( count($name) )
 872      {
 873          for($i = 0; $i < count($ug_info); $i++)
 874          {
 875              $ug = ( $mode == 'user' ) ? 'group&amp;' . POST_GROUPS_URL : 'user&amp;' . POST_USERS_URL;
 876  
 877              if (!$ug_info[$i]['user_pending'])
 878              {
 879                  $t_usergroup_list .= ( ( $t_usergroup_list != '' ) ? ', ' : '' ) . '<a href="' . append_sid("admin_ug_auth.$phpEx?mode=$ug=" . $id[$i]) . '">' . $name[$i] . '</a>';
 880              }
 881              else
 882              {
 883                  $t_pending_list .= ( ( $t_pending_list != '' ) ? ', ' : '' ) . '<a href="' . append_sid("admin_ug_auth.$phpEx?mode=$ug=" . $id[$i]) . '">' . $name[$i] . '</a>';
 884              }
 885          }
 886      }
 887  
 888      $t_usergroup_list = ($t_usergroup_list == '') ? $lang['None'] : $t_usergroup_list;
 889      $t_pending_list = ($t_pending_list == '') ? $lang['None'] : $t_pending_list;
 890  
 891      $s_column_span = 2; // Two columns always present
 892      if( !$adv )
 893      {
 894          $template->assign_block_vars('acltype', array(
 895              'L_UG_ACL_TYPE' => $lang['Simple_Permission'])
 896          );
 897          $s_column_span++;
 898      }
 899      else
 900      {
 901          for($i = 0; $i < count($forum_auth_fields); $i++)
 902          {
 903              $cell_title = $field_names[$forum_auth_fields[$i]];
 904  
 905              $template->assign_block_vars('acltype', array(
 906                  'L_UG_ACL_TYPE' => $cell_title)
 907              );
 908              $s_column_span++;
 909          }
 910      }
 911  
 912      //
 913      // Dump in the page header ...
 914      //
 915      include('./page_header_admin.'.$phpEx);
 916  
 917      $template->set_filenames(array(
 918          "body" => 'admin/auth_ug_body.tpl')
 919      );
 920  
 921      $adv_switch = ( empty($adv) ) ? 1 : 0;
 922      $u_ug_switch = ( $mode == 'user' ) ? POST_USERS_URL . "=" . $user_id : POST_GROUPS_URL . "=" . $group_id;
 923      $switch_mode = append_sid("admin_ug_auth.$phpEx?mode=$mode&amp;" . $u_ug_switch . "&amp;adv=$adv_switch");
 924      $switch_mode_text = ( empty($adv) ) ? $lang['Advanced_mode'] : $lang['Simple_mode'];
 925      $u_switch_mode = '<a href="' . $switch_mode . '">' . $switch_mode_text . '</a>';
 926  
 927      $s_hidden_fields = '<input type="hidden" name="mode" value="' . $mode . '" /><input type="hidden" name="adv" value="' . $adv . '" />';
 928      $s_hidden_fields .= ( $mode == 'user' ) ? '<input type="hidden" name="' . POST_USERS_URL . '" value="' . $user_id . '" />' : '<input type="hidden" name="' . POST_GROUPS_URL . '" value="' . $group_id . '" />';
 929  
 930      if ( $mode == 'user' )
 931      {
 932          $template->assign_block_vars('switch_user_auth', array());
 933  
 934          $template->assign_vars(array(
 935              'USERNAME' => $t_username,
 936              'USER_LEVEL' => $lang['User_Level'] . " : " . $s_user_type,
 937              'USER_GROUP_MEMBERSHIPS' => $lang['Group_memberships'] . ' : ' . $t_usergroup_list)
 938          );
 939      }
 940      else
 941      {
 942          $template->assign_block_vars("switch_group_auth", array());
 943  
 944          $template->assign_vars(array(
 945              'USERNAME' => $t_groupname,
 946              'GROUP_MEMBERSHIP' => $lang['Usergroup_members'] . ' : ' . $t_usergroup_list . '<br />' . $lang['Pending_members'] . ' : ' . $t_pending_list)
 947          );
 948      }
 949  
 950      $template->assign_vars(array(
 951          'L_USER_OR_GROUPNAME' => ( $mode == 'user' ) ? $lang['Username'] : $lang['Group_name'],
 952  
 953          'L_AUTH_TITLE' => ( $mode == 'user' ) ? $lang['Auth_Control_User'] : $lang['Auth_Control_Group'],
 954          'L_AUTH_EXPLAIN' => ( $mode == 'user' ) ? $lang['User_auth_explain'] : $lang['Group_auth_explain'],
 955          'L_MODERATOR_STATUS' => $lang['Moderator_status'],
 956          'L_PERMISSIONS' => $lang['Permissions'],
 957          'L_SUBMIT' => $lang['Submit'],
 958          'L_RESET' => $lang['Reset'], 
 959          'L_FORUM' => $lang['Forum'], 
 960  
 961          'U_USER_OR_GROUP' => append_sid("admin_ug_auth.$phpEx"),
 962          'U_SWITCH_MODE' => $u_switch_mode,
 963  
 964          'S_COLUMN_SPAN' => $s_column_span,
 965          'S_AUTH_ACTION' => append_sid("admin_ug_auth.$phpEx"), 
 966          'S_HIDDEN_FIELDS' => $s_hidden_fields)
 967      );
 968  }
 969  else
 970  {
 971      //
 972      // Select a user/group
 973      //
 974      include('./page_header_admin.'.$phpEx);
 975  
 976      $template->set_filenames(array(
 977          'body' => ( $mode == 'user' ) ? 'admin/user_select_body.tpl' : 'admin/auth_select_body.tpl')
 978      );
 979  
 980      if ( $mode == 'user' )
 981      {
 982          $template->assign_vars(array(
 983              'L_FIND_USERNAME' => $lang['Find_username'],
 984  
 985              'U_SEARCH_USER' => append_sid("../search.$phpEx?mode=searchuser"))
 986          );
 987      }
 988      else
 989      {
 990          $sql = "SELECT group_id, group_name
 991              FROM " . GROUPS_TABLE . "
 992              WHERE group_single_user <> " . TRUE;
 993          if ( !($result = $db->sql_query($sql)) )
 994          {
 995              message_die(GENERAL_ERROR, "Couldn't get group list", "", __LINE__, __FILE__, $sql);
 996          }
 997  
 998          if ( $row = $db->sql_fetchrow($result) )
 999          {
1000              $select_list = '<select name="' . POST_GROUPS_URL . '">';
1001              do
1002              {
1003                  $select_list .= '<option value="' . $row['group_id'] . '">' . $row['group_name'] . '</option>';
1004              }
1005              while ( $row = $db->sql_fetchrow($result) );
1006              $select_list .= '</select>';
1007          }
1008  
1009          $template->assign_vars(array(
1010              'S_AUTH_SELECT' => $select_list)
1011          );
1012      }
1013  
1014      $s_hidden_fields = '<input type="hidden" name="mode" value="' . $mode . '" />';
1015  
1016      $l_type = ( $mode == 'user' ) ? 'USER' : 'AUTH';
1017  
1018      $template->assign_vars(array(
1019          'L_' . $l_type . '_TITLE' => ( $mode == 'user' ) ? $lang['Auth_Control_User'] : $lang['Auth_Control_Group'],
1020          'L_' . $l_type . '_EXPLAIN' => ( $mode == 'user' ) ? $lang['User_auth_explain'] : $lang['Group_auth_explain'],
1021          'L_' . $l_type . '_SELECT' => ( $mode == 'user' ) ? $lang['Select_a_User'] : $lang['Select_a_Group'],
1022          'L_LOOK_UP' => ( $mode == 'user' ) ? $lang['Look_up_User'] : $lang['Look_up_Group'],
1023  
1024          'S_HIDDEN_FIELDS' => $s_hidden_fields, 
1025          'S_' . $l_type . '_ACTION' => append_sid("admin_ug_auth.$phpEx"))
1026      );
1027  
1028  }
1029  
1030  $template->pparse('body');
1031  
1032  include('./page_footer_admin.'.$phpEx);
1033  
1034  ?>


Generated: Mon Jan 14 19:21:40 2013 Cross-referenced by PHPXref 0.7.1