[ Index ]

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


Generated: Thu Jan 11 00:25:41 2018 Cross-referenced by PHPXref 0.7.1