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