phpBB
Statistics
| Revision:

root / branches / phpBB-3_0_0 / phpBB / includes / cache.php

History | View | Annotate | Download (9.1 kB)

1 6064 naderman
<?php
2 7736 acydburn
/**
3 6064 naderman
*
4 6064 naderman
* @package acm
5 6064 naderman
* @version $Id$
6 7736 acydburn
* @copyright (c) 2005 phpBB Group
7 7736 acydburn
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
8 6064 naderman
*
9 6064 naderman
*/
10 6064 naderman
11 6064 naderman
/**
12 8146 acydburn
* @ignore
13 6064 naderman
*/
14 6064 naderman
if (!defined('IN_PHPBB'))
15 6064 naderman
{
16 6064 naderman
        exit;
17 6064 naderman
}
18 6064 naderman
19 6064 naderman
/**
20 6064 naderman
* Class for grabbing/handling cached entries, extends acm_file or acm_db depending on the setup
21 6064 naderman
* @package acm
22 6064 naderman
*/
23 6064 naderman
class cache extends acm
24 6064 naderman
{
25 6064 naderman
        /**
26 6064 naderman
        * Get config values
27 6064 naderman
        */
28 6064 naderman
        function obtain_config()
29 6064 naderman
        {
30 6064 naderman
                global $db;
31 6064 naderman
32 6064 naderman
                if (($config = $this->get('config')) !== false)
33 6064 naderman
                {
34 6064 naderman
                        $sql = 'SELECT config_name, config_value
35 6064 naderman
                                FROM ' . CONFIG_TABLE . '
36 6064 naderman
                                WHERE is_dynamic = 1';
37 6064 naderman
                        $result = $db->sql_query($sql);
38 6064 naderman
39 6064 naderman
                        while ($row = $db->sql_fetchrow($result))
40 6064 naderman
                        {
41 6064 naderman
                                $config[$row['config_name']] = $row['config_value'];
42 6064 naderman
                        }
43 6064 naderman
                        $db->sql_freeresult($result);
44 6064 naderman
                }
45 6064 naderman
                else
46 6064 naderman
                {
47 6064 naderman
                        $config = $cached_config = array();
48 6064 naderman
49 6064 naderman
                        $sql = 'SELECT config_name, config_value, is_dynamic
50 6064 naderman
                                FROM ' . CONFIG_TABLE;
51 6064 naderman
                        $result = $db->sql_query($sql);
52 6064 naderman
53 6064 naderman
                        while ($row = $db->sql_fetchrow($result))
54 6064 naderman
                        {
55 6064 naderman
                                if (!$row['is_dynamic'])
56 6064 naderman
                                {
57 6064 naderman
                                        $cached_config[$row['config_name']] = $row['config_value'];
58 6064 naderman
                                }
59 6064 naderman
60 6064 naderman
                                $config[$row['config_name']] = $row['config_value'];
61 6064 naderman
                        }
62 6064 naderman
                        $db->sql_freeresult($result);
63 6064 naderman
64 6064 naderman
                        $this->put('config', $cached_config);
65 6064 naderman
                }
66 8691 acydburn
67 6064 naderman
                return $config;
68 6064 naderman
        }
69 6064 naderman
70 6064 naderman
        /**
71 6064 naderman
        * Obtain list of naughty words and build preg style replacement arrays for use by the
72 6064 naderman
        * calling script
73 6064 naderman
        */
74 6572 acydburn
        function obtain_word_list()
75 6064 naderman
        {
76 8269 acydburn
                global $db;
77 6064 naderman
78 7386 acydburn
                if (($censors = $this->get('_word_censors')) === false)
79 6064 naderman
                {
80 6064 naderman
                        $sql = 'SELECT word, replacement
81 6930 acydburn
                                FROM ' . WORDS_TABLE;
82 6064 naderman
                        $result = $db->sql_query($sql);
83 6064 naderman
84 6064 naderman
                        $censors = array();
85 6064 naderman
                        while ($row = $db->sql_fetchrow($result))
86 6064 naderman
                        {
87 10913 git-gate
                                $censors['match'][] = get_censor_preg_expression($row['word']);
88 6064 naderman
                                $censors['replace'][] = $row['replacement'];
89 6064 naderman
                        }
90 6064 naderman
                        $db->sql_freeresult($result);
91 6064 naderman
92 7386 acydburn
                        $this->put('_word_censors', $censors);
93 6064 naderman
                }
94 6064 naderman
95 6572 acydburn
                return $censors;
96 6064 naderman
        }
97 6064 naderman
98 6064 naderman
        /**
99 6064 naderman
        * Obtain currently listed icons
100 6064 naderman
        */
101 6572 acydburn
        function obtain_icons()
102 6064 naderman
        {
103 7386 acydburn
                if (($icons = $this->get('_icons')) === false)
104 6064 naderman
                {
105 6064 naderman
                        global $db;
106 8691 acydburn
107 6064 naderman
                        // Topic icons
108 6064 naderman
                        $sql = 'SELECT *
109 6064 naderman
                                FROM ' . ICONS_TABLE . '
110 6064 naderman
                                ORDER BY icons_order';
111 6064 naderman
                        $result = $db->sql_query($sql);
112 6064 naderman
113 6064 naderman
                        $icons = array();
114 6064 naderman
                        while ($row = $db->sql_fetchrow($result))
115 6064 naderman
                        {
116 6064 naderman
                                $icons[$row['icons_id']]['img'] = $row['icons_url'];
117 6064 naderman
                                $icons[$row['icons_id']]['width'] = (int) $row['icons_width'];
118 6064 naderman
                                $icons[$row['icons_id']]['height'] = (int) $row['icons_height'];
119 6064 naderman
                                $icons[$row['icons_id']]['display'] = (bool) $row['display_on_posting'];
120 6064 naderman
                        }
121 6064 naderman
                        $db->sql_freeresult($result);
122 6064 naderman
123 7386 acydburn
                        $this->put('_icons', $icons);
124 6064 naderman
                }
125 6064 naderman
126 6572 acydburn
                return $icons;
127 6064 naderman
        }
128 6064 naderman
129 6064 naderman
        /**
130 6064 naderman
        * Obtain ranks
131 6064 naderman
        */
132 6572 acydburn
        function obtain_ranks()
133 6064 naderman
        {
134 7386 acydburn
                if (($ranks = $this->get('_ranks')) === false)
135 6064 naderman
                {
136 6064 naderman
                        global $db;
137 8691 acydburn
138 6064 naderman
                        $sql = 'SELECT *
139 6064 naderman
                                FROM ' . RANKS_TABLE . '
140 6064 naderman
                                ORDER BY rank_min DESC';
141 6064 naderman
                        $result = $db->sql_query($sql);
142 6064 naderman
143 6064 naderman
                        $ranks = array();
144 6064 naderman
                        while ($row = $db->sql_fetchrow($result))
145 6064 naderman
                        {
146 6064 naderman
                                if ($row['rank_special'])
147 6064 naderman
                                {
148 6064 naderman
                                        $ranks['special'][$row['rank_id']] = array(
149 6064 naderman
                                                'rank_title'        =>        $row['rank_title'],
150 6064 naderman
                                                'rank_image'        =>        $row['rank_image']
151 6064 naderman
                                        );
152 6064 naderman
                                }
153 6064 naderman
                                else
154 6064 naderman
                                {
155 6064 naderman
                                        $ranks['normal'][] = array(
156 6064 naderman
                                                'rank_title'        =>        $row['rank_title'],
157 6064 naderman
                                                'rank_min'                =>        $row['rank_min'],
158 6064 naderman
                                                'rank_image'        =>        $row['rank_image']
159 6064 naderman
                                        );
160 6064 naderman
                                }
161 6064 naderman
                        }
162 6064 naderman
                        $db->sql_freeresult($result);
163 6064 naderman
164 7386 acydburn
                        $this->put('_ranks', $ranks);
165 6064 naderman
                }
166 6064 naderman
167 6572 acydburn
                return $ranks;
168 6064 naderman
        }
169 6064 naderman
170 6064 naderman
        /**
171 6064 naderman
        * Obtain allowed extensions
172 6816 acydburn
        *
173 6816 acydburn
        * @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 6816 acydburn
        *
175 6816 acydburn
        * @return array allowed extensions array.
176 6064 naderman
        */
177 6816 acydburn
        function obtain_attach_extensions($forum_id)
178 6064 naderman
        {
179 6064 naderman
                if (($extensions = $this->get('_extensions')) === false)
180 6064 naderman
                {
181 6064 naderman
                        global $db;
182 6816 acydburn
183 6816 acydburn
                        $extensions = array(
184 6816 acydburn
                                '_allowed_post'        => array(),
185 6816 acydburn
                                '_allowed_pm'        => array(),
186 6816 acydburn
                        );
187 6816 acydburn
188 6064 naderman
                        // The rule is to only allow those extensions defined. ;)
189 6064 naderman
                        $sql = 'SELECT e.extension, g.*
190 6064 naderman
                                FROM ' . EXTENSIONS_TABLE . ' e, ' . EXTENSION_GROUPS_TABLE . ' g
191 6064 naderman
                                WHERE e.group_id = g.group_id
192 6816 acydburn
                                        AND (g.allow_group = 1 OR g.allow_in_pm = 1)';
193 6064 naderman
                        $result = $db->sql_query($sql);
194 6064 naderman
195 6064 naderman
                        while ($row = $db->sql_fetchrow($result))
196 6064 naderman
                        {
197 6064 naderman
                                $extension = strtolower(trim($row['extension']));
198 6064 naderman
199 6064 naderman
                                $extensions[$extension] = array(
200 6064 naderman
                                        'display_cat'        => (int) $row['cat_id'],
201 6064 naderman
                                        'download_mode'        => (int) $row['download_mode'],
202 6064 naderman
                                        'upload_icon'        => trim($row['upload_icon']),
203 6816 acydburn
                                        'max_filesize'        => (int) $row['max_filesize'],
204 6816 acydburn
                                        'allow_group'        => $row['allow_group'],
205 6816 acydburn
                                        'allow_in_pm'        => $row['allow_in_pm'],
206 6064 naderman
                                );
207 6064 naderman
208 6064 naderman
                                $allowed_forums = ($row['allowed_forums']) ? unserialize(trim($row['allowed_forums'])) : array();
209 6064 naderman
210 6816 acydburn
                                // Store allowed extensions forum wise
211 6816 acydburn
                                if ($row['allow_group'])
212 6816 acydburn
                                {
213 6816 acydburn
                                        $extensions['_allowed_post'][$extension] = (!sizeof($allowed_forums)) ? 0 : $allowed_forums;
214 6816 acydburn
                                }
215 6816 acydburn
216 6064 naderman
                                if ($row['allow_in_pm'])
217 6064 naderman
                                {
218 6816 acydburn
                                        $extensions['_allowed_pm'][$extension] = 0;
219 6064 naderman
                                }
220 6064 naderman
                        }
221 6064 naderman
                        $db->sql_freeresult($result);
222 6064 naderman
223 6064 naderman
                        $this->put('_extensions', $extensions);
224 6064 naderman
                }
225 6064 naderman
226 6816 acydburn
                // Forum post
227 6816 acydburn
                if ($forum_id === false)
228 6064 naderman
                {
229 6816 acydburn
                        // We are checking for private messages, therefore we only need to get the pm extensions...
230 6816 acydburn
                        $return = array('_allowed_' => array());
231 6064 naderman
232 6816 acydburn
                        foreach ($extensions['_allowed_pm'] as $extension => $check)
233 6064 naderman
                        {
234 6816 acydburn
                                $return['_allowed_'][$extension] = 0;
235 6816 acydburn
                                $return[$extension] = $extensions[$extension];
236 6816 acydburn
                        }
237 6064 naderman
238 6816 acydburn
                        $extensions = $return;
239 6816 acydburn
                }
240 6816 acydburn
                else if ($forum_id === true)
241 6816 acydburn
                {
242 6816 acydburn
                        return $extensions;
243 6816 acydburn
                }
244 6816 acydburn
                else
245 6816 acydburn
                {
246 6816 acydburn
                        $forum_id = (int) $forum_id;
247 6816 acydburn
                        $return = array('_allowed_' => array());
248 6816 acydburn
249 6816 acydburn
                        foreach ($extensions['_allowed_post'] as $extension => $check)
250 6816 acydburn
                        {
251 6816 acydburn
                                // Check for allowed forums
252 6064 naderman
                                if (is_array($check))
253 6064 naderman
                                {
254 6816 acydburn
                                        $allowed = (!in_array($forum_id, $check)) ? false : true;
255 6064 naderman
                                }
256 6064 naderman
                                else
257 6064 naderman
                                {
258 6816 acydburn
                                        $allowed = true;
259 6064 naderman
                                }
260 6064 naderman
261 6064 naderman
                                if ($allowed)
262 6064 naderman
                                {
263 6064 naderman
                                        $return['_allowed_'][$extension] = 0;
264 6064 naderman
                                        $return[$extension] = $extensions[$extension];
265 6064 naderman
                                }
266 6064 naderman
                        }
267 6064 naderman
268 6064 naderman
                        $extensions = $return;
269 6064 naderman
                }
270 6064 naderman
271 6064 naderman
                if (!isset($extensions['_allowed_']))
272 6064 naderman
                {
273 6064 naderman
                        $extensions['_allowed_'] = array();
274 6064 naderman
                }
275 6064 naderman
276 6572 acydburn
                return $extensions;
277 6064 naderman
        }
278 6064 naderman
279 6064 naderman
        /**
280 6064 naderman
        * Obtain active bots
281 6064 naderman
        */
282 6572 acydburn
        function obtain_bots()
283 6064 naderman
        {
284 7386 acydburn
                if (($bots = $this->get('_bots')) === false)
285 6064 naderman
                {
286 6064 naderman
                        global $db;
287 8691 acydburn
288 6497 acydburn
                        switch ($db->sql_layer)
289 6064 naderman
                        {
290 6064 naderman
                                case 'mssql':
291 6064 naderman
                                case 'mssql_odbc':
292 10489 naderman
                                case 'mssqlnative':
293 8146 acydburn
                                        $sql = 'SELECT user_id, bot_agent, bot_ip
294 6064 naderman
                                                FROM ' . BOTS_TABLE . '
295 6064 naderman
                                                WHERE bot_active = 1
296 6064 naderman
                                        ORDER BY LEN(bot_agent) DESC';
297 6064 naderman
                                break;
298 6064 naderman
299 6064 naderman
                                case 'firebird':
300 8146 acydburn
                                        $sql = 'SELECT user_id, bot_agent, bot_ip
301 6064 naderman
                                                FROM ' . BOTS_TABLE . '
302 6064 naderman
                                                WHERE bot_active = 1
303 6422 davidmj
                                        ORDER BY CHAR_LENGTH(bot_agent) DESC';
304 6064 naderman
                                break;
305 6064 naderman
306 6064 naderman
                                // LENGTH supported by MySQL, IBM DB2 and Oracle for sure...
307 6064 naderman
                                default:
308 8146 acydburn
                                        $sql = 'SELECT user_id, bot_agent, bot_ip
309 6064 naderman
                                                FROM ' . BOTS_TABLE . '
310 6064 naderman
                                                WHERE bot_active = 1
311 6064 naderman
                                        ORDER BY LENGTH(bot_agent) DESC';
312 6064 naderman
                                break;
313 6064 naderman
                        }
314 6064 naderman
                        $result = $db->sql_query($sql);
315 6064 naderman
316 6064 naderman
                        $bots = array();
317 6064 naderman
                        while ($row = $db->sql_fetchrow($result))
318 6064 naderman
                        {
319 6064 naderman
                                $bots[] = $row;
320 6064 naderman
                        }
321 6064 naderman
                        $db->sql_freeresult($result);
322 6064 naderman
323 7386 acydburn
                        $this->put('_bots', $bots);
324 6064 naderman
                }
325 8691 acydburn
326 6572 acydburn
                return $bots;
327 6064 naderman
        }
328 6064 naderman
329 6064 naderman
        /**
330 6064 naderman
        * Obtain cfg file data
331 6064 naderman
        */
332 6064 naderman
        function obtain_cfg_items($theme)
333 6064 naderman
        {
334 6064 naderman
                global $config, $phpbb_root_path;
335 6064 naderman
336 6064 naderman
                $parsed_items = array(
337 6064 naderman
                        'theme'                => array(),
338 6064 naderman
                        'template'        => array(),
339 6064 naderman
                        'imageset'        => array()
340 6064 naderman
                );
341 6064 naderman
342 6064 naderman
                foreach ($parsed_items as $key => $parsed_array)
343 6064 naderman
                {
344 6064 naderman
                        $parsed_array = $this->get('_cfg_' . $key . '_' . $theme[$key . '_path']);
345 6064 naderman
346 6064 naderman
                        if ($parsed_array === false)
347 6064 naderman
                        {
348 6064 naderman
                                $parsed_array = array();
349 6064 naderman
                        }
350 6064 naderman
351 6064 naderman
                        $reparse = false;
352 6064 naderman
                        $filename = $phpbb_root_path . 'styles/' . $theme[$key . '_path'] . '/' . $key . '/' . $key . '.cfg';
353 6064 naderman
354 6064 naderman
                        if (!file_exists($filename))
355 6064 naderman
                        {
356 6064 naderman
                                continue;
357 6064 naderman
                        }
358 6064 naderman
359 6064 naderman
                        if (!isset($parsed_array['filetime']) || (($config['load_tplcompile'] && @filemtime($filename) > $parsed_array['filetime'])))
360 6064 naderman
                        {
361 6064 naderman
                                $reparse = true;
362 6064 naderman
                        }
363 6064 naderman
364 6064 naderman
                        // Re-parse cfg file
365 6064 naderman
                        if ($reparse)
366 6064 naderman
                        {
367 6064 naderman
                                $parsed_array = parse_cfg_file($filename);
368 6064 naderman
                                $parsed_array['filetime'] = @filemtime($filename);
369 6064 naderman
370 6064 naderman
                                $this->put('_cfg_' . $key . '_' . $theme[$key . '_path'], $parsed_array);
371 6064 naderman
                        }
372 6064 naderman
                        $parsed_items[$key] = $parsed_array;
373 6064 naderman
                }
374 6064 naderman
375 6064 naderman
                return $parsed_items;
376 6064 naderman
        }
377 6571 davidmj
378 6572 acydburn
        /**
379 6572 acydburn
        * Obtain disallowed usernames
380 6572 acydburn
        */
381 6572 acydburn
        function obtain_disallowed_usernames()
382 6571 davidmj
        {
383 6572 acydburn
                if (($usernames = $this->get('_disallowed_usernames')) === false)
384 6571 davidmj
                {
385 6571 davidmj
                        global $db;
386 6571 davidmj
387 6571 davidmj
                        $sql = 'SELECT disallow_username
388 6930 acydburn
                                FROM ' . DISALLOW_TABLE;
389 6571 davidmj
                        $result = $db->sql_query($sql);
390 6571 davidmj
391 6571 davidmj
                        $usernames = array();
392 6571 davidmj
                        while ($row = $db->sql_fetchrow($result))
393 6571 davidmj
                        {
394 7660 kellanved
                                $usernames[] = str_replace('%', '.*?', preg_quote(utf8_clean_string($row['disallow_username']), '#'));
395 6571 davidmj
                        }
396 6571 davidmj
                        $db->sql_freeresult($result);
397 6571 davidmj
398 6572 acydburn
                        $this->put('_disallowed_usernames', $usernames);
399 6571 davidmj
                }
400 6571 davidmj
401 6572 acydburn
                return $usernames;
402 6571 davidmj
        }
403 8100 acydburn
404 8100 acydburn
        /**
405 8100 acydburn
        * Obtain hooks...
406 8100 acydburn
        */
407 8100 acydburn
        function obtain_hooks()
408 8100 acydburn
        {
409 8100 acydburn
                global $phpbb_root_path, $phpEx;
410 8100 acydburn
411 8100 acydburn
                if (($hook_files = $this->get('_hooks')) === false)
412 8100 acydburn
                {
413 8100 acydburn
                        $hook_files = array();
414 8100 acydburn
415 8107 acydburn
                        // Now search for hooks...
416 8100 acydburn
                        $dh = @opendir($phpbb_root_path . 'includes/hooks/');
417 8100 acydburn
418 8100 acydburn
                        if ($dh)
419 8100 acydburn
                        {
420 8100 acydburn
                                while (($file = readdir($dh)) !== false)
421 8100 acydburn
                                {
422 8100 acydburn
                                        if (strpos($file, 'hook_') === 0 && substr($file, -(strlen($phpEx) + 1)) === '.' . $phpEx)
423 8100 acydburn
                                        {
424 8100 acydburn
                                                $hook_files[] = substr($file, 0, -(strlen($phpEx) + 1));
425 8100 acydburn
                                        }
426 8100 acydburn
                                }
427 8100 acydburn
                                closedir($dh);
428 8100 acydburn
                        }
429 8100 acydburn
430 8100 acydburn
                        $this->put('_hooks', $hook_files);
431 8100 acydburn
                }
432 8100 acydburn
433 8100 acydburn
                return $hook_files;
434 8100 acydburn
        }
435 6064 naderman
}
436 6064 naderman
437 6064 naderman
?>