~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: 2009-02-23 23:47:02 UTC
  • mfrom: (1099.1.211 new-dispatch)
  • Revision ID: grantw@unimelb.edu.au-20090223234702-db4b1llly46ignwo
Merge from lp:~ivle-dev/ivle/new-dispatch.

Pretty much everything changes. Reread the setup docs. Backup your databases.
Every file is now in a different installed location, the configuration system
is rewritten, the dispatch system is rewritten, URLs are different, the
database is different, worksheets and exercises are no longer on the
filesystem, we use a templating engine, jail service protocols are rewritten,
we don't repeat ourselves, we have authorization rewritten, phpBB is gone,
and probably lots of other things that I cannot remember.

This is certainly the biggest commit I have ever made, and hopefully
the largest I ever will.

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'