annotate forum/Sources/Groups.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 currently just shows group info, and allows certain privaledged members to add/remove members.
Chris@76 18
Chris@76 19 void Groups()
Chris@76 20 - allows moderators and users to access the group showing functions.
Chris@76 21 - handles permission checks, and puts the moderation bar on as required.
Chris@76 22
Chris@76 23 void MembergroupMembers()
Chris@76 24 - can be called from ManageMembergroups if it needs templating within the admin environment.
Chris@76 25 - show a list of members that are part of a given membergroup.
Chris@76 26 - called by ?action=moderate;area=viewgroups;sa=members;group=x
Chris@76 27 - requires the manage_membergroups permission.
Chris@76 28 - uses the group_members sub template of ManageMembergroups.
Chris@76 29 - allows to add and remove members from the selected membergroup.
Chris@76 30 - allows sorting on several columns.
Chris@76 31 - redirects to itself.
Chris@76 32
Chris@76 33 int list_getGroupRequestCount(string where)
Chris@76 34 - callback function for createList()
Chris@76 35 - returns the count of group requests
Chris@76 36
Chris@76 37 array list_getGroupRequests(int start, int items_per_page, string sort, string where)
Chris@76 38 - callback function for createList()
Chris@76 39 - returns an array of group requests
Chris@76 40 - each group request has:
Chris@76 41 'id'
Chris@76 42 'member_link'
Chris@76 43 'group_link'
Chris@76 44 'reason'
Chris@76 45 'time_submitted'
Chris@76 46
Chris@76 47 */
Chris@76 48
Chris@76 49 // Entry point, permission checks, admin bars, etc.
Chris@76 50 function Groups()
Chris@76 51 {
Chris@76 52 global $context, $txt, $scripturl, $sourcedir, $user_info;
Chris@76 53
Chris@76 54 // The sub-actions that we can do. Format "Function Name, Mod Bar Index if appropriate".
Chris@76 55 $subActions = array(
Chris@76 56 'index' => array('GroupList', 'view_groups'),
Chris@76 57 'members' => array('MembergroupMembers', 'view_groups'),
Chris@76 58 'requests' => array('GroupRequests', 'group_requests'),
Chris@76 59 );
Chris@76 60
Chris@76 61 // Default to sub action 'index' or 'settings' depending on permissions.
Chris@76 62 $_REQUEST['sa'] = isset($_REQUEST['sa']) && isset($subActions[$_REQUEST['sa']]) ? $_REQUEST['sa'] : 'index';
Chris@76 63
Chris@76 64 // Get the template stuff up and running.
Chris@76 65 loadLanguage('ManageMembers');
Chris@76 66 loadLanguage('ModerationCenter');
Chris@76 67 loadTemplate('ManageMembergroups');
Chris@76 68
Chris@76 69 // If we can see the moderation center, and this has a mod bar entry, add the mod center bar.
Chris@76 70 if (allowedTo('access_mod_center') || $user_info['mod_cache']['bq'] != '0=1' || $user_info['mod_cache']['gq'] != '0=1' || allowedTo('manage_membergroups'))
Chris@76 71 {
Chris@76 72 require_once($sourcedir . '/ModerationCenter.php');
Chris@76 73 $_GET['area'] = $_REQUEST['sa'] == 'requests' ? 'groups' : 'viewgroups';
Chris@76 74 ModerationMain(true);
Chris@76 75 }
Chris@76 76 // Otherwise add something to the link tree, for normal people.
Chris@76 77 else
Chris@76 78 {
Chris@76 79 isAllowedTo('view_mlist');
Chris@76 80
Chris@76 81 $context['linktree'][] = array(
Chris@76 82 'url' => $scripturl . '?action=groups',
Chris@76 83 'name' => $txt['groups'],
Chris@76 84 );
Chris@76 85 }
Chris@76 86
Chris@76 87 // Call the actual function.
Chris@76 88 $subActions[$_REQUEST['sa']][0]();
Chris@76 89 }
Chris@76 90
Chris@76 91 // This very simply lists the groups, nothing snazy.
Chris@76 92 function GroupList()
Chris@76 93 {
Chris@76 94 global $txt, $scripturl, $user_profile, $user_info, $context, $settings, $modSettings, $smcFunc, $sourcedir;
Chris@76 95
Chris@76 96 // Yep, find the groups...
Chris@76 97 $request = $smcFunc['db_query']('', '
Chris@76 98 SELECT mg.id_group, mg.group_name, mg.description, mg.group_type, mg.online_color, mg.hidden,
Chris@76 99 mg.stars, IFNULL(gm.id_member, 0) AS can_moderate
Chris@76 100 FROM {db_prefix}membergroups AS mg
Chris@76 101 LEFT JOIN {db_prefix}group_moderators AS gm ON (gm.id_group = mg.id_group AND gm.id_member = {int:current_member})
Chris@76 102 WHERE mg.min_posts = {int:min_posts}
Chris@76 103 AND mg.id_group != {int:mod_group}' . (allowedTo('admin_forum') ? '' : '
Chris@76 104 AND mg.group_type != {int:is_protected}') . '
Chris@76 105 ORDER BY group_name',
Chris@76 106 array(
Chris@76 107 'current_member' => $user_info['id'],
Chris@76 108 'min_posts' => -1,
Chris@76 109 'mod_group' => 3,
Chris@76 110 'is_protected' => 1,
Chris@76 111 )
Chris@76 112 );
Chris@76 113 // This is where we store our groups.
Chris@76 114 $context['groups'] = array();
Chris@76 115 $group_ids = array();
Chris@76 116 $context['can_moderate'] = allowedTo('manage_membergroups');
Chris@76 117 while ($row = $smcFunc['db_fetch_assoc']($request))
Chris@76 118 {
Chris@76 119 // We only list the groups they can see.
Chris@76 120 if ($row['hidden'] && !$row['can_moderate'] && !allowedTo('manage_membergroups'))
Chris@76 121 continue;
Chris@76 122
Chris@76 123 $row['stars'] = explode('#', $row['stars']);
Chris@76 124
Chris@76 125 $context['groups'][$row['id_group']] = array(
Chris@76 126 'id' => $row['id_group'],
Chris@76 127 'name' => $row['group_name'],
Chris@76 128 'desc' => $row['description'],
Chris@76 129 'color' => $row['online_color'],
Chris@76 130 'type' => $row['group_type'],
Chris@76 131 'num_members' => 0,
Chris@76 132 'stars' => !empty($row['stars'][0]) && !empty($row['stars'][1]) ? str_repeat('<img src="' . $settings['images_url'] . '/' . $row['stars'][1] . '" alt="*" />', $row['stars'][0]) : '',
Chris@76 133 );
Chris@76 134
Chris@76 135 $context['can_moderate'] |= $row['can_moderate'];
Chris@76 136 $group_ids[] = $row['id_group'];
Chris@76 137 }
Chris@76 138 $smcFunc['db_free_result']($request);
Chris@76 139
Chris@76 140 // Count up the members separately...
Chris@76 141 if (!empty($group_ids))
Chris@76 142 {
Chris@76 143 $query = $smcFunc['db_query']('', '
Chris@76 144 SELECT id_group, COUNT(*) AS num_members
Chris@76 145 FROM {db_prefix}members
Chris@76 146 WHERE id_group IN ({array_int:group_list})
Chris@76 147 GROUP BY id_group',
Chris@76 148 array(
Chris@76 149 'group_list' => $group_ids,
Chris@76 150 )
Chris@76 151 );
Chris@76 152 while ($row = $smcFunc['db_fetch_assoc']($query))
Chris@76 153 $context['groups'][$row['id_group']]['num_members'] += $row['num_members'];
Chris@76 154 $smcFunc['db_free_result']($query);
Chris@76 155
Chris@76 156 // Only do additional groups if we can moderate...
Chris@76 157 if ($context['can_moderate'])
Chris@76 158 {
Chris@76 159 $query = $smcFunc['db_query']('', '
Chris@76 160 SELECT mg.id_group, COUNT(*) AS num_members
Chris@76 161 FROM {db_prefix}membergroups AS mg
Chris@76 162 INNER JOIN {db_prefix}members AS mem ON (mem.additional_groups != {string:blank_screen}
Chris@76 163 AND mem.id_group != mg.id_group
Chris@76 164 AND FIND_IN_SET(mg.id_group, mem.additional_groups) != 0)
Chris@76 165 WHERE mg.id_group IN ({array_int:group_list})
Chris@76 166 GROUP BY mg.id_group',
Chris@76 167 array(
Chris@76 168 'group_list' => $group_ids,
Chris@76 169 'blank_screen' => '',
Chris@76 170 )
Chris@76 171 );
Chris@76 172 while ($row = $smcFunc['db_fetch_assoc']($query))
Chris@76 173 $context['groups'][$row['id_group']]['num_members'] += $row['num_members'];
Chris@76 174 $smcFunc['db_free_result']($query);
Chris@76 175 }
Chris@76 176 }
Chris@76 177
Chris@76 178 $context['sub_template'] = 'group_index';
Chris@76 179 $context['page_title'] = $txt['viewing_groups'];
Chris@76 180
Chris@76 181 // Making a list is not hard with this beauty.
Chris@76 182 require_once($sourcedir . '/Subs-List.php');
Chris@76 183
Chris@76 184 // Use the standard templates for showing this.
Chris@76 185 $listOptions = array(
Chris@76 186 'id' => 'group_lists',
Chris@76 187 'title' => $context['page_title'],
Chris@76 188 'get_items' => array(
Chris@76 189 'function' => 'list_getGroups',
Chris@76 190 ),
Chris@76 191 'columns' => array(
Chris@76 192 'group' => array(
Chris@76 193 'header' => array(
Chris@76 194 'value' => $txt['name'],
Chris@76 195 ),
Chris@76 196 'data' => array(
Chris@76 197 'function' => create_function('$group', '
Chris@76 198 global $scripturl, $context;
Chris@76 199
Chris@76 200 $output = \'<a href="\' . $scripturl . \'?action=\' . $context[\'current_action\'] . (isset($context[\'admin_area\']) ? \';area=\' . $context[\'admin_area\'] : \'\') . \';sa=members;group=\' . $group[\'id\'] . \'" \' . ($group[\'color\'] ? \'style="color: \' . $group[\'color\'] . \';"\' : \'\') . \'>\' . $group[\'name\'] . \'</a>\';
Chris@76 201
Chris@76 202 if ($group[\'desc\'])
Chris@76 203 $output .= \'<div class="smalltext">\' . $group[\'desc\'] . \'</div>\';
Chris@76 204
Chris@76 205 return $output;
Chris@76 206 '),
Chris@76 207 'style' => 'width: 50%;',
Chris@76 208 ),
Chris@76 209 ),
Chris@76 210 'stars' => array(
Chris@76 211 'header' => array(
Chris@76 212 'value' => $txt['membergroups_stars'],
Chris@76 213 ),
Chris@76 214 'data' => array(
Chris@76 215 'db' => 'stars',
Chris@76 216 ),
Chris@76 217 ),
Chris@76 218 'moderators' => array(
Chris@76 219 'header' => array(
Chris@76 220 'value' => $txt['moderators'],
Chris@76 221 ),
Chris@76 222 'data' => array(
Chris@76 223 'function' => create_function('$group', '
Chris@76 224 global $txt;
Chris@76 225
Chris@76 226 return empty($group[\'moderators\']) ? \'<em>\' . $txt[\'membergroups_new_copy_none\'] . \'</em>\' : implode(\', \', $group[\'moderators\']);
Chris@76 227 '),
Chris@76 228 ),
Chris@76 229 ),
Chris@76 230 'members' => array(
Chris@76 231 'header' => array(
Chris@76 232 'value' => $txt['membergroups_members_top'],
Chris@76 233 ),
Chris@76 234 'data' => array(
Chris@76 235 'comma_format' => true,
Chris@76 236 'db' => 'num_members',
Chris@76 237 ),
Chris@76 238 ),
Chris@76 239 ),
Chris@76 240 );
Chris@76 241
Chris@76 242 // Create the request list.
Chris@76 243 createList($listOptions);
Chris@76 244
Chris@76 245 $context['sub_template'] = 'show_list';
Chris@76 246 $context['default_list'] = 'group_lists';
Chris@76 247 }
Chris@76 248
Chris@76 249 // Get the group information for the list.
Chris@76 250 function list_getGroups($start, $items_per_page, $sort)
Chris@76 251 {
Chris@76 252 global $smcFunc, $txt, $scripturl, $user_info, $settings;
Chris@76 253
Chris@76 254 // Yep, find the groups...
Chris@76 255 $request = $smcFunc['db_query']('', '
Chris@76 256 SELECT mg.id_group, mg.group_name, mg.description, mg.group_type, mg.online_color, mg.hidden,
Chris@76 257 mg.stars, IFNULL(gm.id_member, 0) AS can_moderate
Chris@76 258 FROM {db_prefix}membergroups AS mg
Chris@76 259 LEFT JOIN {db_prefix}group_moderators AS gm ON (gm.id_group = mg.id_group AND gm.id_member = {int:current_member})
Chris@76 260 WHERE mg.min_posts = {int:min_posts}
Chris@76 261 AND mg.id_group != {int:mod_group}' . (allowedTo('admin_forum') ? '' : '
Chris@76 262 AND mg.group_type != {int:is_protected}') . '
Chris@76 263 ORDER BY group_name',
Chris@76 264 array(
Chris@76 265 'current_member' => $user_info['id'],
Chris@76 266 'min_posts' => -1,
Chris@76 267 'mod_group' => 3,
Chris@76 268 'is_protected' => 1,
Chris@76 269 )
Chris@76 270 );
Chris@76 271 // Start collecting the data.
Chris@76 272 $groups = array();
Chris@76 273 $group_ids = array();
Chris@76 274 $context['can_moderate'] = allowedTo('manage_membergroups');
Chris@76 275 while ($row = $smcFunc['db_fetch_assoc']($request))
Chris@76 276 {
Chris@76 277 // We only list the groups they can see.
Chris@76 278 if ($row['hidden'] && !$row['can_moderate'] && !allowedTo('manage_membergroups'))
Chris@76 279 continue;
Chris@76 280
Chris@76 281 $row['stars'] = explode('#', $row['stars']);
Chris@76 282
Chris@76 283 $groups[$row['id_group']] = array(
Chris@76 284 'id' => $row['id_group'],
Chris@76 285 'name' => $row['group_name'],
Chris@76 286 'desc' => $row['description'],
Chris@76 287 'color' => $row['online_color'],
Chris@76 288 'type' => $row['group_type'],
Chris@76 289 'num_members' => 0,
Chris@76 290 'moderators' => array(),
Chris@76 291 'stars' => !empty($row['stars'][0]) && !empty($row['stars'][1]) ? str_repeat('<img src="' . $settings['images_url'] . '/' . $row['stars'][1] . '" alt="*" />', $row['stars'][0]) : '',
Chris@76 292 );
Chris@76 293
Chris@76 294 $context['can_moderate'] |= $row['can_moderate'];
Chris@76 295 $group_ids[] = $row['id_group'];
Chris@76 296 }
Chris@76 297 $smcFunc['db_free_result']($request);
Chris@76 298
Chris@76 299 // Count up the members separately...
Chris@76 300 if (!empty($group_ids))
Chris@76 301 {
Chris@76 302 $query = $smcFunc['db_query']('', '
Chris@76 303 SELECT id_group, COUNT(*) AS num_members
Chris@76 304 FROM {db_prefix}members
Chris@76 305 WHERE id_group IN ({array_int:group_list})
Chris@76 306 GROUP BY id_group',
Chris@76 307 array(
Chris@76 308 'group_list' => $group_ids,
Chris@76 309 )
Chris@76 310 );
Chris@76 311 while ($row = $smcFunc['db_fetch_assoc']($query))
Chris@76 312 $groups[$row['id_group']]['num_members'] += $row['num_members'];
Chris@76 313 $smcFunc['db_free_result']($query);
Chris@76 314
Chris@76 315 // Only do additional groups if we can moderate...
Chris@76 316 if ($context['can_moderate'])
Chris@76 317 {
Chris@76 318 $query = $smcFunc['db_query']('', '
Chris@76 319 SELECT mg.id_group, COUNT(*) AS num_members
Chris@76 320 FROM {db_prefix}membergroups AS mg
Chris@76 321 INNER JOIN {db_prefix}members AS mem ON (mem.additional_groups != {string:blank_screen}
Chris@76 322 AND mem.id_group != mg.id_group
Chris@76 323 AND FIND_IN_SET(mg.id_group, mem.additional_groups) != 0)
Chris@76 324 WHERE mg.id_group IN ({array_int:group_list})
Chris@76 325 GROUP BY mg.id_group',
Chris@76 326 array(
Chris@76 327 'group_list' => $group_ids,
Chris@76 328 'blank_screen' => '',
Chris@76 329 )
Chris@76 330 );
Chris@76 331 while ($row = $smcFunc['db_fetch_assoc']($query))
Chris@76 332 $groups[$row['id_group']]['num_members'] += $row['num_members'];
Chris@76 333 $smcFunc['db_free_result']($query);
Chris@76 334 }
Chris@76 335 }
Chris@76 336
Chris@76 337 // Get any group moderators.
Chris@76 338 // Count up the members separately...
Chris@76 339 if (!empty($group_ids))
Chris@76 340 {
Chris@76 341 $query = $smcFunc['db_query']('', '
Chris@76 342 SELECT mods.id_group, mods.id_member, mem.member_name, mem.real_name
Chris@76 343 FROM {db_prefix}group_moderators AS mods
Chris@76 344 INNER JOIN {db_prefix}members AS mem ON (mem.id_member = mods.id_member)
Chris@76 345 WHERE mods.id_group IN ({array_int:group_list})',
Chris@76 346 array(
Chris@76 347 'group_list' => $group_ids,
Chris@76 348 )
Chris@76 349 );
Chris@76 350 while ($row = $smcFunc['db_fetch_assoc']($query))
Chris@76 351 $groups[$row['id_group']]['moderators'][] = '<a href="' . $scripturl . '?action=profile;u=' . $row['id_member'] . '">' . $row['real_name'] . '</a>';
Chris@76 352 $smcFunc['db_free_result']($query);
Chris@76 353 }
Chris@76 354
Chris@76 355 return $groups;
Chris@76 356 }
Chris@76 357
Chris@76 358 // How many groups are there that are visible?
Chris@76 359 function list_getGroupCount()
Chris@76 360 {
Chris@76 361 global $smcFunc;
Chris@76 362
Chris@76 363 $request = $smcFunc['db_query']('', '
Chris@76 364 SELECT COUNT(id_group) AS group_count
Chris@76 365 FROM {db_prefix}membergroups
Chris@76 366 WHERE mg.min_posts = {int:min_posts}
Chris@76 367 AND mg.id_group != {int:mod_group}' . (allowedTo('admin_forum') ? '' : '
Chris@76 368 AND mg.group_type != {int:is_protected}'),
Chris@76 369 array(
Chris@76 370 'min_posts' => -1,
Chris@76 371 'mod_group' => 3,
Chris@76 372 'is_protected' => 1,
Chris@76 373 )
Chris@76 374 );
Chris@76 375 list ($group_count) = $smcFunc['db_fetch_row']($request);
Chris@76 376 $smcFunc['db_free_result']($request);
Chris@76 377
Chris@76 378 return $group_count;
Chris@76 379 }
Chris@76 380
Chris@76 381 // Display members of a group, and allow adding of members to a group. Silly function name though ;)
Chris@76 382 function MembergroupMembers()
Chris@76 383 {
Chris@76 384 global $txt, $scripturl, $context, $modSettings, $sourcedir, $user_info, $settings, $smcFunc;
Chris@76 385
Chris@76 386 $_REQUEST['group'] = isset($_REQUEST['group']) ? (int) $_REQUEST['group'] : 0;
Chris@76 387
Chris@76 388 // No browsing of guests, membergroup 0 or moderators.
Chris@76 389 if (in_array($_REQUEST['group'], array(-1, 0, 3)))
Chris@76 390 fatal_lang_error('membergroup_does_not_exist', false);
Chris@76 391
Chris@76 392 // Load up the group details.
Chris@76 393 $request = $smcFunc['db_query']('', '
Chris@76 394 SELECT id_group AS id, group_name AS name, CASE WHEN min_posts = {int:min_posts} THEN 1 ELSE 0 END AS assignable, hidden, online_color,
Chris@76 395 stars, description, CASE WHEN min_posts != {int:min_posts} THEN 1 ELSE 0 END AS is_post_group, group_type
Chris@76 396 FROM {db_prefix}membergroups
Chris@76 397 WHERE id_group = {int:id_group}
Chris@76 398 LIMIT 1',
Chris@76 399 array(
Chris@76 400 'min_posts' => -1,
Chris@76 401 'id_group' => $_REQUEST['group'],
Chris@76 402 )
Chris@76 403 );
Chris@76 404 // Doesn't exist?
Chris@76 405 if ($smcFunc['db_num_rows']($request) == 0)
Chris@76 406 fatal_lang_error('membergroup_does_not_exist', false);
Chris@76 407 $context['group'] = $smcFunc['db_fetch_assoc']($request);
Chris@76 408 $smcFunc['db_free_result']($request);
Chris@76 409
Chris@76 410 // Fix the stars.
Chris@76 411 $context['group']['stars'] = explode('#', $context['group']['stars']);
Chris@76 412 $context['group']['stars'] = !empty($context['group']['stars'][0]) && !empty($context['group']['stars'][1]) ? str_repeat('<img src="' . $settings['images_url'] . '/' . $context['group']['stars'][1] . '" alt="*" />', $context['group']['stars'][0]) : '';
Chris@76 413 $context['group']['can_moderate'] = allowedTo('manage_membergroups') && (allowedTo('admin_forum') || $context['group']['group_type'] != 1);
Chris@76 414
Chris@76 415 $context['linktree'][] = array(
Chris@76 416 'url' => $scripturl . '?action=groups;sa=members;group=' . $context['group']['id'],
Chris@76 417 'name' => $context['group']['name'],
Chris@76 418 );
Chris@76 419
Chris@76 420 // Load all the group moderators, for fun.
Chris@76 421 $request = $smcFunc['db_query']('', '
Chris@76 422 SELECT mem.id_member, mem.real_name
Chris@76 423 FROM {db_prefix}group_moderators AS mods
Chris@76 424 INNER JOIN {db_prefix}members AS mem ON (mem.id_member = mods.id_member)
Chris@76 425 WHERE mods.id_group = {int:id_group}',
Chris@76 426 array(
Chris@76 427 'id_group' => $_REQUEST['group'],
Chris@76 428 )
Chris@76 429 );
Chris@76 430 $context['group']['moderators'] = array();
Chris@76 431 while ($row = $smcFunc['db_fetch_assoc']($request))
Chris@76 432 {
Chris@76 433 $context['group']['moderators'][] = array(
Chris@76 434 'id' => $row['id_member'],
Chris@76 435 'name' => $row['real_name']
Chris@76 436 );
Chris@76 437
Chris@76 438 if ($user_info['id'] == $row['id_member'] && $context['group']['group_type'] != 1)
Chris@76 439 $context['group']['can_moderate'] = true;
Chris@76 440 }
Chris@76 441 $smcFunc['db_free_result']($request);
Chris@76 442
Chris@76 443 // If this group is hidden then it can only "exists" if the user can moderate it!
Chris@76 444 if ($context['group']['hidden'] && !$context['group']['can_moderate'])
Chris@76 445 fatal_lang_error('membergroup_does_not_exist', false);
Chris@76 446
Chris@76 447 // You can only assign membership if you are the moderator and/or can manage groups!
Chris@76 448 if (!$context['group']['can_moderate'])
Chris@76 449 $context['group']['assignable'] = 0;
Chris@76 450 // Non-admins cannot assign admins.
Chris@76 451 elseif ($context['group']['id'] == 1 && !allowedTo('admin_forum'))
Chris@76 452 $context['group']['assignable'] = 0;
Chris@76 453
Chris@76 454 // Removing member from group?
Chris@76 455 if (isset($_POST['remove']) && !empty($_REQUEST['rem']) && is_array($_REQUEST['rem']) && $context['group']['assignable'])
Chris@76 456 {
Chris@76 457 checkSession();
Chris@76 458
Chris@76 459 // Make sure we're dealing with integers only.
Chris@76 460 foreach ($_REQUEST['rem'] as $key => $group)
Chris@76 461 $_REQUEST['rem'][$key] = (int) $group;
Chris@76 462
Chris@76 463 require_once($sourcedir . '/Subs-Membergroups.php');
Chris@76 464 removeMembersFromGroups($_REQUEST['rem'], $_REQUEST['group'], true);
Chris@76 465 }
Chris@76 466 // Must be adding new members to the group...
Chris@76 467 elseif (isset($_REQUEST['add']) && (!empty($_REQUEST['toAdd']) || !empty($_REQUEST['member_add'])) && $context['group']['assignable'])
Chris@76 468 {
Chris@76 469 checkSession();
Chris@76 470
Chris@76 471 $member_query = array();
Chris@76 472 $member_parameters = array();
Chris@76 473
Chris@76 474 // Get all the members to be added... taking into account names can be quoted ;)
Chris@76 475 $_REQUEST['toAdd'] = strtr($smcFunc['htmlspecialchars']($_REQUEST['toAdd'], ENT_QUOTES), array('&quot;' => '"'));
Chris@76 476 preg_match_all('~"([^"]+)"~', $_REQUEST['toAdd'], $matches);
Chris@76 477 $member_names = array_unique(array_merge($matches[1], explode(',', preg_replace('~"[^"]+"~', '', $_REQUEST['toAdd']))));
Chris@76 478
Chris@76 479 foreach ($member_names as $index => $member_name)
Chris@76 480 {
Chris@76 481 $member_names[$index] = trim($smcFunc['strtolower']($member_names[$index]));
Chris@76 482
Chris@76 483 if (strlen($member_names[$index]) == 0)
Chris@76 484 unset($member_names[$index]);
Chris@76 485 }
Chris@76 486
Chris@76 487 // Any passed by ID?
Chris@76 488 $member_ids = array();
Chris@76 489 if (!empty($_REQUEST['member_add']))
Chris@76 490 foreach ($_REQUEST['member_add'] as $id)
Chris@76 491 if ($id > 0)
Chris@76 492 $member_ids[] = (int) $id;
Chris@76 493
Chris@76 494 // Construct the query pelements.
Chris@76 495 if (!empty($member_ids))
Chris@76 496 {
Chris@76 497 $member_query[] = 'id_member IN ({array_int:member_ids})';
Chris@76 498 $member_parameters['member_ids'] = $member_ids;
Chris@76 499 }
Chris@76 500 if (!empty($member_names))
Chris@76 501 {
Chris@76 502 $member_query[] = 'LOWER(member_name) IN ({array_string:member_names})';
Chris@76 503 $member_query[] = 'LOWER(real_name) IN ({array_string:member_names})';
Chris@76 504 $member_parameters['member_names'] = $member_names;
Chris@76 505 }
Chris@76 506
Chris@76 507 $members = array();
Chris@76 508 if (!empty($member_query))
Chris@76 509 {
Chris@76 510 $request = $smcFunc['db_query']('', '
Chris@76 511 SELECT id_member
Chris@76 512 FROM {db_prefix}members
Chris@76 513 WHERE (' . implode(' OR ', $member_query) . ')
Chris@76 514 AND id_group != {int:id_group}
Chris@76 515 AND FIND_IN_SET({int:id_group}, additional_groups) = 0',
Chris@76 516 array_merge($member_parameters, array(
Chris@76 517 'id_group' => $_REQUEST['group'],
Chris@76 518 ))
Chris@76 519 );
Chris@76 520 while ($row = $smcFunc['db_fetch_assoc']($request))
Chris@76 521 $members[] = $row['id_member'];
Chris@76 522 $smcFunc['db_free_result']($request);
Chris@76 523 }
Chris@76 524
Chris@76 525 // !!! Add $_POST['additional'] to templates!
Chris@76 526
Chris@76 527 // Do the updates...
Chris@76 528 if (!empty($members))
Chris@76 529 {
Chris@76 530 require_once($sourcedir . '/Subs-Membergroups.php');
Chris@76 531 addMembersToGroup($members, $_REQUEST['group'], isset($_POST['additional']) || $context['group']['hidden'] ? 'only_additional' : 'auto', true);
Chris@76 532 }
Chris@76 533 }
Chris@76 534
Chris@76 535 // Sort out the sorting!
Chris@76 536 $sort_methods = array(
Chris@76 537 'name' => 'real_name',
Chris@76 538 'email' => allowedTo('moderate_forum') ? 'email_address' : 'hide_email ' . (isset($_REQUEST['desc']) ? 'DESC' : 'ASC') . ', email_address',
Chris@76 539 'active' => 'last_login',
Chris@76 540 'registered' => 'date_registered',
Chris@76 541 'posts' => 'posts',
Chris@76 542 );
Chris@76 543
Chris@76 544 // They didn't pick one, default to by name..
Chris@76 545 if (!isset($_REQUEST['sort']) || !isset($sort_methods[$_REQUEST['sort']]))
Chris@76 546 {
Chris@76 547 $context['sort_by'] = 'name';
Chris@76 548 $querySort = 'real_name';
Chris@76 549 }
Chris@76 550 // Otherwise default to ascending.
Chris@76 551 else
Chris@76 552 {
Chris@76 553 $context['sort_by'] = $_REQUEST['sort'];
Chris@76 554 $querySort = $sort_methods[$_REQUEST['sort']];
Chris@76 555 }
Chris@76 556
Chris@76 557 $context['sort_direction'] = isset($_REQUEST['desc']) ? 'down' : 'up';
Chris@76 558
Chris@76 559 // The where on the query is interesting. Non-moderators should only see people who are in this group as primary.
Chris@76 560 if ($context['group']['can_moderate'])
Chris@76 561 $where = $context['group']['is_post_group'] ? 'id_post_group = {int:group}' : 'id_group = {int:group} OR FIND_IN_SET({int:group}, additional_groups) != 0';
Chris@76 562 else
Chris@76 563 $where = $context['group']['is_post_group'] ? 'id_post_group = {int:group}' : 'id_group = {int:group}';
Chris@76 564
Chris@76 565 // Count members of the group.
Chris@76 566 $request = $smcFunc['db_query']('', '
Chris@76 567 SELECT COUNT(*)
Chris@76 568 FROM {db_prefix}members
Chris@76 569 WHERE ' . $where,
Chris@76 570 array(
Chris@76 571 'group' => $_REQUEST['group'],
Chris@76 572 )
Chris@76 573 );
Chris@76 574 list ($context['total_members']) = $smcFunc['db_fetch_row']($request);
Chris@76 575 $smcFunc['db_free_result']($request);
Chris@76 576 $context['total_members'] = comma_format($context['total_members']);
Chris@76 577
Chris@76 578 // Create the page index.
Chris@76 579 $context['page_index'] = constructPageIndex($scripturl . '?action=' . ($context['group']['can_moderate'] ? 'moderate;area=viewgroups' : 'groups') . ';sa=members;group=' . $_REQUEST['group'] . ';sort=' . $context['sort_by'] . (isset($_REQUEST['desc']) ? ';desc' : ''), $_REQUEST['start'], $context['total_members'], $modSettings['defaultMaxMembers']);
Chris@76 580 $context['start'] = $_REQUEST['start'];
Chris@76 581 $context['can_moderate_forum'] = allowedTo('moderate_forum');
Chris@76 582
Chris@76 583 // Load up all members of this group.
Chris@76 584 $request = $smcFunc['db_query']('', '
Chris@76 585 SELECT id_member, member_name, real_name, email_address, member_ip, date_registered, last_login,
Chris@76 586 hide_email, posts, is_activated, real_name
Chris@76 587 FROM {db_prefix}members
Chris@76 588 WHERE ' . $where . '
Chris@76 589 ORDER BY ' . $querySort . ' ' . ($context['sort_direction'] == 'down' ? 'DESC' : 'ASC') . '
Chris@76 590 LIMIT ' . $context['start'] . ', ' . $modSettings['defaultMaxMembers'],
Chris@76 591 array(
Chris@76 592 'group' => $_REQUEST['group'],
Chris@76 593 )
Chris@76 594 );
Chris@76 595 $context['members'] = array();
Chris@76 596 while ($row = $smcFunc['db_fetch_assoc']($request))
Chris@76 597 {
Chris@76 598 $last_online = empty($row['last_login']) ? $txt['never'] : timeformat($row['last_login']);
Chris@76 599
Chris@76 600 // Italicize the online note if they aren't activated.
Chris@76 601 if ($row['is_activated'] % 10 != 1)
Chris@76 602 $last_online = '<em title="' . $txt['not_activated'] . '">' . $last_online . '</em>';
Chris@76 603
Chris@76 604 $context['members'][] = array(
Chris@76 605 'id' => $row['id_member'],
Chris@76 606 'name' => '<a href="' . $scripturl . '?action=profile;u=' . $row['id_member'] . '">' . $row['real_name'] . '</a>',
Chris@76 607 'email' => $row['email_address'],
Chris@76 608 'show_email' => showEmailAddress(!empty($row['hide_email']), $row['id_member']),
Chris@76 609 'ip' => '<a href="' . $scripturl . '?action=trackip;searchip=' . $row['member_ip'] . '">' . $row['member_ip'] . '</a>',
Chris@76 610 'registered' => timeformat($row['date_registered']),
Chris@76 611 'last_online' => $last_online,
Chris@76 612 'posts' => comma_format($row['posts']),
Chris@76 613 'is_activated' => $row['is_activated'] % 10 == 1,
Chris@76 614 );
Chris@76 615 }
Chris@76 616 $smcFunc['db_free_result']($request);
Chris@76 617
Chris@76 618 // Select the template.
Chris@76 619 $context['sub_template'] = 'group_members';
Chris@76 620 $context['page_title'] = $txt['membergroups_members_title'] . ': ' . $context['group']['name'];
Chris@76 621 }
Chris@76 622
Chris@76 623 // Show and manage all group requests.
Chris@76 624 function GroupRequests()
Chris@76 625 {
Chris@76 626 global $txt, $context, $scripturl, $user_info, $sourcedir, $smcFunc, $modSettings, $language;
Chris@76 627
Chris@76 628 // Set up the template stuff...
Chris@76 629 $context['page_title'] = $txt['mc_group_requests'];
Chris@76 630 $context['sub_template'] = 'show_list';
Chris@76 631
Chris@76 632 // Verify we can be here.
Chris@76 633 if ($user_info['mod_cache']['gq'] == '0=1')
Chris@76 634 isAllowedTo('manage_membergroups');
Chris@76 635
Chris@76 636 // Normally, we act normally...
Chris@76 637 $where = $user_info['mod_cache']['gq'] == '1=1' || $user_info['mod_cache']['gq'] == '0=1' ? $user_info['mod_cache']['gq'] : 'lgr.' . $user_info['mod_cache']['gq'];
Chris@76 638 $where_parameters = array();
Chris@76 639
Chris@76 640 // We've submitted?
Chris@76 641 if (isset($_POST[$context['session_var']]) && !empty($_POST['groupr']) && !empty($_POST['req_action']))
Chris@76 642 {
Chris@76 643 checkSession('post');
Chris@76 644
Chris@76 645 // Clean the values.
Chris@76 646 foreach ($_POST['groupr'] as $k => $request)
Chris@76 647 $_POST['groupr'][$k] = (int) $request;
Chris@76 648
Chris@76 649 // If we are giving a reason (And why shouldn't we?), then we don't actually do much.
Chris@76 650 if ($_POST['req_action'] == 'reason')
Chris@76 651 {
Chris@76 652 // Different sub template...
Chris@76 653 $context['sub_template'] = 'group_request_reason';
Chris@76 654 // And a limitation. We don't care that the page number bit makes no sense, as we don't need it!
Chris@76 655 $where .= ' AND lgr.id_request IN ({array_int:request_ids})';
Chris@76 656 $where_parameters['request_ids'] = $_POST['groupr'];
Chris@76 657
Chris@76 658 $context['group_requests'] = list_getGroupRequests(0, $modSettings['defaultMaxMessages'], 'lgr.id_request', $where, $where_parameters);
Chris@76 659
Chris@76 660 // Let obExit etc sort things out.
Chris@76 661 obExit();
Chris@76 662 }
Chris@76 663 // Otherwise we do something!
Chris@76 664 else
Chris@76 665 {
Chris@76 666 // Get the details of all the members concerned...
Chris@76 667 $request = $smcFunc['db_query']('', '
Chris@76 668 SELECT lgr.id_request, lgr.id_member, lgr.id_group, mem.email_address, mem.id_group AS primary_group,
Chris@76 669 mem.additional_groups AS additional_groups, mem.lngfile, mem.member_name, mem.notify_types,
Chris@76 670 mg.hidden, mg.group_name
Chris@76 671 FROM {db_prefix}log_group_requests AS lgr
Chris@76 672 INNER JOIN {db_prefix}members AS mem ON (mem.id_member = lgr.id_member)
Chris@76 673 INNER JOIN {db_prefix}membergroups AS mg ON (mg.id_group = lgr.id_group)
Chris@76 674 WHERE ' . $where . '
Chris@76 675 AND lgr.id_request IN ({array_int:request_list})
Chris@76 676 ORDER BY mem.lngfile',
Chris@76 677 array(
Chris@76 678 'request_list' => $_POST['groupr'],
Chris@76 679 )
Chris@76 680 );
Chris@76 681 $email_details = array();
Chris@76 682 $group_changes = array();
Chris@76 683 while ($row = $smcFunc['db_fetch_assoc']($request))
Chris@76 684 {
Chris@76 685 $row['lngfile'] = empty($row['lngfile']) || empty($modSettings['userLanguage']) ? $language : $row['lngfile'];
Chris@76 686
Chris@76 687 // If we are approving work out what their new group is.
Chris@76 688 if ($_POST['req_action'] == 'approve')
Chris@76 689 {
Chris@76 690 // For people with more than one request at once.
Chris@76 691 if (isset($group_changes[$row['id_member']]))
Chris@76 692 {
Chris@76 693 $row['additional_groups'] = $group_changes[$row['id_member']]['add'];
Chris@76 694 $row['primary_group'] = $group_changes[$row['id_member']]['primary'];
Chris@76 695 }
Chris@76 696 else
Chris@76 697 $row['additional_groups'] = explode(',', $row['additional_groups']);
Chris@76 698
Chris@76 699 // Don't have it already?
Chris@76 700 if ($row['primary_group'] == $row['id_group'] || in_array($row['id_group'], $row['additional_groups']))
Chris@76 701 continue;
Chris@76 702
Chris@76 703 // Should it become their primary?
Chris@76 704 if ($row['primary_group'] == 0 && $row['hidden'] == 0)
Chris@76 705 $row['primary_group'] = $row['id_group'];
Chris@76 706 else
Chris@76 707 $row['additional_groups'][] = $row['id_group'];
Chris@76 708
Chris@76 709 // Add them to the group master list.
Chris@76 710 $group_changes[$row['id_member']] = array(
Chris@76 711 'primary' => $row['primary_group'],
Chris@76 712 'add' => $row['additional_groups'],
Chris@76 713 );
Chris@76 714 }
Chris@76 715
Chris@76 716 // Add required information to email them.
Chris@76 717 if ($row['notify_types'] != 4)
Chris@76 718 $email_details[] = array(
Chris@76 719 'rid' => $row['id_request'],
Chris@76 720 'member_id' => $row['id_member'],
Chris@76 721 'member_name' => $row['member_name'],
Chris@76 722 'group_id' => $row['id_group'],
Chris@76 723 'group_name' => $row['group_name'],
Chris@76 724 'email' => $row['email_address'],
Chris@76 725 'language' => $row['lngfile'],
Chris@76 726 );
Chris@76 727 }
Chris@76 728 $smcFunc['db_free_result']($request);
Chris@76 729
Chris@76 730 // Remove the evidence...
Chris@76 731 $smcFunc['db_query']('', '
Chris@76 732 DELETE FROM {db_prefix}log_group_requests
Chris@76 733 WHERE id_request IN ({array_int:request_list})',
Chris@76 734 array(
Chris@76 735 'request_list' => $_POST['groupr'],
Chris@76 736 )
Chris@76 737 );
Chris@76 738
Chris@76 739 // Ensure everyone who is online gets their changes right away.
Chris@76 740 updateSettings(array('settings_updated' => time()));
Chris@76 741
Chris@76 742 if (!empty($email_details))
Chris@76 743 {
Chris@76 744 require_once($sourcedir . '/Subs-Post.php');
Chris@76 745
Chris@76 746 // They are being approved?
Chris@76 747 if ($_POST['req_action'] == 'approve')
Chris@76 748 {
Chris@76 749 // Make the group changes.
Chris@76 750 foreach ($group_changes as $id => $groups)
Chris@76 751 {
Chris@76 752 // Sanity check!
Chris@76 753 foreach ($groups['add'] as $key => $value)
Chris@76 754 if ($value == 0 || trim($value) == '')
Chris@76 755 unset($groups['add'][$key]);
Chris@76 756
Chris@76 757 $smcFunc['db_query']('', '
Chris@76 758 UPDATE {db_prefix}members
Chris@76 759 SET id_group = {int:primary_group}, additional_groups = {string:additional_groups}
Chris@76 760 WHERE id_member = {int:selected_member}',
Chris@76 761 array(
Chris@76 762 'primary_group' => $groups['primary'],
Chris@76 763 'selected_member' => $id,
Chris@76 764 'additional_groups' => implode(',', $groups['add']),
Chris@76 765 )
Chris@76 766 );
Chris@76 767 }
Chris@76 768
Chris@76 769 $lastLng = $user_info['language'];
Chris@76 770 foreach ($email_details as $email)
Chris@76 771 {
Chris@76 772 $replacements = array(
Chris@76 773 'USERNAME' => $email['member_name'],
Chris@76 774 'GROUPNAME' => $email['group_name'],
Chris@76 775 );
Chris@76 776
Chris@76 777 $emaildata = loadEmailTemplate('mc_group_approve', $replacements, $email['language']);
Chris@76 778
Chris@76 779 sendmail($email['email'], $emaildata['subject'], $emaildata['body'], null, null, false, 2);
Chris@76 780 }
Chris@76 781 }
Chris@76 782 // Otherwise, they are getting rejected (With or without a reason).
Chris@76 783 else
Chris@76 784 {
Chris@76 785 // Same as for approving, kind of.
Chris@76 786 $lastLng = $user_info['language'];
Chris@76 787 foreach ($email_details as $email)
Chris@76 788 {
Chris@76 789 $custom_reason = isset($_POST['groupreason']) && isset($_POST['groupreason'][$email['rid']]) ? $_POST['groupreason'][$email['rid']] : '';
Chris@76 790
Chris@76 791 $replacements = array(
Chris@76 792 'USERNAME' => $email['member_name'],
Chris@76 793 'GROUPNAME' => $email['group_name'],
Chris@76 794 );
Chris@76 795
Chris@76 796 if (!empty($custom_reason))
Chris@76 797 $replacements['REASON'] = $custom_reason;
Chris@76 798
Chris@76 799 $emaildata = loadEmailTemplate(empty($custom_reason) ? 'mc_group_reject' : 'mc_group_reject_reason', $replacements, $email['language']);
Chris@76 800
Chris@76 801 sendmail($email['email'], $emaildata['subject'], $emaildata['body'], null, null, false, 2);
Chris@76 802 }
Chris@76 803 }
Chris@76 804 }
Chris@76 805
Chris@76 806 // Restore the current language.
Chris@76 807 loadLanguage('ModerationCenter');
Chris@76 808 }
Chris@76 809 }
Chris@76 810
Chris@76 811 // We're going to want this for making our list.
Chris@76 812 require_once($sourcedir . '/Subs-List.php');
Chris@76 813
Chris@76 814 // This is all the information required for a group listing.
Chris@76 815 $listOptions = array(
Chris@76 816 'id' => 'group_request_list',
Chris@76 817 'title' => $txt['mc_group_requests'],
Chris@76 818 'width' => '100%',
Chris@76 819 'items_per_page' => $modSettings['defaultMaxMessages'],
Chris@76 820 'no_items_label' => $txt['mc_groupr_none_found'],
Chris@76 821 'base_href' => $scripturl . '?action=groups;sa=requests',
Chris@76 822 'default_sort_col' => 'member',
Chris@76 823 'get_items' => array(
Chris@76 824 'function' => 'list_getGroupRequests',
Chris@76 825 'params' => array(
Chris@76 826 $where,
Chris@76 827 $where_parameters,
Chris@76 828 ),
Chris@76 829 ),
Chris@76 830 'get_count' => array(
Chris@76 831 'function' => 'list_getGroupRequestCount',
Chris@76 832 'params' => array(
Chris@76 833 $where,
Chris@76 834 $where_parameters,
Chris@76 835 ),
Chris@76 836 ),
Chris@76 837 'columns' => array(
Chris@76 838 'member' => array(
Chris@76 839 'header' => array(
Chris@76 840 'value' => $txt['mc_groupr_member'],
Chris@76 841 ),
Chris@76 842 'data' => array(
Chris@76 843 'db' => 'member_link',
Chris@76 844 ),
Chris@76 845 'sort' => array(
Chris@76 846 'default' => 'mem.member_name',
Chris@76 847 'reverse' => 'mem.member_name DESC',
Chris@76 848 ),
Chris@76 849 ),
Chris@76 850 'group' => array(
Chris@76 851 'header' => array(
Chris@76 852 'value' => $txt['mc_groupr_group'],
Chris@76 853 ),
Chris@76 854 'data' => array(
Chris@76 855 'db' => 'group_link',
Chris@76 856 ),
Chris@76 857 'sort' => array(
Chris@76 858 'default' => 'mg.group_name',
Chris@76 859 'reverse' => 'mg.group_name DESC',
Chris@76 860 ),
Chris@76 861 ),
Chris@76 862 'reason' => array(
Chris@76 863 'header' => array(
Chris@76 864 'value' => $txt['mc_groupr_reason'],
Chris@76 865 ),
Chris@76 866 'data' => array(
Chris@76 867 'db' => 'reason',
Chris@76 868 ),
Chris@76 869 ),
Chris@76 870 'action' => array(
Chris@76 871 'header' => array(
Chris@76 872 'value' => '<input type="checkbox" class="input_check" onclick="invertAll(this, this.form);" />',
Chris@76 873 'style' => 'width: 4%;',
Chris@76 874 ),
Chris@76 875 'data' => array(
Chris@76 876 'sprintf' => array(
Chris@76 877 'format' => '<input type="checkbox" name="groupr[]" value="%1$d" class="input_check" />',
Chris@76 878 'params' => array(
Chris@76 879 'id' => false,
Chris@76 880 ),
Chris@76 881 ),
Chris@76 882 'style' => 'text-align: center;',
Chris@76 883 ),
Chris@76 884 ),
Chris@76 885 ),
Chris@76 886 'form' => array(
Chris@76 887 'href' => $scripturl . '?action=groups;sa=requests',
Chris@76 888 'include_sort' => true,
Chris@76 889 'include_start' => true,
Chris@76 890 'hidden_fields' => array(
Chris@76 891 $context['session_var'] => $context['session_id'],
Chris@76 892 ),
Chris@76 893 ),
Chris@76 894 'additional_rows' => array(
Chris@76 895 array(
Chris@76 896 'position' => 'bottom_of_list',
Chris@76 897 'value' => '
Chris@76 898 <select name="req_action" onchange="if (this.value != 0 &amp;&amp; (this.value == \'reason\' || confirm(\'' . $txt['mc_groupr_warning'] . '\'))) this.form.submit();">
Chris@76 899 <option value="0">' . $txt['with_selected'] . ':</option>
Chris@76 900 <option value="0">---------------------</option>
Chris@76 901 <option value="approve">' . $txt['mc_groupr_approve'] . '</option>
Chris@76 902 <option value="reject">' . $txt['mc_groupr_reject'] . '</option>
Chris@76 903 <option value="reason">' . $txt['mc_groupr_reject_w_reason'] . '</option>
Chris@76 904 </select>
Chris@76 905 <input type="submit" name="go" value="' . $txt['go'] . '" onclick="var sel = document.getElementById(\'req_action\'); if (sel.value != 0 &amp;&amp; sel.value != \'reason\' &amp;&amp; !confirm(\'' . $txt['mc_groupr_warning'] . '\')) return false;" class="button_submit" />',
Chris@76 906 'align' => 'right',
Chris@76 907 ),
Chris@76 908 ),
Chris@76 909 );
Chris@76 910
Chris@76 911 // Create the request list.
Chris@76 912 createList($listOptions);
Chris@76 913
Chris@76 914 $context['default_list'] = 'group_request_list';
Chris@76 915 }
Chris@76 916
Chris@76 917 function list_getGroupRequestCount($where, $where_parameters)
Chris@76 918 {
Chris@76 919 global $smcFunc;
Chris@76 920
Chris@76 921 $request = $smcFunc['db_query']('', '
Chris@76 922 SELECT COUNT(*)
Chris@76 923 FROM {db_prefix}log_group_requests AS lgr
Chris@76 924 WHERE ' . $where,
Chris@76 925 array_merge($where_parameters, array(
Chris@76 926 ))
Chris@76 927 );
Chris@76 928 list ($totalRequests) = $smcFunc['db_fetch_row']($request);
Chris@76 929 $smcFunc['db_free_result']($request);
Chris@76 930
Chris@76 931 return $totalRequests;
Chris@76 932 }
Chris@76 933
Chris@76 934 function list_getGroupRequests($start, $items_per_page, $sort, $where, $where_parameters)
Chris@76 935 {
Chris@76 936 global $smcFunc, $txt, $scripturl;
Chris@76 937
Chris@76 938 $request = $smcFunc['db_query']('', '
Chris@76 939 SELECT lgr.id_request, lgr.id_member, lgr.id_group, lgr.time_applied, lgr.reason,
Chris@76 940 mem.member_name, mg.group_name, mg.online_color, mem.real_name
Chris@76 941 FROM {db_prefix}log_group_requests AS lgr
Chris@76 942 INNER JOIN {db_prefix}members AS mem ON (mem.id_member = lgr.id_member)
Chris@76 943 INNER JOIN {db_prefix}membergroups AS mg ON (mg.id_group = lgr.id_group)
Chris@76 944 WHERE ' . $where . '
Chris@76 945 ORDER BY {raw:sort}
Chris@76 946 LIMIT ' . $start . ', ' . $items_per_page,
Chris@76 947 array_merge($where_parameters, array(
Chris@76 948 'sort' => $sort,
Chris@76 949 ))
Chris@76 950 );
Chris@76 951 $group_requests = array();
Chris@76 952 while ($row = $smcFunc['db_fetch_assoc']($request))
Chris@76 953 {
Chris@76 954 $group_requests[] = array(
Chris@76 955 'id' => $row['id_request'],
Chris@76 956 'member_link' => '<a href="' . $scripturl . '?action=profile;u=' . $row['id_member'] . '">' . $row['real_name'] . '</a>',
Chris@76 957 'group_link' => '<span style="color: ' . $row['online_color'] . '">' . $row['group_name'] . '</span>',
Chris@76 958 'reason' => censorText($row['reason']),
Chris@76 959 'time_submitted' => timeformat($row['time_applied']),
Chris@76 960 );
Chris@76 961 }
Chris@76 962 $smcFunc['db_free_result']($request);
Chris@76 963
Chris@76 964 return $group_requests;
Chris@76 965 }
Chris@76 966
Chris@76 967 ?>