aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/acm
diff options
context:
space:
mode:
authorMeik Sievertsen <acydburn@phpbb.com>2005-09-25 14:48:11 +0000
committerMeik Sievertsen <acydburn@phpbb.com>2005-09-25 14:48:11 +0000
commit122411069401190420987c5b77e6e3e6332d19cb (patch)
tree4aa48028bdd0186a4f86135196093a4342a4ddcc /phpBB/includes/acm
parentdb5eb3acefeaf392ddee7f211925c8c866944719 (diff)
downloadforums-122411069401190420987c5b77e6e3e6332d19cb.tar
forums-122411069401190420987c5b77e6e3e6332d19cb.tar.gz
forums-122411069401190420987c5b77e6e3e6332d19cb.tar.bz2
forums-122411069401190420987c5b77e6e3e6332d19cb.tar.xz
forums-122411069401190420987c5b77e6e3e6332d19cb.zip
acm_main file for grouping cache-related functions.
git-svn-id: file:///svn/phpbb/trunk@5229 89ea8834-ac86-4346-8a33-228a782c2dd0
Diffstat (limited to 'phpBB/includes/acm')
-rw-r--r--phpBB/includes/acm/acm_main.php295
1 files changed, 295 insertions, 0 deletions
diff --git a/phpBB/includes/acm/acm_main.php b/phpBB/includes/acm/acm_main.php
new file mode 100644
index 0000000000..b174dab92b
--- /dev/null
+++ b/phpBB/includes/acm/acm_main.php
@@ -0,0 +1,295 @@
+<?php
+/**
+*
+* @package acm
+* @version $Id$
+* @copyright (c) 2005 phpBB Group
+* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+*
+*/
+
+/**
+* @package acm
+* Class for grabbing/handling cached entries, extends acm_file or acm_db depending on the setup
+*/
+class cache extends acm
+{
+ /**
+ * Get config values
+ */
+ function obtain_config()
+ {
+ global $db;
+
+ if ($config = $this->get('config'))
+ {
+ $sql = 'SELECT config_name, config_value
+ FROM ' . CONFIG_TABLE . '
+ WHERE is_dynamic = 1';
+ $result = $db->sql_query($sql);
+
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $config[$row['config_name']] = $row['config_value'];
+ }
+ $db->sql_freeresult($result);
+ }
+ else
+ {
+ $config = $cached_config = array();
+
+ $sql = 'SELECT config_name, config_value, is_dynamic
+ FROM ' . CONFIG_TABLE;
+ $result = $db->sql_query($sql);
+
+ while ($row = $db->sql_fetchrow($result))
+ {
+ if (!$row['is_dynamic'])
+ {
+ $cached_config[$row['config_name']] = $row['config_value'];
+ }
+
+ $config[$row['config_name']] = $row['config_value'];
+ }
+ $db->sql_freeresult($result);
+
+ $this->put('config', $cached_config);
+ }
+
+ return $config;
+ }
+
+ /**
+ * Obtain list of naughty words and build preg style replacement arrays for use by the
+ * calling script
+ */
+ function obtain_word_list(&$censors)
+ {
+ global $db, $user;
+
+ if (!$user->optionget('viewcensors') && $config['allow_nocensors'])
+ {
+ return false;
+ }
+
+ if ($this->exists('word_censors'))
+ {
+ $censors = $this->get('word_censors');
+ }
+ else
+ {
+ $sql = 'SELECT word, replacement
+ FROM ' . WORDS_TABLE;
+ $result = $db->sql_query($sql);
+
+ $censors = array();
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $censors['match'][] = '#\b(' . str_replace('\*', '\w*?', preg_quote($row['word'], '#')) . ')\b#i';
+ $censors['replace'][] = $row['replacement'];
+ }
+ $db->sql_freeresult($result);
+
+ $this->put('word_censors', $censors);
+ }
+
+ return true;
+ }
+
+ /**
+ * Obtain currently listed icons
+ */
+ function obtain_icons(&$icons)
+ {
+ global $db;
+
+ if ($this->exists('icons'))
+ {
+ $icons = $this->get('icons');
+ }
+ else
+ {
+ // Topic icons
+ $sql = 'SELECT *
+ FROM ' . ICONS_TABLE . '
+ ORDER BY icons_order';
+ $result = $db->sql_query($sql);
+
+ $icons = array();
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $icons[$row['icons_id']]['img'] = $row['icons_url'];
+ $icons[$row['icons_id']]['width'] = (int) $row['icons_width'];
+ $icons[$row['icons_id']]['height'] = (int) $row['icons_height'];
+ $icons[$row['icons_id']]['display'] = (bool) $row['display_on_posting'];
+ }
+ $db->sql_freeresult($result);
+
+ $this->put('icons', $icons);
+ }
+
+ return;
+ }
+
+ /**
+ * Obtain ranks
+ */
+ function obtain_ranks(&$ranks)
+ {
+ global $db;
+
+ if ($this->exists('ranks'))
+ {
+ $ranks = $this->get('ranks');
+ }
+ else
+ {
+ $sql = 'SELECT *
+ FROM ' . RANKS_TABLE . '
+ ORDER BY rank_min DESC';
+ $result = $db->sql_query($sql);
+
+ $ranks = array();
+ while ($row = $db->sql_fetchrow($result))
+ {
+ if ($row['rank_special'])
+ {
+ $ranks['special'][$row['rank_id']] = array(
+ 'rank_title' => $row['rank_title'],
+ 'rank_image' => $row['rank_image']
+ );
+ }
+ else
+ {
+ $ranks['normal'][] = array(
+ 'rank_title' => $row['rank_title'],
+ 'rank_min' => $row['rank_min'],
+ 'rank_image' => $row['rank_image']
+ );
+ }
+ }
+ $db->sql_freeresult($result);
+
+ $this->put('ranks', $ranks);
+ }
+
+ return;
+ }
+
+ /**
+ * Obtain allowed extensions
+ */
+ function obtain_attach_extensions(&$extensions, $forum_id = false)
+ {
+ global $db;
+
+ if ($this->exists('extensions'))
+ {
+ $extensions = $this->get('extensions');
+ }
+ else
+ {
+ // The rule is to only allow those extensions defined. ;)
+ $sql = 'SELECT e.extension, g.*
+ FROM ' . EXTENSIONS_TABLE . ' e, ' . EXTENSION_GROUPS_TABLE . ' g
+ WHERE e.group_id = g.group_id
+ AND g.allow_group = 1';
+ $result = $db->sql_query($sql);
+
+ $extensions = array();
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $extension = strtolower(trim($row['extension']));
+
+ $extensions[$extension] = array(
+ 'display_cat' => (int) $row['cat_id'],
+ 'download_mode' => (int) $row['download_mode'],
+ 'upload_icon' => trim($row['upload_icon']),
+ 'max_filesize' => (int) $row['max_filesize']
+ );
+
+ $allowed_forums = ($row['allowed_forums']) ? unserialize(trim($row['allowed_forums'])) : array();
+
+ if ($row['allow_in_pm'])
+ {
+ $allowed_forums = array_merge($allowed_forums, array(0));
+ }
+
+ // Store allowed extensions forum wise
+ $extensions['_allowed_'][$extension] = (!sizeof($allowed_forums)) ? 0 : $allowed_forums;
+ }
+ $db->sql_freeresult($result);
+
+ $this->put('extensions', $extensions);
+ }
+
+ if ($forum_id !== false)
+ {
+ $return = array();
+
+ foreach ($extensions['_allowed_'] as $extension => $check)
+ {
+ $allowed = false;
+
+ if (is_array($check))
+ {
+ // Check for private messaging
+ if (sizeof($check) == 1 && $check[0] == 0)
+ {
+ $allowed = true;
+ continue;
+ }
+
+ $allowed = (!in_array($forum_id, $check)) ? false : true;
+ }
+ else
+ {
+ $allowed = ($forum_id == 0) ? false : true;
+ }
+
+ if ($allowed)
+ {
+ $return['_allowed_'][$extension] = 0;
+ $return[$extension] = $extensions[$extension];
+ }
+ }
+
+ $extensions = $return;
+ }
+
+ return;
+ }
+
+ /**
+ * Obtain active bots
+ */
+ function obtain_bots(&$bots)
+ {
+ global $db;
+
+ if ($this->exists('bots'))
+ {
+ $bots = $this->get('bots');
+ }
+ else
+ {
+ $sql = 'SELECT user_id, bot_agent, bot_ip
+ FROM ' . BOTS_TABLE . '
+ WHERE bot_active = 1';
+ $result = $db->sql_query($sql);
+
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $bots[] = $row;
+ }
+ $db->sql_freeresult($result);
+
+ $this->put('bots', $bots);
+ }
+
+ return;
+ }
+
+}
+
+?> \ No newline at end of file