/legacy/includes/objects/cache.php
PHP | 260 lines | 157 code | 43 blank | 60 comment | 20 complexity | 564b0d87458b9855b66a3f8252836144 MD5 | raw file
Possible License(s): AGPL-3.0
- <?php
- /*
- +--------------------------------------------------------------------------
- | NovaBoard
- | ========================================
- | By The NovaBoard team
- | Released under the Artistic License 2.0
- | http://www.novaboard.net
- | ========================================
- | cache.php - Cache class to handle loading/saving of repeat data.
- */
-
- if (!defined('NOVA_RUN'))
- {
- exit('<h1>ACCESS DENIED</h1>You cannot access this file directly.');
- }
-
- class cache
- {
- private
- $ROOT = '',
- $db_prefix = '',
- $cache = array()
- ;
-
- /*
- Constructor function
-
- @param string $root : Path to novaboard's root folder.
- @return null
- */
-
- public function __construct($root, $db_prefix)
- {
- $this->ROOT = $root;
- $this->db_prefix = $db_prefix;
- }
-
- /*
- Deletes the specified cache file.
-
- @param string $file : The name of the file to delete.
- @return bool : True/false depending on successful deletion.
- */
-
- public function delete($file)
- {
- if (file_exists($this->ROOT . 'cache/' . $file . '.php'))
- {
- unlink($this->ROOT . 'cache/' . $file . '.php');
-
- if (isset($this->cache[$file]))
- {
- unset($this->cache[$file]);
- }
-
- return true;
- }
- else
- {
- return false;
- }
- }
-
- /*
- Loads the given cache file.
-
- @param string $file : The file to load.
- @param bool $remember : Whether to save the info to an array (for when a file is loaded more than once).
- @return array : The contents of the cache file.
- */
-
- public function load($file, $remember = false)
- {
- if (in_array($file, $this->cache))
- {
- return $this->cache[$file];
- }
- else
- {
- if (!file_exists($this->ROOT . 'cache/' . $file . '.php'))
- {
- return ($remember) ? $this->cache[$file] = $this->reCache($file) : $this->reCache($file);
- }
- else
- {
- include $this->ROOT . 'cache/' . $file . '.php';
-
- if (empty($cache))
- {
- return ($remember) ? $this->cache[$file] = $this->reCache($file) : $this->reCache($file);
- }
-
- return ($remember) ? $this->cache[$file] = $cache : $cache;
- }
- }
- }
-
- /*
- Saves the given array to a cache file.
-
- @param string $file : The name to give the file.
- @param array $info : The contents to add to the file.
- @return bool : True if file was created, false otherwise.
- */
-
- public function save($file, $info = '')
- {
- $file = $this->ROOT . 'cache/' . $file . '.php';
-
- if (is_writeable($this->ROOT . 'cache/'))
- {
- $content = '<?php' . "\n";
-
- if ($info != '')
- {
- $content .= '$cache = ' . var_export($info, true) . ';';
- }
- else
- {
- $content .= '$cache = array();';
- }
-
- $content .= "\n" . '?>';
-
- return (file_put_contents($file, $content)) ? true : false;
- }
- else
- {
- return false;
- }
- }
-
- /*
- Re-Caches the specified file.
-
- @param string $file : The name of the file.
- @return array : Information retrieved from the DB.
- */
-
- private function reCache($file)
- {
- /*
- Recache for board settings
- */
-
- if ($file == 'settings')
- {
- $query = mysql_query('SELECT * FROM ' . $this->db_prefix . 'settings');
- $row = mysql_fetch_assoc($query);
-
- $this->save('settings', $row);
-
- return $row;
- }
-
- /*
- Word censors in posts.
- */
-
- elseif ($file == 'censor')
- {
- $censor = array();
- $query = mysql_query('SELECT * FROM ' . $this->db_prefix . 'censor');
-
- while ($row = mysql_fetch_assoc($query))
- {
- $censor[$row['row']] = $row;
- }
-
- $this->save('censor', $censor);
- return $censor;
- }
-
- /*
- User groups
- */
-
- elseif ($file == 'groups')
- {
- $groups = array();
- $query = mysql_query('SELECT * FROM ' . $this->db_prefix . 'groups');
-
- while ($row = mysql_fetch_assoc($query))
- {
- $groups[$row['group_id']] = $row;
- }
-
- $this->save($file, $groups);
- return $row;
- }
-
- /*
- Moderator permissions
- */
-
- elseif ($file == 'moderators')
- {
- $moderators = array();
- $query = mysql_query('SELECT * FROM ' . $this->db_prefix . 'moderators');
-
- while ($row = mysql_fetch_assoc($query))
- {
- $moderators[$row['member_id']][$row['forum_id']] = $row;
- }
-
- $this->save('moderators', $moderators);
- return $moderators;
- }
-
- /*
- Hooks
- */
-
- elseif ($file == 'hooks')
- {
- $hooks = array();
- $query = mysql_query('
- SELECT h.file, h.location, m.module_name
- FROM ' . $this->db_prefix . 'modules_hooks h
- INNER JOIN ' . $this->db_prefix . 'modules m
- ON h.module_id = m.id
- WHERE m.installed = 1
- ');
-
- while ($row = mysql_fetch_assoc($query))
- {
- $hooks[$row['file']][$row['location']][] = $row;
- }
-
- $this->save('hooks', $hooks);
- return $hooks;
- }
-
- /*
- Emoticons/smilies (whatever you wanna call them).
- */
-
- elseif (strpos($file, 'emoticons_') !== false)
- {
- $theme = str_replace('emoticons_', '', $file);
- $smilies = array();
- $query219 = mysql_query('
- SELECT row, code, link
- FROM ' . $this->db_prefix . 'smilies
- WHERE emoticon_on = 1 AND code != "" AND link != "" AND theme = "' . $theme . '"
- ORDER BY row DESC
- ');
-
- while ($row = mysql_fetch_assoc($query219))
- {
- $smilies[$row['row']] = $row;
- }
-
- $this->save($file, $smilies);
- return $smilies;
- }
- }
- }
- ?>