[ Index ]

PHP Cross Reference of phpBB-3.3.14-deutsch

title

Body

[close]

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

   1  <?php
   2  /**
   3  *
   4  * This file is part of the phpBB Forum Software package.
   5  *
   6  * @copyright (c) phpBB Limited <https://www.phpbb.com>
   7  * @license GNU General Public License, version 2 (GPL-2.0)
   8  *
   9  * For full copyright and license information, please see
  10  * the docs/CREDITS.txt file.
  11  *
  12  */
  13  
  14  /**
  15  * @ignore
  16  */
  17  if (!defined('IN_PHPBB'))
  18  {
  19      exit;
  20  }
  21  
  22  class acp_groups
  23  {
  24      var $u_action;
  25  
  26  	function main($id, $mode)
  27      {
  28          global $config, $db, $user, $auth, $template, $cache;
  29          global $phpbb_root_path, $phpbb_admin_path, $phpEx;
  30          global $request, $phpbb_container, $phpbb_dispatcher;
  31  
  32          /** @var \phpbb\language\language $language Language object */
  33          $language = $phpbb_container->get('language');
  34  
  35          $user->add_lang('acp/groups');
  36          $this->tpl_name = 'acp_groups';
  37          $this->page_title = 'ACP_GROUPS_MANAGE';
  38  
  39          $form_key = 'acp_groups';
  40          add_form_key($form_key);
  41  
  42          if ($mode == 'position')
  43          {
  44              $this->manage_position();
  45              return;
  46          }
  47  
  48          if (!function_exists('group_user_attributes'))
  49          {
  50              include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
  51          }
  52  
  53          // Check and set some common vars
  54          $action        = (isset($_POST['add'])) ? 'add' : ((isset($_POST['addusers'])) ? 'addusers' : $request->variable('action', ''));
  55          $group_id    = $request->variable('g', 0);
  56          $mark_ary    = $request->variable('mark', array(0));
  57          $name_ary    = $request->variable('usernames', '', true);
  58          $leader        = $request->variable('leader', 0);
  59          $default    = $request->variable('default', 0);
  60          $start        = $request->variable('start', 0);
  61          $update        = (isset($_POST['update'])) ? true : false;
  62  
  63          /** @var \phpbb\group\helper $group_helper */
  64          $group_helper = $phpbb_container->get('group_helper');
  65  
  66          // Clear some vars
  67          $group_row = array();
  68  
  69          // Grab basic data for group, if group_id is set and exists
  70          if ($group_id)
  71          {
  72              $sql = 'SELECT g.*, t.teampage_position AS group_teampage
  73                  FROM ' . GROUPS_TABLE . ' g
  74                  LEFT JOIN ' . TEAMPAGE_TABLE . ' t
  75                      ON (t.group_id = g.group_id)
  76                  WHERE g.group_id = ' . $group_id;
  77              $result = $db->sql_query($sql);
  78              $group_row = $db->sql_fetchrow($result);
  79              $db->sql_freeresult($result);
  80  
  81              if (!$group_row)
  82              {
  83                  trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
  84              }
  85  
  86              // Check if the user is allowed to manage this group if set to founder only.
  87              if ($user->data['user_type'] != USER_FOUNDER && $group_row['group_founder_manage'])
  88              {
  89                  trigger_error($user->lang['NOT_ALLOWED_MANAGE_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
  90              }
  91          }
  92  
  93          // Which page?
  94          switch ($action)
  95          {
  96              case 'approve':
  97              case 'demote':
  98              case 'promote':
  99                  if (!check_form_key($form_key))
 100                  {
 101                      trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
 102                  }
 103  
 104                  if (!$group_id)
 105                  {
 106                      trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 107                  }
 108  
 109                  // Approve, demote or promote
 110                  $group_name = $group_helper->get_name($group_row['group_name']);
 111                  $error = group_user_attributes($action, $group_id, $mark_ary, false, $group_name);
 112  
 113                  if (!$error)
 114                  {
 115                      switch ($action)
 116                      {
 117                          case 'demote':
 118                              $message = 'GROUP_MODS_DEMOTED';
 119                          break;
 120  
 121                          case 'promote':
 122                              $message = 'GROUP_MODS_PROMOTED';
 123                          break;
 124  
 125                          case 'approve':
 126                              $message = 'USERS_APPROVED';
 127                          break;
 128                      }
 129  
 130                      trigger_error($user->lang[$message] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id));
 131                  }
 132                  else
 133                  {
 134                      trigger_error($user->lang[$error] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id), E_USER_WARNING);
 135                  }
 136  
 137              break;
 138  
 139              case 'default':
 140                  if (!$group_id)
 141                  {
 142                      trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 143                  }
 144                  else if (empty($mark_ary))
 145                  {
 146                      trigger_error($user->lang['NO_USERS'] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id), E_USER_WARNING);
 147                  }
 148  
 149                  if (confirm_box(true))
 150                  {
 151                      $group_name = $group_helper->get_name($group_row['group_name']);
 152                      group_user_attributes('default', $group_id, $mark_ary, false, $group_name, $group_row);
 153                      trigger_error($user->lang['GROUP_DEFS_UPDATED'] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id));
 154                  }
 155                  else
 156                  {
 157                      confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
 158                          'mark'        => $mark_ary,
 159                          'g'            => $group_id,
 160                          'i'            => $id,
 161                          'mode'        => $mode,
 162                          'action'    => $action))
 163                      );
 164                  }
 165              break;
 166  
 167              case 'set_default_on_all':
 168                  if (confirm_box(true))
 169                  {
 170                      $group_name = $group_helper->get_name($group_row['group_name']);
 171  
 172                      $start = 0;
 173  
 174                      do
 175                      {
 176                          $sql = 'SELECT user_id
 177                              FROM ' . USER_GROUP_TABLE . "
 178                              WHERE group_id = $group_id
 179                              ORDER BY user_id";
 180                          $result = $db->sql_query_limit($sql, 200, $start);
 181  
 182                          $mark_ary = array();
 183                          if ($row = $db->sql_fetchrow($result))
 184                          {
 185                              do
 186                              {
 187                                  $mark_ary[] = $row['user_id'];
 188                              }
 189                              while ($row = $db->sql_fetchrow($result));
 190  
 191                              group_user_attributes('default', $group_id, $mark_ary, false, $group_name, $group_row);
 192  
 193                              $start = (count($mark_ary) < 200) ? 0 : $start + 200;
 194                          }
 195                          else
 196                          {
 197                              $start = 0;
 198                          }
 199                          $db->sql_freeresult($result);
 200                      }
 201                      while ($start);
 202  
 203                      trigger_error($user->lang['GROUP_DEFS_UPDATED'] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id));
 204                  }
 205                  else
 206                  {
 207                      confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
 208                          'mark'        => $mark_ary,
 209                          'g'            => $group_id,
 210                          'i'            => $id,
 211                          'mode'        => $mode,
 212                          'action'    => $action))
 213                      );
 214                  }
 215              break;
 216  
 217              case 'deleteusers':
 218                  if (empty($mark_ary))
 219                  {
 220                      trigger_error($user->lang['NO_USERS'] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id), E_USER_WARNING);
 221                  }
 222              case 'delete':
 223                  if (!$group_id)
 224                  {
 225                      trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 226                  }
 227                  else if ($action === 'delete' && $group_row['group_type'] == GROUP_SPECIAL)
 228                  {
 229                      send_status_line(403, 'Forbidden');
 230                      trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
 231                  }
 232  
 233                  if (confirm_box(true))
 234                  {
 235                      $error = '';
 236  
 237                      switch ($action)
 238                      {
 239                          case 'delete':
 240                              if (!$auth->acl_get('a_groupdel'))
 241                              {
 242                                  send_status_line(403, 'Forbidden');
 243                                  trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
 244                              }
 245  
 246                              $error = group_delete($group_id, $group_row['group_name']);
 247                          break;
 248  
 249                          case 'deleteusers':
 250                              $group_name = $group_helper->get_name($group_row['group_name']);
 251                              $error = group_user_del($group_id, $mark_ary, false, $group_name);
 252                          break;
 253                      }
 254  
 255                      $back_link = ($action == 'delete') ? $this->u_action : $this->u_action . '&amp;action=list&amp;g=' . $group_id;
 256  
 257                      if ($error)
 258                      {
 259                          trigger_error($user->lang[$error] . adm_back_link($back_link), E_USER_WARNING);
 260                      }
 261  
 262                      $message = ($action == 'delete') ? 'GROUP_DELETED' : 'GROUP_USERS_REMOVE';
 263                      trigger_error($user->lang[$message] . adm_back_link($back_link));
 264                  }
 265                  else
 266                  {
 267                      confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
 268                          'mark'        => $mark_ary,
 269                          'g'            => $group_id,
 270                          'i'            => $id,
 271                          'mode'        => $mode,
 272                          'action'    => $action))
 273                      );
 274                  }
 275              break;
 276  
 277              case 'addusers':
 278                  if (!check_form_key($form_key))
 279                  {
 280                      trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
 281                  }
 282  
 283                  if (!$group_id)
 284                  {
 285                      trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 286                  }
 287  
 288                  if (!$name_ary)
 289                  {
 290                      trigger_error($user->lang['NO_USERS'] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id), E_USER_WARNING);
 291                  }
 292  
 293                  $name_ary = array_unique(explode("\n", $name_ary));
 294                  $group_name = $group_helper->get_name($group_row['group_name']);
 295  
 296                  // Add user/s to group
 297                  if ($error = group_user_add($group_id, false, $name_ary, $group_name, $default, $leader, 0, $group_row))
 298                  {
 299                      $display_message = $language->lang($error);
 300  
 301                      if ($error == 'GROUP_USERS_INVALID')
 302                      {
 303                          // Find which users don't exist
 304                          $actual_name_ary = $name_ary;
 305                          $actual_user_id_ary = [];
 306                          user_get_id_name($actual_user_id_ary, $actual_name_ary, false, true);
 307  
 308                          $display_message = $language->lang('GROUP_USERS_INVALID', implode($language->lang('COMMA_SEPARATOR'), array_udiff($name_ary, $actual_name_ary, 'strcasecmp')));
 309                      }
 310  
 311                      trigger_error($display_message . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id), E_USER_WARNING);
 312                  }
 313  
 314                  $message = ($leader) ? 'GROUP_MODS_ADDED' : 'GROUP_USERS_ADDED';
 315                  trigger_error($user->lang[$message] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id));
 316              break;
 317  
 318              case 'edit':
 319              case 'add':
 320  
 321                  if (!function_exists('display_forums'))
 322                  {
 323                      include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
 324                  }
 325  
 326                  if ($action == 'edit' && !$group_id)
 327                  {
 328                      trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 329                  }
 330  
 331                  if ($action == 'add' && !$auth->acl_get('a_groupadd'))
 332                  {
 333                      send_status_line(403, 'Forbidden');
 334                      trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
 335                  }
 336  
 337                  $error = array();
 338                  $user->add_lang('ucp');
 339  
 340                  // Setup avatar data for later
 341                  $avatars_enabled = false;
 342                  $avatar_drivers = null;
 343                  $avatar_data = null;
 344                  $avatar_error = array();
 345  
 346                  /** @var \phpbb\avatar\manager $phpbb_avatar_manager */
 347                  $phpbb_avatar_manager = $phpbb_container->get('avatar.manager');
 348  
 349                  if ($config['allow_avatar'])
 350                  {
 351                      $avatar_drivers = $phpbb_avatar_manager->get_enabled_drivers();
 352  
 353                      // This is normalised data, without the group_ prefix
 354                      $avatar_data = \phpbb\avatar\manager::clean_row($group_row, 'group');
 355                      if (!isset($avatar_data['id']))
 356                      {
 357                          $avatar_data['id'] = 'g' . $group_id;
 358                      }
 359                  }
 360  
 361                  if ($request->is_set_post('avatar_delete'))
 362                  {
 363                      if (confirm_box(true))
 364                      {
 365                          $avatar_data['id'] = substr($avatar_data['id'], 1);
 366                          $phpbb_avatar_manager->handle_avatar_delete($db, $user, $avatar_data, GROUPS_TABLE, 'group_');
 367  
 368                          $message = ($action == 'edit') ? 'GROUP_UPDATED' : 'GROUP_CREATED';
 369                          trigger_error($user->lang[$message] . adm_back_link($this->u_action));
 370                      }
 371                      else
 372                      {
 373                          confirm_box(false, $user->lang('CONFIRM_AVATAR_DELETE'), build_hidden_fields(array(
 374                                  'avatar_delete'     => true,
 375                                  'i'                 => $id,
 376                                  'mode'              => $mode,
 377                                  'g'                    => $group_id,
 378                                  'action'            => $action))
 379                          );
 380                      }
 381                  }
 382  
 383                  // Did we submit?
 384                  if ($update)
 385                  {
 386                      if (!check_form_key($form_key))
 387                      {
 388                          trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
 389                      }
 390  
 391                      $group_name    = $request->variable('group_name', '', true);
 392                      $group_desc = $request->variable('group_desc', '', true);
 393                      $group_type    = $request->variable('group_type', GROUP_FREE);
 394  
 395                      $allow_desc_bbcode    = $request->variable('desc_parse_bbcode', false);
 396                      $allow_desc_urls    = $request->variable('desc_parse_urls', false);
 397                      $allow_desc_smilies    = $request->variable('desc_parse_smilies', false);
 398  
 399                      $submit_ary = [
 400                          'colour'            => $request->variable('group_colour', ''),
 401                          'rank'                => $request->variable('group_rank', 0),
 402                          'receive_pm'        => isset($_REQUEST['group_receive_pm']) ? 1 : 0,
 403                          'legend'            => isset($_REQUEST['group_legend']) ? 1 : 0,
 404                          'teampage'            => isset($_REQUEST['group_teampage']) ? 1 : 0,
 405                          'message_limit'        => $request->variable('group_message_limit', 0),
 406                          'max_recipients'    => $request->variable('group_max_recipients', 0),
 407                          'founder_manage'    => 0,
 408                          'skip_auth'            => $request->variable('group_skip_auth', 0),
 409  
 410                          // Initialize avatar data
 411                          'avatar'            => $avatar_data['avatar'] ?? '',
 412                          'avatar_type'        => $avatar_data['avatar_type'] ?? '',
 413                          'avatar_height'        => $avatar_data['avatar_height'] ?? 0,
 414                          'avatar_width'        => $avatar_data['avatar_width'] ?? 0,
 415                      ];
 416  
 417                      if ($user->data['user_type'] == USER_FOUNDER)
 418                      {
 419                          $submit_ary['founder_manage'] = isset($_REQUEST['group_founder_manage']) ? 1 : 0;
 420                      }
 421  
 422                      if ($config['allow_avatar'])
 423                      {
 424                          // Handle avatar
 425                          $driver_name = $phpbb_avatar_manager->clean_driver_name($request->variable('avatar_driver', ''));
 426  
 427                          if (in_array($driver_name, $avatar_drivers) && !$request->is_set_post('avatar_delete'))
 428                          {
 429                              $driver = $phpbb_avatar_manager->get_driver($driver_name);
 430                              $result = $driver->process_form($request, $template, $user, $avatar_data, $avatar_error);
 431  
 432                              if ($result && empty($avatar_error))
 433                              {
 434                                  $result['avatar_type'] = $driver_name;
 435                                  $submit_ary = array_merge($submit_ary, $result);
 436                              }
 437                          }
 438                          else
 439                          {
 440                              $driver = $phpbb_avatar_manager->get_driver($avatar_data['avatar_type']);
 441                              if ($driver)
 442                              {
 443                                  $driver->delete($avatar_data);
 444                              }
 445  
 446                              // Removing the avatar
 447                              $submit_ary['avatar_type'] = '';
 448                              $submit_ary['avatar'] = '';
 449                              $submit_ary['avatar_width'] = 0;
 450                              $submit_ary['avatar_height'] = 0;
 451                          }
 452  
 453                          // Merge any avatar errors into the primary error array
 454                          $error = array_merge($error, $phpbb_avatar_manager->localize_errors($user, $avatar_error));
 455                      }
 456  
 457                      /*
 458                      * Validate the length of "Maximum number of allowed recipients per
 459                      * private message" setting. We use 16777215 as a maximum because it matches
 460                      * MySQL unsigned mediumint maximum value which is the lowest amongst DBMSes
 461                      * supported by phpBB3. Also validate the submitted colour value.
 462                      */
 463                      $validation_checks = array(
 464                          'max_recipients' => array('num', false, 0, 16777215),
 465                          'colour'    => array('hex_colour', true),
 466                      );
 467  
 468                      /**
 469                      * Request group data and operate on it
 470                      *
 471                      * @event core.acp_manage_group_request_data
 472                      * @var    string    action                Type of the action: add|edit
 473                      * @var    int        group_id            The group id
 474                      * @var    array    group_row            Array with new group data
 475                      * @var    array    error                Array of errors, if you add errors
 476                      *                            ensure to update the template variables
 477                      *                            S_ERROR and ERROR_MSG to display it
 478                      * @var    string    group_name            The group name
 479                      * @var    string    group_desc            The group description
 480                      * @var    int        group_type            The group type
 481                      * @var    bool    allow_desc_bbcode    Allow bbcode in group description: true|false
 482                      * @var    bool    allow_desc_urls        Allow urls in group description: true|false
 483                      * @var    bool    allow_desc_smilies    Allow smiles in group description: true|false
 484                      * @var    array    submit_ary            Array with new group data
 485                      * @var    array    validation_checks    Array with validation data
 486                      * @since 3.1.0-b5
 487                      */
 488                      $vars = array(
 489                          'action',
 490                          'group_id',
 491                          'group_row',
 492                          'error',
 493                          'group_name',
 494                          'group_desc',
 495                          'group_type',
 496                          'allow_desc_bbcode',
 497                          'allow_desc_urls',
 498                          'allow_desc_smilies',
 499                          'submit_ary',
 500                          'validation_checks',
 501                      );
 502                      extract($phpbb_dispatcher->trigger_event('core.acp_manage_group_request_data', compact($vars)));
 503  
 504                      if ($validation_error = validate_data($submit_ary, $validation_checks))
 505                      {
 506                          // Replace "error" string with its real, localised form
 507                          $error = array_merge($error, $validation_error);
 508                      }
 509  
 510                      if (!count($error))
 511                      {
 512                          // Only set the rank, colour, etc. if it's changed or if we're adding a new
 513                          // group. This prevents existing group members being updated if no changes
 514                          // were made.
 515                          // However there are some attributes that need to be set everytime,
 516                          // otherwise the group gets removed from the feature.
 517                          $set_attributes = array('legend', 'teampage');
 518  
 519                          $group_attributes = array();
 520                          $test_variables = array(
 521                              'rank'            => 'int',
 522                              'colour'        => 'string',
 523                              'avatar'        => 'string',
 524                              'avatar_type'    => 'string',
 525                              'avatar_width'    => 'int',
 526                              'avatar_height'    => 'int',
 527                              'receive_pm'    => 'int',
 528                              'legend'        => 'int',
 529                              'teampage'        => 'int',
 530                              'message_limit'    => 'int',
 531                              'max_recipients'=> 'int',
 532                              'founder_manage'=> 'int',
 533                              'skip_auth'        => 'int',
 534                          );
 535  
 536                          /**
 537                          * Initialise data before we display the add/edit form
 538                          *
 539                          * @event core.acp_manage_group_initialise_data
 540                          * @var    string    action                Type of the action: add|edit
 541                          * @var    int        group_id            The group id
 542                          * @var    array    group_row            Array with new group data
 543                          * @var    array    error                Array of errors, if you add errors
 544                          *                            ensure to update the template variables
 545                          *                            S_ERROR and ERROR_MSG to display it
 546                          * @var    string    group_name            The group name
 547                          * @var    string    group_desc            The group description
 548                          * @var    int        group_type            The group type
 549                          * @var    bool    allow_desc_bbcode    Allow bbcode in group description: true|false
 550                          * @var    bool    allow_desc_urls        Allow urls in group description: true|false
 551                          * @var    bool    allow_desc_smilies    Allow smiles in group description: true|false
 552                          * @var    array    submit_ary            Array with new group data
 553                          * @var    array    test_variables        Array with variables for test
 554                          * @since 3.1.0-b5
 555                          */
 556                          $vars = array(
 557                              'action',
 558                              'group_id',
 559                              'group_row',
 560                              'error',
 561                              'group_name',
 562                              'group_desc',
 563                              'group_type',
 564                              'allow_desc_bbcode',
 565                              'allow_desc_urls',
 566                              'allow_desc_smilies',
 567                              'submit_ary',
 568                              'test_variables',
 569                          );
 570                          extract($phpbb_dispatcher->trigger_event('core.acp_manage_group_initialise_data', compact($vars)));
 571  
 572                          foreach ($test_variables as $test => $type)
 573                          {
 574                              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)))
 575                              {
 576                                  settype($submit_ary[$test], $type);
 577                                  $group_attributes['group_' . $test] = $group_row['group_' . $test] = $submit_ary[$test];
 578                              }
 579                          }
 580  
 581                          if (!($error = group_create($group_id, $group_type, $group_name, $group_desc, $group_attributes, $allow_desc_bbcode, $allow_desc_urls, $allow_desc_smilies)))
 582                          {
 583                              $group_perm_from = $request->variable('group_perm_from', 0);
 584  
 585                              // Copy permissions?
 586                              // If the user has the a_authgroups permission and at least one additional permission ability set the permissions are fully transferred.
 587                              // 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.
 588                              // Since the user only has the option to copy permissions from non leader managed groups this seems to be a good compromise.
 589                              if ($group_perm_from && $action == 'add' && $auth->acl_get('a_authgroups') && $auth->acl_gets('a_aauth', 'a_fauth', 'a_mauth', 'a_uauth'))
 590                              {
 591                                  $sql = 'SELECT group_founder_manage
 592                                      FROM ' . GROUPS_TABLE . '
 593                                      WHERE group_id = ' . $group_perm_from;
 594                                  $result = $db->sql_query($sql);
 595                                  $check_row = $db->sql_fetchrow($result);
 596                                  $db->sql_freeresult($result);
 597  
 598                                  // Check the group if non-founder
 599                                  if ($check_row && ($user->data['user_type'] == USER_FOUNDER || $check_row['group_founder_manage'] == 0))
 600                                  {
 601                                      // From the mysql documentation:
 602                                      // 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.
 603                                      // Due to this we stay on the safe side if we do the insertion "the manual way"
 604  
 605                                      // Copy permisisons from/to the acl groups table (only group_id gets changed)
 606                                      $sql = 'SELECT forum_id, auth_option_id, auth_role_id, auth_setting
 607                                          FROM ' . ACL_GROUPS_TABLE . '
 608                                          WHERE group_id = ' . $group_perm_from;
 609                                      $result = $db->sql_query($sql);
 610  
 611                                      $groups_sql_ary = array();
 612                                      while ($row = $db->sql_fetchrow($result))
 613                                      {
 614                                          $groups_sql_ary[] = array(
 615                                              'group_id'            => (int) $group_id,
 616                                              'forum_id'            => (int) $row['forum_id'],
 617                                              'auth_option_id'    => (int) $row['auth_option_id'],
 618                                              'auth_role_id'        => (int) $row['auth_role_id'],
 619                                              'auth_setting'        => (int) $row['auth_setting']
 620                                          );
 621                                      }
 622                                      $db->sql_freeresult($result);
 623  
 624                                      // Now insert the data
 625                                      $db->sql_multi_insert(ACL_GROUPS_TABLE, $groups_sql_ary);
 626  
 627                                      $auth->acl_clear_prefetch();
 628                                  }
 629                              }
 630  
 631                              $cache->destroy('sql', array(GROUPS_TABLE, TEAMPAGE_TABLE));
 632  
 633                              $message = ($action == 'edit') ? 'GROUP_UPDATED' : 'GROUP_CREATED';
 634                              trigger_error($user->lang[$message] . adm_back_link($this->u_action));
 635                          }
 636                      }
 637  
 638                      if (count($error))
 639                      {
 640                          $error = array_map(array(&$user, 'lang'), $error);
 641                          $group_rank = $submit_ary['rank'];
 642  
 643                          $group_desc_data = array(
 644                              'text'            => $group_desc,
 645                              'allow_bbcode'    => $allow_desc_bbcode,
 646                              'allow_smilies'    => $allow_desc_smilies,
 647                              'allow_urls'    => $allow_desc_urls
 648                          );
 649                      }
 650                  }
 651                  else if (!$group_id)
 652                  {
 653                      $group_name = $request->variable('group_name', '', true);
 654                      $group_desc_data = array(
 655                          'text'            => '',
 656                          'allow_bbcode'    => true,
 657                          'allow_smilies'    => true,
 658                          'allow_urls'    => true
 659                      );
 660                      $group_rank = 0;
 661                      $group_type = GROUP_OPEN;
 662                  }
 663                  else
 664                  {
 665                      $group_name = $group_row['group_name'];
 666                      $group_desc_data = generate_text_for_edit($group_row['group_desc'], $group_row['group_desc_uid'], $group_row['group_desc_options']);
 667                      $group_type = $group_row['group_type'];
 668                      $group_rank = $group_row['group_rank'];
 669                  }
 670  
 671                  $sql = 'SELECT *
 672                      FROM ' . RANKS_TABLE . '
 673                      WHERE rank_special = 1
 674                      ORDER BY rank_title';
 675                  $result = $db->sql_query($sql);
 676  
 677                  $rank_options = '<option value="0"' . ((!$group_rank) ? ' selected="selected"' : '') . '>' . $user->lang['USER_DEFAULT'] . '</option>';
 678  
 679                  while ($row = $db->sql_fetchrow($result))
 680                  {
 681                      $selected = ($group_rank && $row['rank_id'] == $group_rank) ? ' selected="selected"' : '';
 682                      $rank_options .= '<option value="' . $row['rank_id'] . '"' . $selected . '>' . $row['rank_title'] . '</option>';
 683                  }
 684                  $db->sql_freeresult($result);
 685  
 686                  $type_free        = ($group_type == GROUP_FREE) ? ' checked="checked"' : '';
 687                  $type_open        = ($group_type == GROUP_OPEN) ? ' checked="checked"' : '';
 688                  $type_closed    = ($group_type == GROUP_CLOSED) ? ' checked="checked"' : '';
 689                  $type_hidden    = ($group_type == GROUP_HIDDEN) ? ' checked="checked"' : '';
 690  
 691                  // Load up stuff for avatars
 692                  if ($config['allow_avatar'])
 693                  {
 694                      $avatars_enabled = false;
 695                      $selected_driver = $phpbb_avatar_manager->clean_driver_name($request->variable('avatar_driver', $avatar_data['avatar_type']));
 696  
 697                      // Assign min and max values before generating avatar driver html
 698                      $template->assign_vars(array(
 699                              'AVATAR_MIN_WIDTH'        => $config['avatar_min_width'],
 700                              'AVATAR_MAX_WIDTH'        => $config['avatar_max_width'],
 701                              'AVATAR_MIN_HEIGHT'        => $config['avatar_min_height'],
 702                              'AVATAR_MAX_HEIGHT'        => $config['avatar_max_height'],
 703                      ));
 704  
 705                      foreach ($avatar_drivers as $current_driver)
 706                      {
 707                          $driver = $phpbb_avatar_manager->get_driver($current_driver);
 708  
 709                          $avatars_enabled = true;
 710                          $template->set_filenames(array(
 711                              'avatar' => $driver->get_acp_template_name(),
 712                          ));
 713  
 714                          if ($driver->prepare_form($request, $template, $user, $avatar_data, $avatar_error))
 715                          {
 716                              $driver_name = $phpbb_avatar_manager->prepare_driver_name($current_driver);
 717                              $driver_upper = strtoupper($driver_name);
 718                              $template->assign_block_vars('avatar_drivers', array(
 719                                  'L_TITLE' => $user->lang($driver_upper . '_TITLE'),
 720                                  'L_EXPLAIN' => $user->lang($driver_upper . '_EXPLAIN'),
 721  
 722                                  'DRIVER' => $driver_name,
 723                                  'SELECTED' => $current_driver == $selected_driver,
 724                                  'OUTPUT' => $template->assign_display('avatar'),
 725                              ));
 726                          }
 727                      }
 728                  }
 729  
 730                  $avatar = phpbb_get_group_avatar($group_row, 'GROUP_AVATAR', true);
 731  
 732                  if (isset($phpbb_avatar_manager) && !$update)
 733                  {
 734                      // Merge any avatar errors into the primary error array
 735                      $error = array_merge($error, $phpbb_avatar_manager->localize_errors($user, $avatar_error));
 736                  }
 737  
 738                  $back_link = $request->variable('back_link', '');
 739  
 740                  switch ($back_link)
 741                  {
 742                      case 'acp_users_groups':
 743                          $u_back = append_sid("{$phpbb_admin_path}index.$phpEx", 'i=users&amp;mode=groups&amp;u=' . $request->variable('u', 0));
 744                      break;
 745  
 746                      default:
 747                          $u_back = $this->u_action;
 748                      break;
 749                  }
 750  
 751                  $template->assign_vars(array(
 752                      'S_EDIT'            => true,
 753                      'S_ADD_GROUP'        => ($action == 'add') ? true : false,
 754                      'S_GROUP_PERM'        => ($action == 'add' && $auth->acl_get('a_authgroups') && $auth->acl_gets('a_aauth', 'a_fauth', 'a_mauth', 'a_uauth')) ? true : false,
 755                      'S_INCLUDE_SWATCH'    => true,
 756                      'S_ERROR'            => (count($error)) ? true : false,
 757                      'S_SPECIAL_GROUP'    => ($group_type == GROUP_SPECIAL) ? true : false,
 758                      'S_USER_FOUNDER'    => ($user->data['user_type'] == USER_FOUNDER) ? true : false,
 759                      'S_AVATARS_ENABLED'        => ($config['allow_avatar'] && $avatars_enabled),
 760  
 761                      'ERROR_MSG'                => (count($error)) ? implode('<br />', $error) : '',
 762                      'GROUP_NAME'            => $group_helper->get_name($group_name),
 763                      'GROUP_INTERNAL_NAME'    => $group_name,
 764                      'GROUP_DESC'            => $group_desc_data['text'],
 765                      'GROUP_RECEIVE_PM'        => (isset($group_row['group_receive_pm']) && $group_row['group_receive_pm']) ? ' checked="checked"' : '',
 766                      'GROUP_FOUNDER_MANAGE'    => (isset($group_row['group_founder_manage']) && $group_row['group_founder_manage']) ? ' checked="checked"' : '',
 767                      'GROUP_LEGEND'            => (isset($group_row['group_legend']) && $group_row['group_legend']) ? ' checked="checked"' : '',
 768                      'GROUP_TEAMPAGE'        => (isset($group_row['group_teampage']) && $group_row['group_teampage']) ? ' checked="checked"' : '',
 769                      'GROUP_MESSAGE_LIMIT'    => (isset($group_row['group_message_limit'])) ? $group_row['group_message_limit'] : 0,
 770                      'GROUP_MAX_RECIPIENTS'    => (isset($group_row['group_max_recipients'])) ? $group_row['group_max_recipients'] : 0,
 771                      'GROUP_COLOUR'            => (isset($group_row['group_colour'])) ? $group_row['group_colour'] : '',
 772                      'GROUP_SKIP_AUTH'        => (!empty($group_row['group_skip_auth'])) ? ' checked="checked"' : '',
 773  
 774                      'S_DESC_BBCODE_CHECKED'    => $group_desc_data['allow_bbcode'],
 775                      'S_DESC_URLS_CHECKED'    => $group_desc_data['allow_urls'],
 776                      'S_DESC_SMILIES_CHECKED'=> $group_desc_data['allow_smilies'],
 777  
 778                      'S_RANK_OPTIONS'        => $rank_options,
 779                      'S_GROUP_OPTIONS'        => group_select_options(false, false, (($user->data['user_type'] == USER_FOUNDER) ? false : 0)),
 780                      'AVATAR'                => empty($avatar) ? '<img src="' . $phpbb_admin_path . 'images/no_avatar.gif" alt="" />' : $avatar,
 781                      'AVATAR_MAX_FILESIZE'    => $config['avatar_filesize'],
 782                      'AVATAR_WIDTH'            => (isset($group_row['group_avatar_width'])) ? $group_row['group_avatar_width'] : '',
 783                      'AVATAR_HEIGHT'            => (isset($group_row['group_avatar_height'])) ? $group_row['group_avatar_height'] : '',
 784  
 785                      'GROUP_TYPE_FREE'        => GROUP_FREE,
 786                      'GROUP_TYPE_OPEN'        => GROUP_OPEN,
 787                      'GROUP_TYPE_CLOSED'        => GROUP_CLOSED,
 788                      'GROUP_TYPE_HIDDEN'        => GROUP_HIDDEN,
 789                      'GROUP_TYPE_SPECIAL'    => GROUP_SPECIAL,
 790  
 791                      'GROUP_FREE'        => $type_free,
 792                      'GROUP_OPEN'        => $type_open,
 793                      'GROUP_CLOSED'        => $type_closed,
 794                      'GROUP_HIDDEN'        => $type_hidden,
 795  
 796                      'U_BACK'            => $u_back,
 797                      'U_ACTION'            => "{$this->u_action}&amp;action=$action&amp;g=$group_id",
 798                      'L_AVATAR_EXPLAIN'    => phpbb_avatar_explanation_string(),
 799                  ));
 800  
 801                  /**
 802                  * Modify group template data before we display the form
 803                  *
 804                  * @event core.acp_manage_group_display_form
 805                  * @var    string    action                Type of the action: add|edit
 806                  * @var    bool    update                Do we display the form only
 807                  *                            or did the user press submit
 808                  * @var    int        group_id            The group id
 809                  * @var    array    group_row            Array with new group data
 810                  * @var    string    group_name            The group name
 811                  * @var    int        group_type            The group type
 812                  * @var    array    group_desc_data        The group description data
 813                  * @var    string    group_rank            The group rank
 814                  * @var    string    rank_options        The rank options
 815                  * @var    array    error                Array of errors, if you add errors
 816                  *                            ensure to update the template variables
 817                  *                            S_ERROR and ERROR_MSG to display it
 818                  * @since 3.1.0-b5
 819                  */
 820                  $vars = array(
 821                      'action',
 822                      'update',
 823                      'group_id',
 824                      'group_row',
 825                      'group_desc_data',
 826                      'group_name',
 827                      'group_type',
 828                      'group_rank',
 829                      'rank_options',
 830                      'error',
 831                  );
 832                  extract($phpbb_dispatcher->trigger_event('core.acp_manage_group_display_form', compact($vars)));
 833  
 834                  return;
 835              break;
 836  
 837              case 'list':
 838  
 839                  if (!$group_id)
 840                  {
 841                      trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
 842                  }
 843  
 844                  /* @var $pagination \phpbb\pagination */
 845                  $pagination = $phpbb_container->get('pagination');
 846                  $this->page_title = 'GROUP_MEMBERS';
 847  
 848                  // Grab the leaders - always, on every page...
 849                  $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
 850                      FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug
 851                      WHERE ug.group_id = $group_id
 852                          AND u.user_id = ug.user_id
 853                          AND ug.group_leader = 1
 854                      ORDER BY ug.group_leader DESC, ug.user_pending ASC, u.username_clean";
 855                  $result = $db->sql_query($sql);
 856  
 857                  while ($row = $db->sql_fetchrow($result))
 858                  {
 859                      $template->assign_block_vars('leader', array(
 860                          'U_USER_EDIT'        => append_sid("{$phpbb_admin_path}index.$phpEx", "i=users&amp;action=edit&amp;u={$row['user_id']}"),
 861  
 862                          'USERNAME'            => $row['username'],
 863                          'USERNAME_COLOUR'    => $row['user_colour'],
 864                          'S_GROUP_DEFAULT'    => ($row['group_id'] == $group_id) ? true : false,
 865                          'JOINED'            => ($row['user_regdate']) ? $user->format_date($row['user_regdate']) : ' - ',
 866                          'USER_POSTS'        => $row['user_posts'],
 867                          'USER_ID'            => $row['user_id'],
 868                      ));
 869                  }
 870                  $db->sql_freeresult($result);
 871  
 872                  // Total number of group members (non-leaders)
 873                  $sql = 'SELECT COUNT(user_id) AS total_members
 874                      FROM ' . USER_GROUP_TABLE . "
 875                      WHERE group_id = $group_id
 876                          AND group_leader = 0";
 877                  $result = $db->sql_query($sql);
 878                  $total_members = (int) $db->sql_fetchfield('total_members');
 879                  $db->sql_freeresult($result);
 880  
 881                  $s_action_options = '';
 882                  $options = array('default' => 'DEFAULT', 'approve' => 'APPROVE', 'demote' => 'DEMOTE', 'promote' => 'PROMOTE', 'deleteusers' => 'DELETE');
 883  
 884                  foreach ($options as $option => $lang)
 885                  {
 886                      $s_action_options .= '<option value="' . $option . '">' . $user->lang['GROUP_' . $lang] . '</option>';
 887                  }
 888  
 889                  $base_url = $this->u_action . "&amp;action=$action&amp;g=$group_id";
 890                  $pagination->generate_template_pagination($base_url, 'pagination', 'start', $total_members, $config['topics_per_page'], $start);
 891  
 892                  $template->assign_vars(array(
 893                      'S_LIST'            => true,
 894                      'S_GROUP_SPECIAL'    => ($group_row['group_type'] == GROUP_SPECIAL) ? true : false,
 895                      'S_ACTION_OPTIONS'    => $s_action_options,
 896  
 897                      'GROUP_NAME'    => $group_helper->get_name($group_row['group_name']),
 898  
 899                      'U_ACTION'            => $this->u_action . "&amp;g=$group_id",
 900                      'U_BACK'            => $this->u_action,
 901                      'U_FIND_USERNAME'    => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=list&amp;field=usernames'),
 902                      'U_DEFAULT_ALL'        => "{$this->u_action}&amp;action=set_default_on_all&amp;g=$group_id",
 903                  ));
 904  
 905                  // Grab the members
 906                  $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
 907                      FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug
 908                      WHERE ug.group_id = $group_id
 909                          AND u.user_id = ug.user_id
 910                          AND ug.group_leader = 0
 911                      ORDER BY ug.group_leader DESC, ug.user_pending ASC, u.username_clean";
 912                  $result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
 913  
 914                  $pending = false;
 915  
 916                  while ($row = $db->sql_fetchrow($result))
 917                  {
 918                      if ($row['user_pending'] && !$pending)
 919                      {
 920                          $template->assign_block_vars('member', array(
 921                              'S_PENDING'        => true)
 922                          );
 923  
 924                          $pending = true;
 925                      }
 926  
 927                      $template->assign_block_vars('member', array(
 928                          'U_USER_EDIT'        => append_sid("{$phpbb_admin_path}index.$phpEx", "i=users&amp;action=edit&amp;u={$row['user_id']}"),
 929  
 930                          'USERNAME'            => $row['username'],
 931                          'USERNAME_COLOUR'    => $row['user_colour'],
 932                          'S_GROUP_DEFAULT'    => ($row['group_id'] == $group_id) ? true : false,
 933                          'JOINED'            => ($row['user_regdate']) ? $user->format_date($row['user_regdate']) : ' - ',
 934                          'USER_POSTS'        => $row['user_posts'],
 935                          'USER_ID'            => $row['user_id'])
 936                      );
 937                  }
 938                  $db->sql_freeresult($result);
 939  
 940                  return;
 941              break;
 942          }
 943  
 944          $template->assign_vars(array(
 945              'U_ACTION'        => $this->u_action,
 946              'S_GROUP_ADD'    => ($auth->acl_get('a_groupadd')) ? true : false)
 947          );
 948  
 949          // Get us all the groups
 950          $sql = 'SELECT g.group_id, g.group_name, g.group_type, g.group_colour
 951              FROM ' . GROUPS_TABLE . ' g
 952              ORDER BY g.group_type ASC, g.group_name';
 953          $result = $db->sql_query($sql);
 954  
 955          $lookup = $cached_group_data = array();
 956          while ($row = $db->sql_fetchrow($result))
 957          {
 958              $type = ($row['group_type'] == GROUP_SPECIAL) ? 'special' : 'normal';
 959  
 960              // used to determine what type a group is
 961              $lookup[$row['group_id']] = $type;
 962  
 963              // used for easy access to the data within a group
 964              $cached_group_data[$type][$row['group_id']] = $row;
 965              $cached_group_data[$type][$row['group_id']]['total_members'] = 0;
 966              $cached_group_data[$type][$row['group_id']]['pending_members'] = 0;
 967          }
 968          $db->sql_freeresult($result);
 969  
 970          // How many people are in which group?
 971          $sql = 'SELECT COUNT(ug.user_id) AS total_members, SUM(ug.user_pending) AS pending_members, ug.group_id
 972              FROM ' . USER_GROUP_TABLE . ' ug
 973              WHERE ' . $db->sql_in_set('ug.group_id', array_keys($lookup)) . '
 974              GROUP BY ug.group_id';
 975          $result = $db->sql_query($sql);
 976  
 977          while ($row = $db->sql_fetchrow($result))
 978          {
 979              $type = $lookup[$row['group_id']];
 980              $cached_group_data[$type][$row['group_id']]['total_members'] = $row['total_members'];
 981              $cached_group_data[$type][$row['group_id']]['pending_members'] = $row['pending_members'];
 982          }
 983          $db->sql_freeresult($result);
 984  
 985          // The order is... normal, then special
 986          ksort($cached_group_data);
 987  
 988          foreach ($cached_group_data as $type => $row_ary)
 989          {
 990              if ($type == 'special')
 991              {
 992                  $template->assign_block_vars('groups', array(
 993                      'S_SPECIAL'            => true)
 994                  );
 995              }
 996  
 997              foreach ($row_ary as $group_id => $row)
 998              {
 999                  $group_name = (!empty($user->lang['G_' . $row['group_name']]))? $user->lang['G_' . $row['group_name']] : $row['group_name'];
1000  
1001                  $template->assign_block_vars('groups', array(
1002                      'U_LIST'        => "{$this->u_action}&amp;action=list&amp;g=$group_id",
1003                      'U_EDIT'        => "{$this->u_action}&amp;action=edit&amp;g=$group_id",
1004                      'U_DELETE'        => ($auth->acl_get('a_groupdel')) ? "{$this->u_action}&amp;action=delete&amp;g=$group_id" : '',
1005  
1006                      'S_GROUP_SPECIAL'    => ($row['group_type'] == GROUP_SPECIAL) ? true : false,
1007  
1008                      'GROUP_NAME'    => $group_name,
1009                      'GROUP_COLOR'    => $row['group_colour'],
1010                      'TOTAL_MEMBERS'    => $row['total_members'],
1011                      'PENDING_MEMBERS' => $row['pending_members']
1012                  ));
1013              }
1014          }
1015      }
1016  
1017  	public function manage_position()
1018      {
1019          global $config, $db, $template, $user, $request, $phpbb_container;
1020  
1021          $this->tpl_name = 'acp_groups_position';
1022          $this->page_title = 'ACP_GROUPS_POSITION';
1023  
1024          $field = $request->variable('field', '');
1025          $action = $request->variable('action', '');
1026          $group_id = $request->variable('g', 0);
1027          $teampage_id = $request->variable('t', 0);
1028          $category_id = $request->variable('c', 0);
1029  
1030          /** @var \phpbb\group\helper $group_helper */
1031          $group_helper = $phpbb_container->get('group_helper');
1032  
1033          if ($field && !in_array($field, array('legend', 'teampage')))
1034          {
1035              // Invalid mode
1036              trigger_error($user->lang['NO_MODE'] . adm_back_link($this->u_action), E_USER_WARNING);
1037          }
1038          else if ($field && in_array($field, array('legend', 'teampage')))
1039          {
1040              /* @var $group_position \phpbb\groupposition\groupposition_interface */
1041              $group_position = $phpbb_container->get('groupposition.' . $field);
1042          }
1043  
1044          if ($field == 'teampage')
1045          {
1046              try
1047              {
1048                  switch ($action)
1049                  {
1050                      case 'add':
1051                          $group_position->add_group_teampage($group_id, $category_id);
1052                      break;
1053  
1054                      case 'add_category':
1055                          $group_position->add_category_teampage($request->variable('category_name', '', true));
1056                      break;
1057  
1058                      case 'delete':
1059                          $group_position->delete_teampage($teampage_id);
1060                      break;
1061  
1062                      case 'move_up':
1063                          $group_position->move_up_teampage($teampage_id);
1064                      break;
1065  
1066                      case 'move_down':
1067                          $group_position->move_down_teampage($teampage_id);
1068                      break;
1069                  }
1070              }
1071              catch (\phpbb\groupposition\exception $exception)
1072              {
1073                  trigger_error($user->lang($exception->getMessage()) . adm_back_link($this->u_action), E_USER_WARNING);
1074              }
1075          }
1076          else if ($field == 'legend')
1077          {
1078              try
1079              {
1080                  switch ($action)
1081                  {
1082                      case 'add':
1083                          $group_position->add_group($group_id);
1084                      break;
1085  
1086                      case 'delete':
1087                          $group_position->delete_group($group_id);
1088                      break;
1089  
1090                      case 'move_up':
1091                          $group_position->move_up($group_id);
1092                      break;
1093  
1094                      case 'move_down':
1095                          $group_position->move_down($group_id);
1096                      break;
1097                  }
1098              }
1099              catch (\phpbb\groupposition\exception $exception)
1100              {
1101                  trigger_error($user->lang($exception->getMessage()) . adm_back_link($this->u_action), E_USER_WARNING);
1102              }
1103          }
1104          else
1105          {
1106              switch ($action)
1107              {
1108                  case 'set_config_teampage':
1109                      $config->set('teampage_forums', $request->variable('teampage_forums', 0));
1110                      $config->set('teampage_memberships', $request->variable('teampage_memberships', 0));
1111                      trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action));
1112                  break;
1113  
1114                  case 'set_config_legend':
1115                      $config->set('legend_sort_groupname', $request->variable('legend_sort_groupname', 0));
1116                      trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action));
1117                  break;
1118              }
1119          }
1120  
1121          if (($action == 'move_up' || $action == 'move_down') && $request->is_ajax())
1122          {
1123              $json_response = new \phpbb\json_response;
1124              $json_response->send(array('success' => true));
1125          }
1126  
1127          $sql = 'SELECT group_id, group_name, group_colour, group_type, group_legend
1128              FROM ' . GROUPS_TABLE . '
1129              ORDER BY group_legend ASC, group_type DESC, group_name ASC';
1130          $result = $db->sql_query($sql);
1131  
1132          while ($row = $db->sql_fetchrow($result))
1133          {
1134              $group_name = $group_helper->get_name($row['group_name']);
1135              if ($row['group_legend'])
1136              {
1137                  $template->assign_block_vars('legend', array(
1138                      'GROUP_NAME'    => $group_name,
1139                      'GROUP_COLOUR'    => ($row['group_colour']) ? '#' . $row['group_colour'] : '',
1140                      'GROUP_TYPE'    => $user->lang[\phpbb\groupposition\legend::group_type_language($row['group_type'])],
1141  
1142                      'U_MOVE_DOWN'    => "{$this->u_action}&amp;field=legend&amp;action=move_down&amp;g=" . $row['group_id'],
1143                      'U_MOVE_UP'        => "{$this->u_action}&amp;field=legend&amp;action=move_up&amp;g=" . $row['group_id'],
1144                      'U_DELETE'        => "{$this->u_action}&amp;field=legend&amp;action=delete&amp;g=" . $row['group_id'],
1145                  ));
1146              }
1147              else
1148              {
1149                  $template->assign_block_vars('add_legend', array(
1150                      'GROUP_ID'        => (int) $row['group_id'],
1151                      'GROUP_NAME'    => $group_name,
1152                      'GROUP_SPECIAL'    => ($row['group_type'] == GROUP_SPECIAL),
1153                  ));
1154              }
1155          }
1156          $db->sql_freeresult($result);
1157  
1158          $category_url_param = (($category_id) ? '&amp;c=' . $category_id : '');
1159  
1160          $sql = 'SELECT t.*, g.group_name, g.group_colour, g.group_type
1161              FROM ' . TEAMPAGE_TABLE . ' t
1162              LEFT JOIN ' . GROUPS_TABLE . ' g
1163                  ON (t.group_id = g.group_id)
1164              WHERE t.teampage_parent = ' . $category_id . '
1165                  OR t.teampage_id = ' . $category_id . '
1166              ORDER BY t.teampage_position ASC';
1167          $result = $db->sql_query($sql);
1168  
1169          while ($row = $db->sql_fetchrow($result))
1170          {
1171              if ($row['teampage_id'] == $category_id)
1172              {
1173                  $template->assign_vars(array(
1174                      'CURRENT_CATEGORY_NAME'        => $row['teampage_name'],
1175                  ));
1176                  continue;
1177              }
1178  
1179              if ($row['group_id'])
1180              {
1181                  $group_name = $group_helper->get_name($row['group_name']);
1182                  $group_type = $user->lang[\phpbb\groupposition\teampage::group_type_language($row['group_type'])];
1183              }
1184              else
1185              {
1186                  $group_name = $row['teampage_name'];
1187                  $group_type = '';
1188              }
1189  
1190              $template->assign_block_vars('teampage', array(
1191                  'GROUP_NAME'    => $group_name,
1192                  'GROUP_COLOUR'    => ($row['group_colour']) ? '#' . $row['group_colour'] : '',
1193                  'GROUP_TYPE'    => $group_type,
1194  
1195                  'U_CATEGORY'    => (!$row['group_id']) ? "{$this->u_action}&amp;c=" . $row['teampage_id'] : '',
1196                  'U_MOVE_DOWN'    => "{$this->u_action}&amp;field=teampage&amp;action=move_down{$category_url_param}&amp;t=" . $row['teampage_id'],
1197                  'U_MOVE_UP'        => "{$this->u_action}&amp;field=teampage&amp;action=move_up{$category_url_param}&amp;t=" . $row['teampage_id'],
1198                  'U_DELETE'        => "{$this->u_action}&amp;field=teampage&amp;action=delete{$category_url_param}&amp;t=" . $row['teampage_id'],
1199              ));
1200          }
1201          $db->sql_freeresult($result);
1202  
1203          $sql = 'SELECT g.group_id, g.group_name, g.group_colour, g.group_type
1204              FROM ' . GROUPS_TABLE . ' g
1205              LEFT JOIN ' . TEAMPAGE_TABLE . ' t
1206                  ON (t.group_id = g.group_id)
1207              WHERE t.teampage_id IS NULL
1208              ORDER BY g.group_type DESC, g.group_name ASC';
1209          $result = $db->sql_query($sql);
1210  
1211          while ($row = $db->sql_fetchrow($result))
1212          {
1213              $group_name = $group_helper->get_name($row['group_name']);
1214              $template->assign_block_vars('add_teampage', array(
1215                  'GROUP_ID'        => (int) $row['group_id'],
1216                  'GROUP_NAME'    => $group_name,
1217                  'GROUP_SPECIAL'    => ($row['group_type'] == GROUP_SPECIAL),
1218              ));
1219          }
1220          $db->sql_freeresult($result);
1221  
1222          $template->assign_vars(array(
1223              'U_ACTION'                    => $this->u_action,
1224              'U_ACTION_LEGEND'            => $this->u_action . '&amp;field=legend',
1225              'U_ACTION_TEAMPAGE'            => $this->u_action . '&amp;field=teampage' . $category_url_param,
1226              'U_ACTION_TEAMPAGE_CAT'        => $this->u_action . '&amp;field=teampage_cat',
1227  
1228              'S_TEAMPAGE_CATEGORY'        => $category_id,
1229              'DISPLAY_FORUMS'            => ($config['teampage_forums']) ? true : false,
1230              'DISPLAY_MEMBERSHIPS'        => $config['teampage_memberships'],
1231              'LEGEND_SORT_GROUPNAME'        => ($config['legend_sort_groupname']) ? true : false,
1232          ));
1233      }
1234  }


Generated: Mon Nov 25 19:05:08 2024 Cross-referenced by PHPXref 0.7.1