[ Index ]

PHP Cross Reference of phpBB 3.0 Beta 3

title

Body

[close]

/includes/acp/ -> acp_groups.php (source)

   1  <?php
   2  /** 
   3  *
   4  * @package acp
   5  * @version $Id: acp_groups.php,v 1.35 2006/10/20 13:47:28 acydburn Exp $
   6  * @copyright (c) 2005 phpBB Group 
   7  * @license http://opensource.org/licenses/gpl-license.php GNU Public License 
   8  *
   9  */
  10  
  11  /**
  12  * @package acp
  13  */
  14  class acp_groups
  15  {
  16      var $u_action;
  17  
  18  	function main($id, $mode)
  19      {
  20          global $config, $db, $user, $auth, $template, $cache;
  21          global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix, $file_uploads;
  22  
  23          $user->add_lang('acp/groups');
  24          $this->tpl_name = 'acp_groups';
  25          $this->page_title = 'ACP_GROUPS_MANAGE';
  26  
  27          include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
  28  
  29          // Check and set some common vars
  30          $action        = (isset($_POST['add'])) ? 'add' : ((isset($_POST['addusers'])) ? 'addusers' : request_var('action', ''));
  31          $group_id    = request_var('g', 0);
  32          $mark_ary    = request_var('mark', array(0));
  33          $name_ary    = request_var('usernames', '', true);
  34          $leader        = request_var('leader', 0);
  35          $default    = request_var('default', 0);
  36          $start        = request_var('start', 0);
  37          $update        = (isset($_POST['update'])) ? true : false;
  38  
  39          // Clear some vars
  40          $can_upload = (file_exists($phpbb_root_path . $config['avatar_path']) && is_writeable($phpbb_root_path . $config['avatar_path']) && $file_uploads) ? true : false;
  41          $group_row = array();
  42  
  43          // Grab basic data for group, if group_id is set and exists
  44          if ($group_id)
  45          {
  46              $sql = 'SELECT * 
  47                  FROM ' . GROUPS_TABLE . " 
  48                  WHERE group_id = $group_id";
  49              $result = $db->sql_query($sql);
  50              $group_row = $db->sql_fetchrow($result);
  51              $db->sql_freeresult($result);
  52  
  53              if (!$group_row)
  54              {
  55                  trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
  56              }
  57          }
  58  
  59          // Which page?
  60          switch ($action)
  61          {
  62              case 'approve':
  63              case 'demote':
  64              case 'promote':
  65                  if (!$group_id)
  66                  {
  67                      trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
  68                  }
  69  
  70                  // Approve, demote or promote
  71                  group_user_attributes($action, $group_id, $mark_ary, false, $group_row['group_name']);
  72  
  73                  switch ($action)
  74                  {
  75                      case 'demote':
  76                          $message = 'GROUP_MODS_DEMOTED';
  77                      break;
  78  
  79                      case 'promote':
  80                          $message = 'GROUP_MODS_PROMOTED';
  81                      break;
  82  
  83                      case 'approve':
  84                          $message = 'USERS_APPROVED';
  85                      break;
  86                  }
  87  
  88                  group_update_listings($group_id);
  89  
  90                  trigger_error($user->lang[$message] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id));
  91              break;
  92  
  93              case 'default':
  94                  if (!$group_id)
  95                  {
  96                      trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
  97                  }
  98  
  99                  if (confirm_box(true))
 100                  {
 101                      if (!sizeof($mark_ary))
 102                      {
 103                          $start = 0;
 104  
 105                          do
 106                          {
 107                              $sql = 'SELECT user_id 
 108                                  FROM ' . USER_GROUP_TABLE . "
 109                                  WHERE group_id = $group_id 
 110                                  ORDER BY user_id";
 111                              $result = $db->sql_query_limit($sql, 200, $start);
 112  
 113                              $mark_ary = array();
 114                              if ($row = $db->sql_fetchrow($result))
 115                              {
 116                                  do
 117                                  {
 118                                      $mark_ary[] = $row['user_id'];
 119                                  }
 120                                  while ($row = $db->sql_fetchrow($result));
 121  
 122                                  group_user_attributes('default', $group_id, $mark_ary, false, $group_row['group_name'], $group_row);
 123  
 124                                  $start = (sizeof($mark_ary) < 200) ? 0 : $start + 200;
 125                              }
 126                              else
 127                              {
 128                                  $start = 0;
 129                              }
 130                              $db->sql_freeresult($result);
 131                          }
 132                          while ($start);
 133                      }
 134                      else
 135                      {
 136                          group_user_attributes('default', $group_id, $mark_ary, false, $group_row['group_name'], $group_row);
 137                      }
 138  
 139                      group_update_listings($group_id);
 140  
 141                      trigger_error($user->lang['GROUP_DEFS_UPDATED'] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id));
 142                  }
 143                  else
 144                  {
 145                      confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
 146                          'mark'        => $mark_ary,
 147                          'g'            => $group_id,
 148                          'i'            => $id,
 149                          'mode'        => $mode,
 150                          'action'    => $action))
 151                      );
 152                  }
 153  
 154              break;
 155  
 156              case 'deleteusers':
 157              case 'delete':
 158                  if (confirm_box(true))
 159                  {
 160                      if (!$group_id)
 161                      {
 162                          trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 163                      }
 164  
 165                      $error = '';
 166  
 167                      switch ($action)
 168                      {
 169                          case 'delete':
 170                              if (!$auth->acl_get('a_groupdel'))
 171                              {
 172                                  trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
 173                              }
 174  
 175                              $error = group_delete($group_id, $group_row['group_name']);
 176                          break;
 177  
 178                          case 'deleteusers':
 179                              $error = group_user_del($group_id, $mark_ary, false, $group_row['group_name']);
 180                          break;
 181                      }
 182  
 183                      $back_link = ($action == 'delete') ? $this->u_action : $this->u_action . '&amp;action=list&amp;g=' . $group_id;
 184  
 185                      if ($error)
 186                      {
 187                          trigger_error($user->lang[$error] . adm_back_link($back_link), E_USER_WARNING);
 188                      }
 189  
 190                      $message = ($action == 'delete') ? 'GROUP_DELETED' : 'GROUP_USERS_REMOVE';
 191                      trigger_error($user->lang[$message] . adm_back_link($back_link));
 192                  }
 193                  else
 194                  {
 195                      confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
 196                          'mark'        => $mark_ary,
 197                          'g'            => $group_id,
 198                          'i'            => $id,
 199                          'mode'        => $mode,
 200                          'action'    => $action))
 201                      );
 202                  }
 203              break;
 204  
 205              case 'addusers':
 206                  if (!$group_id)
 207                  {
 208                      trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 209                  }
 210  
 211                  if (!$name_ary)
 212                  {
 213                      trigger_error($user->lang['NO_USERS'] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id), E_USER_WARNING);
 214                  }
 215  
 216                  $name_ary = array_unique(explode("\n", $name_ary));
 217  
 218                  // Add user/s to group
 219                  if ($error = group_user_add($group_id, false, $name_ary, $group_row['group_name'], $default, $leader, 0, $group_row))
 220                  {
 221                      trigger_error($user->lang[$error] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id), E_USER_WARNING);
 222                  }
 223  
 224                  $message = ($leader) ? 'GROUP_MODS_ADDED' : 'GROUP_USERS_ADDED';
 225                  trigger_error($user->lang[$message] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id));
 226              break;
 227  
 228              case 'edit':
 229              case 'add':
 230  
 231                  $data = $submit_ary = array();
 232  
 233                  if ($action == 'edit' && !$group_id)
 234                  {
 235                      trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 236                  }
 237  
 238                  if ($action == 'add' && !$auth->acl_get('a_groupadd'))
 239                  {
 240                      trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
 241                  }
 242  
 243                  $error = array();
 244                  $user->add_lang('ucp');
 245              
 246                  $avatar_select = basename(request_var('avatar_select', ''));
 247                  $category = basename(request_var('category', ''));
 248  
 249                  // Did we submit?
 250                  if ($update)
 251                  {
 252                      $group_name    = request_var('group_name', '', true);
 253                      $group_desc = request_var('group_desc', '', true);
 254                      $group_type    = request_var('group_type', GROUP_FREE);
 255  
 256                      $allow_desc_bbcode    = request_var('desc_parse_bbcode', false);
 257                      $allow_desc_urls    = request_var('desc_parse_urls', false);
 258                      $allow_desc_smilies    = request_var('desc_parse_smilies', false);
 259  
 260                      $data['uploadurl']    = request_var('uploadurl', '');
 261                      $data['remotelink'] = request_var('remotelink', '');
 262                      $delete                = request_var('delete', '');
 263  
 264                      $submit_ary = array(
 265                          'colour'        => request_var('group_colour', ''),
 266                          'rank'            => request_var('group_rank', 0),
 267                          'receive_pm'    => isset($_REQUEST['group_receive_pm']) ? 1 : 0,
 268                          'legend'        => isset($_REQUEST['group_legend']) ? 1 : 0,
 269                          'message_limit'    => request_var('group_message_limit', 0)
 270                      );
 271  
 272                      if (!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl'] || $data['remotelink'])
 273                      {
 274                          $data['width']        = request_var('width', '');
 275                          $data['height']        = request_var('height', '');
 276  
 277                          // Avatar stuff
 278                          $var_ary = array(
 279                              'uploadurl'        => array('string', true, 5, 255), 
 280                              'remotelink'    => array('string', true, 5, 255), 
 281                              'width'            => array('string', true, 1, 3), 
 282                              'height'        => array('string', true, 1, 3), 
 283                          );
 284  
 285                          if (!($error = validate_data($data, $var_ary)))
 286                          {
 287                              $data['user_id'] = "g$group_id";
 288  
 289                              if ((!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl']) && $can_upload)
 290                              {
 291                                  list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_upload($data, $error);
 292                              }
 293                              else if ($data['remotelink'])
 294                              {
 295                                  list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_remote($data, $error);
 296                              }
 297                          }
 298                      }
 299                      else if ($avatar_select && $config['allow_avatar_local'])
 300                      {
 301                          // check avatar gallery
 302                          if (is_dir($phpbb_root_path . $config['avatar_gallery_path'] . '/' . $category))
 303                          {
 304                              $submit_ary['avatar_type'] = AVATAR_GALLERY;
 305  
 306                              list($submit_ary['avatar_width'], $submit_ary['avatar_height']) = getimagesize($phpbb_root_path . $config['avatar_gallery_path'] . '/' . $category . '/' . $avatar_select);
 307                              $submit_ary['avatar'] = $category . '/' . $avatar_select;
 308                          }
 309                      }
 310                      else if ($delete)
 311                      {
 312                          $submit_ary['avatar'] = '';
 313                          $submit_ary['avatar_type'] = $submit_ary['avatar_width'] = $submit_ary['avatar_height'] = 0;
 314                      }
 315  
 316                      if ((isset($submit_ary['avatar']) && $submit_ary['avatar'] && (!isset($group_row['group_avatar']) || $group_row['group_avatar'] != $submit_ary['avatar'])) || $delete)
 317                      {
 318                          if (isset($group_row['group_avatar']) && $group_row['group_avatar'])
 319                          {
 320                              avatar_delete('group', $group_row);
 321                          }
 322                      }
 323  
 324                      if (!sizeof($error))
 325                      {
 326                          // Only set the rank, colour, etc. if it's changed or if we're adding a new
 327                          // group. This prevents existing group members being updated if no changes 
 328                          // were made.
 329  
 330                          $group_attributes = array();
 331                          $test_variables = array('rank', 'colour', 'avatar', 'avatar_type', 'avatar_width', 'avatar_height', 'receive_pm', 'legend', 'message_limit');
 332                          foreach ($test_variables as $test)
 333                          {
 334                              if (isset($submit_ary[$test]) && ($action == 'add' || $group_row['group_' . $test] != $submit_ary[$test]))
 335                              {
 336                                  $group_attributes['group_' . $test] = $group_row['group_' . $test] = $submit_ary[$test];
 337                              }
 338                          }
 339  
 340                          if (!($error = group_create($group_id, $group_type, $group_name, $group_desc, $group_attributes, $allow_desc_bbcode, $allow_desc_urls, $allow_desc_smilies)))
 341                          {
 342                              $group_perm_from = request_var('group_perm_from', 0);
 343  
 344                              // Copy permissions?
 345                              if ($group_perm_from && $action == 'add')
 346                              {
 347                                  // From the mysql documentation:
 348                                  // Prior to MySQL 4.0.14, the target table of the INSERT statement cannot appear in the FROM clause of the SELECT part of the query. This limitation is lifted in 4.0.14.
 349                                  // Due to this we stay on the safe side if we do the insertion "the manual way"
 350                                  
 351                                  // Copy permisisons from/to the acl groups table (only group_id gets changed)
 352                                  $sql = 'SELECT forum_id, auth_option_id, auth_role_id, auth_setting
 353                                      FROM ' . ACL_GROUPS_TABLE . '
 354                                      WHERE group_id = ' . $group_perm_from;
 355                                  $result = $db->sql_query($sql);
 356  
 357                                  $groups_sql_ary = array();
 358                                  while ($row = $db->sql_fetchrow($result))
 359                                  {
 360                                      $groups_sql_ary[] = array(
 361                                          'group_id'            => (int) $group_id,
 362                                          'forum_id'            => (int) $row['forum_id'],
 363                                          'auth_option_id'    => (int) $row['auth_option_id'],
 364                                          'auth_role_id'        => (int) $row['auth_role_id'],
 365                                          'auth_setting'        => (int) $row['auth_setting']
 366                                      );
 367                                  }
 368                                  $db->sql_freeresult($result);
 369  
 370                                  // Now insert the data
 371                                  $db->sql_multi_insert(ACL_GROUPS_TABLE, $groups_sql_ary);
 372  
 373                                  $auth->acl_clear_prefetch();
 374                              }
 375  
 376                              $cache->destroy('sql', GROUPS_TABLE);
 377  
 378                              $message = ($action == 'edit') ? 'GROUP_UPDATED' : 'GROUP_CREATED';
 379                              trigger_error($user->lang[$message] . adm_back_link($this->u_action));
 380                          }
 381                      }
 382  
 383                      if (sizeof($error))
 384                      {
 385                          $group_rank = $submit_ary['rank'];
 386  
 387                          $group_desc_data = array(
 388                              'text'            => $group_desc,
 389                              'allow_bbcode'    => $allow_desc_bbcode,
 390                              'allow_smilies'    => $allow_desc_smilies,
 391                              'allow_urls'    => $allow_desc_urls
 392                          );
 393                      }
 394                  }
 395                  else if (!$group_id)
 396                  {
 397                      $group_name = request_var('group_name', '', true);
 398                      $group_desc_data = array(
 399                          'text'            => '',
 400                          'allow_bbcode'    => true,
 401                          'allow_smilies'    => true,
 402                          'allow_urls'    => true
 403                      );
 404                      $group_rank = 0;
 405                      $group_type = GROUP_OPEN;
 406                  }
 407                  else
 408                  {
 409                      $group_name = $group_row['group_name'];
 410                      $group_desc_data = generate_text_for_edit($group_row['group_desc'], $group_row['group_desc_uid'], $group_row['group_desc_options']);
 411                      $group_type = $group_row['group_type'];
 412                      $group_rank = $group_row['group_rank'];
 413                  }
 414  
 415                  $sql = 'SELECT * 
 416                      FROM ' . RANKS_TABLE . '
 417                      WHERE rank_special = 1
 418                      ORDER BY rank_title';
 419                  $result = $db->sql_query($sql);
 420  
 421                  $rank_options = '<option value="0"' . ((!$group_rank) ? ' selected="selected"' : '') . '>' . $user->lang['USER_DEFAULT'] . '</option>';
 422  
 423                  while ($row = $db->sql_fetchrow($result))
 424                  {
 425                      $selected = ($group_rank && $row['rank_id'] == $group_rank) ? ' selected="selected"' : '';
 426                      $rank_options .= '<option value="' . $row['rank_id'] . '"' . $selected . '>' . $row['rank_title'] . '</option>';
 427                  }
 428                  $db->sql_freeresult($result);
 429  
 430                  $type_free        = ($group_type == GROUP_FREE) ? ' checked="checked"' : '';
 431                  $type_open        = ($group_type == GROUP_OPEN) ? ' checked="checked"' : '';
 432                  $type_closed    = ($group_type == GROUP_CLOSED) ? ' checked="checked"' : '';
 433                  $type_hidden    = ($group_type == GROUP_HIDDEN) ? ' checked="checked"' : '';
 434  
 435                  if (isset($group_row['group_avatar']) && $group_row['group_avatar'])
 436                  {
 437                      switch ($group_row['group_avatar_type'])
 438                      {
 439                          case AVATAR_UPLOAD:
 440                              $avatar_img = $phpbb_root_path . $config['avatar_path'] . '/';
 441                          break;
 442  
 443                          case AVATAR_GALLERY:
 444                              $avatar_img = $phpbb_root_path . $config['avatar_gallery_path'] . '/';
 445                          break;
 446                      }
 447                      $avatar_img .= $group_row['group_avatar'];
 448  
 449                      $avatar_img = '<img src="' . $avatar_img . '" width="' . $group_row['group_avatar_width'] . '" height="' . $group_row['group_avatar_height'] . '" alt="" />';
 450                  }
 451                  else
 452                  {
 453                      $avatar_img = '<img src="' . $phpbb_admin_path . 'images/no_avatar.gif" alt="" />';
 454                  }
 455  
 456                  $display_gallery = (isset($_POST['display_gallery'])) ? true : false;
 457  
 458                  if ($config['allow_avatar_local'] && $display_gallery)
 459                  {
 460                      avatar_gallery($category, $avatar_select, 4);
 461                  }
 462  
 463                  $back_link = request_var('back_link', '');
 464  
 465                  switch ($back_link)
 466                  {
 467                      case 'acp_users_groups':
 468                          $u_back = append_sid("{$phpbb_admin_path}index.$phpEx", 'i=users&amp;mode=groups&amp;u=' . request_var('u', 0));
 469                      break;
 470  
 471                      default:
 472                          $u_back = $this->u_action;
 473                      break;
 474                  }
 475  
 476                  $template->assign_vars(array(
 477                      'S_EDIT'            => true,
 478                      'S_ADD_GROUP'        => ($action == 'add') ? true : false,
 479                      'S_INCLUDE_SWATCH'    => true,
 480                      'S_CAN_UPLOAD'        => $can_upload,
 481                      'S_ERROR'            => (sizeof($error)) ? true : false,
 482                      'S_SPECIAL_GROUP'    => ($group_type == GROUP_SPECIAL) ? true : false,
 483                      'S_DISPLAY_GALLERY'    => ($config['allow_avatar_local'] && !$display_gallery) ? true : false,
 484                      'S_IN_GALLERY'        => ($config['allow_avatar_local'] && $display_gallery) ? true : false,
 485  
 486                      'ERROR_MSG'                => (sizeof($error)) ? implode('<br />', $error) : '',
 487                      'GROUP_NAME'            => ($group_type == GROUP_SPECIAL) ? $user->lang['G_' . $group_name] : $group_name,
 488                      'GROUP_INTERNAL_NAME'    => $group_name,
 489                      'GROUP_DESC'            => $group_desc_data['text'],
 490                      'GROUP_RECEIVE_PM'        => (isset($group_row['group_receive_pm']) && $group_row['group_receive_pm']) ? ' checked="checked"' : '',
 491                      'GROUP_LEGEND'            => (isset($group_row['group_legend']) && $group_row['group_legend']) ? ' checked="checked"' : '',
 492                      'GROUP_MESSAGE_LIMIT'    => (isset($group_row['group_message_limit'])) ? $group_row['group_message_limit'] : 0,
 493                      'GROUP_COLOUR'            => (isset($group_row['group_colour'])) ? $group_row['group_colour'] : '',
 494  
 495                      'S_DESC_BBCODE_CHECKED'    => $group_desc_data['allow_bbcode'],
 496                      'S_DESC_URLS_CHECKED'    => $group_desc_data['allow_urls'],
 497                      'S_DESC_SMILIES_CHECKED'=> $group_desc_data['allow_smilies'],
 498  
 499                      'S_RANK_OPTIONS'        => $rank_options,
 500                      'S_GROUP_OPTIONS'        => group_select_options(0),
 501                      'AVATAR_IMAGE'            => $avatar_img,
 502                      'AVATAR_MAX_FILESIZE'    => $config['avatar_filesize'],
 503                      'GROUP_AVATAR_WIDTH'    => (isset($group_row['group_avatar_width'])) ? $group_row['group_avatar_width'] : '',
 504                      'GROUP_AVATAR_HEIGHT'    => (isset($group_row['group_avatar_height'])) ? $group_row['group_avatar_height'] : '',
 505  
 506                      'GROUP_TYPE_FREE'        => GROUP_FREE,
 507                      'GROUP_TYPE_OPEN'        => GROUP_OPEN,
 508                      'GROUP_TYPE_CLOSED'        => GROUP_CLOSED,
 509                      'GROUP_TYPE_HIDDEN'        => GROUP_HIDDEN,
 510                      'GROUP_TYPE_SPECIAL'    => GROUP_SPECIAL,
 511  
 512                      'GROUP_FREE'        => $type_free,
 513                      'GROUP_OPEN'        => $type_open,
 514                      'GROUP_CLOSED'        => $type_closed,
 515                      'GROUP_HIDDEN'        => $type_hidden,
 516  
 517                      'U_BACK'            => $u_back,
 518                      'U_SWATCH'            => append_sid("{$phpbb_admin_path}swatch.$phpEx", 'form=settings&amp;name=group_colour'),
 519                      'UA_SWATCH'            => append_sid("{$phpbb_admin_path}swatch.$phpEx", 'form=settings&name=group_colour', false),
 520                      'U_ACTION'            => "{$this->u_action}&amp;action=$action&amp;g=$group_id",
 521                      'L_AVATAR_EXPLAIN'    => sprintf($user->lang['AVATAR_EXPLAIN'], $config['avatar_max_width'], $config['avatar_max_height'], round($config['avatar_filesize'] / 1024)),
 522                      )
 523                  );
 524  
 525                  return;
 526              break;
 527  
 528              case 'list':
 529  
 530                  if (!$group_id)
 531                  {
 532                      trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 533                  }
 534  
 535                  $this->page_title = 'GROUP_MEMBERS';
 536  
 537                  // Total number of group leaders
 538                  $sql = 'SELECT COUNT(user_id) AS total_leaders 
 539                      FROM ' . USER_GROUP_TABLE . " 
 540                      WHERE group_id = $group_id 
 541                          AND group_leader = 1";
 542                  $result = $db->sql_query($sql);
 543                  $total_leaders = (int) $db->sql_fetchfield('total_leaders');
 544                  $db->sql_freeresult($result);
 545  
 546                  // Total number of group members (non-leaders)
 547                  $sql = 'SELECT COUNT(user_id) AS total_members 
 548                      FROM ' . USER_GROUP_TABLE . " 
 549                      WHERE group_id = $group_id 
 550                          AND group_leader <> 1";
 551                  $result = $db->sql_query($sql);
 552                  $total_members = (int) $db->sql_fetchfield('total_members');
 553                  $db->sql_freeresult($result);
 554  
 555                  // Grab the members
 556                  $sql = 'SELECT u.user_id, u.username, u.user_regdate, u.user_posts, u.group_id, ug.group_leader, ug.user_pending 
 557                      FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug 
 558                      WHERE ug.group_id = $group_id 
 559                          AND u.user_id = ug.user_id 
 560                      ORDER BY ug.group_leader DESC, ug.user_pending ASC, u.username";
 561                  $result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
 562  
 563                  $leader = $member = 0;
 564                  $group_data = array(
 565                      'leader'    => array(),
 566                      'member'    => array(),
 567                  );
 568  
 569                  while ($row = $db->sql_fetchrow($result))
 570                  {
 571                      $type = ($row['group_leader']) ? 'leader' : 'member';
 572  
 573                      $group_data[$type][$$type]['user_id'] = $row['user_id'];
 574                      $group_data[$type][$$type]['group_id'] = $row['group_id'];
 575                      $group_data[$type][$$type]['username'] = $row['username'];
 576                      $group_data[$type][$$type]['user_regdate'] = $row['user_regdate'];
 577                      $group_data[$type][$$type]['user_posts'] = $row['user_posts'];
 578                      $group_data[$type][$$type]['user_pending'] = ($row['user_pending']) ? 1 : 0;
 579  
 580                      $$type++;
 581                  }
 582                  $db->sql_freeresult($result);
 583  
 584                  $s_action_options = '';
 585                  $options = array('default' => 'DEFAULT', 'approve' => 'APPROVE', 'demote' => 'DEMOTE', 'promote' => 'PROMOTE', 'deleteusers' => 'DELETE');
 586  
 587                  foreach ($options as $option => $lang)
 588                  {
 589                      $s_action_options .= '<option value="' . $option . '">' . $user->lang['GROUP_' . $lang] . '</option>';
 590                  }
 591  
 592                  $template->assign_vars(array(
 593                      'S_LIST'            => true,
 594                      'S_GROUP_SPECIAL'    => ($group_row['group_type'] == GROUP_SPECIAL) ? true : false,
 595                      'S_ACTION_OPTIONS'    => $s_action_options,
 596  
 597                      'S_ON_PAGE'        => on_page($total_members, $config['topics_per_page'], $start),
 598                      'PAGINATION'    => generate_pagination($this->u_action . "&amp;action=$action&amp;g=$group_id", $total_members, $config['topics_per_page'], $start, true),
 599                      'GROUP_NAME'    => ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'],
 600  
 601                      'U_ACTION'            => $this->u_action . "&amp;g=$group_id",
 602                      'U_BACK'            => $this->u_action,
 603                      'U_FIND_USERNAME'    => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=list&amp;field=usernames'),
 604                      'UA_FIND_USERNAME'    => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&form=list&field=usernames', false),
 605                      'U_DEFAULT_ALL'        => "{$this->u_action}&amp;action=default&amp;g=$group_id")
 606                  );
 607  
 608                  foreach ($group_data['leader'] as $row)
 609                  {
 610                      $template->assign_block_vars('leader', array(
 611                          'U_USER_EDIT'        => append_sid("{$phpbb_admin_path}index.$phpEx", "i=users&amp;action=edit&amp;u={$row['user_id']}"),
 612  
 613                          'USERNAME'            => $row['username'],
 614                          'S_GROUP_DEFAULT'    => ($row['group_id'] == $group_id) ? true : false,
 615                          'JOINED'            => ($row['user_regdate']) ? $user->format_date($row['user_regdate']) : ' - ',
 616                          'USER_POSTS'        => $row['user_posts'],
 617                          'USER_ID'            => $row['user_id'])
 618                      );
 619                  }
 620  
 621                  $pending = false;
 622  
 623                  foreach ($group_data['member'] as $row)
 624                  {
 625                      if ($row['user_pending'] && !$pending)
 626                      {
 627                          $template->assign_block_vars('member', array(
 628                              'S_PENDING'        => true)
 629                          );
 630  
 631                          $pending = true;
 632                      }
 633  
 634                      $template->assign_block_vars('member', array(
 635                          'U_USER_EDIT'        => append_sid("{$phpbb_admin_path}index.$phpEx", "i=users&amp;action=edit&amp;u={$row['user_id']}"),
 636  
 637                          'USERNAME'            => $row['username'],
 638                          'S_GROUP_DEFAULT'    => ($row['group_id'] == $group_id) ? true : false,
 639                          'JOINED'            => ($row['user_regdate']) ? $user->format_date($row['user_regdate']) : ' - ',
 640                          'USER_POSTS'        => $row['user_posts'],
 641                          'USER_ID'            => $row['user_id'])
 642                      );
 643                  }
 644  
 645                  return;
 646              break;
 647          }
 648  
 649          $template->assign_vars(array(
 650              'U_ACTION'        => $this->u_action,
 651              'S_GROUP_ADD'    => ($auth->acl_get('a_groupadd')) ? true : false)
 652          );
 653  
 654          $sql = 'SELECT g.group_id, g.group_name, g.group_type, COUNT(ug.user_id) AS total_members 
 655              FROM ' . GROUPS_TABLE . ' g
 656              LEFT JOIN ' . USER_GROUP_TABLE . ' ug ON (g.group_id = ug.group_id)
 657              GROUP BY g.group_id, g.group_name, g.group_type
 658              ORDER BY g.group_type ASC, g.group_name';
 659          $result = $db->sql_query($sql);
 660  
 661          $special = $normal = 0;
 662          $group_ary = array();
 663  
 664          while ($row = $db->sql_fetchrow($result))
 665          {
 666              $type = ($row['group_type'] == GROUP_SPECIAL) ? 'special' : 'normal';
 667  
 668              $group_ary[$type][$$type]['group_id'] = $row['group_id'];
 669              $group_ary[$type][$$type]['group_name'] = $row['group_name'];
 670              $group_ary[$type][$$type]['group_type'] = $row['group_type'];
 671              $group_ary[$type][$$type]['total_members'] = $row['total_members'];
 672  
 673              $$type++;
 674          }
 675          $db->sql_freeresult($result);
 676  
 677          ksort($group_ary);
 678  
 679          $special_toggle = false;
 680          foreach ($group_ary as $type => $row_ary)
 681          {
 682              if ($type == 'special')
 683              {
 684                  $template->assign_block_vars('groups', array(
 685                      'S_SPECIAL'            => true)
 686                  );
 687              }
 688  
 689              foreach ($row_ary as $row)
 690              {
 691                  $group_id = $row['group_id'];
 692                  $group_name = (!empty($user->lang['G_' . $row['group_name']]))? $user->lang['G_' . $row['group_name']] : $row['group_name'];
 693                  
 694                  $template->assign_block_vars('groups', array(
 695                      'U_LIST'        => "{$this->u_action}&amp;action=list&amp;g=$group_id",
 696                      'U_EDIT'        => "{$this->u_action}&amp;action=edit&amp;g=$group_id",
 697                      'U_DELETE'        => ($auth->acl_get('a_groupdel')) ? "{$this->u_action}&amp;action=delete&amp;g=$group_id" : '',
 698  
 699                      'S_GROUP_SPECIAL'    => ($row['group_type'] == GROUP_SPECIAL) ? true : false,
 700                      
 701                      'GROUP_NAME'    => $group_name,
 702                      'TOTAL_MEMBERS'    => $row['total_members'],
 703                      )
 704                  );
 705              }
 706          }
 707      }
 708  }
 709  
 710  ?>


Generated: Wed Nov 22 00:35:05 2006 Cross-referenced by PHPXref 0.6