Verzeichnisstruktur phpBB-3.0.0
- Veröffentlicht
- 12.12.2007
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
add_permissions.php
001 <?php
002 // -------------------------------------------------------------
003 //
004 // $Id$
005 //
006 // FILENAME : add_permissions.php
007 // STARTED : Sat Nov 06, 2004
008 // COPYRIGHT : � 2004 phpBB Group
009 // WWW : http://www.phpbb.com/
010 // LICENCE : GPL vs2.0 [ see /docs/COPYING ]
011 //
012 // -------------------------------------------------------------
013
014 //
015 // Security message:
016 //
017 // This script is potentially dangerous.
018 // Remove or comment the next line (die(".... ) to enable this script.
019 // Do NOT FORGET to either remove this script or disable it after you have used it.
020 //
021 die("Please read the first lines of this script for instructions on how to enable it");
022
023
024 // This script adds missing permissions
025 $db = $dbhost = $dbuser = $dbpasswd = $dbport = $dbname = '';
026
027 define('IN_PHPBB', 1);
028 define('ANONYMOUS', 1);
029 $phpEx = substr(strrchr(__FILE__, '.'), 1);
030 $phpbb_root_path='./../';
031 include($phpbb_root_path . 'config.'.$phpEx);
032 require($phpbb_root_path . 'includes/acm/acm_' . $acm_type . '.'.$phpEx);
033 require($phpbb_root_path . 'includes/db/' . $dbms . '.'.$phpEx);
034 include($phpbb_root_path . 'includes/functions.'.$phpEx);
035
036 define('ACL_NEVER', 0);
037 define('ACL_YES', 1);
038 define('ACL_NO', -1);
039
040 define('ACL_GROUPS_TABLE', $table_prefix.'acl_groups');
041 define('ACL_OPTIONS_TABLE', $table_prefix.'acl_options');
042 define('ACL_USERS_TABLE', $table_prefix.'acl_users');
043 define('GROUPS_TABLE', $table_prefix.'groups');
044 define('USERS_TABLE', $table_prefix.'users');
045
046 $cache = new acm();
047 $db = new sql_db();
048
049 // Connect to DB
050 $db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false);
051
052 // auth => is_local, is_global
053 $f_permissions = array(
054 'f_' => array(1, 0),
055 'f_list' => array(1, 0),
056 'f_read' => array(1, 0),
057 'f_post' => array(1, 0),
058 'f_reply' => array(1, 0),
059 'f_edit' => array(1, 0),
060 'f_user_lock' => array(1, 0),
061 'f_delete' => array(1, 0),
062 'f_bump' => array(1, 0),
063 'f_poll' => array(1, 0),
064 'f_vote' => array(1, 0),
065 'f_votechg' => array(1, 0),
066 'f_announce'=> array(1, 0),
067 'f_sticky' => array(1, 0),
068 'f_attach' => array(1, 0),
069 'f_download'=> array(1, 0),
070 'f_icons' => array(1, 0),
071 'f_bbcode' => array(1, 0),
072 'f_smilies' => array(1, 0),
073 'f_img' => array(1, 0),
074 'f_flash' => array(1, 0),
075 'f_sigs' => array(1, 0),
076 'f_search' => array(1, 0),
077 'f_email' => array(1, 0),
078 'f_print' => array(1, 0),
079 'f_ignoreflood' => array(1, 0),
080 'f_postcount' => array(1, 0),
081 'f_noapprove'=> array(1, 0),
082 'f_report' => array(1, 0),
083 'f_subscribe' => array(1, 0),
084 );
085
086 $m_permissions = array(
087 'm_' => array(1, 1),
088 'm_edit' => array(1, 1),
089 'm_delete' => array(1, 1),
090 'm_move' => array(1, 1),
091 'm_lock' => array(1, 1),
092 'm_split' => array(1, 1),
093 'm_merge' => array(1, 1),
094 'm_approve' => array(1, 1),
095 'm_unrate' => array(1, 1),
096 'm_auth' => array(1, 1),
097 'm_ip' => array(1, 1),
098 'm_info' => array(1, 1),
099 );
100
101 $a_permissions = array(
102 'a_' => array(0, 1),
103 'a_server' => array(0, 1),
104 'a_board' => array(0, 1),
105 'a_clearlogs' => array(0, 1),
106 'a_words' => array(0, 1),
107 'a_icons' => array(0, 1),
108 'a_bbcode' => array(0, 1),
109 'a_attach' => array(0, 1),
110 'a_email' => array(0, 1),
111 'a_styles' => array(0, 1),
112 'a_user' => array(0, 1),
113 'a_useradd' => array(0, 1),
114 'a_userdel' => array(0, 1),
115 'a_ranks' => array(0, 1),
116 'a_ban' => array(0, 1),
117 'a_names' => array(0, 1),
118 'a_group' => array(0, 1),
119 'a_groupadd'=> array(0, 1),
120 'a_groupdel'=> array(0, 1),
121 'a_forum' => array(0, 1),
122 'a_forumadd'=> array(0, 1),
123 'a_forumdel'=> array(0, 1),
124 'a_prune' => array(0, 1),
125 'a_auth' => array(0, 1),
126 'a_authmods'=> array(0, 1),
127 'a_authadmins' => array(0, 1),
128 'a_authusers' => array(0, 1),
129 'a_authgroups' => array(0, 1),
130 'a_authdeps'=> array(0, 1),
131 'a_backup' => array(0, 1),
132 'a_restore' => array(0, 1),
133 'a_search' => array(0, 1),
134 'a_events' => array(0, 1),
135 'a_cron' => array(0, 1),
136 );
137
138 $u_permissions = array(
139 'u_' => array(0, 1),
140 'u_sendemail' => array(0, 1),
141 'u_readpm' => array(0, 1),
142 'u_sendpm' => array(0, 1),
143 'u_sendim' => array(0, 1),
144 'u_hideonline' => array(0, 1),
145 'u_viewonline' => array(0, 1),
146 'u_viewprofile' => array(0, 1),
147 'u_chgavatar' => array(0, 1),
148 'u_chggrp' => array(0, 1),
149 'u_chgemail' => array(0, 1),
150 'u_chgname' => array(0, 1),
151 'u_chgpasswd' => array(0, 1),
152 'u_chgcensors' => array(0, 1),
153 'u_search' => array(0, 1),
154 'u_savedrafts' => array(0, 1),
155 'u_download' => array(0, 1),
156 'u_attach' => array(0, 1),
157 'u_sig' => array(0, 1),
158 'u_pm_attach' => array(0, 1),
159 'u_pm_bbcode' => array(0, 1),
160 'u_pm_smilies' => array(0, 1),
161 'u_pm_download' => array(0, 1),
162 'u_pm_edit' => array(0, 1),
163 'u_pm_printpm' => array(0, 1),
164 'u_pm_emailpm' => array(0, 1),
165 'u_pm_forward' => array(0, 1),
166 'u_pm_delete' => array(0, 1),
167 'u_pm_img' => array(0, 1),
168 'u_pm_flash' => array(0, 1),
169 );
170
171 echo "<p><b>Determining existing permissions</b></p>\n";
172
173 $sql = 'SELECT auth_option_id, auth_option FROM ' . ACL_OPTIONS_TABLE;
174 $result = $db->sql_query($sql);
175
176 $remove_auth_options = array();
177 while ($row = $db->sql_fetchrow($result))
178 {
179 if (!in_array($row['auth_option'], array_keys(${substr($row['auth_option'], 0, 2) . 'permissions'})))
180 {
181 $remove_auth_options[$row['auth_option']] = $row['auth_option_id'];
182 }
183 unset(${substr($row['auth_option'], 0, 2) . 'permissions'}[$row['auth_option']]);
184 }
185 $db->sql_freeresult($result);
186
187 if (sizeof($remove_auth_options))
188 {
189 $db->sql_query('DELETE FROM ' . ACL_USERS_TABLE . ' WHERE auth_option_id IN (' . implode(', ', $remove_auth_options) . ')');
190 $db->sql_query('DELETE FROM ' . ACL_GROUPS_TABLE . ' WHERE auth_option_id IN (' . implode(', ', $remove_auth_options) . ')');
191 $db->sql_query('DELETE FROM ' . ACL_OPTIONS_TABLE . ' WHERE auth_option_id IN (' . implode(', ', $remove_auth_options) . ')');
192
193 echo '<p><b>Removed the following auth options... [<i>' . implode(', ', array_keys($remove_auth_options)) . "</i>]</b></p>\n\n";
194 }
195
196 $prefixes = array('f_', 'a_', 'm_', 'u_');
197
198 foreach ($prefixes as $prefix)
199 {
200 $var = $prefix . 'permissions';
201 if (sizeof($$var))
202 {
203 foreach ($$var as $auth_option => $l_ary)
204 {
205 $sql_ary = array(
206 'auth_option' => $auth_option,
207 'is_local' => $l_ary[0],
208 'is_global' => $l_ary[1]
209 );
210
211 $db->sql_query('INSERT INTO ' . ACL_OPTIONS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
212
213 echo "<p><b>Adding $auth_option...</b></p>\n";
214
215 mass_auth('group', 0, 'guests', $auth_option, ACL_NEVER);
216 mass_auth('group', 0, 'inactive', $auth_option, ACL_NEVER);
217 mass_auth('group', 0, 'inactive_coppa', $auth_option, ACL_NEVER);
218 mass_auth('group', 0, 'registered_coppa', $auth_option, ACL_NEVER);
219 mass_auth('group', 0, 'registered', $auth_option, (($prefix != 'm_' && $prefix != 'a_') ? ACL_YES : ACL_NEVER));
220 mass_auth('group', 0, 'global_moderators', $auth_option, (($prefix != 'a_') ? ACL_YES : ACL_NEVER));
221 mass_auth('group', 0, 'administrators', $auth_option, ACL_YES);
222 mass_auth('group', 0, 'bots', $auth_option, (($prefix != 'm_' && $prefix != 'a_') ? ACL_YES : ACL_NEVER));
223 }
224 }
225 }
226
227 $sql = 'UPDATE ' . USERS_TABLE . " SET user_permissions = ''";
228 $db->sql_query($sql);
229
230 $cache->destroy('_acl_options');
231
232 echo "<p><b>Done</b></p>\n";
233
234 /*
235 $ug_type = user|group
236 $forum_id = forum ids (array|int|0) -> 0 == all forums
237 $ug_id = [int] user_id|group_id : [string] usergroup name
238 $acl_list = [string] acl entry : [array] acl entries
239 $setting = ACL_YES|ACL_NEVER|ACL_NO
240 */
241 function mass_auth($ug_type, $forum_id, $ug_id, $acl_list, $setting)
242 {
243 global $db;
244 static $acl_option_ids, $group_ids;
245
246 if ($ug_type == 'group' && is_string($ug_id))
247 {
248 if (!isset($group_ids[$ug_id]))
249 {
250 $sql = 'SELECT group_id FROM ' . GROUPS_TABLE . "
251 WHERE group_name = '" . strtoupper($ug_id) . "'";
252 $result = $db->sql_query_limit($sql, 1);
253 $id = (int) $db->sql_fetchfield('group_id', 0, $result);
254 $db->sql_freeresult($result);
255
256 if (!$id)
257 {
258 return;
259 }
260
261 $group_ids[$ug_id] = $id;
262 }
263
264 $ug_id = (int) $group_ids[$ug_id];
265 }
266
267 // Build correct parameters
268 $auth = array();
269
270 if (!is_array($acl_list))
271 {
272 $auth = array($acl_list => $setting);
273 }
274 else
275 {
276 foreach ($acl_list as $auth_option)
277 {
278 $auth[$auth_option] = $setting;
279 }
280 }
281 unset($acl_list);
282
283 if (!is_array($forum_id))
284 {
285 $forum_id = array($forum_id);
286 }
287
288 // Set any flags as required
289 foreach ($auth as $auth_option => $acl_setting)
290 {
291 $flag = substr($auth_option, 0, strpos($auth_option, '_') + 1);
292 if (empty($auth[$flag]))
293 {
294 $auth[$flag] = $acl_setting;
295 }
296 }
297
298 if (!is_array($acl_option_ids) || empty($acl_option_ids))
299 {
300 $sql = 'SELECT auth_option_id, auth_option
301 FROM ' . ACL_OPTIONS_TABLE;
302 $result = $db->sql_query($sql);
303
304 while ($row = $db->sql_fetchrow($result))
305 {
306 $acl_option_ids[$row['auth_option']] = $row['auth_option_id'];
307 }
308 $db->sql_freeresult($result);
309 }
310
311 $sql_forum = 'AND a.forum_id IN (' . implode(', ', array_map('intval', $forum_id)) . ')';
312
313 $sql = ($ug_type == 'user') ? 'SELECT o.auth_option_id, o.auth_option, a.forum_id, a.auth_setting FROM ' . ACL_USERS_TABLE . ' a, ' . ACL_OPTIONS_TABLE . " o WHERE a.auth_option_id = o.auth_option_id $sql_forum AND a.user_id = $ug_id" : 'SELECT o.auth_option_id, o.auth_option, a.forum_id, a.auth_setting FROM ' . ACL_GROUPS_TABLE . ' a, ' . ACL_OPTIONS_TABLE . " o WHERE a.auth_option_id = o.auth_option_id $sql_forum AND a.group_id = $ug_id";
314 $result = $db->sql_query($sql);
315
316 $cur_auth = array();
317 while ($row = $db->sql_fetchrow($result))
318 {
319 $cur_auth[$row['forum_id']][$row['auth_option_id']] = $row['auth_setting'];
320 }
321 $db->sql_freeresult($result);
322
323 $table = ($ug_type == 'user') ? ACL_USERS_TABLE : ACL_GROUPS_TABLE;
324 $id_field = $ug_type . '_id';
325
326 $sql_ary = array();
327 foreach ($forum_id as $forum)
328 {
329 foreach ($auth as $auth_option => $setting)
330 {
331 $auth_option_id = $acl_option_ids[$auth_option];
332
333 if (!$auth_option_id)
334 {
335 continue;
336 }
337
338 switch ($setting)
339 {
340 case ACL_NO:
341 if (isset($cur_auth[$forum][$auth_option_id]))
342 {
343 $sql_ary['delete'][] = "DELETE FROM $table
344 WHERE forum_id = $forum
345 AND auth_option_id = $auth_option_id
346 AND $id_field = $ug_id";
347 }
348 break;
349
350 default:
351 if (!isset($cur_auth[$forum][$auth_option_id]))
352 {
353 $sql_ary['insert'][] = "$ug_id, $forum, $auth_option_id, $setting";
354 }
355 else if ($cur_auth[$forum][$auth_option_id] != $setting)
356 {
357 $sql_ary['update'][] = "UPDATE " . $table . "
358 SET auth_setting = $setting
359 WHERE $id_field = $ug_id
360 AND forum_id = $forum
361 AND auth_option_id = $auth_option_id";
362 }
363 }
364 }
365 }
366 unset($cur_auth);
367
368 $sql = '';
369 foreach ($sql_ary as $sql_type => $sql_subary)
370 {
371 switch ($sql_type)
372 {
373 case 'insert':
374 switch ($db->sql_layer)
375 {
376 case 'mysql':
377 case 'mysql4':
378 $sql = 'VALUES ' . implode(', ', preg_replace('#^(.*?)$#', '(\1)', $sql_subary));
379 break;
380
381 case 'mssql':
382 case 'sqlite':
383 $sql = implode(' UNION ALL ', preg_replace('#^(.*?)$#', 'SELECT \1', $sql_subary));
384 break;
385
386 default:
387 foreach ($sql_subary as $sql)
388 {
389 $sql = "INSERT INTO $table ($id_field, forum_id, auth_option_id, auth_setting) VALUES ($sql)";
390 $result = $db->sql_query($sql);
391 $sql = '';
392 }
393 }
394
395 if ($sql != '')
396 {
397 $sql = "INSERT INTO $table ($id_field, forum_id, auth_option_id, auth_setting) $sql";
398 $result = $db->sql_query($sql);
399 }
400 break;
401
402 case 'update':
403 case 'delete':
404 foreach ($sql_subary as $sql)
405 {
406 $result = $db->sql_query($sql);
407 $sql = '';
408 }
409 break;
410 }
411 unset($sql_ary[$sql_type]);
412 }
413 unset($sql_ary);
414
415 }
416
417 ?>