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

443 by dcoles
Added Forum application along with unmodifed version of phpBB3 "Olympus" 3.0.0
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
?>