Verzeichnisstruktur phpBB-3.0.0


Veröffentlicht
12.12.2007

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

acp_groups.php

Zuletzt modifiziert: 09.10.2024, 12:51 - Dateigröße: 26.71 KiB


 001  <?php
 002  /**
 003  *
 004  * @package acp
 005  * @version $Id$
 006  * @copyright (c) 2005 phpBB Group
 007  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 008  *
 009  */
 010   
 011  /**
 012  * @ignore
 013  */
 014  if (!defined('IN_PHPBB'))
 015  {
 016      exit;
 017  }
 018   
 019  /**
 020  * @package acp
 021  */
 022  class acp_groups
 023  {
 024      var $u_action;
 025   
 026      function main($id, $mode)
 027      {
 028          global $config, $db, $user, $auth, $template, $cache;
 029          global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix, $file_uploads;
 030   
 031          $user->add_lang('acp/groups');
 032          $this->tpl_name = 'acp_groups';
 033          $this->page_title = 'ACP_GROUPS_MANAGE';
 034   
 035          $form_key = 'acp_groups';
 036          add_form_key($form_key);
 037   
 038          include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
 039   
 040          // Check and set some common vars
 041          $action        = (isset($_POST['add'])) ? 'add' : ((isset($_POST['addusers'])) ? 'addusers' : request_var('action', ''));
 042          $group_id    = request_var('g', 0);
 043          $mark_ary    = request_var('mark', array(0));
 044          $name_ary    = request_var('usernames', '', true);
 045          $leader        = request_var('leader', 0);
 046          $default    = request_var('default', 0);
 047          $start        = request_var('start', 0);
 048          $update        = (isset($_POST['update'])) ? true : false;
 049   
 050   
 051          // Clear some vars
 052          $can_upload = (file_exists($phpbb_root_path . $config['avatar_path']) && @is_writable($phpbb_root_path . $config['avatar_path']) && $file_uploads) ? true : false;
 053          $group_row = array();
 054   
 055          // Grab basic data for group, if group_id is set and exists
 056          if ($group_id)
 057          {
 058              $sql = 'SELECT *
 059                  FROM ' . GROUPS_TABLE . "
 060                  WHERE group_id = $group_id";
 061              $result = $db->sql_query($sql);
 062              $group_row = $db->sql_fetchrow($result);
 063              $db->sql_freeresult($result);
 064   
 065              if (!$group_row)
 066              {
 067                  trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 068              }
 069   
 070              // Check if the user is allowed to manage this group if set to founder only.
 071              if ($user->data['user_type'] != USER_FOUNDER && $group_row['group_founder_manage'])
 072              {
 073                  trigger_error($user->lang['NOT_ALLOWED_MANAGE_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 074              }
 075          }
 076   
 077          // Which page?
 078          switch ($action)
 079          {
 080              case 'approve':
 081              case 'demote':
 082              case 'promote':
 083                  if (!$group_id)
 084                  {
 085                      trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 086                  }
 087   
 088                  // Approve, demote or promote
 089                  $group_name = ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
 090                  group_user_attributes($action, $group_id, $mark_ary, false, $group_name);
 091   
 092                  switch ($action)
 093                  {
 094                      case 'demote':
 095                          $message = 'GROUP_MODS_DEMOTED';
 096                      break;
 097   
 098                      case 'promote':
 099                          $message = 'GROUP_MODS_PROMOTED';
 100                      break;
 101   
 102                      case 'approve':
 103                          $message = 'USERS_APPROVED';
 104                      break;
 105                  }
 106   
 107                  trigger_error($user->lang[$message] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id));
 108              break;
 109   
 110              case 'default':
 111                  if (!$group_id)
 112                  {
 113                      trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 114                  }
 115   
 116                  if (confirm_box(true))
 117                  {
 118                      $group_name = ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
 119   
 120                      if (!sizeof($mark_ary))
 121                      {
 122                          $start = 0;
 123   
 124                          do
 125                          {
 126                              $sql = 'SELECT user_id
 127                                  FROM ' . USER_GROUP_TABLE . "
 128                                  WHERE group_id = $group_id
 129                                  ORDER BY user_id";
 130                              $result = $db->sql_query_limit($sql, 200, $start);
 131   
 132                              $mark_ary = array();
 133                              if ($row = $db->sql_fetchrow($result))
 134                              {
 135                                  do
 136                                  {
 137                                      $mark_ary[] = $row['user_id'];
 138                                  }
 139                                  while ($row = $db->sql_fetchrow($result));
 140   
 141                                  group_user_attributes('default', $group_id, $mark_ary, false, $group_name, $group_row);
 142   
 143                                  $start = (sizeof($mark_ary) < 200) ? 0 : $start + 200;
 144                              }
 145                              else
 146                              {
 147                                  $start = 0;
 148                              }
 149                              $db->sql_freeresult($result);
 150                          }
 151                          while ($start);
 152                      }
 153                      else
 154                      {
 155                          group_user_attributes('default', $group_id, $mark_ary, false, $group_name, $group_row);
 156                      }
 157   
 158                      trigger_error($user->lang['GROUP_DEFS_UPDATED'] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id));
 159                  }
 160                  else
 161                  {
 162                      confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
 163                          'mark'        => $mark_ary,
 164                          'g'            => $group_id,
 165                          'i'            => $id,
 166                          'mode'        => $mode,
 167                          'action'    => $action))
 168                      );
 169                  }
 170   
 171              break;
 172   
 173              case 'deleteusers':
 174              case 'delete':
 175                  if (confirm_box(true))
 176                  {
 177                      if (!$group_id)
 178                      {
 179                          trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 180                      }
 181   
 182                      $error = '';
 183   
 184                      switch ($action)
 185                      {
 186                          case 'delete':
 187                              if (!$auth->acl_get('a_groupdel'))
 188                              {
 189                                  trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
 190                              }
 191   
 192                              $error = group_delete($group_id, $group_row['group_name']);
 193                          break;
 194   
 195                          case 'deleteusers':
 196                              $group_name = ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
 197                              $error = group_user_del($group_id, $mark_ary, false, $group_name);
 198                          break;
 199                      }
 200   
 201                      $back_link = ($action == 'delete') ? $this->u_action : $this->u_action . '&amp;action=list&amp;g=' . $group_id;
 202   
 203                      if ($error)
 204                      {
 205                          trigger_error($user->lang[$error] . adm_back_link($back_link), E_USER_WARNING);
 206                      }
 207   
 208                      $message = ($action == 'delete') ? 'GROUP_DELETED' : 'GROUP_USERS_REMOVE';
 209                      trigger_error($user->lang[$message] . adm_back_link($back_link));
 210                  }
 211                  else
 212                  {
 213                      confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
 214                          'mark'        => $mark_ary,
 215                          'g'            => $group_id,
 216                          'i'            => $id,
 217                          'mode'        => $mode,
 218                          'action'    => $action))
 219                      );
 220                  }
 221              break;
 222   
 223              case 'addusers':
 224                  if (!$group_id)
 225                  {
 226                      trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 227                  }
 228   
 229                  if (!$name_ary)
 230                  {
 231                      trigger_error($user->lang['NO_USERS'] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id), E_USER_WARNING);
 232                  }
 233   
 234                  $name_ary = array_unique(explode("\n", $name_ary));
 235                  $group_name = ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
 236   
 237                  // Add user/s to group
 238                  if ($error = group_user_add($group_id, false, $name_ary, $group_name, $default, $leader, 0, $group_row))
 239                  {
 240                      trigger_error($user->lang[$error] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id), E_USER_WARNING);
 241                  }
 242   
 243                  $message = ($leader) ? 'GROUP_MODS_ADDED' : 'GROUP_USERS_ADDED';
 244                  trigger_error($user->lang[$message] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id));
 245              break;
 246   
 247              case 'edit':
 248              case 'add':
 249   
 250                  include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
 251   
 252                  $data = $submit_ary = array();
 253   
 254                  if ($action == 'edit' && !$group_id)
 255                  {
 256                      trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 257                  }
 258   
 259                  if ($action == 'add' && !$auth->acl_get('a_groupadd'))
 260                  {
 261                      trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
 262                  }
 263   
 264                  $error = array();
 265                  $user->add_lang('ucp');
 266   
 267                  $avatar_select = basename(request_var('avatar_select', ''));
 268                  $category = basename(request_var('category', ''));
 269   
 270                  // Did we submit?
 271                  if ($update)
 272                  {
 273                      if (!check_form_key($form_key))
 274                      {
 275                          trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
 276                      }
 277   
 278                      $group_name    = utf8_normalize_nfc(request_var('group_name', '', true));
 279                      $group_desc = utf8_normalize_nfc(request_var('group_desc', '', true));
 280                      $group_type    = request_var('group_type', GROUP_FREE);
 281   
 282                      $allow_desc_bbcode    = request_var('desc_parse_bbcode', false);
 283                      $allow_desc_urls    = request_var('desc_parse_urls', false);
 284                      $allow_desc_smilies    = request_var('desc_parse_smilies', false);
 285   
 286                      $data['uploadurl']    = request_var('uploadurl', '');
 287                      $data['remotelink']    = request_var('remotelink', '');
 288                      $data['width']        = request_var('width', '');
 289                      $data['height']        = request_var('height', '');
 290                      $delete                = request_var('delete', '');
 291   
 292                      $submit_ary = array(
 293                          'colour'            => request_var('group_colour', ''),
 294                          'rank'                => request_var('group_rank', 0),
 295                          'receive_pm'        => isset($_REQUEST['group_receive_pm']) ? 1 : 0,
 296                          'legend'            => isset($_REQUEST['group_legend']) ? 1 : 0,
 297                          'message_limit'        => request_var('group_message_limit', 0),
 298                          'founder_manage'    => 0,
 299                      );
 300   
 301                      if ($user->data['user_type'] == USER_FOUNDER)
 302                      {
 303                          $submit_ary['founder_manage'] = isset($_REQUEST['group_founder_manage']) ? 1 : 0;
 304                      }
 305   
 306                      if (!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl'] || $data['remotelink'])
 307                      {
 308                          // Avatar stuff
 309                          $var_ary = array(
 310                              'uploadurl'        => array('string', true, 5, 255),
 311                              'remotelink'    => array('string', true, 5, 255),
 312                              'width'            => array('string', true, 1, 3),
 313                              'height'        => array('string', true, 1, 3),
 314                          );
 315   
 316                          if (!($error = validate_data($data, $var_ary)))
 317                          {
 318                              $data['user_id'] = "g$group_id";
 319   
 320                              if ((!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl']) && $can_upload)
 321                              {
 322                                  list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_upload($data, $error);
 323                              }
 324                              else if ($data['remotelink'])
 325                              {
 326                                  list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_remote($data, $error);
 327                              }
 328                          }
 329                      }
 330                      else if ($avatar_select && $config['allow_avatar_local'])
 331                      {
 332                          // check avatar gallery
 333                          if (is_dir($phpbb_root_path . $config['avatar_gallery_path'] . '/' . $category))
 334                          {
 335                              $submit_ary['avatar_type'] = AVATAR_GALLERY;
 336   
 337                              list($submit_ary['avatar_width'], $submit_ary['avatar_height']) = getimagesize($phpbb_root_path . $config['avatar_gallery_path'] . '/' . $category . '/' . $avatar_select);
 338                              $submit_ary['avatar'] = $category . '/' . $avatar_select;
 339                          }
 340                      }
 341                      else if ($delete)
 342                      {
 343                          $submit_ary['avatar'] = '';
 344                          $submit_ary['avatar_type'] = $submit_ary['avatar_width'] = $submit_ary['avatar_height'] = 0;
 345                      }
 346                      else if ($data['width'] && $data['height'])
 347                      {
 348                          // Only update the dimensions?
 349                          if ($config['avatar_max_width'] || $config['avatar_max_height'])
 350                          {
 351                              if ($data['width'] > $config['avatar_max_width'] || $data['height'] > $config['avatar_max_height'])
 352                              {
 353                                  $error[] = sprintf($user->lang['AVATAR_WRONG_SIZE'], $config['avatar_min_width'], $config['avatar_min_height'], $config['avatar_max_width'], $config['avatar_max_height'], $data['width'], $data['height']);
 354                              }
 355                          }
 356   
 357                          if (!sizeof($error))
 358                          {
 359                              if ($config['avatar_min_width'] || $config['avatar_min_height'])
 360                              {
 361                                  if ($data['width'] < $config['avatar_min_width'] || $data['height'] < $config['avatar_min_height'])
 362                                  {
 363                                      $error[] = sprintf($user->lang['AVATAR_WRONG_SIZE'], $config['avatar_min_width'], $config['avatar_min_height'], $config['avatar_max_width'], $config['avatar_max_height'], $data['width'], $data['height']);
 364                                  }
 365                              }
 366                          }
 367   
 368                          if (!sizeof($error))
 369                          {
 370                              $submit_ary['avatar_width'] = $data['width'];
 371                              $submit_ary['avatar_height'] = $data['height'];
 372                          }
 373                      }
 374   
 375                      if ((isset($submit_ary['avatar']) && $submit_ary['avatar'] && (!isset($group_row['group_avatar']))) || $delete)
 376                      {
 377                          if (isset($group_row['group_avatar']) && $group_row['group_avatar'])
 378                          {
 379                              avatar_delete('group', $group_row, true);
 380                          }
 381                      }
 382   
 383                      if (!sizeof($error))
 384                      {
 385                          // Only set the rank, colour, etc. if it's changed or if we're adding a new
 386                          // group. This prevents existing group members being updated if no changes
 387                          // were made.
 388   
 389                          $group_attributes = array();
 390                          $test_variables = array('rank', 'colour', 'avatar', 'avatar_type', 'avatar_width', 'avatar_height', 'receive_pm', 'legend', 'message_limit', 'founder_manage');
 391                          foreach ($test_variables as $test)
 392                          {
 393                              if (isset($submit_ary[$test]) && ($action == 'add' || $group_row['group_' . $test] != $submit_ary[$test]))
 394                              {
 395                                  $group_attributes['group_' . $test] = $group_row['group_' . $test] = $submit_ary[$test];
 396                              }
 397                          }
 398   
 399                          if (!($error = group_create($group_id, $group_type, $group_name, $group_desc, $group_attributes, $allow_desc_bbcode, $allow_desc_urls, $allow_desc_smilies)))
 400                          {
 401                              $group_perm_from = request_var('group_perm_from', 0);
 402   
 403                              // Copy permissions?
 404                              // If the user has the a_authgroups permission and at least one additional permission ability set the permissions are fully transferred.
 405                              // We do not limit on one auth category because this can lead to incomplete permissions being tricky to fix for the admin, roles being assigned or added non-default permissions.
 406                              // Since the user only has the option to copy permissions from non leader managed groups this seems to be a good compromise.
 407                              if ($group_perm_from && $action == 'add' && $auth->acl_get('a_authgroups') && $auth->acl_gets('a_aauth', 'a_fauth', 'a_mauth', 'a_uauth'))
 408                              {
 409                                  $sql = 'SELECT group_founder_manage
 410                                      FROM ' . GROUPS_TABLE . '
 411                                      WHERE group_id = ' . $group_perm_from;
 412                                  $result = $db->sql_query($sql);
 413                                  $check_row = $db->sql_fetchrow($result);
 414                                  $db->sql_freeresult($result);
 415   
 416                                  // Check the group if non-founder
 417                                  if ($check_row && ($user->data['user_type'] == USER_FOUNDER || $check_row['group_founder_manage'] == 0))
 418                                  {
 419                                      // From the mysql documentation:
 420                                      // 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.
 421                                      // Due to this we stay on the safe side if we do the insertion "the manual way"
 422   
 423                                      // Copy permisisons from/to the acl groups table (only group_id gets changed)
 424                                      $sql = 'SELECT forum_id, auth_option_id, auth_role_id, auth_setting
 425                                          FROM ' . ACL_GROUPS_TABLE . '
 426                                          WHERE group_id = ' . $group_perm_from;
 427                                      $result = $db->sql_query($sql);
 428   
 429                                      $groups_sql_ary = array();
 430                                      while ($row = $db->sql_fetchrow($result))
 431                                      {
 432                                          $groups_sql_ary[] = array(
 433                                              'group_id'            => (int) $group_id,
 434                                              'forum_id'            => (int) $row['forum_id'],
 435                                              'auth_option_id'    => (int) $row['auth_option_id'],
 436                                              'auth_role_id'        => (int) $row['auth_role_id'],
 437                                              'auth_setting'        => (int) $row['auth_setting']
 438                                          );
 439                                      }
 440                                      $db->sql_freeresult($result);
 441   
 442                                      // Now insert the data
 443                                      $db->sql_multi_insert(ACL_GROUPS_TABLE, $groups_sql_ary);
 444   
 445                                      $auth->acl_clear_prefetch();
 446                                  }
 447                              }
 448   
 449                              $cache->destroy('sql', GROUPS_TABLE);
 450   
 451                              $message = ($action == 'edit') ? 'GROUP_UPDATED' : 'GROUP_CREATED';
 452                              trigger_error($user->lang[$message] . adm_back_link($this->u_action));
 453                          }
 454                      }
 455   
 456                      if (sizeof($error))
 457                      {
 458                          $group_rank = $submit_ary['rank'];
 459   
 460                          $group_desc_data = array(
 461                              'text'            => $group_desc,
 462                              'allow_bbcode'    => $allow_desc_bbcode,
 463                              'allow_smilies'    => $allow_desc_smilies,
 464                              'allow_urls'    => $allow_desc_urls
 465                          );
 466                      }
 467                  }
 468                  else if (!$group_id)
 469                  {
 470                      $group_name = utf8_normalize_nfc(request_var('group_name', '', true));
 471                      $group_desc_data = array(
 472                          'text'            => '',
 473                          'allow_bbcode'    => true,
 474                          'allow_smilies'    => true,
 475                          'allow_urls'    => true
 476                      );
 477                      $group_rank = 0;
 478                      $group_type = GROUP_OPEN;
 479                  }
 480                  else
 481                  {
 482                      $group_name = $group_row['group_name'];
 483                      $group_desc_data = generate_text_for_edit($group_row['group_desc'], $group_row['group_desc_uid'], $group_row['group_desc_options']);
 484                      $group_type = $group_row['group_type'];
 485                      $group_rank = $group_row['group_rank'];
 486                  }
 487   
 488                  $sql = 'SELECT *
 489                      FROM ' . RANKS_TABLE . '
 490                      WHERE rank_special = 1
 491                      ORDER BY rank_title';
 492                  $result = $db->sql_query($sql);
 493   
 494                  $rank_options = '<option value="0"' . ((!$group_rank) ? ' selected="selected"' : '') . '>' . $user->lang['USER_DEFAULT'] . '</option>';
 495   
 496                  while ($row = $db->sql_fetchrow($result))
 497                  {
 498                      $selected = ($group_rank && $row['rank_id'] == $group_rank) ? ' selected="selected"' : '';
 499                      $rank_options .= '<option value="' . $row['rank_id'] . '"' . $selected . '>' . $row['rank_title'] . '</option>';
 500                  }
 501                  $db->sql_freeresult($result);
 502   
 503                  $type_free        = ($group_type == GROUP_FREE) ? ' checked="checked"' : '';
 504                  $type_open        = ($group_type == GROUP_OPEN) ? ' checked="checked"' : '';
 505                  $type_closed    = ($group_type == GROUP_CLOSED) ? ' checked="checked"' : '';
 506                  $type_hidden    = ($group_type == GROUP_HIDDEN) ? ' checked="checked"' : '';
 507   
 508                  $avatar_img = (!empty($group_row['group_avatar'])) ? get_user_avatar($group_row['group_avatar'], $group_row['group_avatar_type'], $group_row['group_avatar_width'], $group_row['group_avatar_height'], 'GROUP_AVATAR') : '<img src="' . $phpbb_admin_path . 'images/no_avatar.gif" alt="" />';
 509   
 510                  $display_gallery = (isset($_POST['display_gallery'])) ? true : false;
 511   
 512                  if ($config['allow_avatar_local'] && $display_gallery)
 513                  {
 514                      avatar_gallery($category, $avatar_select, 4);
 515                  }
 516   
 517                  $back_link = request_var('back_link', '');
 518   
 519                  switch ($back_link)
 520                  {
 521                      case 'acp_users_groups':
 522                          $u_back = append_sid("{$phpbb_admin_path}index.$phpEx", 'i=users&amp;mode=groups&amp;u=' . request_var('u', 0));
 523                      break;
 524   
 525                      default:
 526                          $u_back = $this->u_action;
 527                      break;
 528                  }
 529   
 530                  $template->assign_vars(array(
 531                      'S_EDIT'            => true,
 532                      'S_ADD_GROUP'        => ($action == 'add') ? true : false,
 533                      'S_GROUP_PERM'        => ($action == 'add' && $auth->acl_get('a_authgroups') && $auth->acl_gets('a_aauth', 'a_fauth', 'a_mauth', 'a_uauth')) ? true : false,
 534                      'S_INCLUDE_SWATCH'    => true,
 535                      'S_CAN_UPLOAD'        => $can_upload,
 536                      'S_ERROR'            => (sizeof($error)) ? true : false,
 537                      'S_SPECIAL_GROUP'    => ($group_type == GROUP_SPECIAL) ? true : false,
 538                      'S_DISPLAY_GALLERY'    => ($config['allow_avatar_local'] && !$display_gallery) ? true : false,
 539                      'S_IN_GALLERY'        => ($config['allow_avatar_local'] && $display_gallery) ? true : false,
 540                      'S_USER_FOUNDER'    => ($user->data['user_type'] == USER_FOUNDER) ? true : false,
 541   
 542                      'ERROR_MSG'                => (sizeof($error)) ? implode('<br />', $error) : '',
 543                      'GROUP_NAME'            => ($group_type == GROUP_SPECIAL) ? $user->lang['G_' . $group_name] : $group_name,
 544                      'GROUP_INTERNAL_NAME'    => $group_name,
 545                      'GROUP_DESC'            => $group_desc_data['text'],
 546                      'GROUP_RECEIVE_PM'        => (isset($group_row['group_receive_pm']) && $group_row['group_receive_pm']) ? ' checked="checked"' : '',
 547                      'GROUP_FOUNDER_MANAGE'    => (isset($group_row['group_founder_manage']) && $group_row['group_founder_manage']) ? ' checked="checked"' : '',
 548                      'GROUP_LEGEND'            => (isset($group_row['group_legend']) && $group_row['group_legend']) ? ' checked="checked"' : '',
 549                      'GROUP_MESSAGE_LIMIT'    => (isset($group_row['group_message_limit'])) ? $group_row['group_message_limit'] : 0,
 550                      'GROUP_COLOUR'            => (isset($group_row['group_colour'])) ? $group_row['group_colour'] : '',
 551   
 552   
 553                      'S_DESC_BBCODE_CHECKED'    => $group_desc_data['allow_bbcode'],
 554                      'S_DESC_URLS_CHECKED'    => $group_desc_data['allow_urls'],
 555                      'S_DESC_SMILIES_CHECKED'=> $group_desc_data['allow_smilies'],
 556   
 557                      'S_RANK_OPTIONS'        => $rank_options,
 558                      'S_GROUP_OPTIONS'        => group_select_options(false, false, (($user->data['user_type'] == USER_FOUNDER) ? false : 0)),
 559                      'AVATAR'                => $avatar_img,
 560                      'AVATAR_IMAGE'            => $avatar_img,
 561                      'AVATAR_MAX_FILESIZE'    => $config['avatar_filesize'],
 562                      'AVATAR_WIDTH'            => (isset($group_row['group_avatar_width'])) ? $group_row['group_avatar_width'] : '',
 563                      'AVATAR_HEIGHT'            => (isset($group_row['group_avatar_height'])) ? $group_row['group_avatar_height'] : '',
 564   
 565                      'GROUP_TYPE_FREE'        => GROUP_FREE,
 566                      'GROUP_TYPE_OPEN'        => GROUP_OPEN,
 567                      'GROUP_TYPE_CLOSED'        => GROUP_CLOSED,
 568                      'GROUP_TYPE_HIDDEN'        => GROUP_HIDDEN,
 569                      'GROUP_TYPE_SPECIAL'    => GROUP_SPECIAL,
 570   
 571                      'GROUP_FREE'        => $type_free,
 572                      'GROUP_OPEN'        => $type_open,
 573                      'GROUP_CLOSED'        => $type_closed,
 574                      'GROUP_HIDDEN'        => $type_hidden,
 575   
 576                      'U_BACK'            => $u_back,
 577                      'U_SWATCH'            => append_sid("{$phpbb_admin_path}swatch.$phpEx", 'form=settings&amp;name=group_colour'),
 578                      'U_ACTION'            => "{$this->u_action}&amp;action=$action&amp;g=$group_id",
 579                      'L_AVATAR_EXPLAIN'    => sprintf($user->lang['AVATAR_EXPLAIN'], $config['avatar_max_width'], $config['avatar_max_height'], round($config['avatar_filesize'] / 1024)),
 580                      )
 581                  );
 582   
 583                  return;
 584              break;
 585   
 586              case 'list':
 587   
 588                  if (!$group_id)
 589                  {
 590                      trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 591                  }
 592   
 593                  $this->page_title = 'GROUP_MEMBERS';
 594   
 595                  // Grab the leaders - always, on every page...
 596                  $sql = 'SELECT u.user_id, u.username, u.username_clean, u.user_regdate, u.user_posts, u.group_id, ug.group_leader, ug.user_pending
 597                      FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug
 598                      WHERE ug.group_id = $group_id
 599                          AND u.user_id = ug.user_id
 600                          AND ug.group_leader = 1
 601                      ORDER BY ug.group_leader DESC, ug.user_pending ASC, u.username_clean";
 602                  $result = $db->sql_query($sql);
 603   
 604                  while ($row = $db->sql_fetchrow($result))
 605                  {
 606                      $template->assign_block_vars('leader', array(
 607                          'U_USER_EDIT'        => append_sid("{$phpbb_admin_path}index.$phpEx", "i=users&amp;action=edit&amp;u={$row['user_id']}"),
 608   
 609                          'USERNAME'            => $row['username'],
 610                          'S_GROUP_DEFAULT'    => ($row['group_id'] == $group_id) ? true : false,
 611                          'JOINED'            => ($row['user_regdate']) ? $user->format_date($row['user_regdate']) : ' - ',
 612                          'USER_POSTS'        => $row['user_posts'],
 613                          'USER_ID'            => $row['user_id'])
 614                      );
 615                  }
 616                  $db->sql_freeresult($result);
 617   
 618                  // Total number of group members (non-leaders)
 619                  $sql = 'SELECT COUNT(user_id) AS total_members
 620                      FROM ' . USER_GROUP_TABLE . "
 621                      WHERE group_id = $group_id
 622                          AND group_leader = 0";
 623                  $result = $db->sql_query($sql);
 624                  $total_members = (int) $db->sql_fetchfield('total_members');
 625                  $db->sql_freeresult($result);
 626   
 627                  $s_action_options = '';
 628                  $options = array('default' => 'DEFAULT', 'approve' => 'APPROVE', 'demote' => 'DEMOTE', 'promote' => 'PROMOTE', 'deleteusers' => 'DELETE');
 629   
 630                  foreach ($options as $option => $lang)
 631                  {
 632                      $s_action_options .= '<option value="' . $option . '">' . $user->lang['GROUP_' . $lang] . '</option>';
 633                  }
 634   
 635                  $template->assign_vars(array(
 636                      'S_LIST'            => true,
 637                      'S_GROUP_SPECIAL'    => ($group_row['group_type'] == GROUP_SPECIAL) ? true : false,
 638                      'S_ACTION_OPTIONS'    => $s_action_options,
 639   
 640                      'S_ON_PAGE'        => on_page($total_members, $config['topics_per_page'], $start),
 641                      'PAGINATION'    => generate_pagination($this->u_action . "&amp;action=$action&amp;g=$group_id", $total_members, $config['topics_per_page'], $start, true),
 642                      'GROUP_NAME'    => ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'],
 643   
 644                      'U_ACTION'            => $this->u_action . "&amp;g=$group_id",
 645                      'U_BACK'            => $this->u_action,
 646                      'U_FIND_USERNAME'    => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=list&amp;field=usernames'),
 647                      'U_DEFAULT_ALL'        => "{$this->u_action}&amp;action=default&amp;g=$group_id",
 648                  ));
 649   
 650                  // Grab the members
 651                  $sql = 'SELECT u.user_id, u.username, u.username_clean, u.user_regdate, u.user_posts, u.group_id, ug.group_leader, ug.user_pending
 652                      FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug
 653                      WHERE ug.group_id = $group_id
 654                          AND u.user_id = ug.user_id
 655                          AND ug.group_leader = 0
 656                      ORDER BY ug.group_leader DESC, ug.user_pending ASC, u.username_clean";
 657                  $result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
 658   
 659                  $pending = false;
 660   
 661                  while ($row = $db->sql_fetchrow($result))
 662                  {
 663                      if ($row['user_pending'] && !$pending)
 664                      {
 665                          $template->assign_block_vars('member', array(
 666                              'S_PENDING'        => true)
 667                          );
 668   
 669                          $pending = true;
 670                      }
 671   
 672                      $template->assign_block_vars('member', array(
 673                          'U_USER_EDIT'        => append_sid("{$phpbb_admin_path}index.$phpEx", "i=users&amp;action=edit&amp;u={$row['user_id']}"),
 674   
 675                          'USERNAME'            => $row['username'],
 676                          'S_GROUP_DEFAULT'    => ($row['group_id'] == $group_id) ? true : false,
 677                          'JOINED'            => ($row['user_regdate']) ? $user->format_date($row['user_regdate']) : ' - ',
 678                          'USER_POSTS'        => $row['user_posts'],
 679                          'USER_ID'            => $row['user_id'])
 680                      );
 681                  }
 682                  $db->sql_freeresult($result);
 683   
 684                  return;
 685              break;
 686          }
 687   
 688          $template->assign_vars(array(
 689              'U_ACTION'        => $this->u_action,
 690              'S_GROUP_ADD'    => ($auth->acl_get('a_groupadd')) ? true : false)
 691          );
 692   
 693          // Get us all the groups
 694          $sql = 'SELECT g.group_id, g.group_name, g.group_type
 695              FROM ' . GROUPS_TABLE . ' g
 696              ORDER BY g.group_type ASC, g.group_name';
 697          $result = $db->sql_query($sql);
 698   
 699          $lookup = $cached_group_data = array();
 700          while ($row = $db->sql_fetchrow($result))
 701          {
 702              $type = ($row['group_type'] == GROUP_SPECIAL) ? 'special' : 'normal';
 703   
 704              // used to determine what type a group is
 705              $lookup[$row['group_id']] = $type;
 706   
 707              // used for easy access to the data within a group
 708              $cached_group_data[$type][$row['group_id']] = $row;
 709              $cached_group_data[$type][$row['group_id']]['total_members'] = 0;
 710          }
 711          $db->sql_freeresult($result);
 712   
 713          // How many people are in which group?
 714          $sql = 'SELECT COUNT(ug.user_id) AS total_members, ug.group_id
 715              FROM ' . USER_GROUP_TABLE . ' ug
 716              WHERE ' . $db->sql_in_set('ug.group_id', array_keys($lookup)) . '
 717              GROUP BY ug.group_id';
 718          $result = $db->sql_query($sql);
 719   
 720          while ($row = $db->sql_fetchrow($result))
 721          {
 722              $type = $lookup[$row['group_id']];
 723              $cached_group_data[$type][$row['group_id']]['total_members'] = $row['total_members'];
 724          }
 725          $db->sql_freeresult($result);
 726   
 727          // The order is... normal, then special
 728          ksort($cached_group_data);
 729   
 730          foreach ($cached_group_data as $type => $row_ary)
 731          {
 732              if ($type == 'special')
 733              {
 734                  $template->assign_block_vars('groups', array(
 735                      'S_SPECIAL'            => true)
 736                  );
 737              }
 738   
 739              foreach ($row_ary as $group_id => $row)
 740              {
 741                  $group_name = (!empty($user->lang['G_' . $row['group_name']]))? $user->lang['G_' . $row['group_name']] : $row['group_name'];
 742                  
 743                  $template->assign_block_vars('groups', array(
 744                      'U_LIST'        => "{$this->u_action}&amp;action=list&amp;g=$group_id",
 745                      'U_EDIT'        => "{$this->u_action}&amp;action=edit&amp;g=$group_id",
 746                      'U_DELETE'        => ($auth->acl_get('a_groupdel')) ? "{$this->u_action}&amp;action=delete&amp;g=$group_id" : '',
 747   
 748                      'S_GROUP_SPECIAL'    => ($row['group_type'] == GROUP_SPECIAL) ? true : false,
 749                      
 750                      'GROUP_NAME'    => $group_name,
 751                      'TOTAL_MEMBERS'    => $row['total_members'],
 752                      )
 753                  );
 754              }
 755          }
 756      }
 757  }
 758   
 759  ?>