Blame Identity/Models/Html/phpBB/3.0.4/includes/cache.php

d6e8d8
d6e8d8
/**
d6e8d8
*
d6e8d8
* @package acm
d6e8d8
* @version $Id: cache.php 8691 2008-07-28 13:26:20Z acydburn $
d6e8d8
* @copyright (c) 2005 phpBB Group
d6e8d8
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
d6e8d8
*
d6e8d8
*/
d6e8d8
d6e8d8
/**
d6e8d8
* @ignore
d6e8d8
*/
d6e8d8
if (!defined('IN_PHPBB'))
d6e8d8
{
d6e8d8
	exit;
d6e8d8
}
d6e8d8
d6e8d8
/**
d6e8d8
* Class for grabbing/handling cached entries, extends acm_file or acm_db depending on the setup
d6e8d8
* @package acm
d6e8d8
*/
d6e8d8
class cache extends acm
d6e8d8
{
d6e8d8
	/**
d6e8d8
	* Get config values
d6e8d8
	*/
d6e8d8
	function obtain_config()
d6e8d8
	{
d6e8d8
		global $db;
d6e8d8
d6e8d8
		if (($config = $this->get('config')) !== false)
d6e8d8
		{
d6e8d8
			$sql = 'SELECT config_name, config_value
d6e8d8
				FROM ' . CONFIG_TABLE . '
d6e8d8
				WHERE is_dynamic = 1';
d6e8d8
			$result = $db->sql_query($sql);
d6e8d8
d6e8d8
			while ($row = $db->sql_fetchrow($result))
d6e8d8
			{
d6e8d8
				$config[$row['config_name']] = $row['config_value'];
d6e8d8
			}
d6e8d8
			$db->sql_freeresult($result);
d6e8d8
		}
d6e8d8
		else
d6e8d8
		{
d6e8d8
			$config = $cached_config = array();
d6e8d8
d6e8d8
			$sql = 'SELECT config_name, config_value, is_dynamic
d6e8d8
				FROM ' . CONFIG_TABLE;
d6e8d8
			$result = $db->sql_query($sql);
d6e8d8
d6e8d8
			while ($row = $db->sql_fetchrow($result))
d6e8d8
			{
d6e8d8
				if (!$row['is_dynamic'])
d6e8d8
				{
d6e8d8
					$cached_config[$row['config_name']] = $row['config_value'];
d6e8d8
				}
d6e8d8
d6e8d8
				$config[$row['config_name']] = $row['config_value'];
d6e8d8
			}
d6e8d8
			$db->sql_freeresult($result);
d6e8d8
d6e8d8
			$this->put('config', $cached_config);
d6e8d8
		}
d6e8d8
d6e8d8
		return $config;
d6e8d8
	}
d6e8d8
d6e8d8
	/**
d6e8d8
	* Obtain list of naughty words and build preg style replacement arrays for use by the
d6e8d8
	* calling script
d6e8d8
	*/
d6e8d8
	function obtain_word_list()
d6e8d8
	{
d6e8d8
		global $db;
d6e8d8
d6e8d8
		if (($censors = $this->get('_word_censors')) === false)
d6e8d8
		{
d6e8d8
			$sql = 'SELECT word, replacement
d6e8d8
				FROM ' . WORDS_TABLE;
d6e8d8
			$result = $db->sql_query($sql);
d6e8d8
d6e8d8
			$censors = array();
d6e8d8
			while ($row = $db->sql_fetchrow($result))
d6e8d8
			{
d6e8d8
				$censors['match'][] = '#(?
d6e8d8
				$censors['replace'][] = $row['replacement'];
d6e8d8
			}
d6e8d8
			$db->sql_freeresult($result);
d6e8d8
d6e8d8
			$this->put('_word_censors', $censors);
d6e8d8
		}
d6e8d8
d6e8d8
		return $censors;
d6e8d8
	}
d6e8d8
d6e8d8
	/**
d6e8d8
	* Obtain currently listed icons
d6e8d8
	*/
d6e8d8
	function obtain_icons()
d6e8d8
	{
d6e8d8
		if (($icons = $this->get('_icons')) === false)
d6e8d8
		{
d6e8d8
			global $db;
d6e8d8
d6e8d8
			// Topic icons
d6e8d8
			$sql = 'SELECT *
d6e8d8
				FROM ' . ICONS_TABLE . '
d6e8d8
				ORDER BY icons_order';
d6e8d8
			$result = $db->sql_query($sql);
d6e8d8
d6e8d8
			$icons = array();
d6e8d8
			while ($row = $db->sql_fetchrow($result))
d6e8d8
			{
d6e8d8
				$icons[$row['icons_id']]['img'] = $row['icons_url'];
d6e8d8
				$icons[$row['icons_id']]['width'] = (int) $row['icons_width'];
d6e8d8
				$icons[$row['icons_id']]['height'] = (int) $row['icons_height'];
d6e8d8
				$icons[$row['icons_id']]['display'] = (bool) $row['display_on_posting'];
d6e8d8
			}
d6e8d8
			$db->sql_freeresult($result);
d6e8d8
d6e8d8
			$this->put('_icons', $icons);
d6e8d8
		}
d6e8d8
d6e8d8
		return $icons;
d6e8d8
	}
d6e8d8
d6e8d8
	/**
d6e8d8
	* Obtain ranks
d6e8d8
	*/
d6e8d8
	function obtain_ranks()
d6e8d8
	{
d6e8d8
		if (($ranks = $this->get('_ranks')) === false)
d6e8d8
		{
d6e8d8
			global $db;
d6e8d8
d6e8d8
			$sql = 'SELECT *
d6e8d8
				FROM ' . RANKS_TABLE . '
d6e8d8
				ORDER BY rank_min DESC';
d6e8d8
			$result = $db->sql_query($sql);
d6e8d8
d6e8d8
			$ranks = array();
d6e8d8
			while ($row = $db->sql_fetchrow($result))
d6e8d8
			{
d6e8d8
				if ($row['rank_special'])
d6e8d8
				{
d6e8d8
					$ranks['special'][$row['rank_id']] = array(
d6e8d8
						'rank_title'	=>	$row['rank_title'],
d6e8d8
						'rank_image'	=>	$row['rank_image']
d6e8d8
					);
d6e8d8
				}
d6e8d8
				else
d6e8d8
				{
d6e8d8
					$ranks['normal'][] = array(
d6e8d8
						'rank_title'	=>	$row['rank_title'],
d6e8d8
						'rank_min'		=>	$row['rank_min'],
d6e8d8
						'rank_image'	=>	$row['rank_image']
d6e8d8
					);
d6e8d8
				}
d6e8d8
			}
d6e8d8
			$db->sql_freeresult($result);
d6e8d8
d6e8d8
			$this->put('_ranks', $ranks);
d6e8d8
		}
d6e8d8
d6e8d8
		return $ranks;
d6e8d8
	}
d6e8d8
d6e8d8
	/**
d6e8d8
	* Obtain allowed extensions
d6e8d8
	*
d6e8d8
	* @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.
d6e8d8
	*
d6e8d8
	* @return array allowed extensions array.
d6e8d8
	*/
d6e8d8
	function obtain_attach_extensions($forum_id)
d6e8d8
	{
d6e8d8
		if (($extensions = $this->get('_extensions')) === false)
d6e8d8
		{
d6e8d8
			global $db;
d6e8d8
d6e8d8
			$extensions = array(
d6e8d8
				'_allowed_post'	=> array(),
d6e8d8
				'_allowed_pm'	=> array(),
d6e8d8
			);
d6e8d8
d6e8d8
			// The rule is to only allow those extensions defined. ;)
d6e8d8
			$sql = 'SELECT e.extension, g.*
d6e8d8
				FROM ' . EXTENSIONS_TABLE . ' e, ' . EXTENSION_GROUPS_TABLE . ' g
d6e8d8
				WHERE e.group_id = g.group_id
d6e8d8
					AND (g.allow_group = 1 OR g.allow_in_pm = 1)';
d6e8d8
			$result = $db->sql_query($sql);
d6e8d8
d6e8d8
			while ($row = $db->sql_fetchrow($result))
d6e8d8
			{
d6e8d8
				$extension = strtolower(trim($row['extension']));
d6e8d8
d6e8d8
				$extensions[$extension] = array(
d6e8d8
					'display_cat'	=> (int) $row['cat_id'],
d6e8d8
					'download_mode'	=> (int) $row['download_mode'],
d6e8d8
					'upload_icon'	=> trim($row['upload_icon']),
d6e8d8
					'max_filesize'	=> (int) $row['max_filesize'],
d6e8d8
					'allow_group'	=> $row['allow_group'],
d6e8d8
					'allow_in_pm'	=> $row['allow_in_pm'],
d6e8d8
				);
d6e8d8
d6e8d8
				$allowed_forums = ($row['allowed_forums']) ? unserialize(trim($row['allowed_forums'])) : array();
d6e8d8
d6e8d8
				// Store allowed extensions forum wise
d6e8d8
				if ($row['allow_group'])
d6e8d8
				{
d6e8d8
					$extensions['_allowed_post'][$extension] = (!sizeof($allowed_forums)) ? 0 : $allowed_forums;
d6e8d8
				}
d6e8d8
d6e8d8
				if ($row['allow_in_pm'])
d6e8d8
				{
d6e8d8
					$extensions['_allowed_pm'][$extension] = 0;
d6e8d8
				}
d6e8d8
			}
d6e8d8
			$db->sql_freeresult($result);
d6e8d8
d6e8d8
			$this->put('_extensions', $extensions);
d6e8d8
		}
d6e8d8
d6e8d8
		// Forum post
d6e8d8
		if ($forum_id === false)
d6e8d8
		{
d6e8d8
			// We are checking for private messages, therefore we only need to get the pm extensions...
d6e8d8
			$return = array('_allowed_' => array());
d6e8d8
d6e8d8
			foreach ($extensions['_allowed_pm'] as $extension => $check)
d6e8d8
			{
d6e8d8
				$return['_allowed_'][$extension] = 0;
d6e8d8
				$return[$extension] = $extensions[$extension];
d6e8d8
			}
d6e8d8
d6e8d8
			$extensions = $return;
d6e8d8
		}
d6e8d8
		else if ($forum_id === true)
d6e8d8
		{
d6e8d8
			return $extensions;
d6e8d8
		}
d6e8d8
		else
d6e8d8
		{
d6e8d8
			$forum_id = (int) $forum_id;
d6e8d8
			$return = array('_allowed_' => array());
d6e8d8
d6e8d8
			foreach ($extensions['_allowed_post'] as $extension => $check)
d6e8d8
			{
d6e8d8
				// Check for allowed forums
d6e8d8
				if (is_array($check))
d6e8d8
				{
d6e8d8
					$allowed = (!in_array($forum_id, $check)) ? false : true;
d6e8d8
				}
d6e8d8
				else
d6e8d8
				{
d6e8d8
					$allowed = true;
d6e8d8
				}
d6e8d8
d6e8d8
				if ($allowed)
d6e8d8
				{
d6e8d8
					$return['_allowed_'][$extension] = 0;
d6e8d8
					$return[$extension] = $extensions[$extension];
d6e8d8
				}
d6e8d8
			}
d6e8d8
d6e8d8
			$extensions = $return;
d6e8d8
		}
d6e8d8
d6e8d8
		if (!isset($extensions['_allowed_']))
d6e8d8
		{
d6e8d8
			$extensions['_allowed_'] = array();
d6e8d8
		}
d6e8d8
d6e8d8
		return $extensions;
d6e8d8
	}
d6e8d8
d6e8d8
	/**
d6e8d8
	* Obtain active bots
d6e8d8
	*/
d6e8d8
	function obtain_bots()
d6e8d8
	{
d6e8d8
		if (($bots = $this->get('_bots')) === false)
d6e8d8
		{
d6e8d8
			global $db;
d6e8d8
d6e8d8
			switch ($db->sql_layer)
d6e8d8
			{
d6e8d8
				case 'mssql':
d6e8d8
				case 'mssql_odbc':
d6e8d8
					$sql = 'SELECT user_id, bot_agent, bot_ip
d6e8d8
						FROM ' . BOTS_TABLE . '
d6e8d8
						WHERE bot_active = 1
d6e8d8
					ORDER BY LEN(bot_agent) DESC';
d6e8d8
				break;
d6e8d8
d6e8d8
				case 'firebird':
d6e8d8
					$sql = 'SELECT user_id, bot_agent, bot_ip
d6e8d8
						FROM ' . BOTS_TABLE . '
d6e8d8
						WHERE bot_active = 1
d6e8d8
					ORDER BY CHAR_LENGTH(bot_agent) DESC';
d6e8d8
				break;
d6e8d8
d6e8d8
				// LENGTH supported by MySQL, IBM DB2 and Oracle for sure...
d6e8d8
				default:
d6e8d8
					$sql = 'SELECT user_id, bot_agent, bot_ip
d6e8d8
						FROM ' . BOTS_TABLE . '
d6e8d8
						WHERE bot_active = 1
d6e8d8
					ORDER BY LENGTH(bot_agent) DESC';
d6e8d8
				break;
d6e8d8
			}
d6e8d8
			$result = $db->sql_query($sql);
d6e8d8
d6e8d8
			$bots = array();
d6e8d8
			while ($row = $db->sql_fetchrow($result))
d6e8d8
			{
d6e8d8
				$bots[] = $row;
d6e8d8
			}
d6e8d8
			$db->sql_freeresult($result);
d6e8d8
d6e8d8
			$this->put('_bots', $bots);
d6e8d8
		}
d6e8d8
d6e8d8
		return $bots;
d6e8d8
	}
d6e8d8
d6e8d8
	/**
d6e8d8
	* Obtain cfg file data
d6e8d8
	*/
d6e8d8
	function obtain_cfg_items($theme)
d6e8d8
	{
d6e8d8
		global $config, $phpbb_root_path;
d6e8d8
d6e8d8
		$parsed_items = array(
d6e8d8
			'theme'		=> array(),
d6e8d8
			'template'	=> array(),
d6e8d8
			'imageset'	=> array()
d6e8d8
		);
d6e8d8
d6e8d8
		foreach ($parsed_items as $key => $parsed_array)
d6e8d8
		{
d6e8d8
			$parsed_array = $this->get('_cfg_' . $key . '_' . $theme[$key . '_path']);
d6e8d8
d6e8d8
			if ($parsed_array === false)
d6e8d8
			{
d6e8d8
				$parsed_array = array();
d6e8d8
			}
d6e8d8
d6e8d8
			$reparse = false;
d6e8d8
			$filename = $phpbb_root_path . 'styles/' . $theme[$key . '_path'] . '/' . $key . '/' . $key . '.cfg';
d6e8d8
d6e8d8
			if (!file_exists($filename))
d6e8d8
			{
d6e8d8
				continue;
d6e8d8
			}
d6e8d8
d6e8d8
			if (!isset($parsed_array['filetime']) || (($config['load_tplcompile'] && @filemtime($filename) > $parsed_array['filetime'])))
d6e8d8
			{
d6e8d8
				$reparse = true;
d6e8d8
			}
d6e8d8
d6e8d8
			// Re-parse cfg file
d6e8d8
			if ($reparse)
d6e8d8
			{
d6e8d8
				$parsed_array = parse_cfg_file($filename);
d6e8d8
				$parsed_array['filetime'] = @filemtime($filename);
d6e8d8
d6e8d8
				$this->put('_cfg_' . $key . '_' . $theme[$key . '_path'], $parsed_array);
d6e8d8
			}
d6e8d8
			$parsed_items[$key] = $parsed_array;
d6e8d8
		}
d6e8d8
d6e8d8
		return $parsed_items;
d6e8d8
	}
d6e8d8
d6e8d8
	/**
d6e8d8
	* Obtain disallowed usernames
d6e8d8
	*/
d6e8d8
	function obtain_disallowed_usernames()
d6e8d8
	{
d6e8d8
		if (($usernames = $this->get('_disallowed_usernames')) === false)
d6e8d8
		{
d6e8d8
			global $db;
d6e8d8
d6e8d8
			$sql = 'SELECT disallow_username
d6e8d8
				FROM ' . DISALLOW_TABLE;
d6e8d8
			$result = $db->sql_query($sql);
d6e8d8
d6e8d8
			$usernames = array();
d6e8d8
			while ($row = $db->sql_fetchrow($result))
d6e8d8
			{
d6e8d8
				$usernames[] = str_replace('%', '.*?', preg_quote(utf8_clean_string($row['disallow_username']), '#'));
d6e8d8
			}
d6e8d8
			$db->sql_freeresult($result);
d6e8d8
d6e8d8
			$this->put('_disallowed_usernames', $usernames);
d6e8d8
		}
d6e8d8
d6e8d8
		return $usernames;
d6e8d8
	}
d6e8d8
d6e8d8
	/**
d6e8d8
	* Obtain hooks...
d6e8d8
	*/
d6e8d8
	function obtain_hooks()
d6e8d8
	{
d6e8d8
		global $phpbb_root_path, $phpEx;
d6e8d8
d6e8d8
		if (($hook_files = $this->get('_hooks')) === false)
d6e8d8
		{
d6e8d8
			$hook_files = array();
d6e8d8
d6e8d8
			// Now search for hooks...
d6e8d8
			$dh = @opendir($phpbb_root_path . 'includes/hooks/');
d6e8d8
d6e8d8
			if ($dh)
d6e8d8
			{
d6e8d8
				while (($file = readdir($dh)) !== false)
d6e8d8
				{
d6e8d8
					if (strpos($file, 'hook_') === 0 && substr($file, -(strlen($phpEx) + 1)) === '.' . $phpEx)
d6e8d8
					{
d6e8d8
						$hook_files[] = substr($file, 0, -(strlen($phpEx) + 1));
d6e8d8
					}
d6e8d8
				}
d6e8d8
				closedir($dh);
d6e8d8
			}
d6e8d8
d6e8d8
			$this->put('_hooks', $hook_files);
d6e8d8
		}
d6e8d8
d6e8d8
		return $hook_files;
d6e8d8
	}
d6e8d8
}
d6e8d8
d6e8d8
?>