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('"' => '"'));
|
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 && (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 && sel.value != \'reason\' && !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 ?> |