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

acp_groups.php

Zuletzt modifiziert: 09.10.2024, 12:52 - Dateigröße: 41.26 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  class acp_groups
 0023  {
 0024      var $u_action;
 0025   
 0026      function main($id, $mode)
 0027      {
 0028          global $config, $db, $user, $auth, $template, $cache;
 0029          global $phpbb_root_path, $phpbb_admin_path, $phpEx;
 0030          global $request, $phpbb_container, $phpbb_dispatcher;
 0031   
 0032          $user->add_lang('acp/groups');
 0033          $this->tpl_name = 'acp_groups';
 0034          $this->page_title = 'ACP_GROUPS_MANAGE';
 0035   
 0036          $form_key = 'acp_groups';
 0037          add_form_key($form_key);
 0038   
 0039          if ($mode == 'position')
 0040          {
 0041              $this->manage_position();
 0042              return;
 0043          }
 0044   
 0045          if (!function_exists('group_user_attributes'))
 0046          {
 0047              include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
 0048          }
 0049   
 0050          // Check and set some common vars
 0051          $action        = (isset($_POST['add'])) ? 'add' : ((isset($_POST['addusers'])) ? 'addusers' : $request->variable('action', ''));
 0052          $group_id    = $request->variable('g', 0);
 0053          $mark_ary    = $request->variable('mark', array(0));
 0054          $name_ary    = $request->variable('usernames', '', true);
 0055          $leader        = $request->variable('leader', 0);
 0056          $default    = $request->variable('default', 0);
 0057          $start        = $request->variable('start', 0);
 0058          $update        = (isset($_POST['update'])) ? true : false;
 0059   
 0060          /** @var \phpbb\group\helper $group_helper */
 0061          $group_helper = $phpbb_container->get('group_helper');
 0062   
 0063          // Clear some vars
 0064          $group_row = array();
 0065   
 0066          // Grab basic data for group, if group_id is set and exists
 0067          if ($group_id)
 0068          {
 0069              $sql = 'SELECT g.*, t.teampage_position AS group_teampage
 0070                  FROM ' . GROUPS_TABLE . ' g
 0071                  LEFT JOIN ' . TEAMPAGE_TABLE . ' t
 0072                      ON (t.group_id = g.group_id)
 0073                  WHERE g.group_id = ' . $group_id;
 0074              $result = $db->sql_query($sql);
 0075              $group_row = $db->sql_fetchrow($result);
 0076              $db->sql_freeresult($result);
 0077   
 0078              if (!$group_row)
 0079              {
 0080                  trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 0081              }
 0082   
 0083              // Check if the user is allowed to manage this group if set to founder only.
 0084              if ($user->data['user_type'] != USER_FOUNDER && $group_row['group_founder_manage'])
 0085              {
 0086                  trigger_error($user->lang['NOT_ALLOWED_MANAGE_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 0087              }
 0088          }
 0089   
 0090          // Which page?
 0091          switch ($action)
 0092          {
 0093              case 'approve':
 0094              case 'demote':
 0095              case 'promote':
 0096                  if (!check_form_key($form_key))
 0097                  {
 0098                      trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
 0099                  }
 0100   
 0101                  if (!$group_id)
 0102                  {
 0103                      trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 0104                  }
 0105   
 0106                  // Approve, demote or promote
 0107                  $group_name = $group_helper->get_name($group_row['group_name']);
 0108                  $error = group_user_attributes($action, $group_id, $mark_ary, false, $group_name);
 0109   
 0110                  if (!$error)
 0111                  {
 0112                      switch ($action)
 0113                      {
 0114                          case 'demote':
 0115                              $message = 'GROUP_MODS_DEMOTED';
 0116                          break;
 0117   
 0118                          case 'promote':
 0119                              $message = 'GROUP_MODS_PROMOTED';
 0120                          break;
 0121   
 0122                          case 'approve':
 0123                              $message = 'USERS_APPROVED';
 0124                          break;
 0125                      }
 0126   
 0127                      trigger_error($user->lang[$message] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id));
 0128                  }
 0129                  else
 0130                  {
 0131                      trigger_error($user->lang[$error] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id), E_USER_WARNING);
 0132                  }
 0133   
 0134              break;
 0135   
 0136              case 'default':
 0137                  if (!$group_id)
 0138                  {
 0139                      trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 0140                  }
 0141                  else if (empty($mark_ary))
 0142                  {
 0143                      trigger_error($user->lang['NO_USERS'] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id), E_USER_WARNING);
 0144                  }
 0145   
 0146                  if (confirm_box(true))
 0147                  {
 0148                      $group_name = $group_helper->get_name($group_row['group_name']);
 0149                      group_user_attributes('default', $group_id, $mark_ary, false, $group_name, $group_row);
 0150                      trigger_error($user->lang['GROUP_DEFS_UPDATED'] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id));
 0151                  }
 0152                  else
 0153                  {
 0154                      confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
 0155                          'mark'        => $mark_ary,
 0156                          'g'            => $group_id,
 0157                          'i'            => $id,
 0158                          'mode'        => $mode,
 0159                          'action'    => $action))
 0160                      );
 0161                  }
 0162              break;
 0163   
 0164              case 'set_default_on_all':
 0165                  if (confirm_box(true))
 0166                  {
 0167                      $group_name = $group_helper->get_name($group_row['group_name']);
 0168   
 0169                      $start = 0;
 0170   
 0171                      do
 0172                      {
 0173                          $sql = 'SELECT user_id
 0174                              FROM ' . USER_GROUP_TABLE . "
 0175                              WHERE group_id = $group_id
 0176                              ORDER BY user_id";
 0177                          $result = $db->sql_query_limit($sql, 200, $start);
 0178   
 0179                          $mark_ary = array();
 0180                          if ($row = $db->sql_fetchrow($result))
 0181                          {
 0182                              do
 0183                              {
 0184                                  $mark_ary[] = $row['user_id'];
 0185                              }
 0186                              while ($row = $db->sql_fetchrow($result));
 0187   
 0188                              group_user_attributes('default', $group_id, $mark_ary, false, $group_name, $group_row);
 0189   
 0190                              $start = (sizeof($mark_ary) < 200) ? 0 : $start + 200;
 0191                          }
 0192                          else
 0193                          {
 0194                              $start = 0;
 0195                          }
 0196                          $db->sql_freeresult($result);
 0197                      }
 0198                      while ($start);
 0199   
 0200                      trigger_error($user->lang['GROUP_DEFS_UPDATED'] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id));
 0201                  }
 0202                  else
 0203                  {
 0204                      confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
 0205                          'mark'        => $mark_ary,
 0206                          'g'            => $group_id,
 0207                          'i'            => $id,
 0208                          'mode'        => $mode,
 0209                          'action'    => $action))
 0210                      );
 0211                  }
 0212              break;
 0213   
 0214              case 'deleteusers':
 0215                  if (empty($mark_ary))
 0216                  {
 0217                      trigger_error($user->lang['NO_USERS'] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id), E_USER_WARNING);
 0218                  }
 0219              case 'delete':
 0220                  if (!$group_id)
 0221                  {
 0222                      trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 0223                  }
 0224                  else if ($action === 'delete' && $group_row['group_type'] == GROUP_SPECIAL)
 0225                  {
 0226                      send_status_line(403, 'Forbidden');
 0227                      trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
 0228                  }
 0229   
 0230                  if (confirm_box(true))
 0231                  {
 0232                      $error = '';
 0233   
 0234                      switch ($action)
 0235                      {
 0236                          case 'delete':
 0237                              if (!$auth->acl_get('a_groupdel'))
 0238                              {
 0239                                  send_status_line(403, 'Forbidden');
 0240                                  trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
 0241                              }
 0242   
 0243                              $error = group_delete($group_id, $group_row['group_name']);
 0244                          break;
 0245   
 0246                          case 'deleteusers':
 0247                              $group_name = $group_helper->get_name($group_row['group_name']);
 0248                              $error = group_user_del($group_id, $mark_ary, false, $group_name);
 0249                          break;
 0250                      }
 0251   
 0252                      $back_link = ($action == 'delete') ? $this->u_action : $this->u_action . '&amp;action=list&amp;g=' . $group_id;
 0253   
 0254                      if ($error)
 0255                      {
 0256                          trigger_error($user->lang[$error] . adm_back_link($back_link), E_USER_WARNING);
 0257                      }
 0258   
 0259                      $message = ($action == 'delete') ? 'GROUP_DELETED' : 'GROUP_USERS_REMOVE';
 0260                      trigger_error($user->lang[$message] . adm_back_link($back_link));
 0261                  }
 0262                  else
 0263                  {
 0264                      confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
 0265                          'mark'        => $mark_ary,
 0266                          'g'            => $group_id,
 0267                          'i'            => $id,
 0268                          'mode'        => $mode,
 0269                          'action'    => $action))
 0270                      );
 0271                  }
 0272              break;
 0273   
 0274              case 'addusers':
 0275                  if (!check_form_key($form_key))
 0276                  {
 0277                      trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
 0278                  }
 0279   
 0280                  if (!$group_id)
 0281                  {
 0282                      trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 0283                  }
 0284   
 0285                  if (!$name_ary)
 0286                  {
 0287                      trigger_error($user->lang['NO_USERS'] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id), E_USER_WARNING);
 0288                  }
 0289   
 0290                  $name_ary = array_unique(explode("\n", $name_ary));
 0291                  $group_name = $group_helper->get_name($group_row['group_name']);
 0292   
 0293                  // Add user/s to group
 0294                  if ($error = group_user_add($group_id, false, $name_ary, $group_name, $default, $leader, 0, $group_row))
 0295                  {
 0296                      trigger_error($user->lang[$error] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id), E_USER_WARNING);
 0297                  }
 0298   
 0299                  $message = ($leader) ? 'GROUP_MODS_ADDED' : 'GROUP_USERS_ADDED';
 0300                  trigger_error($user->lang[$message] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id));
 0301              break;
 0302   
 0303              case 'edit':
 0304              case 'add':
 0305   
 0306                  if (!function_exists('display_forums'))
 0307                  {
 0308                      include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
 0309                  }
 0310   
 0311                  if ($action == 'edit' && !$group_id)
 0312                  {
 0313                      trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 0314                  }
 0315   
 0316                  if ($action == 'add' && !$auth->acl_get('a_groupadd'))
 0317                  {
 0318                      send_status_line(403, 'Forbidden');
 0319                      trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
 0320                  }
 0321   
 0322                  $error = array();
 0323                  $user->add_lang('ucp');
 0324   
 0325                  // Setup avatar data for later
 0326                  $avatars_enabled = false;
 0327                  $avatar_drivers = null;
 0328                  $avatar_data = null;
 0329                  $avatar_error = array();
 0330   
 0331                  /** @var \phpbb\avatar\manager $phpbb_avatar_manager */
 0332                  $phpbb_avatar_manager = $phpbb_container->get('avatar.manager');
 0333   
 0334                  if ($config['allow_avatar'])
 0335                  {
 0336                      $avatar_drivers = $phpbb_avatar_manager->get_enabled_drivers();
 0337   
 0338                      // This is normalised data, without the group_ prefix
 0339                      $avatar_data = \phpbb\avatar\manager::clean_row($group_row, 'group');
 0340                      if (!isset($avatar_data['id']))
 0341                      {
 0342                          $avatar_data['id'] = 'g' . $group_id;
 0343                      }
 0344                  }
 0345   
 0346                  if ($request->is_set_post('avatar_delete'))
 0347                  {
 0348                      if (confirm_box(true))
 0349                      {
 0350                          $avatar_data['id'] = substr($avatar_data['id'], 1);
 0351                          $phpbb_avatar_manager->handle_avatar_delete($db, $user, $avatar_data, GROUPS_TABLE, 'group_');
 0352   
 0353                          $message = ($action == 'edit') ? 'GROUP_UPDATED' : 'GROUP_CREATED';
 0354                          trigger_error($user->lang[$message] . adm_back_link($this->u_action));
 0355                      }
 0356                      else
 0357                      {
 0358                          confirm_box(false, $user->lang('CONFIRM_AVATAR_DELETE'), build_hidden_fields(array(
 0359                                  'avatar_delete'     => true,
 0360                                  'i'                 => $id,
 0361                                  'mode'              => $mode,
 0362                                  'g'                    => $group_id,
 0363                                  'action'            => $action))
 0364                          );
 0365                      }
 0366                  }
 0367   
 0368                  // Did we submit?
 0369                  if ($update)
 0370                  {
 0371                      if (!check_form_key($form_key))
 0372                      {
 0373                          trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
 0374                      }
 0375   
 0376                      $group_name    = $request->variable('group_name', '', true);
 0377                      $group_desc = $request->variable('group_desc', '', true);
 0378                      $group_type    = $request->variable('group_type', GROUP_FREE);
 0379   
 0380                      $allow_desc_bbcode    = $request->variable('desc_parse_bbcode', false);
 0381                      $allow_desc_urls    = $request->variable('desc_parse_urls', false);
 0382                      $allow_desc_smilies    = $request->variable('desc_parse_smilies', false);
 0383   
 0384                      $submit_ary = array(
 0385                          'colour'            => $request->variable('group_colour', ''),
 0386                          'rank'                => $request->variable('group_rank', 0),
 0387                          'receive_pm'        => isset($_REQUEST['group_receive_pm']) ? 1 : 0,
 0388                          'legend'            => isset($_REQUEST['group_legend']) ? 1 : 0,
 0389                          'teampage'            => isset($_REQUEST['group_teampage']) ? 1 : 0,
 0390                          'message_limit'        => $request->variable('group_message_limit', 0),
 0391                          'max_recipients'    => $request->variable('group_max_recipients', 0),
 0392                          'founder_manage'    => 0,
 0393                          'skip_auth'            => $request->variable('group_skip_auth', 0),
 0394                      );
 0395   
 0396                      if ($user->data['user_type'] == USER_FOUNDER)
 0397                      {
 0398                          $submit_ary['founder_manage'] = isset($_REQUEST['group_founder_manage']) ? 1 : 0;
 0399                      }
 0400   
 0401                      if ($config['allow_avatar'])
 0402                      {
 0403                          // Handle avatar
 0404                          $driver_name = $phpbb_avatar_manager->clean_driver_name($request->variable('avatar_driver', ''));
 0405   
 0406                          if (in_array($driver_name, $avatar_drivers) && !$request->is_set_post('avatar_delete'))
 0407                          {
 0408                              $driver = $phpbb_avatar_manager->get_driver($driver_name);
 0409                              $result = $driver->process_form($request, $template, $user, $avatar_data, $avatar_error);
 0410   
 0411                              if ($result && empty($avatar_error))
 0412                              {
 0413                                  $result['avatar_type'] = $driver_name;
 0414                                  $submit_ary = array_merge($submit_ary, $result);
 0415                              }
 0416                          }
 0417                          else
 0418                          {
 0419                              $driver = $phpbb_avatar_manager->get_driver($avatar_data['avatar_type']);
 0420                              if ($driver)
 0421                              {
 0422                                  $driver->delete($avatar_data);
 0423                              }
 0424   
 0425                              // Removing the avatar
 0426                              $submit_ary['avatar_type'] = '';
 0427                              $submit_ary['avatar'] = '';
 0428                              $submit_ary['avatar_width'] = 0;
 0429                              $submit_ary['avatar_height'] = 0;
 0430                          }
 0431   
 0432                          // Merge any avatar errors into the primary error array
 0433                          $error = array_merge($error, $phpbb_avatar_manager->localize_errors($user, $avatar_error));
 0434                      }
 0435   
 0436                      /*
 0437                      * Validate the length of "Maximum number of allowed recipients per
 0438                      * private message" setting. We use 16777215 as a maximum because it matches
 0439                      * MySQL unsigned mediumint maximum value which is the lowest amongst DBMSes
 0440                      * supported by phpBB3. Also validate the submitted colour value.
 0441                      */
 0442                      $validation_checks = array(
 0443                          'max_recipients' => array('num', false, 0, 16777215),
 0444                          'colour'    => array('hex_colour', true),
 0445                      );
 0446   
 0447                      /**
 0448                      * Request group data and operate on it
 0449                      *
 0450                      * @event core.acp_manage_group_request_data
 0451                      * @var    string    action                Type of the action: add|edit
 0452                      * @var    int        group_id            The group id
 0453                      * @var    array    group_row            Array with new group data
 0454                      * @var    array    error                Array of errors, if you add errors
 0455                      *                            ensure to update the template variables
 0456                      *                            S_ERROR and ERROR_MSG to display it
 0457                      * @var    string    group_name            The group name
 0458                      * @var    string    group_desc            The group description
 0459                      * @var    int        group_type            The group type
 0460                      * @var    bool    allow_desc_bbcode    Allow bbcode in group description: true|false
 0461                      * @var    bool    allow_desc_urls        Allow urls in group description: true|false
 0462                      * @var    bool    allow_desc_smilies    Allow smiles in group description: true|false
 0463                      * @var    array    submit_ary            Array with new group data
 0464                      * @var    array    validation_checks    Array with validation data
 0465                      * @since 3.1.0-b5
 0466                      */
 0467                      $vars = array(
 0468                          'action',
 0469                          'group_id',
 0470                          'group_row',
 0471                          'error',
 0472                          'group_name',
 0473                          'group_desc',
 0474                          'group_type',
 0475                          'allow_desc_bbcode',
 0476                          'allow_desc_urls',
 0477                          'allow_desc_smilies',
 0478                          'submit_ary',
 0479                          'validation_checks',
 0480                      );
 0481                      extract($phpbb_dispatcher->trigger_event('core.acp_manage_group_request_data', compact($vars)));
 0482   
 0483                      if ($validation_error = validate_data($submit_ary, $validation_checks))
 0484                      {
 0485                          // Replace "error" string with its real, localised form
 0486                          $error = array_merge($error, $validation_error);
 0487                      }
 0488   
 0489                      if (!sizeof($error))
 0490                      {
 0491                          // Only set the rank, colour, etc. if it's changed or if we're adding a new
 0492                          // group. This prevents existing group members being updated if no changes
 0493                          // were made.
 0494                          // However there are some attributes that need to be set everytime,
 0495                          // otherwise the group gets removed from the feature.
 0496                          $set_attributes = array('legend', 'teampage');
 0497   
 0498                          $group_attributes = array();
 0499                          $test_variables = array(
 0500                              'rank'            => 'int',
 0501                              'colour'        => 'string',
 0502                              'avatar'        => 'string',
 0503                              'avatar_type'    => 'string',
 0504                              'avatar_width'    => 'int',
 0505                              'avatar_height'    => 'int',
 0506                              'receive_pm'    => 'int',
 0507                              'legend'        => 'int',
 0508                              'teampage'        => 'int',
 0509                              'message_limit'    => 'int',
 0510                              'max_recipients'=> 'int',
 0511                              'founder_manage'=> 'int',
 0512                              'skip_auth'        => 'int',
 0513                          );
 0514   
 0515                          /**
 0516                          * Initialise data before we display the add/edit form
 0517                          *
 0518                          * @event core.acp_manage_group_initialise_data
 0519                          * @var    string    action                Type of the action: add|edit
 0520                          * @var    int        group_id            The group id
 0521                          * @var    array    group_row            Array with new group data
 0522                          * @var    array    error                Array of errors, if you add errors
 0523                          *                            ensure to update the template variables
 0524                          *                            S_ERROR and ERROR_MSG to display it
 0525                          * @var    string    group_name            The group name
 0526                          * @var    string    group_desc            The group description
 0527                          * @var    int        group_type            The group type
 0528                          * @var    bool    allow_desc_bbcode    Allow bbcode in group description: true|false
 0529                          * @var    bool    allow_desc_urls        Allow urls in group description: true|false
 0530                          * @var    bool    allow_desc_smilies    Allow smiles in group description: true|false
 0531                          * @var    array    submit_ary            Array with new group data
 0532                          * @var    array    test_variables        Array with variables for test
 0533                          * @since 3.1.0-b5
 0534                          */
 0535                          $vars = array(
 0536                              'action',
 0537                              'group_id',
 0538                              'group_row',
 0539                              'error',
 0540                              'group_name',
 0541                              'group_desc',
 0542                              'group_type',
 0543                              'allow_desc_bbcode',
 0544                              'allow_desc_urls',
 0545                              'allow_desc_smilies',
 0546                              'submit_ary',
 0547                              'test_variables',
 0548                          );
 0549                          extract($phpbb_dispatcher->trigger_event('core.acp_manage_group_initialise_data', compact($vars)));
 0550   
 0551                          foreach ($test_variables as $test => $type)
 0552                          {
 0553                              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)))
 0554                              {
 0555                                  settype($submit_ary[$test], $type);
 0556                                  $group_attributes['group_' . $test] = $group_row['group_' . $test] = $submit_ary[$test];
 0557                              }
 0558                          }
 0559   
 0560                          if (!($error = group_create($group_id, $group_type, $group_name, $group_desc, $group_attributes, $allow_desc_bbcode, $allow_desc_urls, $allow_desc_smilies)))
 0561                          {
 0562                              $group_perm_from = $request->variable('group_perm_from', 0);
 0563   
 0564                              // Copy permissions?
 0565                              // If the user has the a_authgroups permission and at least one additional permission ability set the permissions are fully transferred.
 0566                              // 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.
 0567                              // Since the user only has the option to copy permissions from non leader managed groups this seems to be a good compromise.
 0568                              if ($group_perm_from && $action == 'add' && $auth->acl_get('a_authgroups') && $auth->acl_gets('a_aauth', 'a_fauth', 'a_mauth', 'a_uauth'))
 0569                              {
 0570                                  $sql = 'SELECT group_founder_manage
 0571                                      FROM ' . GROUPS_TABLE . '
 0572                                      WHERE group_id = ' . $group_perm_from;
 0573                                  $result = $db->sql_query($sql);
 0574                                  $check_row = $db->sql_fetchrow($result);
 0575                                  $db->sql_freeresult($result);
 0576   
 0577                                  // Check the group if non-founder
 0578                                  if ($check_row && ($user->data['user_type'] == USER_FOUNDER || $check_row['group_founder_manage'] == 0))
 0579                                  {
 0580                                      // From the mysql documentation:
 0581                                      // 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.
 0582                                      // Due to this we stay on the safe side if we do the insertion "the manual way"
 0583   
 0584                                      // Copy permisisons from/to the acl groups table (only group_id gets changed)
 0585                                      $sql = 'SELECT forum_id, auth_option_id, auth_role_id, auth_setting
 0586                                          FROM ' . ACL_GROUPS_TABLE . '
 0587                                          WHERE group_id = ' . $group_perm_from;
 0588                                      $result = $db->sql_query($sql);
 0589   
 0590                                      $groups_sql_ary = array();
 0591                                      while ($row = $db->sql_fetchrow($result))
 0592                                      {
 0593                                          $groups_sql_ary[] = array(
 0594                                              'group_id'            => (int) $group_id,
 0595                                              'forum_id'            => (int) $row['forum_id'],
 0596                                              'auth_option_id'    => (int) $row['auth_option_id'],
 0597                                              'auth_role_id'        => (int) $row['auth_role_id'],
 0598                                              'auth_setting'        => (int) $row['auth_setting']
 0599                                          );
 0600                                      }
 0601                                      $db->sql_freeresult($result);
 0602   
 0603                                      // Now insert the data
 0604                                      $db->sql_multi_insert(ACL_GROUPS_TABLE, $groups_sql_ary);
 0605   
 0606                                      $auth->acl_clear_prefetch();
 0607                                  }
 0608                              }
 0609   
 0610                              $cache->destroy('sql', array(GROUPS_TABLE, TEAMPAGE_TABLE));
 0611   
 0612                              $message = ($action == 'edit') ? 'GROUP_UPDATED' : 'GROUP_CREATED';
 0613                              trigger_error($user->lang[$message] . adm_back_link($this->u_action));
 0614                          }
 0615                      }
 0616   
 0617                      if (sizeof($error))
 0618                      {
 0619                          $error = array_map(array(&$user, 'lang'), $error);
 0620                          $group_rank = $submit_ary['rank'];
 0621   
 0622                          $group_desc_data = array(
 0623                              'text'            => $group_desc,
 0624                              'allow_bbcode'    => $allow_desc_bbcode,
 0625                              'allow_smilies'    => $allow_desc_smilies,
 0626                              'allow_urls'    => $allow_desc_urls
 0627                          );
 0628                      }
 0629                  }
 0630                  else if (!$group_id)
 0631                  {
 0632                      $group_name = $request->variable('group_name', '', true);
 0633                      $group_desc_data = array(
 0634                          'text'            => '',
 0635                          'allow_bbcode'    => true,
 0636                          'allow_smilies'    => true,
 0637                          'allow_urls'    => true
 0638                      );
 0639                      $group_rank = 0;
 0640                      $group_type = GROUP_OPEN;
 0641                  }
 0642                  else
 0643                  {
 0644                      $group_name = $group_row['group_name'];
 0645                      $group_desc_data = generate_text_for_edit($group_row['group_desc'], $group_row['group_desc_uid'], $group_row['group_desc_options']);
 0646                      $group_type = $group_row['group_type'];
 0647                      $group_rank = $group_row['group_rank'];
 0648                  }
 0649   
 0650                  $sql = 'SELECT *
 0651                      FROM ' . RANKS_TABLE . '
 0652                      WHERE rank_special = 1
 0653                      ORDER BY rank_title';
 0654                  $result = $db->sql_query($sql);
 0655   
 0656                  $rank_options = '<option value="0"' . ((!$group_rank) ? ' selected="selected"' : '') . '>' . $user->lang['USER_DEFAULT'] . '</option>';
 0657   
 0658                  while ($row = $db->sql_fetchrow($result))
 0659                  {
 0660                      $selected = ($group_rank && $row['rank_id'] == $group_rank) ? ' selected="selected"' : '';
 0661                      $rank_options .= '<option value="' . $row['rank_id'] . '"' . $selected . '>' . $row['rank_title'] . '</option>';
 0662                  }
 0663                  $db->sql_freeresult($result);
 0664   
 0665                  $type_free        = ($group_type == GROUP_FREE) ? ' checked="checked"' : '';
 0666                  $type_open        = ($group_type == GROUP_OPEN) ? ' checked="checked"' : '';
 0667                  $type_closed    = ($group_type == GROUP_CLOSED) ? ' checked="checked"' : '';
 0668                  $type_hidden    = ($group_type == GROUP_HIDDEN) ? ' checked="checked"' : '';
 0669   
 0670                  // Load up stuff for avatars
 0671                  if ($config['allow_avatar'])
 0672                  {
 0673                      $avatars_enabled = false;
 0674                      $selected_driver = $phpbb_avatar_manager->clean_driver_name($request->variable('avatar_driver', $avatar_data['avatar_type']));
 0675   
 0676                      // Assign min and max values before generating avatar driver html
 0677                      $template->assign_vars(array(
 0678                              'AVATAR_MIN_WIDTH'        => $config['avatar_min_width'],
 0679                              'AVATAR_MAX_WIDTH'        => $config['avatar_max_width'],
 0680                              'AVATAR_MIN_HEIGHT'        => $config['avatar_min_height'],
 0681                              'AVATAR_MAX_HEIGHT'        => $config['avatar_max_height'],
 0682                      ));
 0683   
 0684                      foreach ($avatar_drivers as $current_driver)
 0685                      {
 0686                          $driver = $phpbb_avatar_manager->get_driver($current_driver);
 0687   
 0688                          $avatars_enabled = true;
 0689                          $template->set_filenames(array(
 0690                              'avatar' => $driver->get_acp_template_name(),
 0691                          ));
 0692   
 0693                          if ($driver->prepare_form($request, $template, $user, $avatar_data, $avatar_error))
 0694                          {
 0695                              $driver_name = $phpbb_avatar_manager->prepare_driver_name($current_driver);
 0696                              $driver_upper = strtoupper($driver_name);
 0697                              $template->assign_block_vars('avatar_drivers', array(
 0698                                  'L_TITLE' => $user->lang($driver_upper . '_TITLE'),
 0699                                  'L_EXPLAIN' => $user->lang($driver_upper . '_EXPLAIN'),
 0700   
 0701                                  'DRIVER' => $driver_name,
 0702                                  'SELECTED' => $current_driver == $selected_driver,
 0703                                  'OUTPUT' => $template->assign_display('avatar'),
 0704                              ));
 0705                          }
 0706                      }
 0707                  }
 0708   
 0709                  $avatar = phpbb_get_group_avatar($group_row, 'GROUP_AVATAR', true);
 0710   
 0711                  if (isset($phpbb_avatar_manager) && !$update)
 0712                  {
 0713                      // Merge any avatar errors into the primary error array
 0714                      $error = array_merge($error, $phpbb_avatar_manager->localize_errors($user, $avatar_error));
 0715                  }
 0716   
 0717                  $back_link = $request->variable('back_link', '');
 0718   
 0719                  switch ($back_link)
 0720                  {
 0721                      case 'acp_users_groups':
 0722                          $u_back = append_sid("{$phpbb_admin_path}index.$phpEx", 'i=users&amp;mode=groups&amp;u=' . $request->variable('u', 0));
 0723                      break;
 0724   
 0725                      default:
 0726                          $u_back = $this->u_action;
 0727                      break;
 0728                  }
 0729   
 0730                  $template->assign_vars(array(
 0731                      'S_EDIT'            => true,
 0732                      'S_ADD_GROUP'        => ($action == 'add') ? true : false,
 0733                      'S_GROUP_PERM'        => ($action == 'add' && $auth->acl_get('a_authgroups') && $auth->acl_gets('a_aauth', 'a_fauth', 'a_mauth', 'a_uauth')) ? true : false,
 0734                      'S_INCLUDE_SWATCH'    => true,
 0735                      'S_ERROR'            => (sizeof($error)) ? true : false,
 0736                      'S_SPECIAL_GROUP'    => ($group_type == GROUP_SPECIAL) ? true : false,
 0737                      'S_USER_FOUNDER'    => ($user->data['user_type'] == USER_FOUNDER) ? true : false,
 0738                      'S_AVATARS_ENABLED'        => ($config['allow_avatar'] && $avatars_enabled),
 0739   
 0740                      'ERROR_MSG'                => (sizeof($error)) ? implode('<br />', $error) : '',
 0741                      'GROUP_NAME'            => $group_helper->get_name($group_name),
 0742                      'GROUP_INTERNAL_NAME'    => $group_name,
 0743                      'GROUP_DESC'            => $group_desc_data['text'],
 0744                      'GROUP_RECEIVE_PM'        => (isset($group_row['group_receive_pm']) && $group_row['group_receive_pm']) ? ' checked="checked"' : '',
 0745                      'GROUP_FOUNDER_MANAGE'    => (isset($group_row['group_founder_manage']) && $group_row['group_founder_manage']) ? ' checked="checked"' : '',
 0746                      'GROUP_LEGEND'            => (isset($group_row['group_legend']) && $group_row['group_legend']) ? ' checked="checked"' : '',
 0747                      'GROUP_TEAMPAGE'        => (isset($group_row['group_teampage']) && $group_row['group_teampage']) ? ' checked="checked"' : '',
 0748                      'GROUP_MESSAGE_LIMIT'    => (isset($group_row['group_message_limit'])) ? $group_row['group_message_limit'] : 0,
 0749                      'GROUP_MAX_RECIPIENTS'    => (isset($group_row['group_max_recipients'])) ? $group_row['group_max_recipients'] : 0,
 0750                      'GROUP_COLOUR'            => (isset($group_row['group_colour'])) ? $group_row['group_colour'] : '',
 0751                      'GROUP_SKIP_AUTH'        => (!empty($group_row['group_skip_auth'])) ? ' checked="checked"' : '',
 0752   
 0753                      'S_DESC_BBCODE_CHECKED'    => $group_desc_data['allow_bbcode'],
 0754                      'S_DESC_URLS_CHECKED'    => $group_desc_data['allow_urls'],
 0755                      'S_DESC_SMILIES_CHECKED'=> $group_desc_data['allow_smilies'],
 0756   
 0757                      'S_RANK_OPTIONS'        => $rank_options,
 0758                      'S_GROUP_OPTIONS'        => group_select_options(false, false, (($user->data['user_type'] == USER_FOUNDER) ? false : 0)),
 0759                      'AVATAR'                => empty($avatar) ? '<img src="' . $phpbb_admin_path . 'images/no_avatar.gif" alt="" />' : $avatar,
 0760                      'AVATAR_MAX_FILESIZE'    => $config['avatar_filesize'],
 0761                      'AVATAR_WIDTH'            => (isset($group_row['group_avatar_width'])) ? $group_row['group_avatar_width'] : '',
 0762                      'AVATAR_HEIGHT'            => (isset($group_row['group_avatar_height'])) ? $group_row['group_avatar_height'] : '',
 0763   
 0764                      'GROUP_TYPE_FREE'        => GROUP_FREE,
 0765                      'GROUP_TYPE_OPEN'        => GROUP_OPEN,
 0766                      'GROUP_TYPE_CLOSED'        => GROUP_CLOSED,
 0767                      'GROUP_TYPE_HIDDEN'        => GROUP_HIDDEN,
 0768                      'GROUP_TYPE_SPECIAL'    => GROUP_SPECIAL,
 0769   
 0770                      'GROUP_FREE'        => $type_free,
 0771                      'GROUP_OPEN'        => $type_open,
 0772                      'GROUP_CLOSED'        => $type_closed,
 0773                      'GROUP_HIDDEN'        => $type_hidden,
 0774   
 0775                      'U_BACK'            => $u_back,
 0776                      'U_ACTION'            => "{$this->u_action}&amp;action=$action&amp;g=$group_id",
 0777                      'L_AVATAR_EXPLAIN'    => phpbb_avatar_explanation_string(),
 0778                  ));
 0779   
 0780                  /**
 0781                  * Modify group template data before we display the form
 0782                  *
 0783                  * @event core.acp_manage_group_display_form
 0784                  * @var    string    action                Type of the action: add|edit
 0785                  * @var    bool    update                Do we display the form only
 0786                  *                            or did the user press submit
 0787                  * @var    int        group_id            The group id
 0788                  * @var    array    group_row            Array with new group data
 0789                  * @var    string    group_name            The group name
 0790                  * @var    int        group_type            The group type
 0791                  * @var    array    group_desc_data        The group description data
 0792                  * @var    string    group_rank            The group rank
 0793                  * @var    string    rank_options        The rank options
 0794                  * @var    array    error                Array of errors, if you add errors
 0795                  *                            ensure to update the template variables
 0796                  *                            S_ERROR and ERROR_MSG to display it
 0797                  * @since 3.1.0-b5
 0798                  */
 0799                  $vars = array(
 0800                      'action',
 0801                      'update',
 0802                      'group_id',
 0803                      'group_row',
 0804                      'group_desc_data',
 0805                      'group_name',
 0806                      'group_type',
 0807                      'group_rank',
 0808                      'rank_options',
 0809                      'error',
 0810                  );
 0811                  extract($phpbb_dispatcher->trigger_event('core.acp_manage_group_display_form', compact($vars)));
 0812   
 0813                  return;
 0814              break;
 0815   
 0816              case 'list':
 0817   
 0818                  if (!$group_id)
 0819                  {
 0820                      trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 0821                  }
 0822   
 0823                  /* @var $pagination \phpbb\pagination */
 0824                  $pagination = $phpbb_container->get('pagination');
 0825                  $this->page_title = 'GROUP_MEMBERS';
 0826   
 0827                  // Grab the leaders - always, on every page...
 0828                  $sql = 'SELECT u.user_id, u.username, u.username_clean, u.user_regdate, u.user_colour, u.user_posts, u.group_id, ug.group_leader, ug.user_pending
 0829                      FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug
 0830                      WHERE ug.group_id = $group_id
 0831                          AND u.user_id = ug.user_id
 0832                          AND ug.group_leader = 1
 0833                      ORDER BY ug.group_leader DESC, ug.user_pending ASC, u.username_clean";
 0834                  $result = $db->sql_query($sql);
 0835   
 0836                  while ($row = $db->sql_fetchrow($result))
 0837                  {
 0838                      $template->assign_block_vars('leader', array(
 0839                          'U_USER_EDIT'        => append_sid("{$phpbb_admin_path}index.$phpEx", "i=users&amp;action=edit&amp;u={$row['user_id']}"),
 0840   
 0841                          'USERNAME'            => $row['username'],
 0842                          'USERNAME_COLOUR'    => $row['user_colour'],
 0843                          'S_GROUP_DEFAULT'    => ($row['group_id'] == $group_id) ? true : false,
 0844                          'JOINED'            => ($row['user_regdate']) ? $user->format_date($row['user_regdate']) : ' - ',
 0845                          'USER_POSTS'        => $row['user_posts'],
 0846                          'USER_ID'            => $row['user_id'],
 0847                      ));
 0848                  }
 0849                  $db->sql_freeresult($result);
 0850   
 0851                  // Total number of group members (non-leaders)
 0852                  $sql = 'SELECT COUNT(user_id) AS total_members
 0853                      FROM ' . USER_GROUP_TABLE . "
 0854                      WHERE group_id = $group_id
 0855                          AND group_leader = 0";
 0856                  $result = $db->sql_query($sql);
 0857                  $total_members = (int) $db->sql_fetchfield('total_members');
 0858                  $db->sql_freeresult($result);
 0859   
 0860                  $s_action_options = '';
 0861                  $options = array('default' => 'DEFAULT', 'approve' => 'APPROVE', 'demote' => 'DEMOTE', 'promote' => 'PROMOTE', 'deleteusers' => 'DELETE');
 0862   
 0863                  foreach ($options as $option => $lang)
 0864                  {
 0865                      $s_action_options .= '<option value="' . $option . '">' . $user->lang['GROUP_' . $lang] . '</option>';
 0866                  }
 0867   
 0868                  $base_url = $this->u_action . "&amp;action=$action&amp;g=$group_id";
 0869                  $pagination->generate_template_pagination($base_url, 'pagination', 'start', $total_members, $config['topics_per_page'], $start);
 0870   
 0871                  $template->assign_vars(array(
 0872                      'S_LIST'            => true,
 0873                      'S_GROUP_SPECIAL'    => ($group_row['group_type'] == GROUP_SPECIAL) ? true : false,
 0874                      'S_ACTION_OPTIONS'    => $s_action_options,
 0875   
 0876                      'GROUP_NAME'    => $group_helper->get_name($group_row['group_name']),
 0877   
 0878                      'U_ACTION'            => $this->u_action . "&amp;g=$group_id",
 0879                      'U_BACK'            => $this->u_action,
 0880                      'U_FIND_USERNAME'    => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=list&amp;field=usernames'),
 0881                      'U_DEFAULT_ALL'        => "{$this->u_action}&amp;action=set_default_on_all&amp;g=$group_id",
 0882                  ));
 0883   
 0884                  // Grab the members
 0885                  $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
 0886                      FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug
 0887                      WHERE ug.group_id = $group_id
 0888                          AND u.user_id = ug.user_id
 0889                          AND ug.group_leader = 0
 0890                      ORDER BY ug.group_leader DESC, ug.user_pending ASC, u.username_clean";
 0891                  $result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
 0892   
 0893                  $pending = false;
 0894   
 0895                  while ($row = $db->sql_fetchrow($result))
 0896                  {
 0897                      if ($row['user_pending'] && !$pending)
 0898                      {
 0899                          $template->assign_block_vars('member', array(
 0900                              'S_PENDING'        => true)
 0901                          );
 0902   
 0903                          $pending = true;
 0904                      }
 0905   
 0906                      $template->assign_block_vars('member', array(
 0907                          'U_USER_EDIT'        => append_sid("{$phpbb_admin_path}index.$phpEx", "i=users&amp;action=edit&amp;u={$row['user_id']}"),
 0908   
 0909                          'USERNAME'            => $row['username'],
 0910                          'USERNAME_COLOUR'    => $row['user_colour'],
 0911                          'S_GROUP_DEFAULT'    => ($row['group_id'] == $group_id) ? true : false,
 0912                          'JOINED'            => ($row['user_regdate']) ? $user->format_date($row['user_regdate']) : ' - ',
 0913                          'USER_POSTS'        => $row['user_posts'],
 0914                          'USER_ID'            => $row['user_id'])
 0915                      );
 0916                  }
 0917                  $db->sql_freeresult($result);
 0918   
 0919                  return;
 0920              break;
 0921          }
 0922   
 0923          $template->assign_vars(array(
 0924              'U_ACTION'        => $this->u_action,
 0925              'S_GROUP_ADD'    => ($auth->acl_get('a_groupadd')) ? true : false)
 0926          );
 0927   
 0928          // Get us all the groups
 0929          $sql = 'SELECT g.group_id, g.group_name, g.group_type
 0930              FROM ' . GROUPS_TABLE . ' g
 0931              ORDER BY g.group_type ASC, g.group_name';
 0932          $result = $db->sql_query($sql);
 0933   
 0934          $lookup = $cached_group_data = array();
 0935          while ($row = $db->sql_fetchrow($result))
 0936          {
 0937              $type = ($row['group_type'] == GROUP_SPECIAL) ? 'special' : 'normal';
 0938   
 0939              // used to determine what type a group is
 0940              $lookup[$row['group_id']] = $type;
 0941   
 0942              // used for easy access to the data within a group
 0943              $cached_group_data[$type][$row['group_id']] = $row;
 0944              $cached_group_data[$type][$row['group_id']]['total_members'] = 0;
 0945              $cached_group_data[$type][$row['group_id']]['pending_members'] = 0;
 0946          }
 0947          $db->sql_freeresult($result);
 0948   
 0949          // How many people are in which group?
 0950          $sql = 'SELECT COUNT(ug.user_id) AS total_members, SUM(ug.user_pending) AS pending_members, ug.group_id
 0951              FROM ' . USER_GROUP_TABLE . ' ug
 0952              WHERE ' . $db->sql_in_set('ug.group_id', array_keys($lookup)) . '
 0953              GROUP BY ug.group_id';
 0954          $result = $db->sql_query($sql);
 0955   
 0956          while ($row = $db->sql_fetchrow($result))
 0957          {
 0958              $type = $lookup[$row['group_id']];
 0959              $cached_group_data[$type][$row['group_id']]['total_members'] = $row['total_members'];
 0960              $cached_group_data[$type][$row['group_id']]['pending_members'] = $row['pending_members'];
 0961          }
 0962          $db->sql_freeresult($result);
 0963   
 0964          // The order is... normal, then special
 0965          ksort($cached_group_data);
 0966   
 0967          foreach ($cached_group_data as $type => $row_ary)
 0968          {
 0969              if ($type == 'special')
 0970              {
 0971                  $template->assign_block_vars('groups', array(
 0972                      'S_SPECIAL'            => true)
 0973                  );
 0974              }
 0975   
 0976              foreach ($row_ary as $group_id => $row)
 0977              {
 0978                  $group_name = (!empty($user->lang['G_' . $row['group_name']]))? $user->lang['G_' . $row['group_name']] : $row['group_name'];
 0979   
 0980                  $template->assign_block_vars('groups', array(
 0981                      'U_LIST'        => "{$this->u_action}&amp;action=list&amp;g=$group_id",
 0982                      'U_EDIT'        => "{$this->u_action}&amp;action=edit&amp;g=$group_id",
 0983                      'U_DELETE'        => ($auth->acl_get('a_groupdel')) ? "{$this->u_action}&amp;action=delete&amp;g=$group_id" : '',
 0984   
 0985                      'S_GROUP_SPECIAL'    => ($row['group_type'] == GROUP_SPECIAL) ? true : false,
 0986   
 0987                      'GROUP_NAME'    => $group_name,
 0988                      'TOTAL_MEMBERS'    => $row['total_members'],
 0989                      'PENDING_MEMBERS' => $row['pending_members']
 0990                  ));
 0991              }
 0992          }
 0993      }
 0994   
 0995      public function manage_position()
 0996      {
 0997          global $config, $db, $template, $user, $request, $phpbb_container;
 0998   
 0999          $this->tpl_name = 'acp_groups_position';
 1000          $this->page_title = 'ACP_GROUPS_POSITION';
 1001   
 1002          $field = $request->variable('field', '');
 1003          $action = $request->variable('action', '');
 1004          $group_id = $request->variable('g', 0);
 1005          $teampage_id = $request->variable('t', 0);
 1006          $category_id = $request->variable('c', 0);
 1007   
 1008          /** @var \phpbb\group\helper $group_helper */
 1009          $group_helper = $phpbb_container->get('group_helper');
 1010   
 1011          if ($field && !in_array($field, array('legend', 'teampage')))
 1012          {
 1013              // Invalid mode
 1014              trigger_error($user->lang['NO_MODE'] . adm_back_link($this->u_action), E_USER_WARNING);
 1015          }
 1016          else if ($field && in_array($field, array('legend', 'teampage')))
 1017          {
 1018              /* @var $group_position \phpbb\groupposition\groupposition_interface */
 1019              $group_position = $phpbb_container->get('groupposition.' . $field);
 1020          }
 1021   
 1022          if ($field == 'teampage')
 1023          {
 1024              try
 1025              {
 1026                  switch ($action)
 1027                  {
 1028                      case 'add':
 1029                          $group_position->add_group_teampage($group_id, $category_id);
 1030                      break;
 1031   
 1032                      case 'add_category':
 1033                          $group_position->add_category_teampage($request->variable('category_name', '', true));
 1034                      break;
 1035   
 1036                      case 'delete':
 1037                          $group_position->delete_teampage($teampage_id);
 1038                      break;
 1039   
 1040                      case 'move_up':
 1041                          $group_position->move_up_teampage($teampage_id);
 1042                      break;
 1043   
 1044                      case 'move_down':
 1045                          $group_position->move_down_teampage($teampage_id);
 1046                      break;
 1047                  }
 1048              }
 1049              catch (\phpbb\groupposition\exception $exception)
 1050              {
 1051                  trigger_error($user->lang($exception->getMessage()) . adm_back_link($this->u_action), E_USER_WARNING);
 1052              }
 1053          }
 1054          else if ($field == 'legend')
 1055          {
 1056              try
 1057              {
 1058                  switch ($action)
 1059                  {
 1060                      case 'add':
 1061                          $group_position->add_group($group_id);
 1062                      break;
 1063   
 1064                      case 'delete':
 1065                          $group_position->delete_group($group_id);
 1066                      break;
 1067   
 1068                      case 'move_up':
 1069                          $group_position->move_up($group_id);
 1070                      break;
 1071   
 1072                      case 'move_down':
 1073                          $group_position->move_down($group_id);
 1074                      break;
 1075                  }
 1076              }
 1077              catch (\phpbb\groupposition\exception $exception)
 1078              {
 1079                  trigger_error($user->lang($exception->getMessage()) . adm_back_link($this->u_action), E_USER_WARNING);
 1080              }
 1081          }
 1082          else
 1083          {
 1084              switch ($action)
 1085              {
 1086                  case 'set_config_teampage':
 1087                      $config->set('teampage_forums', $request->variable('teampage_forums', 0));
 1088                      $config->set('teampage_memberships', $request->variable('teampage_memberships', 0));
 1089                      trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action));
 1090                  break;
 1091   
 1092                  case 'set_config_legend':
 1093                      $config->set('legend_sort_groupname', $request->variable('legend_sort_groupname', 0));
 1094                      trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action));
 1095                  break;
 1096              }
 1097          }
 1098   
 1099          if (($action == 'move_up' || $action == 'move_down') && $request->is_ajax())
 1100          {
 1101              $json_response = new \phpbb\json_response;
 1102              $json_response->send(array('success' => true));
 1103          }
 1104   
 1105          $sql = 'SELECT group_id, group_name, group_colour, group_type, group_legend
 1106              FROM ' . GROUPS_TABLE . '
 1107              ORDER BY group_legend ASC, group_type DESC, group_name ASC';
 1108          $result = $db->sql_query($sql);
 1109   
 1110          while ($row = $db->sql_fetchrow($result))
 1111          {
 1112              $group_name = $group_helper->get_name($row['group_name']);
 1113              if ($row['group_legend'])
 1114              {
 1115                  $template->assign_block_vars('legend', array(
 1116                      'GROUP_NAME'    => $group_name,
 1117                      'GROUP_COLOUR'    => ($row['group_colour']) ? '#' . $row['group_colour'] : '',
 1118                      'GROUP_TYPE'    => $user->lang[\phpbb\groupposition\legend::group_type_language($row['group_type'])],
 1119   
 1120                      'U_MOVE_DOWN'    => "{$this->u_action}&amp;field=legend&amp;action=move_down&amp;g=" . $row['group_id'],
 1121                      'U_MOVE_UP'        => "{$this->u_action}&amp;field=legend&amp;action=move_up&amp;g=" . $row['group_id'],
 1122                      'U_DELETE'        => "{$this->u_action}&amp;field=legend&amp;action=delete&amp;g=" . $row['group_id'],
 1123                  ));
 1124              }
 1125              else
 1126              {
 1127                  $template->assign_block_vars('add_legend', array(
 1128                      'GROUP_ID'        => (int) $row['group_id'],
 1129                      'GROUP_NAME'    => $group_name,
 1130                      'GROUP_SPECIAL'    => ($row['group_type'] == GROUP_SPECIAL),
 1131                  ));
 1132              }
 1133          }
 1134          $db->sql_freeresult($result);
 1135   
 1136          $category_url_param = (($category_id) ? '&amp;c=' . $category_id : '');
 1137   
 1138          $sql = 'SELECT t.*, g.group_name, g.group_colour, g.group_type
 1139              FROM ' . TEAMPAGE_TABLE . ' t
 1140              LEFT JOIN ' . GROUPS_TABLE . ' g
 1141                  ON (t.group_id = g.group_id)
 1142              WHERE t.teampage_parent = ' . $category_id . '
 1143                  OR t.teampage_id = ' . $category_id . '
 1144              ORDER BY t.teampage_position ASC';
 1145          $result = $db->sql_query($sql);
 1146   
 1147          while ($row = $db->sql_fetchrow($result))
 1148          {
 1149              if ($row['teampage_id'] == $category_id)
 1150              {
 1151                  $template->assign_vars(array(
 1152                      'CURRENT_CATEGORY_NAME'        => $row['teampage_name'],
 1153                  ));
 1154                  continue;
 1155              }
 1156   
 1157              if ($row['group_id'])
 1158              {
 1159                  $group_name = $group_helper->get_name($row['group_name']);
 1160                  $group_type = $user->lang[\phpbb\groupposition\teampage::group_type_language($row['group_type'])];
 1161              }
 1162              else
 1163              {
 1164                  $group_name = $row['teampage_name'];
 1165                  $group_type = '';
 1166              }
 1167   
 1168              $template->assign_block_vars('teampage', array(
 1169                  'GROUP_NAME'    => $group_name,
 1170                  'GROUP_COLOUR'    => ($row['group_colour']) ? '#' . $row['group_colour'] : '',
 1171                  'GROUP_TYPE'    => $group_type,
 1172   
 1173                  'U_CATEGORY'    => (!$row['group_id']) ? "{$this->u_action}&amp;c=" . $row['teampage_id'] : '',
 1174                  'U_MOVE_DOWN'    => "{$this->u_action}&amp;field=teampage&amp;action=move_down{$category_url_param}&amp;t=" . $row['teampage_id'],
 1175                  'U_MOVE_UP'        => "{$this->u_action}&amp;field=teampage&amp;action=move_up{$category_url_param}&amp;t=" . $row['teampage_id'],
 1176                  'U_DELETE'        => "{$this->u_action}&amp;field=teampage&amp;action=delete{$category_url_param}&amp;t=" . $row['teampage_id'],
 1177              ));
 1178          }
 1179          $db->sql_freeresult($result);
 1180   
 1181          $sql = 'SELECT g.group_id, g.group_name, g.group_colour, g.group_type
 1182              FROM ' . GROUPS_TABLE . ' g
 1183              LEFT JOIN ' . TEAMPAGE_TABLE . ' t
 1184                  ON (t.group_id = g.group_id)
 1185              WHERE t.teampage_id IS NULL
 1186              ORDER BY g.group_type DESC, g.group_name ASC';
 1187          $result = $db->sql_query($sql);
 1188   
 1189          while ($row = $db->sql_fetchrow($result))
 1190          {
 1191              $group_name = $group_helper->get_name($row['group_name']);
 1192              $template->assign_block_vars('add_teampage', array(
 1193                  'GROUP_ID'        => (int) $row['group_id'],
 1194                  'GROUP_NAME'    => $group_name,
 1195                  'GROUP_SPECIAL'    => ($row['group_type'] == GROUP_SPECIAL),
 1196              ));
 1197          }
 1198          $db->sql_freeresult($result);
 1199   
 1200          $template->assign_vars(array(
 1201              'U_ACTION'                    => $this->u_action,
 1202              'U_ACTION_LEGEND'            => $this->u_action . '&amp;field=legend',
 1203              'U_ACTION_TEAMPAGE'            => $this->u_action . '&amp;field=teampage' . $category_url_param,
 1204              'U_ACTION_TEAMPAGE_CAT'        => $this->u_action . '&amp;field=teampage_cat',
 1205   
 1206              'S_TEAMPAGE_CATEGORY'        => $category_id,
 1207              'DISPLAY_FORUMS'            => ($config['teampage_forums']) ? true : false,
 1208              'DISPLAY_MEMBERSHIPS'        => $config['teampage_memberships'],
 1209              'LEGEND_SORT_GROUPNAME'        => ($config['legend_sort_groupname']) ? true : false,
 1210          ));
 1211      }
 1212  }
 1213