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