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