]> scripts.mit.edu Git - autoinstalls/phpBB.git/blob - admin/admin_groups.php
phpBB 2.0.19-scripts
[autoinstalls/phpBB.git] / admin / admin_groups.php
1 <?php
2 /***************************************************************************
3  *                             admin_groups.php
4  *                            -------------------
5  *   begin                : Saturday, Feb 13, 2001
6  *   copyright            : (C) 2001 The phpBB Group
7  *   email                : support@phpbb.com
8  *
9  *   $Id: admin_groups.php,v 1.25.2.9 2004/03/25 15:57:20 acydburn Exp $
10  *
11  *
12  ***************************************************************************/
13
14 /***************************************************************************
15  *
16  *   This program is free software; you can redistribute it and/or modify
17  *   it under the terms of the GNU General Public License as published by
18  *   the Free Software Foundation; either version 2 of the License, or
19  *   (at your option) any later version.
20  *
21  ***************************************************************************/
22
23 define('IN_PHPBB', 1);
24
25 if ( !empty($setmodules) )
26 {
27         $filename = basename(__FILE__);
28         $module['Groups']['Manage'] = $filename;
29
30         return;
31 }
32
33 //
34 // Load default header
35 //
36 $phpbb_root_path = './../';
37 require($phpbb_root_path . 'extension.inc');
38 require('./pagestart.' . $phpEx);
39
40 if ( isset($HTTP_POST_VARS[POST_GROUPS_URL]) || isset($HTTP_GET_VARS[POST_GROUPS_URL]) )
41 {
42         $group_id = ( isset($HTTP_POST_VARS[POST_GROUPS_URL]) ) ? intval($HTTP_POST_VARS[POST_GROUPS_URL]) : intval($HTTP_GET_VARS[POST_GROUPS_URL]);
43 }
44 else
45 {
46         $group_id = 0;
47 }
48
49 if ( isset($HTTP_POST_VARS['mode']) || isset($HTTP_GET_VARS['mode']) )
50 {
51         $mode = ( isset($HTTP_POST_VARS['mode']) ) ? $HTTP_POST_VARS['mode'] : $HTTP_GET_VARS['mode'];
52         $mode = htmlspecialchars($mode);
53 }
54 else
55 {
56         $mode = '';
57 }
58
59 if ( isset($HTTP_POST_VARS['edit']) || isset($HTTP_POST_VARS['new']) )
60 {
61         //
62         // Ok they are editing a group or creating a new group
63         //
64         $template->set_filenames(array(
65                 'body' => 'admin/group_edit_body.tpl')
66         );
67
68         if ( isset($HTTP_POST_VARS['edit']) )
69         {
70                 //
71                 // They're editing. Grab the vars.
72                 //
73                 $sql = "SELECT *
74                         FROM " . GROUPS_TABLE . "
75                         WHERE group_single_user <> " . TRUE . "
76                         AND group_id = $group_id";
77                 if ( !($result = $db->sql_query($sql)) )
78                 {
79                         message_die(GENERAL_ERROR, 'Error getting group information', '', __LINE__, __FILE__, $sql);
80                 }
81
82                 if ( !($group_info = $db->sql_fetchrow($result)) )
83                 {
84                         message_die(GENERAL_MESSAGE, $lang['Group_not_exist']);
85                 }
86
87                 $mode = 'editgroup';
88                 $template->assign_block_vars('group_edit', array());
89
90         }
91         else if ( isset($HTTP_POST_VARS['new']) )
92         {
93                 $group_info = array (
94                         'group_name' => '',
95                         'group_description' => '',
96                         'group_moderator' => '',
97                         'group_type' => GROUP_OPEN);
98                 $group_open = ' checked="checked"';
99
100                 $mode = 'newgroup';
101
102         }
103
104         //
105         // Ok, now we know everything about them, let's show the page.
106         //
107         $sql = "SELECT user_id, username
108                 FROM " . USERS_TABLE . "
109                 WHERE user_id <> " . ANONYMOUS . "
110                 ORDER BY username";
111         if ( !($result = $db->sql_query($sql)) )
112         {
113                 message_die(GENERAL_ERROR, 'Could not obtain user info for moderator list', '', __LINE__, __FILE__, $sql);
114         }
115
116         while ( $row = $db->sql_fetchrow($result) )
117         {
118                 if ( $row['user_id'] == $group_info['group_moderator'] ) 
119                 {
120                         $group_moderator = $row['username'];
121                 }
122         }
123
124         $group_open = ( $group_info['group_type'] == GROUP_OPEN ) ? ' checked="checked"' : '';
125         $group_closed = ( $group_info['group_type'] == GROUP_CLOSED ) ? ' checked="checked"' : '';
126         $group_hidden = ( $group_info['group_type'] == GROUP_HIDDEN ) ? ' checked="checked"' : '';
127
128         $s_hidden_fields = '<input type="hidden" name="mode" value="' . $mode . '" /><input type="hidden" name="' . POST_GROUPS_URL . '" value="' . $group_id . '" />';
129
130         $template->assign_vars(array(
131                 'GROUP_NAME' => $group_info['group_name'],
132                 'GROUP_DESCRIPTION' => $group_info['group_description'], 
133                 'GROUP_MODERATOR' => $group_moderator, 
134
135                 'L_GROUP_TITLE' => $lang['Group_administration'],
136                 'L_GROUP_EDIT_DELETE' => ( isset($HTTP_POST_VARS['new']) ) ? $lang['New_group'] : $lang['Edit_group'], 
137                 'L_GROUP_NAME' => $lang['group_name'],
138                 'L_GROUP_DESCRIPTION' => $lang['group_description'],
139                 'L_GROUP_MODERATOR' => $lang['group_moderator'], 
140                 'L_FIND_USERNAME' => $lang['Find_username'], 
141                 'L_GROUP_STATUS' => $lang['group_status'],
142                 'L_GROUP_OPEN' => $lang['group_open'],
143                 'L_GROUP_CLOSED' => $lang['group_closed'],
144                 'L_GROUP_HIDDEN' => $lang['group_hidden'],
145                 'L_GROUP_DELETE' => $lang['group_delete'],
146                 'L_GROUP_DELETE_CHECK' => $lang['group_delete_check'],
147                 'L_SUBMIT' => $lang['Submit'],
148                 'L_RESET' => $lang['Reset'],
149                 'L_DELETE_MODERATOR' => $lang['delete_group_moderator'],
150                 'L_DELETE_MODERATOR_EXPLAIN' => $lang['delete_moderator_explain'],
151                 'L_YES' => $lang['Yes'],
152
153                 'U_SEARCH_USER' => append_sid("../search.$phpEx?mode=searchuser"), 
154
155                 'S_GROUP_OPEN_TYPE' => GROUP_OPEN,
156                 'S_GROUP_CLOSED_TYPE' => GROUP_CLOSED,
157                 'S_GROUP_HIDDEN_TYPE' => GROUP_HIDDEN,
158                 'S_GROUP_OPEN_CHECKED' => $group_open,
159                 'S_GROUP_CLOSED_CHECKED' => $group_closed,
160                 'S_GROUP_HIDDEN_CHECKED' => $group_hidden,
161                 'S_GROUP_ACTION' => append_sid("admin_groups.$phpEx"),
162                 'S_HIDDEN_FIELDS' => $s_hidden_fields)
163         );
164
165         $template->pparse('body');
166
167 }
168 else if ( isset($HTTP_POST_VARS['group_update']) )
169 {
170         //
171         // Ok, they are submitting a group, let's save the data based on if it's new or editing
172         //
173         if ( isset($HTTP_POST_VARS['group_delete']) )
174         {
175                 //
176                 // Reset User Moderator Level
177                 //
178
179                 // Is Group moderating a forum ?
180                 $sql = "SELECT auth_mod FROM " . AUTH_ACCESS_TABLE . " 
181                         WHERE group_id = " . $group_id;
182                 if ( !($result = $db->sql_query($sql)) )
183                 {
184                         message_die(GENERAL_ERROR, 'Could not select auth_access', '', __LINE__, __FILE__, $sql);
185                 }
186
187                 $row = $db->sql_fetchrow($result);
188                 if (intval($row['auth_mod']) == 1)
189                 {
190                         // Yes, get the assigned users and update their Permission if they are no longer moderator of one of the forums
191                         $sql = "SELECT user_id FROM " . USER_GROUP_TABLE . "
192                                 WHERE group_id = " . $group_id;
193                         if ( !($result = $db->sql_query($sql)) )
194                         {
195                                 message_die(GENERAL_ERROR, 'Could not select user_group', '', __LINE__, __FILE__, $sql);
196                         }
197
198                         $rows = $db->sql_fetchrowset($result);
199                         for ($i = 0; $i < count($rows); $i++)
200                         {
201                                 $sql = "SELECT g.group_id FROM " . AUTH_ACCESS_TABLE . " a, " . GROUPS_TABLE . " g, " . USER_GROUP_TABLE . " ug
202                                 WHERE (a.auth_mod = 1) AND (g.group_id = a.group_id) AND (a.group_id = ug.group_id) AND (g.group_id = ug.group_id) 
203                                         AND (ug.user_id = " . intval($rows[$i]['user_id']) . ") AND (ug.group_id <> " . $group_id . ")";
204                                 if ( !($result = $db->sql_query($sql)) )
205                                 {
206                                         message_die(GENERAL_ERROR, 'Could not obtain moderator permissions', '', __LINE__, __FILE__, $sql);
207                                 }
208
209                                 if ($db->sql_numrows($result) == 0)
210                                 {
211                                         $sql = "UPDATE " . USERS_TABLE . " SET user_level = " . USER . " 
212                                         WHERE user_level = " . MOD . " AND user_id = " . intval($rows[$i]['user_id']);
213                                         
214                                         if ( !$db->sql_query($sql) )
215                                         {
216                                                 message_die(GENERAL_ERROR, 'Could not update moderator permissions', '', __LINE__, __FILE__, $sql);
217                                         }
218                                 }
219                         }
220                 }
221
222                 //
223                 // Delete Group
224                 //
225                 $sql = "DELETE FROM " . GROUPS_TABLE . "
226                         WHERE group_id = " . $group_id;
227                 if ( !$db->sql_query($sql) )
228                 {
229                         message_die(GENERAL_ERROR, 'Could not update group', '', __LINE__, __FILE__, $sql);
230                 }
231
232                 $sql = "DELETE FROM " . USER_GROUP_TABLE . "
233                         WHERE group_id = " . $group_id;
234                 if ( !$db->sql_query($sql) )
235                 {
236                         message_die(GENERAL_ERROR, 'Could not update user_group', '', __LINE__, __FILE__, $sql);
237                 }
238
239                 $sql = "DELETE FROM " . AUTH_ACCESS_TABLE . "
240                         WHERE group_id = " . $group_id;
241                 if ( !$db->sql_query($sql) )
242                 {
243                         message_die(GENERAL_ERROR, 'Could not update auth_access', '', __LINE__, __FILE__, $sql);
244                 }
245
246                 $message = $lang['Deleted_group'] . '<br /><br />' . sprintf($lang['Click_return_groupsadmin'], '<a href="' . append_sid("admin_groups.$phpEx") . '">', '</a>') . '<br /><br />' . sprintf($lang['Click_return_admin_index'], '<a href="' . append_sid("index.$phpEx?pane=right") . '">', '</a>');
247
248                 message_die(GENERAL_MESSAGE, $message);
249         }
250         else
251         {
252                 $group_type = isset($HTTP_POST_VARS['group_type']) ? intval($HTTP_POST_VARS['group_type']) : GROUP_OPEN;
253                 $group_name = isset($HTTP_POST_VARS['group_name']) ? trim($HTTP_POST_VARS['group_name']) : '';
254                 $group_description = isset($HTTP_POST_VARS['group_description']) ? trim($HTTP_POST_VARS['group_description']) : '';
255                 $group_moderator = isset($HTTP_POST_VARS['username']) ? $HTTP_POST_VARS['username'] : '';
256                 $delete_old_moderator = isset($HTTP_POST_VARS['delete_old_moderator']) ? true : false;
257
258                 if ( $group_name == '' )
259                 {
260                         message_die(GENERAL_MESSAGE, $lang['No_group_name']);
261                 }
262                 else if ( $group_moderator == '' )
263                 {
264                         message_die(GENERAL_MESSAGE, $lang['No_group_moderator']);
265                 }
266                 
267                 $this_userdata = get_userdata($group_moderator, true);
268                 $group_moderator = $this_userdata['user_id'];
269
270                 if ( !$group_moderator )
271                 {
272                         message_die(GENERAL_MESSAGE, $lang['No_group_moderator']);
273                 }
274                                 
275                 if( $mode == "editgroup" )
276                 {
277                         $sql = "SELECT *
278                                 FROM " . GROUPS_TABLE . "
279                                 WHERE group_single_user <> " . TRUE . "
280                                 AND group_id = " . $group_id;
281                         if ( !($result = $db->sql_query($sql)) )
282                         {
283                                 message_die(GENERAL_ERROR, 'Error getting group information', '', __LINE__, __FILE__, $sql);
284                         }
285
286                         if( !($group_info = $db->sql_fetchrow($result)) )
287                         {
288                                 message_die(GENERAL_MESSAGE, $lang['Group_not_exist']);
289                         }
290                 
291                         if ( $group_info['group_moderator'] != $group_moderator )
292                         {
293                                 if ( $delete_old_moderator )
294                                 {
295                                         $sql = "DELETE FROM " . USER_GROUP_TABLE . "
296                                                 WHERE user_id = " . $group_info['group_moderator'] . " 
297                                                         AND group_id = " . $group_id;
298                                         if ( !$db->sql_query($sql) )
299                                         {
300                                                 message_die(GENERAL_ERROR, 'Could not update group moderator', '', __LINE__, __FILE__, $sql);
301                                         }
302                                 }
303
304                                 $sql = "SELECT user_id 
305                                         FROM " . USER_GROUP_TABLE . " 
306                                         WHERE user_id = $group_moderator 
307                                                 AND group_id = $group_id";
308                                 if ( !($result = $db->sql_query($sql)) )
309                                 {
310                                         message_die(GENERAL_ERROR, 'Failed to obtain current group moderator info', '', __LINE__, __FILE__, $sql);
311                                 }
312
313                                 if ( !($row = $db->sql_fetchrow($result)) )
314                                 {
315                                         $sql = "INSERT INTO " . USER_GROUP_TABLE . " (group_id, user_id, user_pending)
316                                                 VALUES (" . $group_id . ", " . $group_moderator . ", 0)";
317                                         if ( !$db->sql_query($sql) )
318                                         {
319                                                 message_die(GENERAL_ERROR, 'Could not update group moderator', '', __LINE__, __FILE__, $sql);
320                                         }
321                                 }
322                         }
323
324                         $sql = "UPDATE " . GROUPS_TABLE . "
325                                 SET group_type = $group_type, group_name = '" . str_replace("\'", "''", $group_name) . "', group_description = '" . str_replace("\'", "''", $group_description) . "', group_moderator = $group_moderator 
326                                 WHERE group_id = $group_id";
327                         if ( !$db->sql_query($sql) )
328                         {
329                                 message_die(GENERAL_ERROR, 'Could not update group', '', __LINE__, __FILE__, $sql);
330                         }
331         
332                         $message = $lang['Updated_group'] . '<br /><br />' . sprintf($lang['Click_return_groupsadmin'], '<a href="' . append_sid("admin_groups.$phpEx") . '">', '</a>') . '<br /><br />' . sprintf($lang['Click_return_admin_index'], '<a href="' . append_sid("index.$phpEx?pane=right") . '">', '</a>');;
333
334                         message_die(GENERAL_MESSAGE, $message);
335                 }
336                 else if( $mode == 'newgroup' )
337                 {
338                         $sql = "INSERT INTO " . GROUPS_TABLE . " (group_type, group_name, group_description, group_moderator, group_single_user) 
339                                 VALUES ($group_type, '" . str_replace("\'", "''", $group_name) . "', '" . str_replace("\'", "''", $group_description) . "', $group_moderator,   '0')";
340                         if ( !$db->sql_query($sql) )
341                         {
342                                 message_die(GENERAL_ERROR, 'Could not insert new group', '', __LINE__, __FILE__, $sql);
343                         }
344                         $new_group_id = $db->sql_nextid();
345
346                         $sql = "INSERT INTO " . USER_GROUP_TABLE . " (group_id, user_id, user_pending)
347                                 VALUES ($new_group_id, $group_moderator, 0)";
348                         if ( !$db->sql_query($sql) )
349                         {
350                                 message_die(GENERAL_ERROR, 'Could not insert new user-group info', '', __LINE__, __FILE__, $sql);
351                         }
352                         
353                         $message = $lang['Added_new_group'] . '<br /><br />' . sprintf($lang['Click_return_groupsadmin'], '<a href="' . append_sid("admin_groups.$phpEx") . '">', '</a>') . '<br /><br />' . sprintf($lang['Click_return_admin_index'], '<a href="' . append_sid("index.$phpEx?pane=right") . '">', '</a>');;
354
355                         message_die(GENERAL_MESSAGE, $message);
356
357                 }
358                 else
359                 {
360                         message_die(GENERAL_MESSAGE, $lang['No_group_action']);
361                 }
362         }
363 }
364 else
365 {
366         $sql = "SELECT group_id, group_name
367                 FROM " . GROUPS_TABLE . "
368                 WHERE group_single_user <> " . TRUE . "
369                 ORDER BY group_name";
370         if ( !($result = $db->sql_query($sql)) )
371         {
372                 message_die(GENERAL_ERROR, 'Could not obtain group list', '', __LINE__, __FILE__, $sql);
373         }
374
375         $select_list = '';
376         if ( $row = $db->sql_fetchrow($result) )
377         {
378                 $select_list .= '<select name="' . POST_GROUPS_URL . '">';
379                 do
380                 {
381                         $select_list .= '<option value="' . $row['group_id'] . '">' . $row['group_name'] . '</option>';
382                 }
383                 while ( $row = $db->sql_fetchrow($result) );
384                 $select_list .= '</select>';
385         }
386
387         $template->set_filenames(array(
388                 'body' => 'admin/group_select_body.tpl')
389         );
390
391         $template->assign_vars(array(
392                 'L_GROUP_TITLE' => $lang['Group_administration'],
393                 'L_GROUP_EXPLAIN' => $lang['Group_admin_explain'],
394                 'L_GROUP_SELECT' => $lang['Select_group'],
395                 'L_LOOK_UP' => $lang['Look_up_group'],
396                 'L_CREATE_NEW_GROUP' => $lang['New_group'],
397
398                 'S_GROUP_ACTION' => append_sid("admin_groups.$phpEx"),
399                 'S_GROUP_SELECT' => $select_list)
400         );
401
402         if ( $select_list != '' )
403         {
404                 $template->assign_block_vars('select_box', array());
405         }
406
407         $template->pparse('body');
408 }
409
410 include('./page_footer_admin.'.$phpEx);
411
412 ?>