~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to www/php/phpBB3/includes/cache.php

  • Committer: William Grant
  • Date: 2010-02-25 07:34:50 UTC
  • Revision ID: grantw@unimelb.edu.au-20100225073450-zcl8ev5hlyhbszeu
Activate the Storm C extensions if possible. Moar speed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<?php
2
 
/**
3
 
*
4
 
* @package acm
5
 
* @version $Id: cache.php,v 1.14 2007/12/05 16:34:38 acydburn Exp $
6
 
* @copyright (c) 2005 phpBB Group
7
 
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
8
 
*
9
 
*/
10
 
 
11
 
/**
12
 
* @ignore
13
 
*/
14
 
if (!defined('IN_PHPBB'))
15
 
{
16
 
        exit;
17
 
}
18
 
 
19
 
/**
20
 
* Class for grabbing/handling cached entries, extends acm_file or acm_db depending on the setup
21
 
* @package acm
22
 
*/
23
 
class cache extends acm
24
 
{
25
 
        /**
26
 
        * Get config values
27
 
        */
28
 
        function obtain_config()
29
 
        {
30
 
                global $db;
31
 
 
32
 
                if (($config = $this->get('config')) !== false)
33
 
                {
34
 
                        $sql = 'SELECT config_name, config_value
35
 
                                FROM ' . CONFIG_TABLE . '
36
 
                                WHERE is_dynamic = 1';
37
 
                        $result = $db->sql_query($sql);
38
 
 
39
 
                        while ($row = $db->sql_fetchrow($result))
40
 
                        {
41
 
                                $config[$row['config_name']] = $row['config_value'];
42
 
                        }
43
 
                        $db->sql_freeresult($result);
44
 
                }
45
 
                else
46
 
                {
47
 
                        $config = $cached_config = array();
48
 
 
49
 
                        $sql = 'SELECT config_name, config_value, is_dynamic
50
 
                                FROM ' . CONFIG_TABLE;
51
 
                        $result = $db->sql_query($sql);
52
 
 
53
 
                        while ($row = $db->sql_fetchrow($result))
54
 
                        {
55
 
                                if (!$row['is_dynamic'])
56
 
                                {
57
 
                                        $cached_config[$row['config_name']] = $row['config_value'];
58
 
                                }
59
 
 
60
 
                                $config[$row['config_name']] = $row['config_value'];
61
 
                        }
62
 
                        $db->sql_freeresult($result);
63
 
 
64
 
                        $this->put('config', $cached_config);
65
 
                }
66
 
        
67
 
                return $config;
68
 
        }
69
 
 
70
 
        /**
71
 
        * Obtain list of naughty words and build preg style replacement arrays for use by the
72
 
        * calling script
73
 
        */
74
 
        function obtain_word_list()
75
 
        {
76
 
                global $db;
77
 
 
78
 
                if (($censors = $this->get('_word_censors')) === false)
79
 
                {
80
 
                        $sql = 'SELECT word, replacement
81
 
                                FROM ' . WORDS_TABLE;
82
 
                        $result = $db->sql_query($sql);
83
 
 
84
 
                        $censors = array();
85
 
                        while ($row = $db->sql_fetchrow($result))
86
 
                        {
87
 
                                $censors['match'][] = '#(?<!\w)(' . str_replace('\*', '\w*?', preg_quote($row['word'], '#')) . ')(?!\w)#i';
88
 
                                $censors['replace'][] = $row['replacement'];
89
 
                        }
90
 
                        $db->sql_freeresult($result);
91
 
 
92
 
                        $this->put('_word_censors', $censors);
93
 
                }
94
 
 
95
 
                return $censors;
96
 
        }
97
 
 
98
 
        /**
99
 
        * 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
 
?>
 
 
b'\\ No newline at end of file'