Verzeichnisstruktur phpBB-3.2.0


Veröffentlicht
06.01.2017

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

ucp_groups.php

Zuletzt modifiziert: 09.10.2024, 12:52 - Dateigröße: 37.65 KiB


 0001  <?php
 0002  /**
 0003  *
 0004  * This file is part of the phpBB Forum Software package.
 0005  *
 0006  * @copyright (c) phpBB Limited <https://www.phpbb.com>
 0007  * @license GNU General Public License, version 2 (GPL-2.0)
 0008  *
 0009  * For full copyright and license information, please see
 0010  * the docs/CREDITS.txt file.
 0011  *
 0012  */
 0013   
 0014  /**
 0015  * @ignore
 0016  */
 0017  if (!defined('IN_PHPBB'))
 0018  {
 0019      exit;
 0020  }
 0021   
 0022  /**
 0023  * ucp_groups
 0024  */
 0025  class ucp_groups
 0026  {
 0027      var $u_action;
 0028   
 0029      function main($id, $mode)
 0030      {
 0031          global $config, $phpbb_root_path, $phpEx, $phpbb_admin_path;
 0032          global $db, $user, $auth, $cache, $template;
 0033          global $request, $phpbb_container, $phpbb_log;
 0034   
 0035          $user->add_lang('groups');
 0036   
 0037          $return_page = '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '">', '</a>');
 0038   
 0039          $mark_ary    = $request->variable('mark', array(0));
 0040          $submit        = $request->variable('submit', false, false, \phpbb\request\request_interface::POST);
 0041   
 0042          /** @var \phpbb\group\helper $group_helper */
 0043          $group_helper = $phpbb_container->get('group_helper');
 0044   
 0045          switch ($mode)
 0046          {
 0047              case 'membership':
 0048   
 0049                  $this->page_title = 'UCP_USERGROUPS_MEMBER';
 0050   
 0051                  if ($submit || isset($_POST['change_default']))
 0052                  {
 0053                      $action = (isset($_POST['change_default'])) ? 'change_default' : $request->variable('action', '');
 0054                      $group_id = ($action == 'change_default') ? $request->variable('default', 0) : $request->variable('selected', 0);
 0055   
 0056                      if (!$group_id)
 0057                      {
 0058                          trigger_error('NO_GROUP_SELECTED');
 0059                      }
 0060   
 0061                      $sql = 'SELECT group_id, group_name, group_type
 0062                          FROM ' . GROUPS_TABLE . "
 0063                          WHERE group_id IN ($group_id, {$user->data['group_id']})";
 0064                      $result = $db->sql_query($sql);
 0065   
 0066                      $group_row = array();
 0067                      while ($row = $db->sql_fetchrow($result))
 0068                      {
 0069                          $row['group_name'] = $group_helper->get_name($row['group_name']);
 0070                          $group_row[$row['group_id']] = $row;
 0071                      }
 0072                      $db->sql_freeresult($result);
 0073   
 0074                      if (!sizeof($group_row))
 0075                      {
 0076                          trigger_error('GROUP_NOT_EXIST');
 0077                      }
 0078   
 0079                      switch ($action)
 0080                      {
 0081                          case 'change_default':
 0082                              // User already having this group set as default?
 0083                              if ($group_id == $user->data['group_id'])
 0084                              {
 0085                                  trigger_error($user->lang['ALREADY_DEFAULT_GROUP'] . $return_page);
 0086                              }
 0087   
 0088                              if (!$auth->acl_get('u_chggrp'))
 0089                              {
 0090                                  send_status_line(403, 'Forbidden');
 0091                                  trigger_error($user->lang['NOT_AUTHORISED'] . $return_page);
 0092                              }
 0093   
 0094                              // User needs to be member of the group in order to make it default
 0095                              if (!group_memberships($group_id, $user->data['user_id'], true))
 0096                              {
 0097                                  trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
 0098                              }
 0099   
 0100                              if (confirm_box(true))
 0101                              {
 0102                                  group_user_attributes('default', $group_id, $user->data['user_id']);
 0103   
 0104                                  $phpbb_log->add('user', $user->data['user_id'], $user->ip, 'LOG_USER_GROUP_CHANGE', false, array(
 0105                                      'reportee_id' => $user->data['user_id'],
 0106                                      sprintf($user->lang['USER_GROUP_CHANGE'], $group_row[$user->data['group_id']]['group_name'], $group_row[$group_id]['group_name'])
 0107                                  ));
 0108   
 0109                                  meta_refresh(3, $this->u_action);
 0110                                  trigger_error($user->lang['CHANGED_DEFAULT_GROUP'] . $return_page);
 0111                              }
 0112                              else
 0113                              {
 0114                                  $s_hidden_fields = array(
 0115                                      'default'        => $group_id,
 0116                                      'change_default'=> true
 0117                                  );
 0118   
 0119                                  confirm_box(false, sprintf($user->lang['GROUP_CHANGE_DEFAULT'], $group_row[$group_id]['group_name']), build_hidden_fields($s_hidden_fields));
 0120                              }
 0121   
 0122                          break;
 0123   
 0124                          case 'resign':
 0125   
 0126                              // User tries to resign from default group but is not allowed to change it?
 0127                              if ($group_id == $user->data['group_id'] && !$auth->acl_get('u_chggrp'))
 0128                              {
 0129                                  trigger_error($user->lang['NOT_RESIGN_FROM_DEFAULT_GROUP'] . $return_page);
 0130                              }
 0131   
 0132                              if (!($row = group_memberships($group_id, $user->data['user_id'])))
 0133                              {
 0134                                  trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
 0135                              }
 0136                              list(, $row) = each($row);
 0137   
 0138                              $sql = 'SELECT group_type
 0139                                  FROM ' . GROUPS_TABLE . '
 0140                                  WHERE group_id = ' . $group_id;
 0141                              $result = $db->sql_query($sql);
 0142                              $group_type = (int) $db->sql_fetchfield('group_type');
 0143                              $db->sql_freeresult($result);
 0144   
 0145                              if ($group_type != GROUP_OPEN && $group_type != GROUP_FREE)
 0146                              {
 0147                                  trigger_error($user->lang['CANNOT_RESIGN_GROUP'] . $return_page);
 0148                              }
 0149   
 0150                              if (confirm_box(true))
 0151                              {
 0152                                  group_user_del($group_id, $user->data['user_id']);
 0153   
 0154                                  $phpbb_log->add('user', $user->data['user_id'], $user->ip, 'LOG_USER_GROUP_RESIGN', false, array(
 0155                                      'reportee_id' => $user->data['user_id'],
 0156                                      $group_row[$group_id]['group_name']
 0157                                  ));
 0158   
 0159                                  meta_refresh(3, $this->u_action);
 0160                                  trigger_error($user->lang[($row['user_pending']) ? 'GROUP_RESIGNED_PENDING' : 'GROUP_RESIGNED_MEMBERSHIP'] . $return_page);
 0161                              }
 0162                              else
 0163                              {
 0164                                  $s_hidden_fields = array(
 0165                                      'selected'        => $group_id,
 0166                                      'action'        => 'resign',
 0167                                      'submit'        => true
 0168                                  );
 0169   
 0170                                  confirm_box(false, ($row['user_pending']) ? 'GROUP_RESIGN_PENDING' : 'GROUP_RESIGN_MEMBERSHIP', build_hidden_fields($s_hidden_fields));
 0171                              }
 0172   
 0173                          break;
 0174   
 0175                          case 'join':
 0176   
 0177                              $sql = 'SELECT ug.*, u.username, u.username_clean, u.user_email
 0178                                  FROM ' . USER_GROUP_TABLE . ' ug, ' . USERS_TABLE . ' u
 0179                                  WHERE ug.user_id = u.user_id
 0180                                      AND ug.group_id = ' . $group_id . '
 0181                                      AND ug.user_id = ' . $user->data['user_id'];
 0182                              $result = $db->sql_query($sql);
 0183                              $row = $db->sql_fetchrow($result);
 0184                              $db->sql_freeresult($result);
 0185   
 0186                              if ($row)
 0187                              {
 0188                                  if ($row['user_pending'])
 0189                                  {
 0190                                      trigger_error($user->lang['ALREADY_IN_GROUP_PENDING'] . $return_page);
 0191                                  }
 0192   
 0193                                  trigger_error($user->lang['ALREADY_IN_GROUP'] . $return_page);
 0194                              }
 0195   
 0196                              // Check permission to join (open group or request)
 0197                              if ($group_row[$group_id]['group_type'] != GROUP_OPEN && $group_row[$group_id]['group_type'] != GROUP_FREE)
 0198                              {
 0199                                  trigger_error($user->lang['CANNOT_JOIN_GROUP'] . $return_page);
 0200                              }
 0201   
 0202                              if (confirm_box(true))
 0203                              {
 0204                                  if ($group_row[$group_id]['group_type'] == GROUP_FREE)
 0205                                  {
 0206                                      group_user_add($group_id, $user->data['user_id']);
 0207                                  }
 0208                                  else
 0209                                  {
 0210                                      group_user_add($group_id, $user->data['user_id'], false, false, false, 0, 1);
 0211                                  }
 0212   
 0213                                  $phpbb_log->add('user', $user->data['user_id'], $user->ip, 'LOG_USER_GROUP_JOIN' . (($group_row[$group_id]['group_type'] == GROUP_FREE) ? '' : '_PENDING'), false, array(
 0214                                      'reportee_id' => $user->data['user_id'],
 0215                                      $group_row[$group_id]['group_name']
 0216                                  ));
 0217   
 0218                                  meta_refresh(3, $this->u_action);
 0219                                  trigger_error($user->lang[($group_row[$group_id]['group_type'] == GROUP_FREE) ? 'GROUP_JOINED' : 'GROUP_JOINED_PENDING'] . $return_page);
 0220                              }
 0221                              else
 0222                              {
 0223                                  $s_hidden_fields = array(
 0224                                      'selected'        => $group_id,
 0225                                      'action'        => 'join',
 0226                                      'submit'        => true
 0227                                  );
 0228   
 0229                                  confirm_box(false, ($group_row[$group_id]['group_type'] == GROUP_FREE) ? 'GROUP_JOIN' : 'GROUP_JOIN_PENDING', build_hidden_fields($s_hidden_fields));
 0230                              }
 0231   
 0232                          break;
 0233   
 0234                          case 'demote':
 0235   
 0236                              if (!($row = group_memberships($group_id, $user->data['user_id'])))
 0237                              {
 0238                                  trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
 0239                              }
 0240                              list(, $row) = each($row);
 0241   
 0242                              if (!$row['group_leader'])
 0243                              {
 0244                                  trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
 0245                              }
 0246   
 0247                              if (confirm_box(true))
 0248                              {
 0249                                  group_user_attributes('demote', $group_id, $user->data['user_id']);
 0250   
 0251                                  $phpbb_log->add('user', $user->data['user_id'], $user->ip, 'LOG_USER_GROUP_DEMOTE', false, array(
 0252                                      'reportee_id' => $user->data['user_id'],
 0253                                      $group_row[$group_id]['group_name']
 0254                                  ));
 0255   
 0256                                  meta_refresh(3, $this->u_action);
 0257                                  trigger_error($user->lang['USER_GROUP_DEMOTED'] . $return_page);
 0258                              }
 0259                              else
 0260                              {
 0261                                  $s_hidden_fields = array(
 0262                                      'selected'        => $group_id,
 0263                                      'action'        => 'demote',
 0264                                      'submit'        => true
 0265                                  );
 0266   
 0267                                  confirm_box(false, 'USER_GROUP_DEMOTE', build_hidden_fields($s_hidden_fields));
 0268                              }
 0269   
 0270                          break;
 0271                      }
 0272                  }
 0273   
 0274                  $sql = 'SELECT g.*, ug.group_leader, ug.user_pending
 0275                      FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug
 0276                      WHERE ug.user_id = ' . $user->data['user_id'] . '
 0277                          AND g.group_id = ug.group_id
 0278                      ORDER BY g.group_type DESC, g.group_name';
 0279                  $result = $db->sql_query($sql);
 0280   
 0281                  $group_id_ary = array();
 0282                  $leader_count = $member_count = $pending_count = 0;
 0283                  while ($row = $db->sql_fetchrow($result))
 0284                  {
 0285                      $block = ($row['group_leader']) ? 'leader' : (($row['user_pending']) ? 'pending' : 'member');
 0286   
 0287                      switch ($row['group_type'])
 0288                      {
 0289                          case GROUP_OPEN:
 0290                              $group_status = 'OPEN';
 0291                          break;
 0292   
 0293                          case GROUP_CLOSED:
 0294                              $group_status = 'CLOSED';
 0295                          break;
 0296   
 0297                          case GROUP_HIDDEN:
 0298                              $group_status = 'HIDDEN';
 0299                          break;
 0300   
 0301                          case GROUP_SPECIAL:
 0302                              $group_status = 'SPECIAL';
 0303                          break;
 0304   
 0305                          case GROUP_FREE:
 0306                              $group_status = 'FREE';
 0307                          break;
 0308                      }
 0309   
 0310                      $template->assign_block_vars($block, array(
 0311                          'GROUP_ID'        => $row['group_id'],
 0312                          'GROUP_NAME'    => $group_helper->get_name($row['group_name']),
 0313                          'GROUP_DESC'    => ($row['group_type'] <> GROUP_SPECIAL) ? generate_text_for_display($row['group_desc'], $row['group_desc_uid'], $row['group_desc_bitfield'], $row['group_desc_options']) : $user->lang['GROUP_IS_SPECIAL'],
 0314                          'GROUP_SPECIAL'    => ($row['group_type'] <> GROUP_SPECIAL) ? false : true,
 0315                          'GROUP_STATUS'    => $user->lang['GROUP_IS_' . $group_status],
 0316                          'GROUP_COLOUR'    => $row['group_colour'],
 0317   
 0318                          'U_VIEW_GROUP'    => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&amp;g=' . $row['group_id']),
 0319   
 0320                          'S_GROUP_DEFAULT'    => ($row['group_id'] == $user->data['group_id']) ? true : false,
 0321                          'S_ROW_COUNT'        => ${$block . '_count'}++)
 0322                      );
 0323   
 0324                      $group_id_ary[] = (int) $row['group_id'];
 0325                  }
 0326                  $db->sql_freeresult($result);
 0327   
 0328                  // Hide hidden groups unless user is an admin with group privileges
 0329                  $sql_and = ($auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel')) ? '<> ' . GROUP_SPECIAL : 'NOT IN (' . GROUP_SPECIAL . ', ' . GROUP_HIDDEN . ')';
 0330   
 0331                  $sql = 'SELECT group_id, group_name, group_colour, group_desc, group_desc_uid, group_desc_bitfield, group_desc_options, group_type, group_founder_manage
 0332                      FROM ' . GROUPS_TABLE . '
 0333                      WHERE ' . ((sizeof($group_id_ary)) ? $db->sql_in_set('group_id', $group_id_ary, true) . ' AND ' : '') . "
 0334                          group_type $sql_and
 0335                      ORDER BY group_type DESC, group_name";
 0336                  $result = $db->sql_query($sql);
 0337   
 0338                  $nonmember_count = 0;
 0339                  while ($row = $db->sql_fetchrow($result))
 0340                  {
 0341                      switch ($row['group_type'])
 0342                      {
 0343                          case GROUP_OPEN:
 0344                              $group_status = 'OPEN';
 0345                          break;
 0346   
 0347                          case GROUP_CLOSED:
 0348                              $group_status = 'CLOSED';
 0349                          break;
 0350   
 0351                          case GROUP_HIDDEN:
 0352                              $group_status = 'HIDDEN';
 0353                          break;
 0354   
 0355                          case GROUP_SPECIAL:
 0356                              $group_status = 'SPECIAL';
 0357                          break;
 0358   
 0359                          case GROUP_FREE:
 0360                              $group_status = 'FREE';
 0361                          break;
 0362                      }
 0363   
 0364                      $template->assign_block_vars('nonmember', array(
 0365                          'GROUP_ID'        => $row['group_id'],
 0366                          'GROUP_NAME'    => $group_helper->get_name($row['group_name']),
 0367                          'GROUP_DESC'    => ($row['group_type'] <> GROUP_SPECIAL) ? generate_text_for_display($row['group_desc'], $row['group_desc_uid'], $row['group_desc_bitfield'], $row['group_desc_options']) : $user->lang['GROUP_IS_SPECIAL'],
 0368                          'GROUP_SPECIAL'    => ($row['group_type'] <> GROUP_SPECIAL) ? false : true,
 0369                          'GROUP_CLOSED'    => ($row['group_type'] <> GROUP_CLOSED || $auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel')) ? false : true,
 0370                          'GROUP_STATUS'    => $user->lang['GROUP_IS_' . $group_status],
 0371                          'S_CAN_JOIN'    => ($row['group_type'] == GROUP_OPEN || $row['group_type'] == GROUP_FREE) ? true : false,
 0372                          'GROUP_COLOUR'    => $row['group_colour'],
 0373   
 0374                          'U_VIEW_GROUP'    => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&amp;g=' . $row['group_id']),
 0375   
 0376                          'S_ROW_COUNT'    => $nonmember_count++)
 0377                      );
 0378                  }
 0379                  $db->sql_freeresult($result);
 0380   
 0381                  $template->assign_vars(array(
 0382                      'S_CHANGE_DEFAULT'    => ($auth->acl_get('u_chggrp')) ? true : false,
 0383                      'S_LEADER_COUNT'    => $leader_count,
 0384                      'S_MEMBER_COUNT'    => $member_count,
 0385                      'S_PENDING_COUNT'    => $pending_count,
 0386                      'S_NONMEMBER_COUNT'    => $nonmember_count,
 0387   
 0388                      'S_UCP_ACTION'            => $this->u_action)
 0389                  );
 0390   
 0391              break;
 0392   
 0393              case 'manage':
 0394   
 0395                  $this->page_title = 'UCP_USERGROUPS_MANAGE';
 0396                  $action        = (isset($_POST['addusers'])) ? 'addusers' : $request->variable('action', '');
 0397                  $group_id    = $request->variable('g', 0);
 0398   
 0399                  include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
 0400   
 0401                  add_form_key('ucp_groups');
 0402   
 0403                  if ($group_id)
 0404                  {
 0405                      $sql = 'SELECT g.*, t.teampage_position AS group_teampage
 0406                          FROM ' . GROUPS_TABLE . ' g
 0407                          LEFT JOIN ' . TEAMPAGE_TABLE . ' t
 0408                              ON (t.group_id = g.group_id)
 0409                          WHERE g.group_id = ' . $group_id;
 0410                      $result = $db->sql_query($sql);
 0411                      $group_row = $db->sql_fetchrow($result);
 0412                      $db->sql_freeresult($result);
 0413   
 0414                      if (!$group_row)
 0415                      {
 0416                          trigger_error($user->lang['NO_GROUP'] . $return_page);
 0417                      }
 0418   
 0419                      // Check if the user is allowed to manage this group if set to founder only.
 0420                      if ($user->data['user_type'] != USER_FOUNDER && $group_row['group_founder_manage'])
 0421                      {
 0422                          trigger_error($user->lang['NOT_ALLOWED_MANAGE_GROUP'] . $return_page, E_USER_WARNING);
 0423                      }
 0424   
 0425                      $group_name = $group_row['group_name'];
 0426                      $group_type = $group_row['group_type'];
 0427   
 0428                      $avatar = phpbb_get_group_avatar($group_row, 'GROUP_AVATAR', true);
 0429   
 0430                      $template->assign_vars(array(
 0431                          'GROUP_NAME'            => $group_helper->get_name($group_name),
 0432                          'GROUP_INTERNAL_NAME'    => $group_name,
 0433                          'GROUP_COLOUR'            => (isset($group_row['group_colour'])) ? $group_row['group_colour'] : '',
 0434                          'GROUP_DESC_DISP'        => generate_text_for_display($group_row['group_desc'], $group_row['group_desc_uid'], $group_row['group_desc_bitfield'], $group_row['group_desc_options']),
 0435                          'GROUP_TYPE'            => $group_row['group_type'],
 0436   
 0437                          'AVATAR'                => (empty($avatar) ? '<img src="' . $phpbb_admin_path . 'images/no_avatar.gif" alt="" />' : $avatar),
 0438                          'AVATAR_IMAGE'            => (empty($avatar) ? '<img src="' . $phpbb_admin_path . 'images/no_avatar.gif" alt="" />' : $avatar),
 0439                          'AVATAR_WIDTH'            => (isset($group_row['group_avatar_width'])) ? $group_row['group_avatar_width'] : '',
 0440                          'AVATAR_HEIGHT'            => (isset($group_row['group_avatar_height'])) ? $group_row['group_avatar_height'] : '',
 0441                      ));
 0442                  }
 0443   
 0444                  switch ($action)
 0445                  {
 0446                      case 'edit':
 0447   
 0448                          if (!$group_id)
 0449                          {
 0450                              trigger_error($user->lang['NO_GROUP'] . $return_page);
 0451                          }
 0452   
 0453                          if (!($row = group_memberships($group_id, $user->data['user_id'])))
 0454                          {
 0455                              trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
 0456                          }
 0457                          list(, $row) = each($row);
 0458   
 0459                          if (!$row['group_leader'])
 0460                          {
 0461                              trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
 0462                          }
 0463   
 0464                          $user->add_lang(array('acp/groups', 'acp/common'));
 0465   
 0466                          $update    = (isset($_POST['update'])) ? true : false;
 0467   
 0468                          $error = array();
 0469   
 0470                          // Setup avatar data for later
 0471                          $avatars_enabled = false;
 0472                          $avatar_drivers = null;
 0473                          $avatar_data = null;
 0474                          $avatar_error = array();
 0475   
 0476                          /** @var \phpbb\avatar\manager $phpbb_avatar_manager */
 0477                          $phpbb_avatar_manager = $phpbb_container->get('avatar.manager');
 0478   
 0479                          if ($config['allow_avatar'])
 0480                          {
 0481                              $avatar_drivers = $phpbb_avatar_manager->get_enabled_drivers();
 0482   
 0483                              // This is normalised data, without the group_ prefix
 0484                              $avatar_data = \phpbb\avatar\manager::clean_row($group_row, 'group');
 0485                          }
 0486   
 0487                          // Handle deletion of avatars
 0488                          if ($request->is_set_post('avatar_delete'))
 0489                          {
 0490                              if (confirm_box(true))
 0491                              {
 0492                                  $phpbb_avatar_manager->handle_avatar_delete($db, $user, $avatar_data, GROUPS_TABLE, 'group_');
 0493                                  $cache->destroy('sql', GROUPS_TABLE);
 0494   
 0495                                  $message = ($action == 'edit') ? 'GROUP_UPDATED' : 'GROUP_CREATED';
 0496                                  trigger_error($user->lang[$message] . $return_page);
 0497                              }
 0498                              else
 0499                              {
 0500                                  confirm_box(false, $user->lang('CONFIRM_AVATAR_DELETE'), build_hidden_fields(array(
 0501                                          'avatar_delete'     => true,
 0502                                          'i'                 => $id,
 0503                                          'mode'              => $mode,
 0504                                          'g'                    => $group_id,
 0505                                          'action'            => $action))
 0506                                  );
 0507                              }
 0508                          }
 0509   
 0510                          // Did we submit?
 0511                          if ($update)
 0512                          {
 0513                              $group_name    = $request->variable('group_name', '', true);
 0514                              $group_desc = $request->variable('group_desc', '', true);
 0515                              $group_type    = $request->variable('group_type', GROUP_FREE);
 0516   
 0517                              $allow_desc_bbcode    = $request->variable('desc_parse_bbcode', false);
 0518                              $allow_desc_urls    = $request->variable('desc_parse_urls', false);
 0519                              $allow_desc_smilies    = $request->variable('desc_parse_smilies', false);
 0520   
 0521                              $submit_ary = array(
 0522                                  'colour'        => $request->variable('group_colour', ''),
 0523                                  'rank'            => $request->variable('group_rank', 0),
 0524                                  'receive_pm'    => isset($_REQUEST['group_receive_pm']) ? 1 : 0,
 0525                                  'message_limit'    => $request->variable('group_message_limit', 0),
 0526                                  'max_recipients'=> $request->variable('group_max_recipients', 0),
 0527                                  'legend'    => $group_row['group_legend'],
 0528                                  'teampage'    => $group_row['group_teampage'],
 0529                              );
 0530   
 0531                              if ($config['allow_avatar'])
 0532                              {
 0533                                  // Handle avatar
 0534                                  $driver_name = $phpbb_avatar_manager->clean_driver_name($request->variable('avatar_driver', ''));
 0535   
 0536                                  if (in_array($driver_name, $avatar_drivers) && !$request->is_set_post('avatar_delete'))
 0537                                  {
 0538                                      $driver = $phpbb_avatar_manager->get_driver($driver_name);
 0539                                      $result = $driver->process_form($request, $template, $user, $avatar_data, $avatar_error);
 0540   
 0541                                      if ($result && empty($avatar_error))
 0542                                      {
 0543                                          $result['avatar_type'] = $driver_name;
 0544   
 0545                                          $submit_ary = array_merge($submit_ary, $result);
 0546                                      }
 0547                                  }
 0548   
 0549                                  // Merge any avatars errors into the primary error array
 0550                                  $error = array_merge($error, $phpbb_avatar_manager->localize_errors($user, $avatar_error));
 0551                              }
 0552   
 0553                              if (!check_form_key('ucp_groups'))
 0554                              {
 0555                                  $error[] = $user->lang['FORM_INVALID'];
 0556                              }
 0557   
 0558                              // Validate submitted colour value
 0559                              if ($colour_error = validate_data($submit_ary, array('colour'    => array('hex_colour', true))))
 0560                              {
 0561                                  // Replace "error" string with its real, localised form
 0562                                  $error = array_merge($error, $colour_error);
 0563                              }
 0564   
 0565                              if (!sizeof($error))
 0566                              {
 0567                                  // Only set the rank, colour, etc. if it's changed or if we're adding a new
 0568                                  // group. This prevents existing group members being updated if no changes
 0569                                  // were made.
 0570                                  // However there are some attributes that need to be set everytime,
 0571                                  // otherwise the group gets removed from the feature.
 0572                                  $set_attributes = array('legend', 'teampage');
 0573   
 0574                                  $group_attributes = array();
 0575                                  $test_variables = array(
 0576                                      'rank'            => 'int',
 0577                                      'colour'        => 'string',
 0578                                      'avatar'        => 'string',
 0579                                      'avatar_type'    => 'string',
 0580                                      'avatar_width'    => 'int',
 0581                                      'avatar_height'    => 'int',
 0582                                      'receive_pm'    => 'int',
 0583                                      'legend'        => 'int',
 0584                                      'teampage'        => 'int',
 0585                                      'message_limit'    => 'int',
 0586                                      'max_recipients'=> 'int',
 0587                                  );
 0588   
 0589                                  foreach ($test_variables as $test => $type)
 0590                                  {
 0591                                      if (isset($submit_ary[$test]) && ($action == 'add' || $group_row['group_' . $test] != $submit_ary[$test] || isset($group_attributes['group_avatar']) && strpos($test, 'avatar') === 0 || in_array($test, $set_attributes)))
 0592                                      {
 0593                                          settype($submit_ary[$test], $type);
 0594                                          $group_attributes['group_' . $test] = $group_row['group_' . $test] = $submit_ary[$test];
 0595                                      }
 0596                                  }
 0597   
 0598                                  if (!($error = group_create($group_id, $group_type, $group_name, $group_desc, $group_attributes, $allow_desc_bbcode, $allow_desc_urls, $allow_desc_smilies)))
 0599                                  {
 0600                                      $cache->destroy('sql', GROUPS_TABLE);
 0601                                      $cache->destroy('sql', TEAMPAGE_TABLE);
 0602   
 0603                                      $message = ($action == 'edit') ? 'GROUP_UPDATED' : 'GROUP_CREATED';
 0604                                      trigger_error($user->lang[$message] . $return_page);
 0605                                  }
 0606                              }
 0607   
 0608                              if (sizeof($error))
 0609                              {
 0610                                  $error = array_map(array(&$user, 'lang'), $error);
 0611                                  $group_rank = $submit_ary['rank'];
 0612   
 0613                                  $group_desc_data = array(
 0614                                      'text'            => $group_desc,
 0615                                      'allow_bbcode'    => $allow_desc_bbcode,
 0616                                      'allow_smilies'    => $allow_desc_smilies,
 0617                                      'allow_urls'    => $allow_desc_urls
 0618                                  );
 0619                              }
 0620                          }
 0621                          else if (!$group_id)
 0622                          {
 0623                              $group_desc_data = array(
 0624                                  'text'            => '',
 0625                                  'allow_bbcode'    => true,
 0626                                  'allow_smilies'    => true,
 0627                                  'allow_urls'    => true
 0628                              );
 0629                              $group_rank = 0;
 0630                              $group_type = GROUP_OPEN;
 0631                          }
 0632                          else
 0633                          {
 0634                              $group_desc_data = generate_text_for_edit($group_row['group_desc'], $group_row['group_desc_uid'], $group_row['group_desc_options']);
 0635                              $group_rank = $group_row['group_rank'];
 0636                          }
 0637   
 0638                          $sql = 'SELECT *
 0639                              FROM ' . RANKS_TABLE . '
 0640                              WHERE rank_special = 1
 0641                              ORDER BY rank_title';
 0642                          $result = $db->sql_query($sql);
 0643   
 0644                          $rank_options = '<option value="0"' . ((!$group_rank) ? ' selected="selected"' : '') . '>' . $user->lang['USER_DEFAULT'] . '</option>';
 0645                          while ($row = $db->sql_fetchrow($result))
 0646                          {
 0647                              $selected = ($group_rank && $row['rank_id'] == $group_rank) ? ' selected="selected"' : '';
 0648                              $rank_options .= '<option value="' . $row['rank_id'] . '"' . $selected . '>' . $row['rank_title'] . '</option>';
 0649                          }
 0650                          $db->sql_freeresult($result);
 0651   
 0652                          $type_free        = ($group_type == GROUP_FREE) ? ' checked="checked"' : '';
 0653                          $type_open        = ($group_type == GROUP_OPEN) ? ' checked="checked"' : '';
 0654                          $type_closed    = ($group_type == GROUP_CLOSED) ? ' checked="checked"' : '';
 0655                          $type_hidden    = ($group_type == GROUP_HIDDEN) ? ' checked="checked"' : '';
 0656   
 0657                          // Load up stuff for avatars
 0658                          if ($config['allow_avatar'])
 0659                          {
 0660                              $avatars_enabled = false;
 0661                              $selected_driver = $phpbb_avatar_manager->clean_driver_name($request->variable('avatar_driver', $avatar_data['avatar_type']));
 0662   
 0663                              // Assign min and max values before generating avatar driver html
 0664                              $template->assign_vars(array(
 0665                                      'AVATAR_MIN_WIDTH'        => $config['avatar_min_width'],
 0666                                      'AVATAR_MAX_WIDTH'        => $config['avatar_max_width'],
 0667                                      'AVATAR_MIN_HEIGHT'        => $config['avatar_min_height'],
 0668                                      'AVATAR_MAX_HEIGHT'        => $config['avatar_max_height'],
 0669                              ));
 0670   
 0671                              foreach ($avatar_drivers as $current_driver)
 0672                              {
 0673                                  $driver = $phpbb_avatar_manager->get_driver($current_driver);
 0674   
 0675                                  $avatars_enabled = true;
 0676                                  $template->set_filenames(array(
 0677                                      'avatar' => $driver->get_template_name(),
 0678                                  ));
 0679   
 0680                                  if ($driver->prepare_form($request, $template, $user, $avatar_data, $avatar_error))
 0681                                  {
 0682                                      $driver_name = $phpbb_avatar_manager->prepare_driver_name($current_driver);
 0683                                      $driver_upper = strtoupper($driver_name);
 0684                                      $template->assign_block_vars('avatar_drivers', array(
 0685                                          'L_TITLE' => $user->lang($driver_upper . '_TITLE'),
 0686                                          'L_EXPLAIN' => $user->lang($driver_upper . '_EXPLAIN'),
 0687   
 0688                                          'DRIVER' => $driver_name,
 0689                                          'SELECTED' => $current_driver == $selected_driver,
 0690                                          'OUTPUT' => $template->assign_display('avatar'),
 0691                                      ));
 0692                                  }
 0693                              }
 0694                          }
 0695   
 0696                          if (isset($phpbb_avatar_manager) && !$update)
 0697                          {
 0698                              // Merge any avatars errors into the primary error array
 0699                              $error = array_merge($error, $phpbb_avatar_manager->localize_errors($user, $avatar_error));
 0700                          }
 0701   
 0702                          $template->assign_vars(array(
 0703                              'S_EDIT'            => true,
 0704                              'S_INCLUDE_SWATCH'    => true,
 0705                              'S_FORM_ENCTYPE'    => ' enctype="multipart/form-data"',
 0706                              'S_ERROR'            => (sizeof($error)) ? true : false,
 0707                              'S_SPECIAL_GROUP'    => ($group_type == GROUP_SPECIAL) ? true : false,
 0708                              'S_AVATARS_ENABLED'    => ($config['allow_avatar'] && $avatars_enabled),
 0709                              'S_GROUP_MANAGE'    => true,
 0710   
 0711                              'ERROR_MSG'                => (sizeof($error)) ? implode('<br />', $error) : '',
 0712                              'GROUP_RECEIVE_PM'        => (isset($group_row['group_receive_pm']) && $group_row['group_receive_pm']) ? ' checked="checked"' : '',
 0713                              'GROUP_MESSAGE_LIMIT'    => (isset($group_row['group_message_limit'])) ? $group_row['group_message_limit'] : 0,
 0714                              'GROUP_MAX_RECIPIENTS'    => (isset($group_row['group_max_recipients'])) ? $group_row['group_max_recipients'] : 0,
 0715   
 0716                              'GROUP_DESC'            => $group_desc_data['text'],
 0717                              'S_DESC_BBCODE_CHECKED'    => $group_desc_data['allow_bbcode'],
 0718                              'S_DESC_URLS_CHECKED'    => $group_desc_data['allow_urls'],
 0719                              'S_DESC_SMILIES_CHECKED'=> $group_desc_data['allow_smilies'],
 0720   
 0721                              'S_RANK_OPTIONS'        => $rank_options,
 0722   
 0723                              'GROUP_TYPE_FREE'        => GROUP_FREE,
 0724                              'GROUP_TYPE_OPEN'        => GROUP_OPEN,
 0725                              'GROUP_TYPE_CLOSED'        => GROUP_CLOSED,
 0726                              'GROUP_TYPE_HIDDEN'        => GROUP_HIDDEN,
 0727                              'GROUP_TYPE_SPECIAL'    => GROUP_SPECIAL,
 0728   
 0729                              'GROUP_FREE'        => $type_free,
 0730                              'GROUP_OPEN'        => $type_open,
 0731                              'GROUP_CLOSED'        => $type_closed,
 0732                              'GROUP_HIDDEN'        => $type_hidden,
 0733   
 0734                              'S_UCP_ACTION'        => $this->u_action . "&amp;action=$action&amp;g=$group_id",
 0735                              'L_AVATAR_EXPLAIN'    => phpbb_avatar_explanation_string(),
 0736                          ));
 0737   
 0738                      break;
 0739   
 0740                      case 'list':
 0741   
 0742                          if (!$group_id)
 0743                          {
 0744                              trigger_error($user->lang['NO_GROUP'] . $return_page);
 0745                          }
 0746   
 0747                          if (!($row = group_memberships($group_id, $user->data['user_id'])))
 0748                          {
 0749                              trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
 0750                          }
 0751                          list(, $row) = each($row);
 0752   
 0753                          if (!$row['group_leader'])
 0754                          {
 0755                              trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
 0756                          }
 0757   
 0758                          $user->add_lang(array('acp/groups', 'acp/common'));
 0759                          $start = $request->variable('start', 0);
 0760   
 0761                          // Grab the leaders - always, on every page...
 0762                          $sql = 'SELECT u.user_id, u.username, u.username_clean, u.user_colour, u.user_regdate, u.user_posts, u.group_id, ug.group_leader, ug.user_pending
 0763                              FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug
 0764                              WHERE ug.group_id = $group_id
 0765                                  AND u.user_id = ug.user_id
 0766                                  AND ug.group_leader = 1
 0767                              ORDER BY ug.user_pending DESC, u.username_clean";
 0768                          $result = $db->sql_query($sql);
 0769   
 0770                          while ($row = $db->sql_fetchrow($result))
 0771                          {
 0772                              $template->assign_block_vars('leader', array(
 0773                                  'USERNAME'            => $row['username'],
 0774                                  'USERNAME_COLOUR'    => $row['user_colour'],
 0775                                  'USERNAME_FULL'        => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']),
 0776                                  'U_USER_VIEW'        => get_username_string('profile', $row['user_id'], $row['username']),
 0777                                  'S_GROUP_DEFAULT'    => ($row['group_id'] == $group_id) ? true : false,
 0778                                  'JOINED'            => ($row['user_regdate']) ? $user->format_date($row['user_regdate']) : ' - ',
 0779                                  'USER_POSTS'        => $row['user_posts'],
 0780                                  'USER_ID'            => $row['user_id'])
 0781                              );
 0782                          }
 0783                          $db->sql_freeresult($result);
 0784   
 0785                          // Total number of group members (non-leaders)
 0786                          $sql = 'SELECT COUNT(user_id) AS total_members
 0787                              FROM ' . USER_GROUP_TABLE . "
 0788                              WHERE group_id = $group_id
 0789                                  AND group_leader = 0";
 0790                          $result = $db->sql_query($sql);
 0791                          $total_members = (int) $db->sql_fetchfield('total_members');
 0792                          $db->sql_freeresult($result);
 0793   
 0794                          // Grab the members
 0795                          $sql = 'SELECT u.user_id, u.username, u.username_clean, u.user_colour, u.user_regdate, u.user_posts, u.group_id, ug.group_leader, ug.user_pending
 0796                              FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug
 0797                              WHERE ug.group_id = $group_id
 0798                                  AND u.user_id = ug.user_id
 0799                                  AND ug.group_leader = 0
 0800                              ORDER BY ug.user_pending DESC, u.username_clean";
 0801                          $result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
 0802   
 0803                          $pending = false;
 0804                          $approved = false;
 0805   
 0806                          while ($row = $db->sql_fetchrow($result))
 0807                          {
 0808                              if ($row['user_pending'] && !$pending)
 0809                              {
 0810                                  $template->assign_block_vars('member', array(
 0811                                      'S_PENDING'        => true)
 0812                                  );
 0813                                  $template->assign_var('S_PENDING_SET', true);
 0814   
 0815                                  $pending = true;
 0816                              }
 0817                              else if (!$row['user_pending'] && !$approved)
 0818                              {
 0819                                  $template->assign_block_vars('member', array(
 0820                                      'S_APPROVED'        => true)
 0821                                  );
 0822                                  $template->assign_var('S_APPROVED_SET', true);
 0823   
 0824                                  $approved = true;
 0825                              }
 0826   
 0827                              $template->assign_block_vars('member', array(
 0828                                  'USERNAME'            => $row['username'],
 0829                                  'USERNAME_COLOUR'    => $row['user_colour'],
 0830                                  'USERNAME_FULL'        => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']),
 0831                                  'U_USER_VIEW'        => get_username_string('profile', $row['user_id'], $row['username']),
 0832                                  'S_GROUP_DEFAULT'    => ($row['group_id'] == $group_id) ? true : false,
 0833                                  'JOINED'            => ($row['user_regdate']) ? $user->format_date($row['user_regdate']) : ' - ',
 0834                                  'USER_POSTS'        => $row['user_posts'],
 0835                                  'USER_ID'            => $row['user_id'])
 0836                              );
 0837                          }
 0838                          $db->sql_freeresult($result);
 0839   
 0840                          $s_action_options = '';
 0841                          $options = array('default' => 'DEFAULT', 'approve' => 'APPROVE', 'deleteusers' => 'DELETE');
 0842   
 0843                          foreach ($options as $option => $lang)
 0844                          {
 0845                              $s_action_options .= '<option value="' . $option . '">' . $user->lang['GROUP_' . $lang] . '</option>';
 0846                          }
 0847   
 0848                          /* @var $pagination \phpbb\pagination */
 0849                          $pagination = $phpbb_container->get('pagination');
 0850                          $base_url = $this->u_action . "&amp;action=$action&amp;g=$group_id";
 0851                          $start = $pagination->validate_start($start, $config['topics_per_page'], $total_members);
 0852                          $pagination->generate_template_pagination($base_url, 'pagination', 'start', $total_members, $config['topics_per_page'], $start);
 0853   
 0854                          $template->assign_vars(array(
 0855                              'S_LIST'            => true,
 0856                              'S_ACTION_OPTIONS'    => $s_action_options,
 0857   
 0858                              'U_ACTION'            => $this->u_action . "&amp;g=$group_id",
 0859                              'S_UCP_ACTION'        => $this->u_action . "&amp;g=$group_id",
 0860                              'U_FIND_USERNAME'    => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=ucp&amp;field=usernames'),
 0861                          ));
 0862   
 0863                      break;
 0864   
 0865                      case 'approve':
 0866   
 0867                          if (!$group_id)
 0868                          {
 0869                              trigger_error($user->lang['NO_GROUP'] . $return_page);
 0870                          }
 0871   
 0872                          if (!($row = group_memberships($group_id, $user->data['user_id'])))
 0873                          {
 0874                              trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
 0875                          }
 0876                          list(, $row) = each($row);
 0877   
 0878                          if (!$row['group_leader'])
 0879                          {
 0880                              trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
 0881                          }
 0882   
 0883                          $user->add_lang('acp/groups');
 0884   
 0885                          // Approve, demote or promote
 0886                          group_user_attributes('approve', $group_id, $mark_ary, false, false);
 0887   
 0888                          trigger_error($user->lang['USERS_APPROVED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&amp;action=list&amp;g=' . $group_id . '">', '</a>'));
 0889   
 0890                      break;
 0891   
 0892                      case 'default':
 0893   
 0894                          if (!$group_id)
 0895                          {
 0896                              trigger_error($user->lang['NO_GROUP'] . $return_page);
 0897                          }
 0898   
 0899                          if (!($row = group_memberships($group_id, $user->data['user_id'])))
 0900                          {
 0901                              trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
 0902                          }
 0903                          list(, $row) = each($row);
 0904   
 0905                          if (!$row['group_leader'])
 0906                          {
 0907                              trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
 0908                          }
 0909   
 0910                          $group_row['group_name'] = $group_helper->get_name($group_row['group_name']);
 0911   
 0912                          if (confirm_box(true))
 0913                          {
 0914                              if (!sizeof($mark_ary))
 0915                              {
 0916                                  $start = 0;
 0917   
 0918                                  do
 0919                                  {
 0920                                      $sql = 'SELECT user_id
 0921                                          FROM ' . USER_GROUP_TABLE . "
 0922                                          WHERE group_id = $group_id
 0923                                          ORDER BY user_id";
 0924                                      $result = $db->sql_query_limit($sql, 200, $start);
 0925   
 0926                                      $mark_ary = array();
 0927                                      if ($row = $db->sql_fetchrow($result))
 0928                                      {
 0929                                          do
 0930                                          {
 0931                                              $mark_ary[] = $row['user_id'];
 0932                                          }
 0933                                          while ($row = $db->sql_fetchrow($result));
 0934   
 0935                                          group_user_attributes('default', $group_id, $mark_ary, false, $group_row['group_name'], $group_row);
 0936   
 0937                                          $start = (sizeof($mark_ary) < 200) ? 0 : $start + 200;
 0938                                      }
 0939                                      else
 0940                                      {
 0941                                          $start = 0;
 0942                                      }
 0943                                      $db->sql_freeresult($result);
 0944                                  }
 0945                                  while ($start);
 0946                              }
 0947                              else
 0948                              {
 0949                                  group_user_attributes('default', $group_id, $mark_ary, false, $group_row['group_name'], $group_row);
 0950                              }
 0951   
 0952                              $user->add_lang('acp/groups');
 0953   
 0954                              trigger_error($user->lang['GROUP_DEFS_UPDATED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&amp;action=list&amp;g=' . $group_id . '">', '</a>'));
 0955                          }
 0956                          else
 0957                          {
 0958                              $user->add_lang('acp/common');
 0959   
 0960                              confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
 0961                                  'mark'        => $mark_ary,
 0962                                  'g'            => $group_id,
 0963                                  'i'            => $id,
 0964                                  'mode'        => $mode,
 0965                                  'action'    => $action))
 0966                              );
 0967                          }
 0968   
 0969                          // redirect to last screen
 0970                          redirect($this->u_action . '&amp;action=list&amp;g=' . $group_id);
 0971   
 0972                      break;
 0973   
 0974                      case 'deleteusers':
 0975   
 0976                          $user->add_lang(array('acp/groups', 'acp/common'));
 0977   
 0978                          if (!($row = group_memberships($group_id, $user->data['user_id'])))
 0979                          {
 0980                              trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
 0981                          }
 0982                          list(, $row) = each($row);
 0983   
 0984                          if (!$row['group_leader'])
 0985                          {
 0986                              trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
 0987                          }
 0988   
 0989                          $group_row['group_name'] = $group_helper->get_name($group_row['group_name']);
 0990   
 0991                          if (confirm_box(true))
 0992                          {
 0993                              if (!$group_id)
 0994                              {
 0995                                  trigger_error($user->lang['NO_GROUP'] . $return_page);
 0996                              }
 0997   
 0998                              $error = group_user_del($group_id, $mark_ary, false, $group_row['group_name']);
 0999   
 1000                              if ($error)
 1001                              {
 1002                                  trigger_error($user->lang[$error] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&amp;action=list&amp;g=' . $group_id . '">', '</a>'));
 1003                              }
 1004   
 1005                              trigger_error($user->lang['GROUP_USERS_REMOVE'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&amp;action=list&amp;g=' . $group_id . '">', '</a>'));
 1006                          }
 1007                          else
 1008                          {
 1009                              confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
 1010                                  'mark'        => $mark_ary,
 1011                                  'g'            => $group_id,
 1012                                  'i'            => $id,
 1013                                  'mode'        => $mode,
 1014                                  'action'    => $action))
 1015                              );
 1016                          }
 1017   
 1018                          // redirect to last screen
 1019                          redirect($this->u_action . '&amp;action=list&amp;g=' . $group_id);
 1020   
 1021                      break;
 1022   
 1023                      case 'addusers':
 1024   
 1025                          $user->add_lang(array('acp/groups', 'acp/common'));
 1026   
 1027                          $names = $request->variable('usernames', '', true);
 1028   
 1029                          if (!$group_id)
 1030                          {
 1031                              trigger_error($user->lang['NO_GROUP'] . $return_page);
 1032                          }
 1033   
 1034                          if (!$names)
 1035                          {
 1036                              trigger_error($user->lang['NO_USERS'] . $return_page);
 1037                          }
 1038   
 1039                          if (!($row = group_memberships($group_id, $user->data['user_id'])))
 1040                          {
 1041                              trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
 1042                          }
 1043                          list(, $row) = each($row);
 1044   
 1045                          if (!$row['group_leader'])
 1046                          {
 1047                              trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
 1048                          }
 1049   
 1050                          $name_ary = array_unique(explode("\n", $names));
 1051                          $group_name = $group_helper->get_name($group_row['group_name']);
 1052   
 1053                          $default = $request->variable('default', 0);
 1054   
 1055                          if (confirm_box(true))
 1056                          {
 1057                              // Add user/s to group
 1058                              if ($error = group_user_add($group_id, false, $name_ary, $group_name, $default, 0, 0, $group_row))
 1059                              {
 1060                                  trigger_error($user->lang[$error] . $return_page);
 1061                              }
 1062   
 1063                              trigger_error($user->lang['GROUP_USERS_ADDED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&amp;action=list&amp;g=' . $group_id . '">', '</a>'));
 1064                          }
 1065                          else
 1066                          {
 1067                              $s_hidden_fields = array(
 1068                                  'default'    => $default,
 1069                                  'usernames'    => $names,
 1070                                  'g'            => $group_id,
 1071                                  'i'            => $id,
 1072                                  'mode'        => $mode,
 1073                                  'action'    => $action
 1074                              );
 1075   
 1076                              confirm_box(false, $user->lang('GROUP_CONFIRM_ADD_USERS', sizeof($name_ary), implode($user->lang['COMMA_SEPARATOR'], $name_ary)), build_hidden_fields($s_hidden_fields));
 1077                          }
 1078   
 1079                          trigger_error($user->lang['NO_USERS_ADDED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&amp;action=list&amp;g=' . $group_id . '">', '</a>'));
 1080   
 1081                      break;
 1082   
 1083                      default:
 1084                          $user->add_lang('acp/common');
 1085   
 1086                          $sql = 'SELECT g.group_id, g.group_name, g.group_colour, g.group_desc, g.group_desc_uid, g.group_desc_bitfield, g.group_desc_options, g.group_type, ug.group_leader
 1087                              FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug
 1088                              WHERE ug.user_id = ' . $user->data['user_id'] . '
 1089                                  AND g.group_id = ug.group_id
 1090                                  AND ug.group_leader = 1
 1091                              ORDER BY g.group_type DESC, g.group_name';
 1092                          $result = $db->sql_query($sql);
 1093   
 1094                          while ($value = $db->sql_fetchrow($result))
 1095                          {
 1096                              $template->assign_block_vars('leader', array(
 1097                                  'GROUP_NAME'    => $group_helper->get_name($value['group_name']),
 1098                                  'GROUP_DESC'    => generate_text_for_display($value['group_desc'], $value['group_desc_uid'], $value['group_desc_bitfield'], $value['group_desc_options']),
 1099                                  'GROUP_TYPE'    => $value['group_type'],
 1100                                  'GROUP_ID'        => $value['group_id'],
 1101                                  'GROUP_COLOUR'    => $value['group_colour'],
 1102   
 1103                                  'U_LIST'    => $this->u_action . "&amp;action=list&amp;g={$value['group_id']}",
 1104                                  'U_EDIT'    => $this->u_action . "&amp;action=edit&amp;g={$value['group_id']}")
 1105                              );
 1106                          }
 1107                          $db->sql_freeresult($result);
 1108   
 1109                      break;
 1110                  }
 1111   
 1112              break;
 1113          }
 1114   
 1115          $this->tpl_name = 'ucp_groups_' . $mode;
 1116      }
 1117  }
 1118