diff --git a/classes/cache/CacheHandler.class.php b/classes/cache/CacheHandler.class.php
index 895ce9c69..f91d7d1cb 100644
--- a/classes/cache/CacheHandler.class.php
+++ b/classes/cache/CacheHandler.class.php
@@ -8,17 +8,22 @@
*/
class CacheHandler extends Handler
{
+ /**
+ * Instances are stored here.
+ */
+ protected static $_instances = array();
+
/**
* instance of cache handler
* @var CacheBase
*/
- var $handler = null;
+ protected $handler = null;
/**
* Version of key group
* @var int
*/
- var $keyGroupVersions = null;
+ protected $keyGroupVersions = null;
/**
* Get a instance of CacheHandler(for singleton)
@@ -28,14 +33,14 @@ class CacheHandler extends Handler
* @param boolean $always_use_file If set true, use a file cache always
* @return CacheHandler
*/
- function getInstance($target = 'object', $info = null, $always_use_file = false)
+ public static function getInstance($target = 'object', $info = null, $always_use_file = false)
{
- $cache_handler_key = $target . ($always_use_file ? '_file' : '');
- if(!$GLOBALS['__XE_CACHE_HANDLER__'][$cache_handler_key])
+ $key = 'object' . ($always_use_file ? '_file' : '');
+ if (!isset(self::$_instances[$key]))
{
- $GLOBALS['__XE_CACHE_HANDLER__'][$cache_handler_key] = new CacheHandler($target, $info, $always_use_file);
+ self::$_instances[$key] = new self($target, $info, $always_use_file);
}
- return $GLOBALS['__XE_CACHE_HANDLER__'][$cache_handler_key];
+ return self::$_instances[$key];
}
/**
@@ -44,84 +49,53 @@ class CacheHandler extends Handler
* Do not use this directly. You can use getInstance() instead.
*
* @see CacheHandler::getInstance
- * @param string $target type of cache (object|template)
+ * @param string $target type of cache (object)
* @param object $info info. of DB
* @param boolean $always_use_file If set true, use a file cache always
* @return CacheHandler
*/
- function __construct($target, $info = null, $always_use_file = false)
+ protected function __construct($target, $info = null, $always_use_file = false)
{
- if(!$info)
+ // Allow using custom cache info for backward compatibility.
+ if (is_object($info) && $info->use_object_cache)
{
- $info = Context::getDBInfo();
+ $cache_config = $info->use_object_cache;
}
-
- if($info)
+ else
{
- if($target == 'object')
+ $cache_config = config('cache');
+ if (is_array($cache_config) && count($cache_config))
{
- if($info->use_object_cache == 'apc')
- {
- $type = 'apc';
- }
- else if(substr($info->use_object_cache, 0, 8) == 'memcache')
- {
- $type = 'memcache';
- $url = $info->use_object_cache;
- }
- else if(substr($info->use_object_cache, 0, 5) == 'redis')
- {
- $type = 'redis';
- $url = $info->use_object_cache;
- }
- else if($info->use_object_cache == 'wincache')
- {
- $type = 'wincache';
- }
- else if($info->use_object_cache == 'file')
- {
- $type = 'file';
- }
- else if($always_use_file)
- {
- $type = 'file';
- }
- }
- else if($target == 'template')
- {
- if($info->use_template_cache == 'apc')
- {
- $type = 'apc';
- }
- else if(substr($info->use_template_cache, 0, 8) == 'memcache')
- {
- $type = 'memcache';
- $url = $info->use_template_cache;
- }
- else if(substr($info->use_template_cache, 0, 5) == 'redis')
- {
- $type = 'redis';
- $url = $info->use_template_cache;
- }
- else if($info->use_template_cache == 'wincache')
- {
- $type = 'wincache';
- }
- }
-
- if($type)
- {
- $class = 'Cache' . ucfirst($type);
- include_once sprintf('%sclasses/cache/%s.class.php', _XE_PATH_, $class);
- $this->handler = call_user_func(array($class, 'getInstance'), $url);
- $this->keyGroupVersions = $this->handler->get('key_group_versions', 0);
- if(!$this->keyGroupVersions)
- {
- $this->keyGroupVersions = array();
- $this->handler->put('key_group_versions', $this->keyGroupVersions, 0);
- }
+ $cache_config = array_first($cache_config);
}
}
+
+ // Handle various types of cache backend.
+ if (preg_match('/^(apc|memcache|redis|wincache|file)/', strval($cache_config), $matches))
+ {
+ $type = $matches[1];
+ }
+ elseif ($always_use_file)
+ {
+ $type = 'file';
+ }
+ else
+ {
+ return;
+ }
+
+ // Create an instance of cache backend.
+ $class = 'Cache' . ucfirst($type);
+ include_once sprintf('%sclasses/cache/%s.class.php', _XE_PATH_, $class);
+ $this->handler = $class::getInstance($cache_config);
+
+ // Initialize key group versions.
+ $this->keyGroupVersions = $this->handler->get('key_group_versions', 0);
+ if(!$this->keyGroupVersions)
+ {
+ $this->keyGroupVersions = array();
+ $this->handler->put('key_group_versions', $this->keyGroupVersions, 0);
+ }
}
/**
@@ -129,14 +103,19 @@ class CacheHandler extends Handler
*
* @return boolean
*/
- function isSupport()
+ public function isSupport($type = null, $cache_config = null)
{
- if($this->handler && $this->handler->isSupport())
+ if ($type === null)
{
- return true;
+ return ($this->handler && $this->handler->isSupport());
+ }
+ else
+ {
+ $class = 'Cache' . ucfirst(str_replace('memcached', 'memcache', $type));
+ include_once sprintf('%sclasses/cache/%s.class.php', _XE_PATH_, $class);
+ $handler = $class::getInstance($cache_config, true);
+ return $handler->isSupport();
}
-
- return false;
}
/**
@@ -145,11 +124,9 @@ class CacheHandler extends Handler
* @param string $key The key that will be associated with the item.
* @return string Returns cache name
*/
- function getCacheKey($key)
+ public function getCacheKey($key)
{
- $key = str_replace('/', ':', $key);
-
- return __XE_VERSION__ . ':' . $key;
+ return RX_VERSION . ':' . str_replace('/', ':', $key);
}
/**
@@ -160,16 +137,10 @@ class CacheHandler extends Handler
* If stored time is older then modified time, return false.
* @return false|mixed Return false on failure or older then modified time. Return the string associated with the $key on success.
*/
- function get($key, $modified_time = 0)
+ public function get($key, $modified_time = 0)
{
- if(!$this->handler)
- {
- return false;
- }
-
- $key = $this->getCacheKey($key);
-
- return $this->handler->get($key, $modified_time);
+ if (!$key) return false;
+ return $this->handler ? $this->handler->get($this->getCacheKey($key), $modified_time) : false;
}
/**
@@ -182,16 +153,10 @@ class CacheHandler extends Handler
* If no ttl is supplied, use the default valid time.
* @return bool|void Returns true on success or false on failure. If use CacheFile, returns void.
*/
- function put($key, $obj, $valid_time = 0)
+ public function put($key, $obj, $valid_time = 0)
{
- if(!$this->handler && !$key)
- {
- return false;
- }
-
- $key = $this->getCacheKey($key);
-
- return $this->handler->put($key, $obj, $valid_time);
+ if (!$key) return false;
+ return $this->handler ? $this->handler->put($this->getCacheKey($key), $obj, $valid_time) : false;
}
/**
@@ -200,16 +165,10 @@ class CacheHandler extends Handler
* @param string $key Cache key
* @return void
*/
- function delete($key)
+ public function delete($key)
{
- if(!$this->handler)
- {
- return false;
- }
-
- $key = $this->getCacheKey($key);
-
- return $this->handler->delete($key);
+ if (!$key) return false;
+ return $this->handler ? $this->handler->delete($this->getCacheKey($key)) : false;
}
/**
@@ -220,16 +179,10 @@ class CacheHandler extends Handler
* If stored time is older then modified time, the data is invalid.
* @return bool Return true on valid or false on invalid.
*/
- function isValid($key, $modified_time)
+ public function isValid($key, $modified_time = 0)
{
- if(!$this->handler)
- {
- return false;
- }
-
- $key = $this->getCacheKey($key);
-
- return $this->handler->isValid($key, $modified_time);
+ if (!$key) return false;
+ return $this->handler ? $this->handler->isValid($this->getCacheKey($key), $modified_time) : false;
}
/**
@@ -237,14 +190,9 @@ class CacheHandler extends Handler
*
* @return bool|void Returns true on success or false on failure. If use CacheFile, returns void.
*/
- function truncate()
+ public function truncate()
{
- if(!$this->handler)
- {
- return false;
- }
-
- return $this->handler->truncate();
+ return $this->handler ? $this->handler->truncate() : false;
}
/**
@@ -263,7 +211,7 @@ class CacheHandler extends Handler
* @param string $key Cache key
* @return string
*/
- function getGroupKey($keyGroupName, $key)
+ public function getGroupKey($keyGroupName, $key)
{
if(!$this->keyGroupVersions[$keyGroupName])
{
@@ -280,12 +228,11 @@ class CacheHandler extends Handler
* @param string $keyGroupName Group name
* @return void
*/
- function invalidateGroupKey($keyGroupName)
+ public function invalidateGroupKey($keyGroupName)
{
$this->keyGroupVersions[$keyGroupName]++;
$this->handler->put('key_group_versions', $this->keyGroupVersions, 0);
}
-
}
/**
@@ -299,7 +246,7 @@ class CacheBase
* Default valid time
* @var int
*/
- var $valid_time = 36000;
+ public $valid_time = 36000;
/**
* Get cached data
@@ -309,7 +256,7 @@ class CacheBase
* If stored time is older then modified time, return false.
* @return false|mixed Return false on failure or older then modified time. Return the string associated with the $key on success.
*/
- function get($key, $modified_time = 0)
+ public function get($key, $modified_time = 0)
{
return false;
}
@@ -324,10 +271,18 @@ class CacheBase
* If no ttl is supplied, use the default valid time.
* @return bool|void Returns true on success or false on failure. If use CacheFile, returns void.
*/
- function put($key, $obj, $valid_time = 0)
+ public function put($key, $obj, $valid_time = 0)
{
return false;
}
+
+ /**
+ * Alias of put()
+ */
+ public function set($key, $obj, $valid_time = 0)
+ {
+ return $this->put($key, $obj, $valid_time = 0);
+ }
/**
* Return whether cache is valid or invalid
@@ -337,7 +292,7 @@ class CacheBase
* If stored time is older then modified time, the data is invalid.
* @return bool Return true on valid or false on invalid.
*/
- function isValid($key, $modified_time = 0)
+ public function isValid($key, $modified_time = 0)
{
return false;
}
@@ -347,7 +302,7 @@ class CacheBase
*
* @return boolean
*/
- function isSupport()
+ public function isSupport()
{
return false;
}
@@ -357,7 +312,7 @@ class CacheBase
*
* @return bool|void Returns true on success or false on failure. If use CacheFile, returns void.
*/
- function truncate()
+ public function truncate()
{
return false;
}
diff --git a/classes/cache/CacheMemcache.class.php b/classes/cache/CacheMemcache.class.php
index b37019ab6..6fdecea3f 100644
--- a/classes/cache/CacheMemcache.class.php
+++ b/classes/cache/CacheMemcache.class.php
@@ -21,11 +21,12 @@ class CacheMemcache extends CacheBase
* @param string $url url of memcache
* @return CacheMemcache instance of CacheMemcache
*/
- function getInstance($url)
+ function getInstance($url, $force_new_instance = false)
{
- if(!$GLOBALS['__CacheMemcache__'])
+ if(!$GLOBALS['__CacheMemcache__'] || $force_new_instance)
{
$GLOBALS['__CacheMemcache__'] = new CacheMemcache($url);
+ unset($GLOBALS['XE_MEMCACHE_SUPPORT']);
}
return $GLOBALS['__CacheMemcache__'];
}
diff --git a/classes/cache/CacheRedis.class.php b/classes/cache/CacheRedis.class.php
index 0c8742ba5..91c59beaa 100644
--- a/classes/cache/CacheRedis.class.php
+++ b/classes/cache/CacheRedis.class.php
@@ -21,9 +21,9 @@ class CacheRedis extends CacheBase
* @param string $url url of Redis
* @return CacheRedis instance of CacheRedis
*/
- function getInstance($url)
+ function getInstance($url, $force_new_instance = false)
{
- if(!$GLOBALS['__CacheRedis__'])
+ if(!$GLOBALS['__CacheRedis__'] || $force_new_instance)
{
$GLOBALS['__CacheRedis__'] = new CacheRedis($url);
}
diff --git a/classes/db/DB.class.php b/classes/db/DB.class.php
index a852608d9..6277762c8 100644
--- a/classes/db/DB.class.php
+++ b/classes/db/DB.class.php
@@ -22,24 +22,18 @@ class DB
* priority of DBMS
* @var array
*/
- var $priority_dbms = array(
+ protected static $priority_dbms = array(
'mysqli' => 6,
'mysql' => 4,
'cubrid' => 2,
'mssql' => 1
);
- /**
- * count cache path
- * @var string
- */
- var $count_cache_path = 'files/cache/db';
-
/**
* operations for condition
* @var array
*/
- var $cond_operation = array(
+ protected static $cond_operation = array(
'equal' => '=',
'more' => '>=',
'excess' => '>',
@@ -54,83 +48,83 @@ class DB
* master database connection string
* @var array
*/
- var $master_db = NULL;
+ protected $master_db = NULL;
/**
* array of slave databases connection strings
* @var array
*/
- var $slave_db = NULL;
- var $result = NULL;
+ protected $slave_db = NULL;
+ protected $result = NULL;
/**
* error code (0 means no error)
* @var int
*/
- var $errno = 0;
+ protected $errno = 0;
/**
* error message
* @var string
*/
- var $errstr = '';
+ protected $errstr = '';
/**
* query string of latest executed query
* @var string
*/
- var $query = '';
- var $connection = '';
+ protected $query = '';
+ protected $connection = '';
/**
* elapsed time of latest executed query
* @var int
*/
- var $elapsed_time = 0;
+ protected $elapsed_time = 0;
/**
* elapsed time of latest executed DB class
* @var int
*/
- var $elapsed_dbclass_time = 0;
+ protected $elapsed_dbclass_time = 0;
/**
* transaction flag
* @var boolean
*/
- var $transaction_started = FALSE;
- var $is_connected = FALSE;
+ protected $transaction_started = FALSE;
+ protected $is_connected = FALSE;
/**
* returns enable list in supported dbms list
* will be written by classes/DB/DB***.class.php
* @var array
*/
- var $supported_list = array();
+ protected static $supported_list = array();
/**
* location of query cache
* @var string
*/
- var $cache_file = 'files/cache/queries/';
+ protected $cache_file = 'files/cache/queries/';
/**
* stores database type: 'mysql','cubrid','mssql' etc. or 'db' when database is not yet set
* @var string
*/
- var $db_type;
+ public $db_type;
/**
* flag to decide if class prepared statements or not (when supported); can be changed from db.config.info
* @var string
*/
- var $use_prepared_statements;
+ public $use_prepared_statements;
/**
* leve of transaction
* @var unknown
*/
- private $transactionNestedLevel = 0;
+ protected $transactionNestedLevel = 0;
/**
* returns instance of certain db type
@@ -189,7 +183,6 @@ class DB
*/
public function __construct()
{
- $this->count_cache_path = _XE_PATH_ . $this->count_cache_path;
$this->cache_file = _XE_PATH_ . $this->cache_file;
}
@@ -199,10 +192,9 @@ class DB
* check by instance can creatable
* @return array return supported DBMS list
*/
- function getSupportedList()
+ public static function getSupportedList()
{
- $oDB = new DB();
- return $oDB->_getSupportedList();
+ return self::_getSupportedList();
}
/**
@@ -210,20 +202,18 @@ class DB
* this list return by child class
* @return array return enable DBMS list in supported dbms list
*/
- function getEnableList()
+ public static function getEnableList()
{
- is_a($this, 'DB') ? $self = $this : $self = self::getInstance();
-
- if(!$self->supported_list)
+ if(!self::$supported_list)
{
$oDB = new DB();
- $self->supported_list = $oDB->_getSupportedList();
+ self::$supported_list = self::_getSupportedList();
}
$enableList = array();
- if(is_array($self->supported_list))
+ if(is_array(self::$supported_list))
{
- foreach($self->supported_list AS $key => $value)
+ foreach(self::$supported_list AS $key => $value)
{
if($value->enable)
{
@@ -239,20 +229,18 @@ class DB
* this list return by child class
* @return array return disable DBMS list in supported dbms list
*/
- function getDisableList()
+ public static function getDisableList()
{
- is_a($this, 'DB') ? $self = $this : $self = self::getInstance();
-
- if(!$self->supported_list)
+ if(!self::$supported_list)
{
$oDB = new DB();
- $self->supported_list = $oDB->_getSupportedList();
+ self::$supported_list = self::_getSupportedList();
}
$disableList = array();
- if(is_array($self->supported_list))
+ if(is_array(self::$supported_list))
{
- foreach($self->supported_list AS $key => $value)
+ foreach(self::$supported_list AS $key => $value)
{
if(!$value->enable)
{
@@ -265,17 +253,16 @@ class DB
/**
* returns list of supported dbms list
- * this method is private
+ *
* @return array return supported DBMS list
*/
- function _getSupportedList()
+ protected static function _getSupportedList()
{
- static $get_supported_list = '';
- if(is_array($get_supported_list))
+ if(self::$supported_list)
{
- $this->supported_list = $get_supported_list;
- return $this->supported_list;
+ return self::$supported_list;
}
+
$get_supported_list = array();
$db_classes_path = _XE_PATH_ . "classes/db/";
$filter = "/^DB([^\.]+)\.class\.php/i";
@@ -303,41 +290,13 @@ class DB
}
// sort
- @usort($get_supported_list, array($this, '_sortDBMS'));
+ usort($get_supported_list, function($a, $b) {
+ $priority_a = isset(self::$priority_dbms[$a->db_type]) ? self::$priority_dbms[$a->db_type] : 0;
+ $priority_b = isset(self::$priority_dbms[$b->db_type]) ? self::$priority_dbms[$b->db_type] : 0;
+ return $a - $b;
+ });
- $this->supported_list = $get_supported_list;
- return $this->supported_list;
- }
-
- /**
- * sort dbms as priority
- */
- function _sortDBMS($a, $b)
- {
- if(!isset($this->priority_dbms[$a->db_type]))
- {
- $priority_a = 0;
- }
- else
- {
- $priority_a = $this->priority_dbms[$a->db_type];
- }
-
- if(!isset($this->priority_dbms[$b->db_type]))
- {
- $priority_b = 0;
- }
- else
- {
- $priority_b = $this->priority_dbms[$b->db_type];
- }
-
- if($priority_a == $priority_b)
- {
- return 0;
- }
-
- return ($priority_a > $priority_b) ? -1 : 1;
+ return self::$supported_list = $get_supported_list;
}
/**
@@ -345,7 +304,7 @@ class DB
* The value is set in the child class
* @return boolean true: is supported, false: is not supported
*/
- function isSupported()
+ public function isSupported()
{
return self::$isSupported;
}
@@ -356,7 +315,7 @@ class DB
* @param int $indx key of server list
* @return boolean true: connected, false: not connected
*/
- function isConnected($type = 'master', $indx = 0)
+ public function isConnected($type = 'master', $indx = 0)
{
if($type == 'master')
{
@@ -373,7 +332,7 @@ class DB
* @param string $query query string
* @return void
*/
- function actStart($query)
+ public function actStart($query)
{
$this->setError(0, 'success');
$this->query = $query;
@@ -385,7 +344,7 @@ class DB
* finish recording log
* @return void
*/
- function actFinish()
+ public function actFinish()
{
if(!$this->query)
{
@@ -461,7 +420,7 @@ class DB
* @param array $log values set query debug
* @return void
*/
- function setQueryLog($log)
+ public function setQueryLog($log)
{
$GLOBALS['__db_queries__'][] = $log;
}
@@ -472,7 +431,7 @@ class DB
* @param string $errstr error message
* @return void
*/
- function setError($errno = 0, $errstr = 'success')
+ public function setError($errno = 0, $errstr = 'success')
{
$this->errno = $errno;
$this->errstr = $errstr;
@@ -482,7 +441,7 @@ class DB
* Return error status
* @return boolean true: error, false: no error
*/
- function isError()
+ public function isError()
{
return ($this->errno !== 0);
}
@@ -491,7 +450,7 @@ class DB
* Returns object of error info
* @return object object of error
*/
- function getError()
+ public function getError()
{
$this->errstr = Context::convertEncodingStr($this->errstr);
return new Object($this->errno, $this->errstr);
@@ -505,7 +464,7 @@ class DB
* @param array $arg_columns column list. if you want get specific colums from executed result, add column list to $arg_columns
* @return object result of query
*/
- function executeQuery($query_id, $args = NULL, $arg_columns = NULL, $type = NULL)
+ public function executeQuery($query_id, $args = NULL, $arg_columns = NULL, $type = NULL)
{
static $cache_file = array();
@@ -572,7 +531,7 @@ class DB
* @param string $xml_file original xml query file
* @return string cache file
*/
- function checkQueryCacheFile($query_id, $xml_file)
+ public function checkQueryCacheFile($query_id, $xml_file)
{
// first try finding cache file
$cache_file = sprintf('%s%s%s.%s.%s.cache.php', _XE_PATH_, $this->cache_file, $query_id, __ZBXE_VERSION__, $this->db_type);
@@ -601,7 +560,7 @@ class DB
* @param array $arg_columns column list. if you want get specific colums from executed result, add column list to $arg_columns
* @return object result of query
*/
- function _executeQuery($cache_file, $source_args, $query_id, $arg_columns, $type)
+ public function _executeQuery($cache_file, $source_args, $query_id, $arg_columns, $type)
{
global $lang;
@@ -619,7 +578,7 @@ class DB
$output = include($cache_file);
- if((is_a($output, 'Object') || is_subclass_of($output, 'Object')) && !$output->toBool())
+ if($output instanceof Object && !$output->toBool())
{
return $output;
}
@@ -652,7 +611,7 @@ class DB
{
$output = $this->getError();
}
- else if(!is_a($output, 'Object') && !is_subclass_of($output, 'Object'))
+ elseif(!($output instanceof Object))
{
$output = new Object();
}
@@ -668,57 +627,9 @@ class DB
* @param string $condition condition to get data
* @return int count of cache data
*/
- function getCountCache($tables, $condition)
+ public function getCountCache($tables, $condition)
{
return FALSE;
-/*
- if(!$tables)
- {
- return FALSE;
- }
- if(!is_dir($this->count_cache_path))
- {
- return FileHandler::makeDir($this->count_cache_path);
- }
-
- $condition = md5($condition);
-
- if(!is_array($tables))
- {
- $tables_str = $tables;
- }
- else
- {
- $tables_str = implode('.', $tables);
- }
-
- $cache_path = sprintf('%s/%s%s', $this->count_cache_path, $this->prefix, $tables_str);
- FileHandler::makeDir($cache_path);
-
- $cache_filename = sprintf('%s/%s.%s', $cache_path, $tables_str, $condition);
- if(!file_exists($cache_filename))
- {
- return FALSE;
- }
-
- $cache_mtime = filemtime($cache_filename);
-
- if(!is_array($tables))
- {
- $tables = array($tables);
- }
- foreach($tables as $alias => $table)
- {
- $table_filename = sprintf('%s/cache.%s%s', $this->count_cache_path, $this->prefix, $table);
- if(!file_exists($table_filename) || filemtime($table_filename) > $cache_mtime)
- {
- return FALSE;
- }
- }
-
- $count = (int) FileHandler::readFile($cache_filename);
- return $count;
-*/
}
/**
@@ -728,37 +639,9 @@ class DB
* @param int $count count of cache data to save
* @return void
*/
- function putCountCache($tables, $condition, $count = 0)
+ public function putCountCache($tables, $condition, $count = 0)
{
return FALSE;
-/*
- if(!$tables)
- {
- return FALSE;
- }
- if(!is_dir($this->count_cache_path))
- {
- return FileHandler::makeDir($this->count_cache_path);
- }
-
- $condition = md5($condition);
-
- if(!is_array($tables))
- {
- $tables_str = $tables;
- }
- else
- {
- $tables_str = implode('.', $tables);
- }
-
- $cache_path = sprintf('%s/%s%s', $this->count_cache_path, $this->prefix, $tables_str);
- FileHandler::makeDir($cache_path);
-
- $cache_filename = sprintf('%s/%s.%s', $cache_path, $tables_str, $condition);
-
- FileHandler::writeFile($cache_filename, $count);
-*/
}
/**
@@ -766,29 +649,9 @@ class DB
* @param array|string $tables tables to reset cache data
* @return boolean true: success, false: failed
*/
- function resetCountCache($tables)
+ public function resetCountCache($tables)
{
return FALSE;
-/*
- if(!$tables)
- {
- return FALSE;
- }
- return FileHandler::makeDir($this->count_cache_path);
-
- if(!is_array($tables))
- {
- $tables = array($tables);
- }
- foreach($tables as $alias => $table)
- {
- $filename = sprintf('%s/cache.%s%s', $this->count_cache_path, $this->prefix, $table);
- FileHandler::removeFile($filename);
- FileHandler::writeFile($filename, '');
- }
-
- return TRUE;
- */
}
/**
@@ -796,7 +659,7 @@ class DB
* @param string $table_name
* @return void
*/
- function dropTable($table_name)
+ public function dropTable($table_name)
{
if(!$table_name)
{
@@ -812,7 +675,7 @@ class DB
* @param boolean $with_values
* @return string
*/
- function getSelectSql($query, $with_values = TRUE)
+ public function getSelectSql($query, $with_values = TRUE)
{
$select = $query->getSelectString($with_values);
if($select == '')
@@ -881,7 +744,7 @@ class DB
*
* @param $queryObject
*/
- function getClickCountQuery($queryObject)
+ public function getClickCountQuery($queryObject)
{
$new_update_columns = array();
$click_count_columns = $queryObject->getClickCountColumns();
@@ -907,7 +770,7 @@ class DB
* @param boolean $with_priority
* @return string
*/
- function getDeleteSql($query, $with_values = TRUE, $with_priority = FALSE)
+ public function getDeleteSql($query, $with_values = TRUE, $with_priority = FALSE)
{
$sql = 'DELETE ';
@@ -939,7 +802,7 @@ class DB
* @param boolean $with_priority
* @return string
*/
- function getUpdateSql($query, $with_values = TRUE, $with_priority = FALSE)
+ public function getUpdateSql($query, $with_values = TRUE, $with_priority = FALSE)
{
$columnsList = $query->getUpdateString($with_values);
if($columnsList == '')
@@ -971,7 +834,7 @@ class DB
* @param boolean $with_priority
* @return string
*/
- function getInsertSql($query, $with_values = TRUE, $with_priority = FALSE)
+ public function getInsertSql($query, $with_values = TRUE, $with_priority = FALSE)
{
$tableName = $query->getFirstTableName();
$values = $query->getInsertString($with_values);
@@ -984,7 +847,7 @@ class DB
* Return index from slave server list
* @return int
*/
- function _getSlaveConnectionStringIndex()
+ public function _getSlaveConnectionStringIndex()
{
$max = count($this->slave_db);
$indx = rand(0, $max - 1);
@@ -997,7 +860,7 @@ class DB
* @param int $indx if indx value is NULL, return rand number in slave server list
* @return resource
*/
- function _getConnection($type = 'master', $indx = NULL)
+ public function _getConnection($type = 'master', $indx = NULL)
{
if($type == 'master' || $this->transactionNestedLevel)
{
@@ -1036,26 +899,18 @@ class DB
* check db information exists
* @return boolean
*/
- function _dbInfoExists()
+ public function _dbInfoExists()
{
- if(!$this->master_db)
- {
- return FALSE;
- }
- if(count($this->slave_db) === 0)
- {
- return FALSE;
- }
- return TRUE;
+ return ($this->master_db && count($this->slave_db));
}
/**
* DB disconnection
- * this method is protected
+ *
* @param resource $connection
* @return void
*/
- function _close($connection)
+ protected function _close($connection)
{
}
@@ -1066,7 +921,7 @@ class DB
* @param int $indx number in slave dbms server list
* @return void
*/
- function close($type = 'master', $indx = 0)
+ public function close($type = 'master', $indx = 0)
{
if(!$this->isConnected($type, $indx))
{
@@ -1093,7 +948,7 @@ class DB
* this method is protected
* @return boolean
*/
- function _begin($transactionLevel = 0)
+ protected function _begin($transactionLevel = 0)
{
return TRUE;
}
@@ -1102,7 +957,7 @@ class DB
* DB transaction start
* @return void
*/
- function begin()
+ public function begin()
{
if(!$this->isConnected())
{
@@ -1121,7 +976,7 @@ class DB
* this method is protected
* @return boolean
*/
- function _rollback($transactionLevel = 0)
+ protected function _rollback($transactionLevel = 0)
{
return TRUE;
}
@@ -1130,7 +985,7 @@ class DB
* DB transaction rollback
* @return void
*/
- function rollback()
+ public function rollback()
{
if(!$this->isConnected() || !$this->transaction_started)
{
@@ -1152,7 +1007,7 @@ class DB
* this method is protected
* @return boolean
*/
- function _commit()
+ protected function _commit()
{
return TRUE;
}
@@ -1162,7 +1017,7 @@ class DB
* @param boolean $force regardless transaction start status or connect status, forced to commit
* @return void
*/
- function commit($force = FALSE)
+ public function commit($force = FALSE)
{
if(!$force && (!$this->isConnected() || !$this->transaction_started))
{
@@ -1186,19 +1041,19 @@ class DB
* @param resource $connection
* @return void
*/
- function __query($query, $connection)
+ protected function __query($query, $connection)
{
}
/**
* Execute the query
- * this method is protected
+ *
* @param string $query
* @param resource $connection
* @return resource
*/
- function _query($query, $connection = NULL)
+ public function _query($query, $connection = NULL)
{
if($connection == NULL)
{
@@ -1221,7 +1076,7 @@ class DB
* this method is protected
* @return void
*/
- function _setDBInfo()
+ protected function _setDBInfo()
{
$db_info = config('db');
$this->master_db = $db_info['master'];
@@ -1236,7 +1091,7 @@ class DB
* @param array $connection
* @return void
*/
- function __connect($connection)
+ protected function __connect($connection)
{
}
@@ -1247,7 +1102,7 @@ class DB
* @param resource $connection
* @return void
*/
- function _afterConnect($connection)
+ protected function _afterConnect($connection)
{
}
@@ -1259,7 +1114,7 @@ class DB
* @param int $indx number in slave dbms server list
* @return void
*/
- function _connect($type = 'master', $indx = 0)
+ protected function _connect($type = 'master', $indx = 0)
{
if($this->isConnected($type, $indx))
{
@@ -1305,7 +1160,7 @@ class DB
* Start recording DBClass log
* @return void
*/
- function actDBClassStart()
+ public function actDBClassStart()
{
$this->setError(0, 'success');
$this->act_dbclass_start = microtime(true);
@@ -1316,7 +1171,7 @@ class DB
* Finish recording DBClass log
* @return void
*/
- function actDBClassFinish()
+ public function actDBClassFinish()
{
if(!$this->query)
{
@@ -1338,7 +1193,7 @@ class DB
* @param boolean $force force load DBParser instance
* @return DBParser
*/
- function getParser($force = FALSE)
+ public function getParser($force = FALSE)
{
static $dbParser = NULL;
if(!$dbParser || $force)
diff --git a/classes/db/DBCubrid.class.php b/classes/db/DBCubrid.class.php
index 542d1483c..5abb979ca 100644
--- a/classes/db/DBCubrid.class.php
+++ b/classes/db/DBCubrid.class.php
@@ -107,12 +107,6 @@ class DBCubrid extends DB
*/
function addQuotes($string)
{
- if(version_compare(PHP_VERSION, "5.4.0", "<") &&
- get_magic_quotes_gpc())
- {
- $string = stripslashes(str_replace("\\", "\\\\", $string));
- }
-
if(!is_numeric($string))
{
/*
diff --git a/classes/db/DBMssql.class.php b/classes/db/DBMssql.class.php
index 9553d1fc6..284bcbd0d 100644
--- a/classes/db/DBMssql.class.php
+++ b/classes/db/DBMssql.class.php
@@ -94,10 +94,6 @@ class DBMssql extends DB
*/
function addQuotes($string)
{
- if(version_compare(PHP_VERSION, "5.4.0", "<") && get_magic_quotes_gpc())
- {
- $string = stripslashes(str_replace("\\", "\\\\", $string));
- }
//if(!is_numeric($string)) $string = str_replace("'","''",$string);
return $string;
diff --git a/classes/db/DBMysql.class.php b/classes/db/DBMysql.class.php
index c19169de7..f01807fb1 100644
--- a/classes/db/DBMysql.class.php
+++ b/classes/db/DBMysql.class.php
@@ -116,10 +116,6 @@ class DBMysql extends DB
*/
function addQuotes($string)
{
- if(version_compare(PHP_VERSION, "5.4.0", "<") && get_magic_quotes_gpc())
- {
- $string = stripslashes(str_replace("\\", "\\\\", $string));
- }
if(!is_numeric($string))
{
$string = @mysql_real_escape_string($string);
diff --git a/classes/db/DBMysqli.class.php b/classes/db/DBMysqli.class.php
index 2503bd38f..8c425be45 100644
--- a/classes/db/DBMysqli.class.php
+++ b/classes/db/DBMysqli.class.php
@@ -61,10 +61,6 @@ class DBMysqli extends DBMysql
*/
function addQuotes($string)
{
- if(version_compare(PHP_VERSION, "5.4.0", "<") && get_magic_quotes_gpc())
- {
- $string = stripslashes(str_replace("\\", "\\\\", $string));
- }
if(!is_numeric($string))
{
$connection = $this->_getConnection('master');
diff --git a/classes/template/TemplateHandler.class.php b/classes/template/TemplateHandler.class.php
index dcdd16b1b..1e8ac6ebf 100644
--- a/classes/template/TemplateHandler.class.php
+++ b/classes/template/TemplateHandler.class.php
@@ -117,8 +117,6 @@ class TemplateHandler
*/
public function compile($tpl_path, $tpl_filename, $tpl_file = '')
{
- $buff = false;
-
// store the starting time for debug information
if(__DEBUG__ == 3)
{
@@ -143,37 +141,13 @@ class TemplateHandler
$source_template_mtime = filemtime($this->file);
$latest_mtime = $source_template_mtime > $this->handler_mtime ? $source_template_mtime : $this->handler_mtime;
- // cache control
- $oCacheHandler = CacheHandler::getInstance('template');
-
- // get cached buff
- if($oCacheHandler->isSupport())
+ // get cached file
+ if(!file_exists($this->compiled_file) || filemtime($this->compiled_file) < $latest_mtime)
{
- $cache_key = 'template:' . $this->file;
- $buff = $oCacheHandler->get($cache_key, $latest_mtime);
- }
- else
- {
- if(is_readable($this->compiled_file) && filemtime($this->compiled_file) > $latest_mtime && filesize($this->compiled_file))
- {
- $buff = 'file://' . $this->compiled_file;
- }
+ FileHandler::writeFile($this->compiled_file, $this->parse());
}
- if($buff === FALSE)
- {
- $buff = $this->parse();
- if($oCacheHandler->isSupport())
- {
- $oCacheHandler->put($cache_key, $buff);
- }
- else
- {
- FileHandler::writeFile($this->compiled_file, $buff);
- }
- }
-
- $output = $this->_fetch($buff);
+ $output = $this->_fetch($this->compiled_file);
if($__templatehandler_root_tpl == $this->file)
{
@@ -358,54 +332,20 @@ class TemplateHandler
* @param string $buff if buff is not null, eval it instead of including compiled template file
* @return string
*/
- private function _fetch($buff)
+ private function _fetch($filename)
{
- if(!$buff)
- {
- return;
- }
-
$__Context = Context::getInstance();
$__Context->tpl_path = $this->path;
- $level = ob_get_level();
+ $__ob_level_before_fetch = ob_get_level();
ob_start();
- if(substr($buff, 0, 7) == 'file://')
- {
- if(__DEBUG__)
- {
- //load cache file from disk
- $eval_str = FileHandler::readFile(substr($buff, 7));
- $eval_str_buffed = "?>" . $eval_str;
- @eval($eval_str_buffed);
- $error_info = error_get_last();
- //parse error
- if ($error_info['type'] == 4)
- {
- throw new Exception("Error Parsing Template - {$error_info['message']} in template file {$this->file}");
- }
- }
- else
- {
- include(substr($buff, 7));
- }
- }
- else
- {
- $eval_str = "?>" . $buff;
- @eval($eval_str);
- $error_info = error_get_last();
- //parse error
- if ($error_info['type'] == 4)
- {
- throw new Exception("Error Parsing Template - {$error_info['message']} in template file {$this->file}");
- }
- }
-
+
+ include $filename;
+
$contents = '';
- while (ob_get_level() - $level > 0) {
- $contents .= ob_get_contents();
- ob_end_clean();
+ while (ob_get_level() > $__ob_level_before_fetch)
+ {
+ $contents .= ob_get_clean();
}
return $contents;
}
diff --git a/modules/admin/admin.admin.controller.php b/modules/admin/admin.admin.controller.php
index 24d14da1a..09580f1d8 100644
--- a/modules/admin/admin.admin.controller.php
+++ b/modules/admin/admin.admin.controller.php
@@ -651,6 +651,32 @@ class adminAdminController extends admin
Rhymix\Framework\Config::set('url.http_port', $vars->http_port ?: null);
Rhymix\Framework\Config::set('url.https_port', $vars->https_port ?: null);
Rhymix\Framework\Config::set('url.ssl', $use_ssl);
+ getController('module')->updateSite((object)array(
+ 'site_srl' => 0,
+ 'domain' => preg_replace('@^https?://@', '', $default_url),
+ ));
+
+ // Object cache
+ if ($vars->object_cache_type)
+ {
+ if ($vars->object_cache_type === 'memcached' || $vars->object_cache_type === 'redis')
+ {
+ $cache_config = $vars->object_cache_type . '://' . $vars->object_cache_host . ':' . intval($vars->object_cache_port);
+ }
+ else
+ {
+ $cache_config = $vars->object_cache_type;
+ }
+ if (!CacheHandler::isSupport($vars->object_cache_type, $cache_config))
+ {
+ return new Object(-1, 'msg_cache_handler_not_supported');
+ }
+ Rhymix\Framework\Config::set('cache', array($cache_config));
+ }
+ else
+ {
+ Rhymix\Framework\Config::set('cache', array());
+ }
// Other settings
Rhymix\Framework\Config::set('use_rewrite', $vars->use_rewrite === 'Y');
diff --git a/modules/admin/admin.admin.view.php b/modules/admin/admin.admin.view.php
index 0d1c403b3..45880c1df 100644
--- a/modules/admin/admin.admin.view.php
+++ b/modules/admin/admin.admin.view.php
@@ -450,6 +450,27 @@ class adminAdminView extends admin
Context::set('http_port', Rhymix\Framework\Config::get('url.http_port'));
Context::set('https_port', Rhymix\Framework\Config::get('url.https_port'));
+ // Object cache
+ $object_cache_config = Rhymix\Framework\Config::get('cache');
+ if (is_array($object_cache_config))
+ {
+ $object_cache_config = array_first($object_cache_config);
+ }
+ $object_cache_types = array('apc', 'file', 'memcached', 'redis', 'wincache');
+ $object_cache_type = preg_match('/^(' . implode('|', $object_cache_types) . ')/', $object_cache_config, $matches) ? $matches[1] : '';
+ Context::set('object_cache_types', $object_cache_types);
+ Context::set('object_cache_type', $object_cache_type);
+ if ($object_cache_type)
+ {
+ Context::set('object_cache_host', parse_url($object_cache_config, PHP_URL_HOST) ?: null);
+ Context::set('object_cache_port', parse_url($object_cache_config, PHP_URL_PORT) ?: null);
+ }
+ else
+ {
+ Context::set('object_cache_host', null);
+ Context::set('object_cache_port', null);
+ }
+
// Other settings
Context::set('use_mobile_view', Rhymix\Framework\Config::get('use_mobile_view'));
Context::set('use_rewrite', Rhymix\Framework\Config::get('use_rewrite'));
diff --git a/modules/admin/lang/en.php b/modules/admin/lang/en.php
index 0a746264e..11aa984a3 100644
--- a/modules/admin/lang/en.php
+++ b/modules/admin/lang/en.php
@@ -86,6 +86,11 @@ $lang->about_minify_scripts = 'Automatically minify all CSS and JS scripts in th
$lang->use_gzip = 'gzip Compression';
$lang->delay_session = 'Delay session start';
$lang->about_delay_session = 'To improve performance when using a caching proxy server such as Varnish, do not issue sessions to visitors until they log in.
Selecting this option may cause view counts and visitor counts to become inaccurate.';
+$lang->use_object_cache = 'Use Object Cache';
+$lang->use_object_cache_do_not_use = 'none';
+$lang->cache_host = 'Host';
+$lang->cache_port = 'Port';
+$lang->msg_cache_handler_not_supported = 'Your server does not support the selected cache method, or Rhymix is unable to use the cache with the given settings.';
$lang->msg_invalid_default_url = 'The default URL is invalid.';
$lang->msg_default_url_ssl_inconsistent = 'In order to use SSL always, the default URL must also begin with https://';
$lang->msg_default_url_http_port_inconsistent = 'In order to change the HTTP port, the default URL must also include the port number.';
diff --git a/modules/admin/lang/ja.php b/modules/admin/lang/ja.php
index e7a686b32..9717c89fd 100644
--- a/modules/admin/lang/ja.php
+++ b/modules/admin/lang/ja.php
@@ -86,6 +86,11 @@ $lang->about_minify_scripts = 'コアとすべてのモジュールに含まれ
$lang->use_gzip = 'gzip 圧縮';
$lang->delay_session = 'セッションの開始を遅延';
$lang->about_delay_session = 'Varnishなどのプロキシキャッシュサーバ使用時のパフォーマンスを向上させるために、ログインしていないユーザーには、認証セッションを付与しません。
このオプションを選択した場合、訪問者数とヒット集計が正確でない場合があります。';
+$lang->use_object_cache = 'オブジェクトキャッシュ';
+$lang->use_object_cache_do_not_use = '使用していない';
+$lang->cache_host = 'ホスト';
+$lang->cache_port = 'ポート';
+$lang->msg_cache_handler_not_supported = '選択したキャッシュ方式をサーバーでサポートされていないか、与えられた情報でキャッシュにアクセスすることができません。';
$lang->msg_invalid_default_url = '基本URLが正しくありません。';
$lang->msg_default_url_ssl_inconsistent = 'SSLを常に使用する場合、基本URLもhttps://で始まる必要があります。';
$lang->msg_default_url_http_port_inconsistent = 'HTTPポートを変更する場合、基本URLも同じポートが含まれている必要があります。';
diff --git a/modules/admin/lang/ko.php b/modules/admin/lang/ko.php
index cc0c838d0..7d7093e5e 100644
--- a/modules/admin/lang/ko.php
+++ b/modules/admin/lang/ko.php
@@ -86,6 +86,11 @@ $lang->about_minify_scripts = '코어와 모든 모듈에 포함된 CSS, JS 파
$lang->use_gzip = 'gzip 압축';
$lang->delay_session = '세션 시작 지연';
$lang->about_delay_session = 'Varnish 등의 프록시 캐싱 서버 사용시 성능 개선을 위해, 로그인하지 않은 사용자에게는 인증 세션을 부여하지 않습니다.
이 옵션을 선택할 경우 방문자 수 및 조회수 집계가 정확하게 이루어지지 않을 수 있습니다.';
+$lang->use_object_cache = '오브젝트 캐시 사용';
+$lang->use_object_cache_do_not_use = '사용하지 않음';
+$lang->cache_host = '호스트';
+$lang->cache_port = '포트';
+$lang->msg_cache_handler_not_supported = '선택하신 캐시 방식을 서버에서 지원하지 않거나, 주어진 정보로 캐시에 접속할 수 없습니다.';
$lang->msg_invalid_default_url = '기본 URL이 올바르지 않습니다.';
$lang->msg_default_url_ssl_inconsistent = 'SSL을 항상 사용하실 경우 기본 URL도 https://로 시작해야 합니다.';
$lang->msg_default_url_http_port_inconsistent = 'HTTP 포트를 변경하실 경우 기본 URL에도 동일한 포트가 포함되어야 합니다.';
diff --git a/modules/admin/tpl/config_advanced.html b/modules/admin/tpl/config_advanced.html
index b33a0b6be..f295d4772 100644
--- a/modules/admin/tpl/config_advanced.html
+++ b/modules/admin/tpl/config_advanced.html
@@ -58,6 +58,19 @@
+