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

« back to all changes in this revision

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

Add an XHTMLUnauthorizedView which redirects unauthenticated users to the
login page if a page raises an Unauthorized. Alter UserSettingsView to raise
one in the right cases, for testing.

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'