annotate forum/Sources/ManageMembergroups.php @ 87:df86d318892b website

Link to SampleType doc
author Chris Cannam
date Mon, 10 Feb 2014 18:11:48 +0000
parents e3e11437ecea
children
rev   line source
Chris@76 1 <?php
Chris@76 2
Chris@76 3 /**
Chris@76 4 * Simple Machines Forum (SMF)
Chris@76 5 *
Chris@76 6 * @package SMF
Chris@76 7 * @author Simple Machines http://www.simplemachines.org
Chris@76 8 * @copyright 2011 Simple Machines
Chris@76 9 * @license http://www.simplemachines.org/about/smf/license.php BSD
Chris@76 10 *
Chris@76 11 * @version 2.0
Chris@76 12 */
Chris@76 13
Chris@76 14 if (!defined('SMF'))
Chris@76 15 die('Hacking attempt...');
Chris@76 16
Chris@76 17 /* This file is concerned with anything in the Manage Membergroups screen.
Chris@76 18
Chris@76 19 void ModifyMembergroups()
Chris@76 20 - entrance point of the 'Manage Membergroups' center.
Chris@76 21 - called by ?action=admin;area=membergroups.
Chris@76 22 - loads the ManageMembergroups template.
Chris@76 23 - loads the MangeMembers language file.
Chris@76 24 - requires the manage_membergroups or the admin_forum permission.
Chris@76 25 - calls a function based on the given subaction.
Chris@76 26 - defaults to sub action 'index' or without manage_membergroup
Chris@76 27 permissions to 'settings'.
Chris@76 28
Chris@76 29 void MembergroupIndex()
Chris@76 30 - shows an overview of the current membergroups.
Chris@76 31 - called by ?action=admin;area=membergroups.
Chris@76 32 - requires the manage_membergroups permission.
Chris@76 33 - uses the main ManageMembergroups template.
Chris@76 34 - splits the membergroups in regular ones and post count based groups.
Chris@76 35 - also counts the number of members part of each membergroup.
Chris@76 36
Chris@76 37 void AddMembergroup()
Chris@76 38 - allows to add a membergroup and set some initial properties.
Chris@76 39 - called by ?action=admin;area=membergroups;sa=add.
Chris@76 40 - requires the manage_membergroups permission.
Chris@76 41 - uses the new_group sub template of ManageMembergroups.
Chris@76 42 - allows to use a predefined permission profile or copy one from
Chris@76 43 another group.
Chris@76 44 - redirects to action=admin;area=membergroups;sa=edit;group=x.
Chris@76 45
Chris@76 46 void DeleteMembergroup()
Chris@76 47 - deletes a membergroup by URL.
Chris@76 48 - called by ?action=admin;area=membergroups;sa=delete;group=x;session_var=y.
Chris@76 49 - requires the manage_membergroups permission.
Chris@76 50 - redirects to ?action=admin;area=membergroups.
Chris@76 51
Chris@76 52 void EditMembergroup()
Chris@76 53 - screen to edit a specific membergroup.
Chris@76 54 - called by ?action=admin;area=membergroups;sa=edit;group=x.
Chris@76 55 - requires the manage_membergroups permission.
Chris@76 56 - uses the edit_group sub template of ManageMembergroups.
Chris@76 57 - also handles the delete button of the edit form.
Chris@76 58 - redirects to ?action=admin;area=membergroups.
Chris@76 59
Chris@76 60 void ModifyMembergroupsettings()
Chris@76 61 - set some general membergroup settings and permissions.
Chris@76 62 - called by ?action=admin;area=membergroups;sa=settings
Chris@76 63 - requires the admin_forum permission (and manage_permissions for
Chris@76 64 changing permissions)
Chris@76 65 - uses membergroup_settings sub template of ManageMembergroups.
Chris@76 66 - redirects to itself.
Chris@76 67 */
Chris@76 68
Chris@76 69 // The entrance point for all 'Manage Membergroup' actions.
Chris@76 70 function ModifyMembergroups()
Chris@76 71 {
Chris@76 72 global $context, $txt, $scripturl, $sourcedir;
Chris@76 73
Chris@76 74 $subActions = array(
Chris@76 75 'add' => array('AddMembergroup', 'manage_membergroups'),
Chris@76 76 'delete' => array('DeleteMembergroup', 'manage_membergroups'),
Chris@76 77 'edit' => array('EditMembergroup', 'manage_membergroups'),
Chris@76 78 'index' => array('MembergroupIndex', 'manage_membergroups'),
Chris@76 79 'members' => array('MembergroupMembers', 'manage_membergroups', 'Groups.php'),
Chris@76 80 'settings' => array('ModifyMembergroupsettings', 'admin_forum'),
Chris@76 81 );
Chris@76 82
Chris@76 83 // Default to sub action 'index' or 'settings' depending on permissions.
Chris@76 84 $_REQUEST['sa'] = isset($_REQUEST['sa']) && isset($subActions[$_REQUEST['sa']]) ? $_REQUEST['sa'] : (allowedTo('manage_membergroups') ? 'index' : 'settings');
Chris@76 85
Chris@76 86 // Is it elsewhere?
Chris@76 87 if (isset($subActions[$_REQUEST['sa']][2]))
Chris@76 88 require_once($sourcedir . '/' . $subActions[$_REQUEST['sa']][2]);
Chris@76 89
Chris@76 90 // Do the permission check, you might not be allowed her.
Chris@76 91 isAllowedTo($subActions[$_REQUEST['sa']][1]);
Chris@76 92
Chris@76 93 // Language and template stuff, the usual.
Chris@76 94 loadLanguage('ManageMembers');
Chris@76 95 loadTemplate('ManageMembergroups');
Chris@76 96
Chris@76 97 // Setup the admin tabs.
Chris@76 98 $context[$context['admin_menu_name']]['tab_data'] = array(
Chris@76 99 'title' => $txt['membergroups_title'],
Chris@76 100 'help' => 'membergroups',
Chris@76 101 'description' => $txt['membergroups_description'],
Chris@76 102 );
Chris@76 103
Chris@76 104 // Call the right function.
Chris@76 105 $subActions[$_REQUEST['sa']][0]();
Chris@76 106 }
Chris@76 107
Chris@76 108 // An overview of the current membergroups.
Chris@76 109 function MembergroupIndex()
Chris@76 110 {
Chris@76 111 global $txt, $scripturl, $context, $settings, $smcFunc, $sourcedir;
Chris@76 112
Chris@76 113 $context['page_title'] = $txt['membergroups_title'];
Chris@76 114
Chris@76 115 // The first list shows the regular membergroups.
Chris@76 116 $listOptions = array(
Chris@76 117 'id' => 'regular_membergroups_list',
Chris@76 118 'title' => $txt['membergroups_regular'],
Chris@76 119 'base_href' => $scripturl . '?action=admin;area=membergroups' . (isset($_REQUEST['sort2']) ? ';sort2=' . urlencode($_REQUEST['sort2']) : ''),
Chris@76 120 'default_sort_col' => 'name',
Chris@76 121 'get_items' => array(
Chris@76 122 'file' => $sourcedir . '/Subs-Membergroups.php',
Chris@76 123 'function' => 'list_getMembergroups',
Chris@76 124 'params' => array(
Chris@76 125 'regular',
Chris@76 126 ),
Chris@76 127 ),
Chris@76 128 'columns' => array(
Chris@76 129 'name' => array(
Chris@76 130 'header' => array(
Chris@76 131 'value' => $txt['membergroups_name'],
Chris@76 132 ),
Chris@76 133 'data' => array(
Chris@76 134 'function' => create_function('$rowData', '
Chris@76 135 global $scripturl;
Chris@76 136
Chris@76 137 // Since the moderator group has no explicit members, no link is needed.
Chris@76 138 if ($rowData[\'id_group\'] == 3)
Chris@76 139 $group_name = $rowData[\'group_name\'];
Chris@76 140 else
Chris@76 141 {
Chris@76 142 $color_style = empty($rowData[\'online_color\']) ? \'\' : sprintf(\' style="color: %1$s;"\', $rowData[\'online_color\']);
Chris@76 143 $group_name = sprintf(\'<a href="%1$s?action=admin;area=membergroups;sa=members;group=%2$d"%3$s>%4$s</a>\', $scripturl, $rowData[\'id_group\'], $color_style, $rowData[\'group_name\']);
Chris@76 144 }
Chris@76 145
Chris@76 146 // Add a help option for moderator and administrator.
Chris@76 147 if ($rowData[\'id_group\'] == 1)
Chris@76 148 $group_name .= sprintf(\' (<a href="%1$s?action=helpadmin;help=membergroup_administrator" onclick="return reqWin(this.href);">?</a>)\', $scripturl);
Chris@76 149 elseif ($rowData[\'id_group\'] == 3)
Chris@76 150 $group_name .= sprintf(\' (<a href="%1$s?action=helpadmin;help=membergroup_moderator" onclick="return reqWin(this.href);">?</a>)\', $scripturl);
Chris@76 151
Chris@76 152 return $group_name;
Chris@76 153 '),
Chris@76 154 ),
Chris@76 155 'sort' => array(
Chris@76 156 'default' => 'CASE WHEN id_group < 4 THEN id_group ELSE 4 END, group_name',
Chris@76 157 'reverse' => 'CASE WHEN id_group < 4 THEN id_group ELSE 4 END, group_name DESC',
Chris@76 158 ),
Chris@76 159 ),
Chris@76 160 'stars' => array(
Chris@76 161 'header' => array(
Chris@76 162 'value' => $txt['membergroups_stars'],
Chris@76 163 ),
Chris@76 164 'data' => array(
Chris@76 165 'function' => create_function('$rowData', '
Chris@76 166 global $settings;
Chris@76 167
Chris@76 168 $stars = explode(\'#\', $rowData[\'stars\']);
Chris@76 169
Chris@76 170 // In case no stars are setup, return with nothing
Chris@76 171 if (empty($stars[0]) || empty($stars[1]))
Chris@76 172 return \'\';
Chris@76 173
Chris@76 174 // Otherwise repeat the image a given number of times.
Chris@76 175 else
Chris@76 176 {
Chris@76 177 $image = sprintf(\'<img src="%1$s/%2$s" alt="*" />\', $settings[\'images_url\'], $stars[1]);
Chris@76 178 return str_repeat($image, $stars[0]);
Chris@76 179 }
Chris@76 180 '),
Chris@76 181
Chris@76 182 ),
Chris@76 183 'sort' => array(
Chris@76 184 'default' => 'stars',
Chris@76 185 'reverse' => 'stars DESC',
Chris@76 186 )
Chris@76 187 ),
Chris@76 188 'members' => array(
Chris@76 189 'header' => array(
Chris@76 190 'value' => $txt['membergroups_members_top'],
Chris@76 191 ),
Chris@76 192 'data' => array(
Chris@76 193 'function' => create_function('$rowData', '
Chris@76 194 global $txt;
Chris@76 195
Chris@76 196 // No explicit members for the moderator group.
Chris@76 197 return $rowData[\'id_group\'] == 3 ? $txt[\'membergroups_guests_na\'] : $rowData[\'num_members\'];
Chris@76 198 '),
Chris@76 199 'style' => 'text-align: center',
Chris@76 200 ),
Chris@76 201 'sort' => array(
Chris@76 202 'default' => 'CASE WHEN id_group < 4 THEN id_group ELSE 4 END, 1',
Chris@76 203 'reverse' => 'CASE WHEN id_group < 4 THEN id_group ELSE 4 END, 1 DESC',
Chris@76 204 ),
Chris@76 205 ),
Chris@76 206 'modify' => array(
Chris@76 207 'header' => array(
Chris@76 208 'value' => $txt['modify'],
Chris@76 209 ),
Chris@76 210 'data' => array(
Chris@76 211 'sprintf' => array(
Chris@76 212 'format' => '<a href="' . $scripturl . '?action=admin;area=membergroups;sa=edit;group=%1$d">' . $txt['membergroups_modify'] . '</a>',
Chris@76 213 'params' => array(
Chris@76 214 'id_group' => false,
Chris@76 215 ),
Chris@76 216 ),
Chris@76 217 'style' => 'text-align: center',
Chris@76 218 ),
Chris@76 219 ),
Chris@76 220 ),
Chris@76 221 'additional_rows' => array(
Chris@76 222 array(
Chris@76 223 'position' => 'below_table_data',
Chris@76 224 'value' => '[<a href="' . $scripturl . '?action=admin;area=membergroups;sa=add;generalgroup">' . $txt['membergroups_add_group'] . '</a>]',
Chris@76 225 ),
Chris@76 226 ),
Chris@76 227 );
Chris@76 228
Chris@76 229 require_once($sourcedir . '/Subs-List.php');
Chris@76 230 createList($listOptions);
Chris@76 231
Chris@76 232 // The second list shows the post count based groups.
Chris@76 233 $listOptions = array(
Chris@76 234 'id' => 'post_count_membergroups_list',
Chris@76 235 'title' => $txt['membergroups_post'],
Chris@76 236 'base_href' => $scripturl . '?action=admin;area=membergroups' . (isset($_REQUEST['sort']) ? ';sort=' . urlencode($_REQUEST['sort']) : ''),
Chris@76 237 'default_sort_col' => 'required_posts',
Chris@76 238 'request_vars' => array(
Chris@76 239 'sort' => 'sort2',
Chris@76 240 'desc' => 'desc2',
Chris@76 241 ),
Chris@76 242 'get_items' => array(
Chris@76 243 'file' => $sourcedir . '/Subs-Membergroups.php',
Chris@76 244 'function' => 'list_getMembergroups',
Chris@76 245 'params' => array(
Chris@76 246 'post_count',
Chris@76 247 ),
Chris@76 248 ),
Chris@76 249 'columns' => array(
Chris@76 250 'name' => array(
Chris@76 251 'header' => array(
Chris@76 252 'value' => $txt['membergroups_name'],
Chris@76 253 ),
Chris@76 254 'data' => array(
Chris@76 255 'function' => create_function('$rowData', '
Chris@76 256 global $scripturl;
Chris@76 257
Chris@76 258 $colorStyle = empty($rowData[\'online_color\']) ? \'\' : sprintf(\' style="color: %1$s;"\', $rowData[\'online_color\']);
Chris@76 259 return sprintf(\'<a href="%1$s?action=moderate;area=viewgroups;sa=members;group=%2$d"%3$s>%4$s</a>\', $scripturl, $rowData[\'id_group\'], $colorStyle, $rowData[\'group_name\']);
Chris@76 260 '),
Chris@76 261 ),
Chris@76 262 'sort' => array(
Chris@76 263 'default' => 'group_name',
Chris@76 264 'reverse' => 'group_name DESC',
Chris@76 265 ),
Chris@76 266 ),
Chris@76 267 'stars' => array(
Chris@76 268 'header' => array(
Chris@76 269 'value' => $txt['membergroups_stars'],
Chris@76 270 ),
Chris@76 271 'data' => array(
Chris@76 272 'function' => create_function('$rowData', '
Chris@76 273 global $settings;
Chris@76 274
Chris@76 275 $stars = explode(\'#\', $rowData[\'stars\']);
Chris@76 276
Chris@76 277 if (empty($stars[0]) || empty($stars[1]))
Chris@76 278 return \'\';
Chris@76 279 else
Chris@76 280 {
Chris@76 281 $star_image = sprintf(\'<img src="%1$s/%2$s" alt="*" />\', $settings[\'images_url\'], $stars[1]);
Chris@76 282 return str_repeat($star_image, $stars[0]);
Chris@76 283 }
Chris@76 284 '),
Chris@76 285 ),
Chris@76 286 'sort' => array(
Chris@76 287 'default' => 'CASE WHEN id_group < 4 THEN id_group ELSE 4 END, stars',
Chris@76 288 'reverse' => 'CASE WHEN id_group < 4 THEN id_group ELSE 4 END, stars DESC',
Chris@76 289 )
Chris@76 290 ),
Chris@76 291 'members' => array(
Chris@76 292 'header' => array(
Chris@76 293 'value' => $txt['membergroups_members_top'],
Chris@76 294 ),
Chris@76 295 'data' => array(
Chris@76 296 'db' => 'num_members',
Chris@76 297 'style' => 'text-align: center',
Chris@76 298 ),
Chris@76 299 'sort' => array(
Chris@76 300 'default' => '1 DESC',
Chris@76 301 'reverse' => '1',
Chris@76 302 ),
Chris@76 303 ),
Chris@76 304 'required_posts' => array(
Chris@76 305 'header' => array(
Chris@76 306 'value' => $txt['membergroups_min_posts'],
Chris@76 307 ),
Chris@76 308 'data' => array(
Chris@76 309 'db' => 'min_posts',
Chris@76 310 'style' => 'text-align: center',
Chris@76 311 ),
Chris@76 312 'sort' => array(
Chris@76 313 'default' => 'min_posts',
Chris@76 314 'reverse' => 'min_posts DESC',
Chris@76 315 ),
Chris@76 316 ),
Chris@76 317 'modify' => array(
Chris@76 318 'header' => array(
Chris@76 319 'value' => $txt['modify'],
Chris@76 320 ),
Chris@76 321 'data' => array(
Chris@76 322 'sprintf' => array(
Chris@76 323 'format' => '<a href="' . $scripturl . '?action=admin;area=membergroups;sa=edit;group=%1$d">' . $txt['membergroups_modify'] . '</a>',
Chris@76 324 'params' => array(
Chris@76 325 'id_group' => false,
Chris@76 326 ),
Chris@76 327 ),
Chris@76 328 'style' => 'text-align: center',
Chris@76 329 ),
Chris@76 330 ),
Chris@76 331 ),
Chris@76 332 'additional_rows' => array(
Chris@76 333 array(
Chris@76 334 'position' => 'below_table_data',
Chris@76 335 'value' => '[<a href="' . $scripturl . '?action=admin;area=membergroups;sa=add;postgroup">' . $txt['membergroups_add_group'] . '</a>]',
Chris@76 336 ),
Chris@76 337 ),
Chris@76 338 );
Chris@76 339
Chris@76 340 createList($listOptions);
Chris@76 341 }
Chris@76 342
Chris@76 343 // Add a membergroup.
Chris@76 344 function AddMembergroup()
Chris@76 345 {
Chris@76 346 global $context, $txt, $sourcedir, $modSettings, $smcFunc;
Chris@76 347
Chris@76 348 // A form was submitted, we can start adding.
Chris@76 349 if (!empty($_POST['group_name']))
Chris@76 350 {
Chris@76 351 checkSession();
Chris@76 352
Chris@76 353 $postCountBasedGroup = isset($_POST['min_posts']) && (!isset($_POST['postgroup_based']) || !empty($_POST['postgroup_based']));
Chris@76 354 $_POST['group_type'] = !isset($_POST['group_type']) || $_POST['group_type'] < 0 || $_POST['group_type'] > 3 || ($_POST['group_type'] == 1 && !allowedTo('admin_forum')) ? 0 : (int) $_POST['group_type'];
Chris@76 355
Chris@76 356 // !!! Check for members with same name too?
Chris@76 357
Chris@76 358 $request = $smcFunc['db_query']('', '
Chris@76 359 SELECT MAX(id_group)
Chris@76 360 FROM {db_prefix}membergroups',
Chris@76 361 array(
Chris@76 362 )
Chris@76 363 );
Chris@76 364 list ($id_group) = $smcFunc['db_fetch_row']($request);
Chris@76 365 $smcFunc['db_free_result']($request);
Chris@76 366 $id_group++;
Chris@76 367
Chris@76 368 $smcFunc['db_insert']('',
Chris@76 369 '{db_prefix}membergroups',
Chris@76 370 array(
Chris@76 371 'id_group' => 'int', 'description' => 'string', 'group_name' => 'string-80', 'min_posts' => 'int',
Chris@76 372 'stars' => 'string', 'online_color' => 'string', 'group_type' => 'int',
Chris@76 373 ),
Chris@76 374 array(
Chris@76 375 $id_group, '', $_POST['group_name'], ($postCountBasedGroup ? (int) $_POST['min_posts'] : '-1'),
Chris@76 376 '1#star.gif', '', $_POST['group_type'],
Chris@76 377 ),
Chris@76 378 array('id_group')
Chris@76 379 );
Chris@76 380
Chris@76 381 // Update the post groups now, if this is a post group!
Chris@76 382 if (isset($_POST['min_posts']))
Chris@76 383 updateStats('postgroups');
Chris@76 384
Chris@76 385 // You cannot set permissions for post groups if they are disabled.
Chris@76 386 if ($postCountBasedGroup && empty($modSettings['permission_enable_postgroups']))
Chris@76 387 $_POST['perm_type'] = '';
Chris@76 388
Chris@76 389 if ($_POST['perm_type'] == 'predefined')
Chris@76 390 {
Chris@76 391 // Set default permission level.
Chris@76 392 require_once($sourcedir . '/ManagePermissions.php');
Chris@76 393 setPermissionLevel($_POST['level'], $id_group, 'null');
Chris@76 394 }
Chris@76 395 // Copy or inherit the permissions!
Chris@76 396 elseif ($_POST['perm_type'] == 'copy' || $_POST['perm_type'] == 'inherit')
Chris@76 397 {
Chris@76 398 $copy_id = $_POST['perm_type'] == 'copy' ? (int) $_POST['copyperm'] : (int) $_POST['inheritperm'];
Chris@76 399
Chris@76 400 // Are you a powerful admin?
Chris@76 401 if (!allowedTo('admin_forum'))
Chris@76 402 {
Chris@76 403 $request = $smcFunc['db_query']('', '
Chris@76 404 SELECT group_type
Chris@76 405 FROM {db_prefix}membergroups
Chris@76 406 WHERE id_group = {int:copy_from}
Chris@76 407 LIMIT {int:limit}',
Chris@76 408 array(
Chris@76 409 'copy_from' => $copy_id,
Chris@76 410 'limit' => 1,
Chris@76 411 )
Chris@76 412 );
Chris@76 413 list ($copy_type) = $smcFunc['db_fetch_row']($request);
Chris@76 414 $smcFunc['db_free_result']($request);
Chris@76 415
Chris@76 416 // Protected groups are... well, protected!
Chris@76 417 if ($copy_type == 1)
Chris@76 418 fatal_lang_error('membergroup_does_not_exist');
Chris@76 419 }
Chris@76 420
Chris@76 421 // Don't allow copying of a real priviledged person!
Chris@76 422 require_once($sourcedir . '/ManagePermissions.php');
Chris@76 423 loadIllegalPermissions();
Chris@76 424
Chris@76 425 $request = $smcFunc['db_query']('', '
Chris@76 426 SELECT permission, add_deny
Chris@76 427 FROM {db_prefix}permissions
Chris@76 428 WHERE id_group = {int:copy_from}',
Chris@76 429 array(
Chris@76 430 'copy_from' => $copy_id,
Chris@76 431 )
Chris@76 432 );
Chris@76 433 $inserts = array();
Chris@76 434 while ($row = $smcFunc['db_fetch_assoc']($request))
Chris@76 435 {
Chris@76 436 if (empty($context['illegal_permissions']) || !in_array($row['permission'], $context['illegal_permissions']))
Chris@76 437 $inserts[] = array($id_group, $row['permission'], $row['add_deny']);
Chris@76 438 }
Chris@76 439 $smcFunc['db_free_result']($request);
Chris@76 440
Chris@76 441 if (!empty($inserts))
Chris@76 442 $smcFunc['db_insert']('insert',
Chris@76 443 '{db_prefix}permissions',
Chris@76 444 array('id_group' => 'int', 'permission' => 'string', 'add_deny' => 'int'),
Chris@76 445 $inserts,
Chris@76 446 array('id_group', 'permission')
Chris@76 447 );
Chris@76 448
Chris@76 449 $request = $smcFunc['db_query']('', '
Chris@76 450 SELECT id_profile, permission, add_deny
Chris@76 451 FROM {db_prefix}board_permissions
Chris@76 452 WHERE id_group = {int:copy_from}',
Chris@76 453 array(
Chris@76 454 'copy_from' => $copy_id,
Chris@76 455 )
Chris@76 456 );
Chris@76 457 $inserts = array();
Chris@76 458 while ($row = $smcFunc['db_fetch_assoc']($request))
Chris@76 459 $inserts[] = array($id_group, $row['id_profile'], $row['permission'], $row['add_deny']);
Chris@76 460 $smcFunc['db_free_result']($request);
Chris@76 461
Chris@76 462 if (!empty($inserts))
Chris@76 463 $smcFunc['db_insert']('insert',
Chris@76 464 '{db_prefix}board_permissions',
Chris@76 465 array('id_group' => 'int', 'id_profile' => 'int', 'permission' => 'string', 'add_deny' => 'int'),
Chris@76 466 $inserts,
Chris@76 467 array('id_group', 'id_profile', 'permission')
Chris@76 468 );
Chris@76 469
Chris@76 470 // Also get some membergroup information if we're copying and not copying from guests...
Chris@76 471 if ($copy_id > 0 && $_POST['perm_type'] == 'copy')
Chris@76 472 {
Chris@76 473 $request = $smcFunc['db_query']('', '
Chris@76 474 SELECT online_color, max_messages, stars
Chris@76 475 FROM {db_prefix}membergroups
Chris@76 476 WHERE id_group = {int:copy_from}
Chris@76 477 LIMIT 1',
Chris@76 478 array(
Chris@76 479 'copy_from' => $copy_id,
Chris@76 480 )
Chris@76 481 );
Chris@76 482 $group_info = $smcFunc['db_fetch_assoc']($request);
Chris@76 483 $smcFunc['db_free_result']($request);
Chris@76 484
Chris@76 485 // ...and update the new membergroup with it.
Chris@76 486 $smcFunc['db_query']('', '
Chris@76 487 UPDATE {db_prefix}membergroups
Chris@76 488 SET
Chris@76 489 online_color = {string:online_color},
Chris@76 490 max_messages = {int:max_messages},
Chris@76 491 stars = {string:stars}
Chris@76 492 WHERE id_group = {int:current_group}',
Chris@76 493 array(
Chris@76 494 'max_messages' => $group_info['max_messages'],
Chris@76 495 'current_group' => $id_group,
Chris@76 496 'online_color' => $group_info['online_color'],
Chris@76 497 'stars' => $group_info['stars'],
Chris@76 498 )
Chris@76 499 );
Chris@76 500 }
Chris@76 501 // If inheriting say so...
Chris@76 502 elseif ($_POST['perm_type'] == 'inherit')
Chris@76 503 {
Chris@76 504 $smcFunc['db_query']('', '
Chris@76 505 UPDATE {db_prefix}membergroups
Chris@76 506 SET id_parent = {int:copy_from}
Chris@76 507 WHERE id_group = {int:current_group}',
Chris@76 508 array(
Chris@76 509 'copy_from' => $copy_id,
Chris@76 510 'current_group' => $id_group,
Chris@76 511 )
Chris@76 512 );
Chris@76 513 }
Chris@76 514 }
Chris@76 515
Chris@76 516 // Make sure all boards selected are stored in a proper array.
Chris@76 517 $_POST['boardaccess'] = empty($_POST['boardaccess']) || !is_array($_POST['boardaccess']) ? array() : $_POST['boardaccess'];
Chris@76 518 foreach ($_POST['boardaccess'] as $key => $value)
Chris@76 519 $_POST['boardaccess'][$key] = (int) $value;
Chris@76 520
Chris@76 521 // Only do this if they have special access requirements.
Chris@76 522 if (!empty($_POST['boardaccess']))
Chris@76 523 $smcFunc['db_query']('', '
Chris@76 524 UPDATE {db_prefix}boards
Chris@76 525 SET member_groups = CASE WHEN member_groups = {string:blank_string} THEN {string:group_id_string} ELSE CONCAT(member_groups, {string:comma_group}) END
Chris@76 526 WHERE id_board IN ({array_int:board_list})',
Chris@76 527 array(
Chris@76 528 'board_list' => $_POST['boardaccess'],
Chris@76 529 'blank_string' => '',
Chris@76 530 'group_id_string' => (string) $id_group,
Chris@76 531 'comma_group' => ',' . $id_group,
Chris@76 532 )
Chris@76 533 );
Chris@76 534
Chris@76 535 // If this is joinable then set it to show group membership in people's profiles.
Chris@76 536 if (empty($modSettings['show_group_membership']) && $_POST['group_type'] > 1)
Chris@76 537 updateSettings(array('show_group_membership' => 1));
Chris@76 538
Chris@76 539 // Rebuild the group cache.
Chris@76 540 updateSettings(array(
Chris@76 541 'settings_updated' => time(),
Chris@76 542 ));
Chris@76 543
Chris@76 544 // We did it.
Chris@76 545 logAction('add_group', array('group' => $_POST['group_name']), 'admin');
Chris@76 546
Chris@76 547 // Go change some more settings.
Chris@76 548 redirectexit('action=admin;area=membergroups;sa=edit;group=' . $id_group);
Chris@76 549 }
Chris@76 550
Chris@76 551 // Just show the 'add membergroup' screen.
Chris@76 552 $context['page_title'] = $txt['membergroups_new_group'];
Chris@76 553 $context['sub_template'] = 'new_group';
Chris@76 554 $context['post_group'] = isset($_REQUEST['postgroup']);
Chris@76 555 $context['undefined_group'] = !isset($_REQUEST['postgroup']) && !isset($_REQUEST['generalgroup']);
Chris@76 556 $context['allow_protected'] = allowedTo('admin_forum');
Chris@76 557
Chris@76 558 $result = $smcFunc['db_query']('', '
Chris@76 559 SELECT id_group, group_name
Chris@76 560 FROM {db_prefix}membergroups
Chris@76 561 WHERE (id_group > {int:moderator_group} OR id_group = {int:global_mod_group})' . (empty($modSettings['permission_enable_postgroups']) ? '
Chris@76 562 AND min_posts = {int:min_posts}' : '') . (allowedTo('admin_forum') ? '' : '
Chris@76 563 AND group_type != {int:is_protected}') . '
Chris@76 564 ORDER BY min_posts, id_group != {int:global_mod_group}, group_name',
Chris@76 565 array(
Chris@76 566 'moderator_group' => 3,
Chris@76 567 'global_mod_group' => 2,
Chris@76 568 'min_posts' => -1,
Chris@76 569 'is_protected' => 1,
Chris@76 570 )
Chris@76 571 );
Chris@76 572 $context['groups'] = array();
Chris@76 573 while ($row = $smcFunc['db_fetch_assoc']($result))
Chris@76 574 $context['groups'][] = array(
Chris@76 575 'id' => $row['id_group'],
Chris@76 576 'name' => $row['group_name']
Chris@76 577 );
Chris@76 578 $smcFunc['db_free_result']($result);
Chris@76 579
Chris@76 580 $result = $smcFunc['db_query']('', '
Chris@76 581 SELECT id_board, name, child_level
Chris@76 582 FROM {db_prefix}boards
Chris@76 583 ORDER BY board_order',
Chris@76 584 array(
Chris@76 585 )
Chris@76 586 );
Chris@76 587 $context['boards'] = array();
Chris@76 588 while ($row = $smcFunc['db_fetch_assoc']($result))
Chris@76 589 $context['boards'][] = array(
Chris@76 590 'id' => $row['id_board'],
Chris@76 591 'name' => $row['name'],
Chris@76 592 'child_level' => $row['child_level'],
Chris@76 593 'selected' => false
Chris@76 594 );
Chris@76 595 $smcFunc['db_free_result']($result);
Chris@76 596 }
Chris@76 597
Chris@76 598 // Deleting a membergroup by URL (not implemented).
Chris@76 599 function DeleteMembergroup()
Chris@76 600 {
Chris@76 601 global $sourcedir;
Chris@76 602
Chris@76 603 checkSession('get');
Chris@76 604
Chris@76 605 require_once($sourcedir . '/Subs-Membergroups.php');
Chris@76 606 deleteMembergroups((int) $_REQUEST['group']);
Chris@76 607
Chris@76 608 // Go back to the membergroup index.
Chris@76 609 redirectexit('action=admin;area=membergroups;');
Chris@76 610 }
Chris@76 611
Chris@76 612 // Editing a membergroup.
Chris@76 613 function EditMembergroup()
Chris@76 614 {
Chris@76 615 global $context, $txt, $sourcedir, $modSettings, $smcFunc;
Chris@76 616
Chris@76 617 $_REQUEST['group'] = isset($_REQUEST['group']) && $_REQUEST['group'] > 0 ? (int) $_REQUEST['group'] : 0;
Chris@76 618
Chris@76 619 // Make sure this group is editable.
Chris@76 620 if (!empty($_REQUEST['group']))
Chris@76 621 {
Chris@76 622 $request = $smcFunc['db_query']('', '
Chris@76 623 SELECT id_group
Chris@76 624 FROM {db_prefix}membergroups
Chris@76 625 WHERE id_group = {int:current_group}' . (allowedTo('admin_forum') ? '' : '
Chris@76 626 AND group_type != {int:is_protected}') . '
Chris@76 627 LIMIT {int:limit}',
Chris@76 628 array(
Chris@76 629 'current_group' => $_REQUEST['group'],
Chris@76 630 'is_protected' => 1,
Chris@76 631 'limit' => 1,
Chris@76 632 )
Chris@76 633 );
Chris@76 634 list ($_REQUEST['group']) = $smcFunc['db_fetch_row']($request);
Chris@76 635 $smcFunc['db_free_result']($request);
Chris@76 636 }
Chris@76 637
Chris@76 638 // Now, do we have a valid id?
Chris@76 639 if (empty($_REQUEST['group']))
Chris@76 640 fatal_lang_error('membergroup_does_not_exist', false);
Chris@76 641
Chris@76 642 // The delete this membergroup button was pressed.
Chris@76 643 if (isset($_POST['delete']))
Chris@76 644 {
Chris@76 645 checkSession();
Chris@76 646
Chris@76 647 require_once($sourcedir . '/Subs-Membergroups.php');
Chris@76 648 deleteMembergroups($_REQUEST['group']);
Chris@76 649
Chris@76 650 redirectexit('action=admin;area=membergroups;');
Chris@76 651 }
Chris@76 652 // A form was submitted with the new membergroup settings.
Chris@76 653 elseif (isset($_POST['submit']))
Chris@76 654 {
Chris@76 655 // Validate the session.
Chris@76 656 checkSession();
Chris@76 657
Chris@76 658 // Can they really inherit from this group?
Chris@76 659 if ($_POST['group_inherit'] != -2 && !allowedTo('admin_forum'))
Chris@76 660 {
Chris@76 661 $request = $smcFunc['db_query']('', '
Chris@76 662 SELECT group_type
Chris@76 663 FROM {db_prefix}membergroups
Chris@76 664 WHERE id_group = {int:inherit_from}
Chris@76 665 LIMIT {int:limit}',
Chris@76 666 array(
Chris@76 667 'inherit_from' => $_POST['group_inherit'],
Chris@76 668 'limit' => 1,
Chris@76 669 )
Chris@76 670 );
Chris@76 671 list ($inherit_type) = $smcFunc['db_fetch_row']($request);
Chris@76 672 $smcFunc['db_free_result']($request);
Chris@76 673 }
Chris@76 674
Chris@76 675 // Set variables to their proper value.
Chris@76 676 $_POST['max_messages'] = isset($_POST['max_messages']) ? (int) $_POST['max_messages'] : 0;
Chris@76 677 $_POST['min_posts'] = isset($_POST['min_posts']) && isset($_POST['group_type']) && $_POST['group_type'] == -1 && $_REQUEST['group'] > 3 ? abs($_POST['min_posts']) : ($_REQUEST['group'] == 4 ? 0 : -1);
Chris@76 678 $_POST['stars'] = (empty($_POST['star_count']) || $_POST['star_count'] < 0) ? '' : min((int) $_POST['star_count'], 99) . '#' . $_POST['star_image'];
Chris@76 679 $_POST['group_desc'] = isset($_POST['group_desc']) && ($_REQUEST['group'] == 1 || (isset($_POST['group_type']) && $_POST['group_type'] != -1)) ? trim($_POST['group_desc']) : '';
Chris@76 680 $_POST['group_type'] = !isset($_POST['group_type']) || $_POST['group_type'] < 0 || $_POST['group_type'] > 3 || ($_POST['group_type'] == 1 && !allowedTo('admin_forum')) ? 0 : (int) $_POST['group_type'];
Chris@76 681 $_POST['group_hidden'] = empty($_POST['group_hidden']) || $_POST['min_posts'] != -1 || $_REQUEST['group'] == 3 ? 0 : (int) $_POST['group_hidden'];
Chris@76 682 $_POST['group_inherit'] = $_REQUEST['group'] > 1 && $_REQUEST['group'] != 3 && (empty($inherit_type) || $inherit_type != 1) ? (int) $_POST['group_inherit'] : -2;
Chris@76 683
Chris@76 684 // !!! Don't set online_color for the Moderators group?
Chris@76 685
Chris@76 686 // Do the update of the membergroup settings.
Chris@76 687 $smcFunc['db_query']('', '
Chris@76 688 UPDATE {db_prefix}membergroups
Chris@76 689 SET group_name = {string:group_name}, online_color = {string:online_color},
Chris@76 690 max_messages = {int:max_messages}, min_posts = {int:min_posts}, stars = {string:stars},
Chris@76 691 description = {string:group_desc}, group_type = {int:group_type}, hidden = {int:group_hidden},
Chris@76 692 id_parent = {int:group_inherit}
Chris@76 693 WHERE id_group = {int:current_group}',
Chris@76 694 array(
Chris@76 695 'max_messages' => $_POST['max_messages'],
Chris@76 696 'min_posts' => $_POST['min_posts'],
Chris@76 697 'group_type' => $_POST['group_type'],
Chris@76 698 'group_hidden' => $_POST['group_hidden'],
Chris@76 699 'group_inherit' => $_POST['group_inherit'],
Chris@76 700 'current_group' => (int) $_REQUEST['group'],
Chris@76 701 'group_name' => $_POST['group_name'],
Chris@76 702 'online_color' => $_POST['online_color'],
Chris@76 703 'stars' => $_POST['stars'],
Chris@76 704 'group_desc' => $_POST['group_desc'],
Chris@76 705 )
Chris@76 706 );
Chris@76 707
Chris@76 708 // Time to update the boards this membergroup has access to.
Chris@76 709 if ($_REQUEST['group'] == 2 || $_REQUEST['group'] > 3)
Chris@76 710 {
Chris@76 711 $_POST['boardaccess'] = empty($_POST['boardaccess']) || !is_array($_POST['boardaccess']) ? array() : $_POST['boardaccess'];
Chris@76 712 foreach ($_POST['boardaccess'] as $key => $value)
Chris@76 713 $_POST['boardaccess'][$key] = (int) $value;
Chris@76 714
Chris@76 715 // Find all board this group is in, but shouldn't be in.
Chris@76 716 $request = $smcFunc['db_query']('', '
Chris@76 717 SELECT id_board, member_groups
Chris@76 718 FROM {db_prefix}boards
Chris@76 719 WHERE FIND_IN_SET({string:current_group}, member_groups) != 0' . (empty($_POST['boardaccess']) ? '' : '
Chris@76 720 AND id_board NOT IN ({array_int:board_access_list})'),
Chris@76 721 array(
Chris@76 722 'current_group' => (int) $_REQUEST['group'],
Chris@76 723 'board_access_list' => $_POST['boardaccess'],
Chris@76 724 )
Chris@76 725 );
Chris@76 726 while ($row = $smcFunc['db_fetch_assoc']($request))
Chris@76 727 $smcFunc['db_query']('', '
Chris@76 728 UPDATE {db_prefix}boards
Chris@76 729 SET member_groups = {string:member_group_access}
Chris@76 730 WHERE id_board = {int:current_board}',
Chris@76 731 array(
Chris@76 732 'current_board' => $row['id_board'],
Chris@76 733 'member_group_access' => implode(',', array_diff(explode(',', $row['member_groups']), array($_REQUEST['group']))),
Chris@76 734 )
Chris@76 735 );
Chris@76 736 $smcFunc['db_free_result']($request);
Chris@76 737
Chris@76 738 // Add the membergroup to all boards that hadn't been set yet.
Chris@76 739 if (!empty($_POST['boardaccess']))
Chris@76 740 $smcFunc['db_query']('', '
Chris@76 741 UPDATE {db_prefix}boards
Chris@76 742 SET member_groups = CASE WHEN member_groups = {string:blank_string} THEN {string:group_id_string} ELSE CONCAT(member_groups, {string:comma_group}) END
Chris@76 743 WHERE id_board IN ({array_int:board_list})
Chris@76 744 AND FIND_IN_SET({int:current_group}, member_groups) = 0',
Chris@76 745 array(
Chris@76 746 'board_list' => $_POST['boardaccess'],
Chris@76 747 'blank_string' => '',
Chris@76 748 'current_group' => (int) $_REQUEST['group'],
Chris@76 749 'group_id_string' => (string) (int) $_REQUEST['group'],
Chris@76 750 'comma_group' => ',' . $_REQUEST['group'],
Chris@76 751 )
Chris@76 752 );
Chris@76 753 }
Chris@76 754
Chris@76 755 // Remove everyone from this group!
Chris@76 756 if ($_POST['min_posts'] != -1)
Chris@76 757 {
Chris@76 758 $smcFunc['db_query']('', '
Chris@76 759 UPDATE {db_prefix}members
Chris@76 760 SET id_group = {int:regular_member}
Chris@76 761 WHERE id_group = {int:current_group}',
Chris@76 762 array(
Chris@76 763 'regular_member' => 0,
Chris@76 764 'current_group' => (int) $_REQUEST['group'],
Chris@76 765 )
Chris@76 766 );
Chris@76 767
Chris@76 768 $request = $smcFunc['db_query']('', '
Chris@76 769 SELECT id_member, additional_groups
Chris@76 770 FROM {db_prefix}members
Chris@76 771 WHERE FIND_IN_SET({string:current_group}, additional_groups) != 0',
Chris@76 772 array(
Chris@76 773 'current_group' => (int) $_REQUEST['group'],
Chris@76 774 )
Chris@76 775 );
Chris@76 776 $updates = array();
Chris@76 777 while ($row = $smcFunc['db_fetch_assoc']($request))
Chris@76 778 $updates[$row['additional_groups']][] = $row['id_member'];
Chris@76 779 $smcFunc['db_free_result']($request);
Chris@76 780
Chris@76 781 foreach ($updates as $additional_groups => $memberArray)
Chris@76 782 updateMemberData($memberArray, array('additional_groups' => implode(',', array_diff(explode(',', $additional_groups), array((int) $_REQUEST['group'])))));
Chris@76 783 }
Chris@76 784 elseif ($_REQUEST['group'] != 3)
Chris@76 785 {
Chris@76 786 // Making it a hidden group? If so remove everyone with it as primary group (Actually, just make them additional).
Chris@76 787 if ($_POST['group_hidden'] == 2)
Chris@76 788 {
Chris@76 789 $request = $smcFunc['db_query']('', '
Chris@76 790 SELECT id_member, additional_groups
Chris@76 791 FROM {db_prefix}members
Chris@76 792 WHERE id_group = {int:current_group}
Chris@76 793 AND FIND_IN_SET({int:current_group}, additional_groups) = 0',
Chris@76 794 array(
Chris@76 795 'current_group' => (int) $_REQUEST['group'],
Chris@76 796 )
Chris@76 797 );
Chris@76 798 $updates = array();
Chris@76 799 while ($row = $smcFunc['db_fetch_assoc']($request))
Chris@76 800 $updates[$row['additional_groups']][] = $row['id_member'];
Chris@76 801 $smcFunc['db_free_result']($request);
Chris@76 802
Chris@76 803 foreach ($updates as $additional_groups => $memberArray)
Chris@76 804 updateMemberData($memberArray, array('additional_groups' => implode(',', array_merge(explode(',', $additional_groups), array((int) $_REQUEST['group'])))));
Chris@76 805
Chris@76 806 $smcFunc['db_query']('', '
Chris@76 807 UPDATE {db_prefix}members
Chris@76 808 SET id_group = {int:regular_member}
Chris@76 809 WHERE id_group = {int:current_group}',
Chris@76 810 array(
Chris@76 811 'regular_member' => 0,
Chris@76 812 'current_group' => $_REQUEST['group'],
Chris@76 813 )
Chris@76 814 );
Chris@76 815 }
Chris@76 816
Chris@76 817 // Either way, let's check our "show group membership" setting is correct.
Chris@76 818 $request = $smcFunc['db_query']('', '
Chris@76 819 SELECT COUNT(*)
Chris@76 820 FROM {db_prefix}membergroups
Chris@76 821 WHERE group_type > {int:non_joinable}',
Chris@76 822 array(
Chris@76 823 'non_joinable' => 1,
Chris@76 824 )
Chris@76 825 );
Chris@76 826 list ($have_joinable) = $smcFunc['db_fetch_row']($request);
Chris@76 827 $smcFunc['db_free_result']($request);
Chris@76 828
Chris@76 829 // Do we need to update the setting?
Chris@76 830 if ((empty($modSettings['show_group_membership']) && $have_joinable) || (!empty($modSettings['show_group_membership']) && !$have_joinable))
Chris@76 831 updateSettings(array('show_group_membership' => $have_joinable ? 1 : 0));
Chris@76 832 }
Chris@76 833
Chris@76 834 // Do we need to set inherited permissions?
Chris@76 835 if ($_POST['group_inherit'] != -2 && $_POST['group_inherit'] != $_POST['old_inherit'])
Chris@76 836 {
Chris@76 837 require_once($sourcedir . '/ManagePermissions.php');
Chris@76 838 updateChildPermissions($_POST['group_inherit']);
Chris@76 839 }
Chris@76 840
Chris@76 841 // Finally, moderators!
Chris@76 842 $moderator_string = isset($_POST['group_moderators']) ? trim($_POST['group_moderators']) : '';
Chris@76 843 $smcFunc['db_query']('', '
Chris@76 844 DELETE FROM {db_prefix}group_moderators
Chris@76 845 WHERE id_group = {int:current_group}',
Chris@76 846 array(
Chris@76 847 'current_group' => $_REQUEST['group'],
Chris@76 848 )
Chris@76 849 );
Chris@76 850 if ((!empty($moderator_string) || !empty($_POST['moderator_list'])) && $_POST['min_posts'] == -1 && $_REQUEST['group'] != 3)
Chris@76 851 {
Chris@76 852 // Get all the usernames from the string
Chris@76 853 if (!empty($moderator_string))
Chris@76 854 {
Chris@76 855 $moderator_string = strtr(preg_replace('~&amp;#(\d{4,5}|[2-9]\d{2,4}|1[2-9]\d);~', '&#$1;', htmlspecialchars($moderator_string), ENT_QUOTES), array('&quot;' => '"'));
Chris@76 856 preg_match_all('~"([^"]+)"~', $moderator_string, $matches);
Chris@76 857 $moderators = array_merge($matches[1], explode(',', preg_replace('~"[^"]+"~', '', $moderator_string)));
Chris@76 858 for ($k = 0, $n = count($moderators); $k < $n; $k++)
Chris@76 859 {
Chris@76 860 $moderators[$k] = trim($moderators[$k]);
Chris@76 861
Chris@76 862 if (strlen($moderators[$k]) == 0)
Chris@76 863 unset($moderators[$k]);
Chris@76 864 }
Chris@76 865
Chris@76 866 // Find all the id_member's for the member_name's in the list.
Chris@76 867 $group_moderators = array();
Chris@76 868 if (!empty($moderators))
Chris@76 869 {
Chris@76 870 $request = $smcFunc['db_query']('', '
Chris@76 871 SELECT id_member
Chris@76 872 FROM {db_prefix}members
Chris@76 873 WHERE member_name IN ({array_string:moderators}) OR real_name IN ({array_string:moderators})
Chris@76 874 LIMIT ' . count($moderators),
Chris@76 875 array(
Chris@76 876 'moderators' => $moderators,
Chris@76 877 )
Chris@76 878 );
Chris@76 879 while ($row = $smcFunc['db_fetch_assoc']($request))
Chris@76 880 $group_moderators[] = $row['id_member'];
Chris@76 881 $smcFunc['db_free_result']($request);
Chris@76 882 }
Chris@76 883 }
Chris@76 884 else
Chris@76 885 {
Chris@76 886 $moderators = array();
Chris@76 887 foreach ($_POST['moderator_list'] as $moderator)
Chris@76 888 $moderators[] = (int) $moderator;
Chris@76 889
Chris@76 890 $group_moderators = array();
Chris@76 891 if (!empty($moderators))
Chris@76 892 {
Chris@76 893 $request = $smcFunc['db_query']('', '
Chris@76 894 SELECT id_member
Chris@76 895 FROM {db_prefix}members
Chris@76 896 WHERE id_member IN ({array_int:moderators})
Chris@76 897 LIMIT {int:num_moderators}',
Chris@76 898 array(
Chris@76 899 'moderators' => $moderators,
Chris@76 900 'num_moderators' => count($moderators),
Chris@76 901 )
Chris@76 902 );
Chris@76 903 while ($row = $smcFunc['db_fetch_assoc']($request))
Chris@76 904 $group_moderators[] = $row['id_member'];
Chris@76 905 $smcFunc['db_free_result']($request);
Chris@76 906 }
Chris@76 907 }
Chris@76 908
Chris@76 909 // Found some?
Chris@76 910 if (!empty($group_moderators))
Chris@76 911 {
Chris@76 912 $mod_insert = array();
Chris@76 913 foreach ($group_moderators as $moderator)
Chris@76 914 $mod_insert[] = array($_REQUEST['group'], $moderator);
Chris@76 915
Chris@76 916 $smcFunc['db_insert']('insert',
Chris@76 917 '{db_prefix}group_moderators',
Chris@76 918 array('id_group' => 'int', 'id_member' => 'int'),
Chris@76 919 $mod_insert,
Chris@76 920 array('id_group', 'id_member')
Chris@76 921 );
Chris@76 922 }
Chris@76 923 }
Chris@76 924
Chris@76 925 // There might have been some post group changes.
Chris@76 926 updateStats('postgroups');
Chris@76 927 // We've definetely changed some group stuff.
Chris@76 928 updateSettings(array(
Chris@76 929 'settings_updated' => time(),
Chris@76 930 ));
Chris@76 931
Chris@76 932 // Log the edit.
Chris@76 933 logAction('edited_group', array('group' => $_POST['group_name']), 'admin');
Chris@76 934
Chris@76 935 redirectexit('action=admin;area=membergroups');
Chris@76 936 }
Chris@76 937
Chris@76 938 // Fetch the current group information.
Chris@76 939 $request = $smcFunc['db_query']('', '
Chris@76 940 SELECT group_name, description, min_posts, online_color, max_messages, stars, group_type, hidden, id_parent
Chris@76 941 FROM {db_prefix}membergroups
Chris@76 942 WHERE id_group = {int:current_group}
Chris@76 943 LIMIT 1',
Chris@76 944 array(
Chris@76 945 'current_group' => (int) $_REQUEST['group'],
Chris@76 946 )
Chris@76 947 );
Chris@76 948 if ($smcFunc['db_num_rows']($request) == 0)
Chris@76 949 fatal_lang_error('membergroup_does_not_exist', false);
Chris@76 950 $row = $smcFunc['db_fetch_assoc']($request);
Chris@76 951 $smcFunc['db_free_result']($request);
Chris@76 952
Chris@76 953 $row['stars'] = explode('#', $row['stars']);
Chris@76 954
Chris@76 955 $context['group'] = array(
Chris@76 956 'id' => $_REQUEST['group'],
Chris@76 957 'name' => $row['group_name'],
Chris@76 958 'description' => htmlspecialchars($row['description']),
Chris@76 959 'editable_name' => htmlspecialchars($row['group_name']),
Chris@76 960 'color' => $row['online_color'],
Chris@76 961 'min_posts' => $row['min_posts'],
Chris@76 962 'max_messages' => $row['max_messages'],
Chris@76 963 'star_count' => (int) $row['stars'][0],
Chris@76 964 'star_image' => isset($row['stars'][1]) ? $row['stars'][1] : '',
Chris@76 965 'is_post_group' => $row['min_posts'] != -1,
Chris@76 966 'type' => $row['min_posts'] != -1 ? 0 : $row['group_type'],
Chris@76 967 'hidden' => $row['min_posts'] == -1 ? $row['hidden'] : 0,
Chris@76 968 'inherited_from' => $row['id_parent'],
Chris@76 969 'allow_post_group' => $_REQUEST['group'] == 2 || $_REQUEST['group'] > 4,
Chris@76 970 'allow_delete' => $_REQUEST['group'] == 2 || $_REQUEST['group'] > 4,
Chris@76 971 'allow_protected' => allowedTo('admin_forum'),
Chris@76 972 );
Chris@76 973
Chris@76 974 // Get any moderators for this group
Chris@76 975 $request = $smcFunc['db_query']('', '
Chris@76 976 SELECT mem.id_member, mem.real_name
Chris@76 977 FROM {db_prefix}group_moderators AS mods
Chris@76 978 INNER JOIN {db_prefix}members AS mem ON (mem.id_member = mods.id_member)
Chris@76 979 WHERE mods.id_group = {int:current_group}',
Chris@76 980 array(
Chris@76 981 'current_group' => $_REQUEST['group'],
Chris@76 982 )
Chris@76 983 );
Chris@76 984 $context['group']['moderators'] = array();
Chris@76 985 while ($row = $smcFunc['db_fetch_assoc']($request))
Chris@76 986 $context['group']['moderators'][$row['id_member']] = $row['real_name'];
Chris@76 987 $smcFunc['db_free_result']($request);
Chris@76 988
Chris@76 989 $context['group']['moderator_list'] = empty($context['group']['moderators']) ? '' : '&quot;' . implode('&quot;, &quot;', $context['group']['moderators']) . '&quot;';
Chris@76 990
Chris@76 991 if (!empty($context['group']['moderators']))
Chris@76 992 list ($context['group']['last_moderator_id']) = array_slice(array_keys($context['group']['moderators']), -1);
Chris@76 993
Chris@76 994 // Get a list of boards this membergroup is allowed to see.
Chris@76 995 $context['boards'] = array();
Chris@76 996 if ($_REQUEST['group'] == 2 || $_REQUEST['group'] > 3)
Chris@76 997 {
Chris@76 998 $result = $smcFunc['db_query']('', '
Chris@76 999 SELECT id_board, name, child_level, FIND_IN_SET({string:current_group}, member_groups) != 0 AS can_access
Chris@76 1000 FROM {db_prefix}boards
Chris@76 1001 ORDER BY board_order',
Chris@76 1002 array(
Chris@76 1003 'current_group' => (int) $_REQUEST['group'],
Chris@76 1004 )
Chris@76 1005 );
Chris@76 1006 while ($row = $smcFunc['db_fetch_assoc']($result))
Chris@76 1007 $context['boards'][] = array(
Chris@76 1008 'id' => $row['id_board'],
Chris@76 1009 'name' => $row['name'],
Chris@76 1010 'child_level' => $row['child_level'],
Chris@76 1011 'selected' => !(empty($row['can_access']) || $row['can_access'] == 'f'),
Chris@76 1012 );
Chris@76 1013 $smcFunc['db_free_result']($result);
Chris@76 1014 }
Chris@76 1015
Chris@76 1016 // Finally, get all the groups this could be inherited off.
Chris@76 1017 $request = $smcFunc['db_query']('', '
Chris@76 1018 SELECT id_group, group_name
Chris@76 1019 FROM {db_prefix}membergroups
Chris@76 1020 WHERE id_group != {int:current_group}' .
Chris@76 1021 (empty($modSettings['permission_enable_postgroups']) ? '
Chris@76 1022 AND min_posts = {int:min_posts}' : '') . (allowedTo('admin_forum') ? '' : '
Chris@76 1023 AND group_type != {int:is_protected}') . '
Chris@76 1024 AND id_group NOT IN (1, 3)
Chris@76 1025 AND id_parent = {int:not_inherited}',
Chris@76 1026 array(
Chris@76 1027 'current_group' => (int) $_REQUEST['group'],
Chris@76 1028 'min_posts' => -1,
Chris@76 1029 'not_inherited' => -2,
Chris@76 1030 'is_protected' => 1,
Chris@76 1031 )
Chris@76 1032 );
Chris@76 1033 $context['inheritable_groups'] = array();
Chris@76 1034 while ($row = $smcFunc['db_fetch_assoc']($request))
Chris@76 1035 $context['inheritable_groups'][$row['id_group']] = $row['group_name'];
Chris@76 1036 $smcFunc['db_free_result']($request);
Chris@76 1037
Chris@76 1038 $context['sub_template'] = 'edit_group';
Chris@76 1039 $context['page_title'] = $txt['membergroups_edit_group'];
Chris@76 1040 }
Chris@76 1041
Chris@76 1042 // Set general membergroup settings.
Chris@76 1043 function ModifyMembergroupsettings()
Chris@76 1044 {
Chris@76 1045 global $context, $sourcedir, $scripturl, $modSettings, $txt;
Chris@76 1046
Chris@76 1047 $context['sub_template'] = 'show_settings';
Chris@76 1048 $context['page_title'] = $txt['membergroups_settings'];
Chris@76 1049
Chris@76 1050 // Needed for the settings functions.
Chris@76 1051 require_once($sourcedir . '/ManageServer.php');
Chris@76 1052
Chris@76 1053 // Don't allow assignment of guests.
Chris@76 1054 $context['permissions_excluded'] = array(-1);
Chris@76 1055
Chris@76 1056 // Only one thing here!
Chris@76 1057 $config_vars = array(
Chris@76 1058 array('permissions', 'manage_membergroups'),
Chris@76 1059 );
Chris@76 1060
Chris@76 1061 if (isset($_REQUEST['save']))
Chris@76 1062 {
Chris@76 1063 checkSession();
Chris@76 1064
Chris@76 1065 // Yeppers, saving this...
Chris@76 1066 saveDBSettings($config_vars);
Chris@76 1067 redirectexit('action=admin;area=membergroups;sa=settings');
Chris@76 1068 }
Chris@76 1069
Chris@76 1070 // Some simple context.
Chris@76 1071 $context['post_url'] = $scripturl . '?action=admin;area=membergroups;save;sa=settings';
Chris@76 1072 $context['settings_title'] = $txt['membergroups_settings'];
Chris@76 1073
Chris@76 1074 prepareDBSettingContext($config_vars);
Chris@76 1075 }
Chris@76 1076
Chris@76 1077 ?>