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 |
cache.php
001 <?php
002 /**
003 *
004 * @package acm
005 * @version $Id$
006 * @copyright (c) 2005 phpBB Group
007 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
008 *
009 */
010
011 /**
012 * @ignore
013 */
014 if (!defined('IN_PHPBB'))
015 {
016 exit;
017 }
018
019 /**
020 * Class for grabbing/handling cached entries, extends acm_file or acm_db depending on the setup
021 * @package acm
022 */
023 class cache extends acm
024 {
025 /**
026 * Get config values
027 */
028 function obtain_config()
029 {
030 global $db;
031
032 if (($config = $this->get('config')) !== false)
033 {
034 $sql = 'SELECT config_name, config_value
035 FROM ' . CONFIG_TABLE . '
036 WHERE is_dynamic = 1';
037 $result = $db->sql_query($sql);
038
039 while ($row = $db->sql_fetchrow($result))
040 {
041 $config[$row['config_name']] = $row['config_value'];
042 }
043 $db->sql_freeresult($result);
044 }
045 else
046 {
047 $config = $cached_config = array();
048
049 $sql = 'SELECT config_name, config_value, is_dynamic
050 FROM ' . CONFIG_TABLE;
051 $result = $db->sql_query($sql);
052
053 while ($row = $db->sql_fetchrow($result))
054 {
055 if (!$row['is_dynamic'])
056 {
057 $cached_config[$row['config_name']] = $row['config_value'];
058 }
059
060 $config[$row['config_name']] = $row['config_value'];
061 }
062 $db->sql_freeresult($result);
063
064 $this->put('config', $cached_config);
065 }
066
067 return $config;
068 }
069
070 /**
071 * Obtain list of naughty words and build preg style replacement arrays for use by the
072 * calling script
073 */
074 function obtain_word_list()
075 {
076 global $db;
077
078 if (($censors = $this->get('_word_censors')) === false)
079 {
080 $sql = 'SELECT word, replacement
081 FROM ' . WORDS_TABLE;
082 $result = $db->sql_query($sql);
083
084 $censors = array();
085 while ($row = $db->sql_fetchrow($result))
086 {
087 $censors['match'][] = '#(?<!\w)(' . str_replace('\*', '\w*?', preg_quote($row['word'], '#')) . ')(?!\w)#i';
088 $censors['replace'][] = $row['replacement'];
089 }
090 $db->sql_freeresult($result);
091
092 $this->put('_word_censors', $censors);
093 }
094
095 return $censors;
096 }
097
098 /**
099 * Obtain currently listed icons
100 */
101 function obtain_icons()
102 {
103 if (($icons = $this->get('_icons')) === false)
104 {
105 global $db;
106
107 // Topic icons
108 $sql = 'SELECT *
109 FROM ' . ICONS_TABLE . '
110 ORDER BY icons_order';
111 $result = $db->sql_query($sql);
112
113 $icons = array();
114 while ($row = $db->sql_fetchrow($result))
115 {
116 $icons[$row['icons_id']]['img'] = $row['icons_url'];
117 $icons[$row['icons_id']]['width'] = (int) $row['icons_width'];
118 $icons[$row['icons_id']]['height'] = (int) $row['icons_height'];
119 $icons[$row['icons_id']]['display'] = (bool) $row['display_on_posting'];
120 }
121 $db->sql_freeresult($result);
122
123 $this->put('_icons', $icons);
124 }
125
126 return $icons;
127 }
128
129 /**
130 * Obtain ranks
131 */
132 function obtain_ranks()
133 {
134 if (($ranks = $this->get('_ranks')) === false)
135 {
136 global $db;
137
138 $sql = 'SELECT *
139 FROM ' . RANKS_TABLE . '
140 ORDER BY rank_min DESC';
141 $result = $db->sql_query($sql);
142
143 $ranks = array();
144 while ($row = $db->sql_fetchrow($result))
145 {
146 if ($row['rank_special'])
147 {
148 $ranks['special'][$row['rank_id']] = array(
149 'rank_title' => $row['rank_title'],
150 'rank_image' => $row['rank_image']
151 );
152 }
153 else
154 {
155 $ranks['normal'][] = array(
156 'rank_title' => $row['rank_title'],
157 'rank_min' => $row['rank_min'],
158 'rank_image' => $row['rank_image']
159 );
160 }
161 }
162 $db->sql_freeresult($result);
163
164 $this->put('_ranks', $ranks);
165 }
166
167 return $ranks;
168 }
169
170 /**
171 * Obtain allowed extensions
172 *
173 * @param mixed $forum_id If false then check for private messaging, if int then check for forum id. If true, then only return extension informations.
174 *
175 * @return array allowed extensions array.
176 */
177 function obtain_attach_extensions($forum_id)
178 {
179 if (($extensions = $this->get('_extensions')) === false)
180 {
181 global $db;
182
183 $extensions = array(
184 '_allowed_post' => array(),
185 '_allowed_pm' => array(),
186 );
187
188 // The rule is to only allow those extensions defined. ;)
189 $sql = 'SELECT e.extension, g.*
190 FROM ' . EXTENSIONS_TABLE . ' e, ' . EXTENSION_GROUPS_TABLE . ' g
191 WHERE e.group_id = g.group_id
192 AND (g.allow_group = 1 OR g.allow_in_pm = 1)';
193 $result = $db->sql_query($sql);
194
195 while ($row = $db->sql_fetchrow($result))
196 {
197 $extension = strtolower(trim($row['extension']));
198
199 $extensions[$extension] = array(
200 'display_cat' => (int) $row['cat_id'],
201 'download_mode' => (int) $row['download_mode'],
202 'upload_icon' => trim($row['upload_icon']),
203 'max_filesize' => (int) $row['max_filesize'],
204 'allow_group' => $row['allow_group'],
205 'allow_in_pm' => $row['allow_in_pm'],
206 );
207
208 $allowed_forums = ($row['allowed_forums']) ? unserialize(trim($row['allowed_forums'])) : array();
209
210 // Store allowed extensions forum wise
211 if ($row['allow_group'])
212 {
213 $extensions['_allowed_post'][$extension] = (!sizeof($allowed_forums)) ? 0 : $allowed_forums;
214 }
215
216 if ($row['allow_in_pm'])
217 {
218 $extensions['_allowed_pm'][$extension] = 0;
219 }
220 }
221 $db->sql_freeresult($result);
222
223 $this->put('_extensions', $extensions);
224 }
225
226 // Forum post
227 if ($forum_id === false)
228 {
229 // We are checking for private messages, therefore we only need to get the pm extensions...
230 $return = array('_allowed_' => array());
231
232 foreach ($extensions['_allowed_pm'] as $extension => $check)
233 {
234 $return['_allowed_'][$extension] = 0;
235 $return[$extension] = $extensions[$extension];
236 }
237
238 $extensions = $return;
239 }
240 else if ($forum_id === true)
241 {
242 return $extensions;
243 }
244 else
245 {
246 $forum_id = (int) $forum_id;
247 $return = array('_allowed_' => array());
248
249 foreach ($extensions['_allowed_post'] as $extension => $check)
250 {
251 // Check for allowed forums
252 if (is_array($check))
253 {
254 $allowed = (!in_array($forum_id, $check)) ? false : true;
255 }
256 else
257 {
258 $allowed = true;
259 }
260
261 if ($allowed)
262 {
263 $return['_allowed_'][$extension] = 0;
264 $return[$extension] = $extensions[$extension];
265 }
266 }
267
268 $extensions = $return;
269 }
270
271 if (!isset($extensions['_allowed_']))
272 {
273 $extensions['_allowed_'] = array();
274 }
275
276 return $extensions;
277 }
278
279 /**
280 * Obtain active bots
281 */
282 function obtain_bots()
283 {
284 if (($bots = $this->get('_bots')) === false)
285 {
286 global $db;
287
288 switch ($db->sql_layer)
289 {
290 case 'mssql':
291 case 'mssql_odbc':
292 $sql = 'SELECT user_id, bot_agent, bot_ip
293 FROM ' . BOTS_TABLE . '
294 WHERE bot_active = 1
295 ORDER BY LEN(bot_agent) DESC';
296 break;
297
298 case 'firebird':
299 $sql = 'SELECT user_id, bot_agent, bot_ip
300 FROM ' . BOTS_TABLE . '
301 WHERE bot_active = 1
302 ORDER BY CHAR_LENGTH(bot_agent) DESC';
303 break;
304
305 // LENGTH supported by MySQL, IBM DB2 and Oracle for sure...
306 default:
307 $sql = 'SELECT user_id, bot_agent, bot_ip
308 FROM ' . BOTS_TABLE . '
309 WHERE bot_active = 1
310 ORDER BY LENGTH(bot_agent) DESC';
311 break;
312 }
313 $result = $db->sql_query($sql);
314
315 $bots = array();
316 while ($row = $db->sql_fetchrow($result))
317 {
318 $bots[] = $row;
319 }
320 $db->sql_freeresult($result);
321
322 $this->put('_bots', $bots);
323 }
324
325 return $bots;
326 }
327
328 /**
329 * Obtain cfg file data
330 */
331 function obtain_cfg_items($theme)
332 {
333 global $config, $phpbb_root_path;
334
335 $parsed_items = array(
336 'theme' => array(),
337 'template' => array(),
338 'imageset' => array()
339 );
340
341 foreach ($parsed_items as $key => $parsed_array)
342 {
343 $parsed_array = $this->get('_cfg_' . $key . '_' . $theme[$key . '_path']);
344
345 if ($parsed_array === false)
346 {
347 $parsed_array = array();
348 }
349
350 $reparse = false;
351 $filename = $phpbb_root_path . 'styles/' . $theme[$key . '_path'] . '/' . $key . '/' . $key . '.cfg';
352
353 if (!file_exists($filename))
354 {
355 continue;
356 }
357
358 if (!isset($parsed_array['filetime']) || (($config['load_tplcompile'] && @filemtime($filename) > $parsed_array['filetime'])))
359 {
360 $reparse = true;
361 }
362
363 // Re-parse cfg file
364 if ($reparse)
365 {
366 $parsed_array = parse_cfg_file($filename);
367 $parsed_array['filetime'] = @filemtime($filename);
368
369 $this->put('_cfg_' . $key . '_' . $theme[$key . '_path'], $parsed_array);
370 }
371 $parsed_items[$key] = $parsed_array;
372 }
373
374 return $parsed_items;
375 }
376
377 /**
378 * Obtain disallowed usernames
379 */
380 function obtain_disallowed_usernames()
381 {
382 if (($usernames = $this->get('_disallowed_usernames')) === false)
383 {
384 global $db;
385
386 $sql = 'SELECT disallow_username
387 FROM ' . DISALLOW_TABLE;
388 $result = $db->sql_query($sql);
389
390 $usernames = array();
391 while ($row = $db->sql_fetchrow($result))
392 {
393 $usernames[] = str_replace('%', '.*?', preg_quote(utf8_clean_string($row['disallow_username']), '#'));
394 }
395 $db->sql_freeresult($result);
396
397 $this->put('_disallowed_usernames', $usernames);
398 }
399
400 return $usernames;
401 }
402
403 /**
404 * Obtain hooks...
405 */
406 function obtain_hooks()
407 {
408 global $phpbb_root_path, $phpEx;
409
410 if (($hook_files = $this->get('_hooks')) === false)
411 {
412 $hook_files = array();
413
414 // Now search for hooks...
415 $dh = @opendir($phpbb_root_path . 'includes/hooks/');
416
417 if ($dh)
418 {
419 while (($file = readdir($dh)) !== false)
420 {
421 if (strpos($file, 'hook_') === 0 && substr($file, -(strlen($phpEx) + 1)) === '.' . $phpEx)
422 {
423 $hook_files[] = substr($file, 0, -(strlen($phpEx) + 1));
424 }
425 }
426 closedir($dh);
427 }
428
429 $this->put('_hooks', $hook_files);
430 }
431
432 return $hook_files;
433 }
434 }
435
436 ?>