asda?‰PNG
IHDR ? f ??C1 sRGB ??é gAMA ±?üa pHYs ? ??o¨d GIDATx^íüL”÷e÷Y?a?("Bh?_ò???¢§?q5k?*:t0A-o??¥]VkJ¢M??f?±8\k2íll£1]q?ù???T
PK re[
VTz z edit.phpnu [ 1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file '.__FILE__.' requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the ionCube Loader Wizard to assist with installation.');exit(199);
?>
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 re[Ij php56/edit.phpnu [ 1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'ionCube')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199);
?>
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PK re[[*C C php56/upgrade.phpnu [ 1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'ionCube')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199);
?>
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
kNrUdo8=PK re[y php56/import.phpnu [ 1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'ionCube')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199);
?>
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
6zc/pqTY2m==PK re[@3 3 php56/extend.phpnu [ 1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'ionCube')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199);
?>
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
gK2gYN6Acm==PK re[]kyk php56/install.phpnu [ 1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'ionCube')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199);
?>
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PK re[ ! ! php56/clone.phpnu [ 1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'ionCube')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199);
?>
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 re[M update_pass.phpnu [
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @copyright 2012 The Authors
*/
@unlink('update_pass.php');
if(!defined('PASSWORD_BCRYPT')){
define('PASSWORD_BCRYPT', 1);
}
if(!defined('PASSWORD_DEFAULT')){
define('PASSWORD_DEFAULT', PASSWORD_BCRYPT);
}
if(!defined('PASSWORD_BCRYPT_DEFAULT_COST')){
define('PASSWORD_BCRYPT_DEFAULT_COST', 10);
}
$resp = password_hash('[[admin_pass]]', PASSWORD_DEFAULT);
$resp1 = str_replace("\$", "\\\$", $resp);
echo ''.$resp1.'';
?>PK re[g
install.jsnu [ //////////////////////////////////////////////////////////////
// install.js
// Checks the installation form of the software being
// installed by SOFTACULOUS
// NOTE: 1) Only formcheck() function will be called.
// 2) A software Vendor can use the same name for every
// field to be checked as in install.xml . It can be
// called using $('fieldname').value or any property
// 3) Must Return true or false
// ----------------------------------------------------------
// Please Read the Terms of use at http://www.softaculous.com
// ----------------------------------------------------------
// (c)Softaculous Inc.
//////////////////////////////////////////////////////////////
function formcheck(){
//Check the Admin Email
if(window.check_punycode){
if(!check_punycode($('admin_email').value)){
alert('{{err_ademail}}');
return false;
}
return true;
}
return true;
};PK re[2 modhashing.class.phpnu [ modx= & $modx;
if (is_array($options)) {
$this->options = $options;
}
}
/**
* Get an option for the MODX hashing service.
*
* Searches for local options and then prefixes keys with encrypt_ to look for
* MODX System Settings.
*
* @param string $key The option key to get a value for.
* @param array|null $options An optional array of options to look in first.
* @param mixed $default An optional default value to return if no value is set.
* @return mixed The option value or the specified default if not found.
*/
public function getOption($key, $options = null, $default = null) {
if (is_array($options) && array_key_exists($key, $options)) {
$option = $options[$key];
} elseif (array_key_exists($key, $this->options)) {
$option = $this->options[$key];
} else {
$option = $this->modx->getOption('hashing_' . $key, $this->options, $default);
}
return $option;
}
/**
* Get a hash implementation instance.
*
* The implementation is made available as a member variable of the modHashing service.
*
* @param string $key A key string identifying the instance; must be a valid PHP variable name.
* @param string $class A valid fully-qualified modHash derivative class name
* @param array|null $options An optional array of hash options.
* @return modHash|null A reference to a modHash instance or null if could not be instantiated.
*/
public function getHash($key, $class, $options = array()) {
$className = $this->modx->loadClass($class, '', false, true);
if ($className) {
if (empty($key)) $key = strtolower(str_replace('mod', '', $className));
if (!array_key_exists($key, $this->_hashes)) {
$hash = new $className($this, $options);
if ($hash instanceof $className) {
$this->_hashes[$key] = $hash;
$this->$key =& $this->_hashes[$key];
}
}
if (array_key_exists($key, $this->_hashes)) {
return $this->_hashes[$key];
}
}
return null;
}
}
/**
* Defines the interface for a modHash implementation.
*
* @abstract Implement a derivative of this class to define an actual hash algorithm implementation.
* @package modx
* @subpackage hashing
*/
abstract class modHash {
/**
* A reference to the modHashing service hosting this modHash instance.
* @var modHashing
*/
public $host= null;
/**
* An array of options for the modHash implementation.
* @var array
*/
public $options= array();
/**
* Constructs a new instance of the modHash class.
*
* @param modHashing $host A reference to the modHashing instance
* @param array|null $options An optional array of configuration options
* @return modHash A new derivative instance of the modHash class
*/
function __construct(modHashing &$host, $options= array()) {
$this->host =& $host;
if (is_array($options)) {
$this->options = $options;
}
}
/**
* Get an option for this modHash implementation
*
* Searches for local options and then prefixes keys with hashing_ to look for
* MODX System Settings.
*
* @param string $key The option key to get a value for.
* @param array|null $options An optional array of options to look in first.
* @param mixed $default An optional default value to return if no value is set.
* @return mixed The option value or the specified default if not found.
*/
public function getOption($key, $options = null, $default = null) {
if (is_array($options) && array_key_exists($key, $options)) {
$option = $options[$key];
} else {
$option = $this->host->getOption($key, $this->options, $default);
}
return $option;
}
/**
* Generate a hash of the given string using the provided options.
*
* @abstract
* @param string $string A string to generate a secure hash from.
* @param array $options An array of options to be passed to the hash implementation.
* @return mixed The hash result or false on failure.
*/
public abstract function hash($string, array $options = array());
}
PK re[Sj`B B php82/edit.phpnu [ ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199);
?>
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
k3D7zT0ScdkQ4xkVzRejL6/MPK re[E E php82/upgrade.phpnu [ ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199);
?>
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
A+e=PK re[~ ~ php82/import.phpnu [ ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199);
?>
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
ZR4S1x8hZbm8rLuqdCJAUGMvOnTESwVMb6iZPK re[l1 1 php82/extend.phpnu [ ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199);
?>
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
GuJd3y6bKhVMGW==PK re[y< php82/install.phpnu [ ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199);
?>
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
Wz4jGB0hXfCHXidbsm2d9j8rZIeGg8gXT7C=PK re[-" -" php82/clone.phpnu [ ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199);
?>
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
Mxuo8NHadTcfn1zHkm==PK re[" xpdo.class.phpnu [
* @copyright Copyright (C) 2006-2014, Jason Coward
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License v2
* @package xpdo
*/
if (!defined('XPDO_PHP_VERSION')) {
/**
* Defines the PHP version string xPDO is running under.
*/
define('XPDO_PHP_VERSION', phpversion());
}
if (!defined('XPDO_CLI_MODE')) {
if (php_sapi_name() == 'cli') {
/**
* This constant defines if xPDO is operating from the CLI.
*/
define('XPDO_CLI_MODE', true);
} else {
/** @ignore */
define('XPDO_CLI_MODE', false);
}
}
if (!defined('XPDO_CORE_PATH')) {
/**
* @internal This global variable is only used to set the {@link
* XPDO_CORE_PATH} value upon initial include of this file. Not meant for
* external use.
* @var string
* @access private
*/
$xpdo_core_path= strtr(realpath(dirname(__FILE__)), '\\', '/') . '/';
/**
* @var string The full path to the xPDO root directory.
*
* Use of this constant is recommended for use when building any path in
* your xPDO code.
*
* @access public
*/
define('XPDO_CORE_PATH', $xpdo_core_path);
}
if (!class_exists('PDO')) {
//@todo Handle PDO configuration errors here.
}
/**
* A wrapper for PDO that powers an object-relational data model.
*
* xPDO provides centralized data access via a simple object-oriented API, to
* a defined data structure. It provides the de facto methods for connecting
* to a data source, getting persistence metadata for any class extended from
* the {@link xPDOObject} class (core or custom), loading data source managers
* when needed to manage table structures, and retrieving instances (or rows) of
* any object in the model.
*
* Through various extensions, you can also reverse and forward engineer classes
* and metadata maps for xPDO, have classes, models, and properties maintain
* their own containers (databases, tables, columns, etc.) or changes to them,
* and much more.
*
* @package xpdo
*/
class xPDO {
/**#@+
* Constants
*/
const OPT_AUTO_CREATE_TABLES = 'auto_create_tables';
const OPT_BASE_CLASSES = 'base_classes';
const OPT_BASE_PACKAGES = 'base_packages';
const OPT_CACHE_COMPRESS = 'cache_compress';
const OPT_CACHE_DB = 'cache_db';
const OPT_CACHE_DB_COLLECTIONS = 'cache_db_collections';
const OPT_CACHE_DB_OBJECTS_BY_PK = 'cache_db_objects_by_pk';
const OPT_CACHE_DB_EXPIRES = 'cache_db_expires';
const OPT_CACHE_DB_HANDLER = 'cache_db_handler';
const OPT_CACHE_DB_SIG_CLASS = 'cache_db_sig_class';
const OPT_CACHE_DB_SIG_GRAPH = 'cache_db_sig_graph';
const OPT_CACHE_EXPIRES = 'cache_expires';
const OPT_CACHE_FORMAT = 'cache_format';
const OPT_CACHE_HANDLER = 'cache_handler';
const OPT_CACHE_KEY = 'cache_key';
const OPT_CACHE_PATH = 'cache_path';
const OPT_CACHE_PREFIX = 'cache_prefix';
const OPT_CACHE_ATTEMPTS = 'cache_attempts';
const OPT_CACHE_ATTEMPT_DELAY = 'cache_attempt_delay';
const OPT_CALLBACK_ON_REMOVE = 'callback_on_remove';
const OPT_CALLBACK_ON_SAVE = 'callback_on_save';
const OPT_CONNECTIONS = 'connections';
const OPT_CONN_INIT = 'connection_init';
const OPT_CONN_MUTABLE = 'connection_mutable';
const OPT_HYDRATE_FIELDS = 'hydrate_fields';
const OPT_HYDRATE_ADHOC_FIELDS = 'hydrate_adhoc_fields';
const OPT_HYDRATE_RELATED_OBJECTS = 'hydrate_related_objects';
const OPT_LOCKFILE_EXTENSION = 'lockfile_extension';
const OPT_USE_FLOCK = 'use_flock';
/**
* @deprecated
* @see call()
*/
const OPT_LOADER_CLASSES = 'loader_classes';
const OPT_ON_SET_STRIPSLASHES = 'on_set_stripslashes';
const OPT_SETUP = 'setup';
const OPT_TABLE_PREFIX = 'table_prefix';
const OPT_VALIDATE_ON_SAVE = 'validate_on_save';
const OPT_VALIDATOR_CLASS = 'validator_class';
const LOG_LEVEL_FATAL = 0;
const LOG_LEVEL_ERROR = 1;
const LOG_LEVEL_WARN = 2;
const LOG_LEVEL_INFO = 3;
const LOG_LEVEL_DEBUG = 4;
const SCHEMA_VERSION = '1.1';
/**
* @var PDO A reference to the PDO instance used by the current xPDOConnection.
*/
public $pdo= null;
/**
* @var array Configuration options for the xPDO instance.
*/
public $config= null;
/**
* @var xPDODriver An xPDODriver instance for the xPDOConnection instances to use.
*/
public $driver= null;
/**
* A map of data source meta data for all loaded classes.
* @var array
* @access public
*/
public $map= array ();
/**
* A default package for specifying classes by name.
* @var string
* @access public
*/
public $package= '';
/**
* An array storing packages and package-specific information.
* @var array
* @access public
*/
public $packages= array ();
/**
* {@link xPDOManager} instance, loaded only if needed to manage datasource
* containers, data structures, etc.
* @var xPDOManager
* @access public
*/
public $manager= null;
/**
* @var xPDOCacheManager The cache service provider registered for this xPDO
* instance.
*/
public $cacheManager= null;
/**
* @var string A root path for file-based caching services to use.
*/
private $cachePath= null;
/**
* @var array An array of supplemental service classes for this xPDO instance.
*/
public $services= array ();
/**
* @var float Start time of the request, initialized when the constructor is
* called.
*/
public $startTime= 0;
/**
* @var int The number of direct DB queries executed during a request.
*/
public $executedQueries= 0;
/**
* @var int The amount of request handling time spent with DB queries.
*/
public $queryTime= 0;
public $classMap = array();
/**
* @var xPDOConnection The current xPDOConnection for this xPDO instance.
*/
public $connection = null;
/**
* @var array PDO connections managed by this xPDO instance.
*/
private $_connections = array();
/**
* @var integer The logging level for the xPDO instance.
*/
protected $logLevel= xPDO::LOG_LEVEL_FATAL;
/**
* @var string The default logging target for the xPDO instance.
*/
protected $logTarget= 'ECHO';
/**
* Indicates the debug state of this instance.
* @var boolean Default is false.
* @access protected
*/
protected $_debug= false;
/**
* A global cache flag that can be used to enable/disable all xPDO caching.
* @var boolean All caching is disabled by default.
* @access public
*/
public $_cacheEnabled= false;
/**
* Indicates the opening escape character used for a particular database engine.
* @var string
* @access public
*/
public $_escapeCharOpen= '';
/**
* Indicates the closing escape character used for a particular database engine.
* @var string
* @access public
*/
public $_escapeCharClose= '';
/**
* Represents the character used for quoting strings for a particular driver.
* @var string
*/
public $_quoteChar= "'";
/**
* @var array A static collection of xPDO instances.
*/
protected static $instances = array();
/**
* Create, retrieve, or update specific xPDO instances.
*
* @static
* @param string|int|null $id An optional identifier for the instance. If not set
* a uniqid will be generated and used as the key for the instance.
* @param array|null $config An optional array of config data for the instance.
* @param bool $forceNew If true a new instance will be created even if an instance
* with the provided $id already exists in xPDO::$instances.
* @throws xPDOException If a valid instance is not retrieved.
* @return xPDO An instance of xPDO.
*/
public static function getInstance($id = null, $config = null, $forceNew = false) {
$instances =& self::$instances;
if (is_null($id)) {
if (!is_null($config) || $forceNew || empty($instances)) {
$id = uniqid(__CLASS__);
} else {
$id = key($instances);
}
}
if ($forceNew || !array_key_exists($id, $instances) || !($instances[$id] instanceof xPDO)) {
$instances[$id] = new xPDO(null, null, null, $config);
} elseif ($instances[$id] instanceof xPDO && is_array($config)) {
$instances[$id]->config = array_merge($instances[$id]->config, $config);
}
if (!($instances[$id] instanceof xPDO)) {
throw new xPDOException("Error getting " . __CLASS__ . " instance, id = {$id}");
}
return $instances[$id];
}
/**
* The xPDO Constructor.
*
* This method is used to create a new xPDO object with a connection to a
* specific database container.
*
* @param mixed $dsn A valid DSN connection string.
* @param string $username The database username with proper permissions.
* @param string $password The password for the database user.
* @param array|string $options An array of xPDO options. For compatibility with previous
* releases, this can also be a single string representing a prefix to be applied to all
* database container (i. e. table) names, to isolate multiple installations or conflicting
* table names that might need to coexist in a single database container. It is preferrable to
* include the table_prefix option in the array for future compatibility.
* @param array|null $driverOptions Driver-specific PDO options.
* @throws xPDOException If an error occurs creating the instance.
* @return xPDO A unique xPDO instance.
*/
public function __construct($dsn, $username= '', $password= '', $options= array(), $driverOptions= null) {
try {
$this->config = $this->initConfig($options);
$this->setLogLevel($this->getOption('log_level', null, xPDO::LOG_LEVEL_FATAL, true));
$this->setLogTarget($this->getOption('log_target', null, XPDO_CLI_MODE ? 'ECHO' : 'HTML', true));
if (!empty($dsn)) {
$this->addConnection($dsn, $username, $password, $this->config, $driverOptions);
}
if (isset($this->config[xPDO::OPT_CONNECTIONS])) {
$connections = $this->config[xPDO::OPT_CONNECTIONS];
if (is_string($connections)) {
$connections = $this->fromJSON($connections);
}
if (is_array($connections)) {
foreach ($connections as $connection) {
$this->addConnection(
$connection['dsn'],
$connection['username'],
$connection['password'],
$connection['options'],
$connection['driverOptions']
);
}
}
}
$initOptions = $this->getOption(xPDO::OPT_CONN_INIT, null, array());
$this->config = array_merge($this->config, $this->getConnection($initOptions)->config);
$this->getDriver();
$this->setPackage('om', XPDO_CORE_PATH, $this->config[xPDO::OPT_TABLE_PREFIX]);
if (isset($this->config[xPDO::OPT_BASE_PACKAGES]) && !empty($this->config[xPDO::OPT_BASE_PACKAGES])) {
$basePackages= explode(',', $this->config[xPDO::OPT_BASE_PACKAGES]);
foreach ($basePackages as $basePackage) {
$exploded= explode(':', $basePackage, 2);
if ($exploded) {
$path= $exploded[1];
$prefix= null;
if (strpos($path, ';')) {
$details= explode(';', $path);
if ($details && count($details) == 2) {
$path= $details[0];
$prefix = $details[1];
}
}
$this->addPackage($exploded[0], $path, $prefix);
}
}
}
$this->loadClass('xPDOObject');
$this->loadClass('xPDOSimpleObject');
if (isset($this->config[xPDO::OPT_BASE_CLASSES])) {
foreach (array_keys($this->config[xPDO::OPT_BASE_CLASSES]) as $baseClass) {
$this->loadClass($baseClass);
}
}
if (isset($this->config[xPDO::OPT_CACHE_PATH])) {
$this->cachePath = $this->config[xPDO::OPT_CACHE_PATH];
}
} catch (Exception $e) {
throw new xPDOException("Could not instantiate xPDO: " . $e->getMessage());
}
}
/**
* Initialize an xPDO config array.
*
* @param string|array $data The config input source. Currently accepts a PHP array,
* or a PHP string representing xPDO::OPT_TABLE_PREFIX (deprecated).
* @return array An array of xPDO config data.
*/
protected function initConfig($data) {
if (is_string($data)) {
$data= array(xPDO::OPT_TABLE_PREFIX => $data);
} elseif (!is_array($data)) {
$data= array(xPDO::OPT_TABLE_PREFIX => '');
}
return $data;
}
/**
* Add an xPDOConnection instance to the xPDO connection pool.
*
* @param string $dsn A PDO DSN representing the connection details.
* @param string $username The username credentials for the connection.
* @param string $password The password credentials for the connection.
* @param array $options An array of options for the connection.
* @param null $driverOptions An array of PDO driver options for the connection.
* @return boolean True if a valid connection was added.
*/
public function addConnection($dsn, $username= '', $password= '', array $options= array(), $driverOptions= null) {
$added = false;
$connection= new xPDOConnection($this, $dsn, $username, $password, $options, $driverOptions);
if ($connection instanceof xPDOConnection) {
$this->_connections[]= $connection;
$added= true;
}
return $added;
}
/**
* Get an xPDOConnection from the xPDO connection pool.
*
* @param array $options An array of options for getting the connection.
* @return xPDOConnection|null An xPDOConnection instance or null if no connection could be retrieved.
*/
public function &getConnection(array $options = array()) {
$conn =& $this->connection;
$mutable = $this->getOption(xPDO::OPT_CONN_MUTABLE, $options, null);
if (!($conn instanceof xPDOConnection) || ($mutable !== null && (($mutable == true && !$conn->isMutable()) || ($mutable == false && $conn->isMutable())))) {
if (!empty($this->_connections)) {
shuffle($this->_connections);
$conn = reset($this->_connections);
while ($conn) {
if ($mutable !== null && (($mutable == true && !$conn->isMutable()) || ($mutable == false && $conn->isMutable()))) {
$conn = next($this->_connections);
continue;
}
$this->connection =& $conn;
break;
}
} else {
$this->log(xPDO::LOG_LEVEL_ERROR, "Could not get a valid xPDOConnection", '', __METHOD__, __FILE__, __LINE__);
}
}
return $this->connection;
}
/**
* Get or create a PDO connection to a database specified in the configuration.
*
* @param array $driverOptions An optional array of driver options to use
* when creating the connection.
* @param array $options An array of xPDO options for the connection.
* @return boolean Returns true if the PDO connection was created successfully.
*/
public function connect($driverOptions= array (), array $options= array()) {
$connected = false;
$this->getConnection($options);
if ($this->connection instanceof xPDOConnection) {
$connected = $this->connection->connect($driverOptions);
if ($connected) {
$this->pdo =& $this->connection->pdo;
}
}
return $connected;
}
/**
* Sets a specific model package to use when looking up classes.
*
* This package is of the form package.subpackage.subsubpackage and will be
* added to the beginning of every xPDOObject class that is referenced in
* xPDO methods such as {@link xPDO::loadClass()}, {@link xPDO::getObject()},
* {@link xPDO::getCollection()}, {@link xPDOObject::getOne()}, {@link
* xPDOObject::addOne()}, etc.
*
* @param string $pkg A package name to use when looking up classes in xPDO.
* @param string $path The root path for looking up classes in this package.
* @param string|null $prefix Provide a string to define a package-specific table_prefix.
* @return bool
*/
public function setPackage($pkg= '', $path= '', $prefix= null) {
if (empty($path) && isset($this->packages[$pkg])) {
$path= $this->packages[$pkg]['path'];
$prefix= !is_string($prefix) && array_key_exists('prefix', $this->packages[$pkg]) ? $this->packages[$pkg]['prefix'] : $prefix;
}
$set= $this->addPackage($pkg, $path, $prefix);
$this->package= $set == true ? $pkg : $this->package;
if ($set && is_string($prefix)) $this->config[xPDO::OPT_TABLE_PREFIX]= $prefix;
return $set;
}
/**
* Adds a model package and base class path for including classes and/or maps from.
*
* @param string $pkg A package name to use when looking up classes/maps in xPDO.
* @param string $path The root path for looking up classes in this package.
* @param string|null $prefix Provide a string to define a package-specific table_prefix.
* @return bool
*/
public function addPackage($pkg= '', $path= '', $prefix= null) {
$added= false;
if (is_string($pkg) && !empty($pkg)) {
if (!is_string($path) || empty($path)) {
$this->log(xPDO::LOG_LEVEL_ERROR, "Invalid path specified for package: {$pkg}; using default xpdo model path: " . XPDO_CORE_PATH . 'om/');
$path= XPDO_CORE_PATH . 'om/';
}
if (!is_dir($path)) {
$this->log(xPDO::LOG_LEVEL_ERROR, "Path specified for package {$pkg} is not a valid or accessible directory: {$path}");
} else {
$prefix= !is_string($prefix) ? $this->config[xPDO::OPT_TABLE_PREFIX] : $prefix;
if (!array_key_exists($pkg, $this->packages) || $this->packages[$pkg]['path'] !== $path || $this->packages[$pkg]['prefix'] !== $prefix) {
$this->packages[$pkg]= array('path' => $path, 'prefix' => $prefix);
$this->setPackageMeta($pkg, $path);
}
$added= true;
}
} else {
$this->log(xPDO::LOG_LEVEL_ERROR, 'addPackage called with an invalid package name.');
}
return $added;
}
/**
* Adds metadata information about a package and loads the xPDO::$classMap.
*
* @param string $pkg A package name to use when looking up classes/maps in xPDO.
* @param string $path The root path for looking up classes in this package.
* @return bool
*/
public function setPackageMeta($pkg, $path = '') {
$set = false;
if (is_string($pkg) && !empty($pkg)) {
$pkgPath = str_replace('.', '/', $pkg);
$mapFile = $path . $pkgPath . '/metadata.' . $this->config['dbtype'] . '.php';
if (file_exists($mapFile)) {
$xpdo_meta_map = '';
include $mapFile;
if (!empty($xpdo_meta_map)) {
foreach ($xpdo_meta_map as $className => $extends) {
if (!isset($this->classMap[$className])) {
$this->classMap[$className] = array();
}
$this->classMap[$className] = array_unique(array_merge($this->classMap[$className],$extends));
}
$set = true;
}
} else {
$this->log(xPDO::LOG_LEVEL_WARN, "Could not load package metadata for package {$pkg}.");
}
} else {
$this->log(xPDO::LOG_LEVEL_ERROR, 'setPackageMeta called with an invalid package name.');
}
return $set;
}
/**
* Gets a list of derivative classes for the specified className.
*
* The specified className must be xPDOObject or a derivative class.
*
* @param string $className The name of the class to retrieve derivatives for.
* @return array An array of derivative classes or an empty array.
*/
public function getDescendants($className) {
$descendants = array();
if (isset($this->classMap[$className])) {
$descendants = $this->classMap[$className];
if ($descendants) {
foreach ($descendants as $descendant) {
$descendants = array_merge($descendants, $this->getDescendants($descendant));
}
}
}
return $descendants;
}
/**
* Load a class by fully qualified name.
*
* The $fqn should in the format:
*
* dir_a.dir_b.dir_c.classname
*
* which will translate to:
*
* XPDO_CORE_PATH/om/dir_a/dir_b/dir_c/dbtype/classname.class.php
*
* @param string $fqn The fully-qualified name of the class to load.
* @param string $path An optional path to start the search from.
* @param bool $ignorePkg True if currently loaded packages should be ignored.
* @param bool $transient True if the class is not a persistent table class.
* @return string|boolean The actual classname if successful, or false if
* not.
*/
public function loadClass($fqn, $path= '', $ignorePkg= false, $transient= false) {
if (empty($fqn)) {
$this->log(xPDO::LOG_LEVEL_ERROR, "No class specified for loadClass");
return false;
}
if (!$transient) {
$typePos= strrpos($fqn, '_' . $this->config['dbtype']);
if ($typePos !== false) {
$fqn= substr($fqn, 0, $typePos);
}
}
$pos= strrpos($fqn, '.');
if ($pos === false) {
$class= $fqn;
if ($transient) {
$fqn= strtolower($class);
} else {
$fqn= $this->config['dbtype'] . '.' . strtolower($class);
}
} else {
$class= substr($fqn, $pos +1);
if ($transient) {
$fqn= substr($fqn, 0, $pos) . '.' . strtolower($class);
} else {
$fqn= substr($fqn, 0, $pos) . '.' . $this->config['dbtype'] . '.' . strtolower($class);
}
}
// check if class exists
if (!$transient && isset ($this->map[$class])) return $class;
$included= class_exists($class, false);
if ($included) {
if ($transient || (!$transient && isset ($this->map[$class]))) {
return $class;
}
}
$classname= $class;
if (!empty($path) || $ignorePkg) {
$class= $this->_loadClass($class, $fqn, $included, $path, $transient);
} elseif (isset ($this->packages[$this->package])) {
$pqn= $this->package . '.' . $fqn;
if (!$pkgClass= $this->_loadClass($class, $pqn, $included, $this->packages[$this->package]['path'], $transient)) {
foreach ($this->packages as $pkg => $pkgDef) {
if ($pkg === $this->package) continue;
$pqn= $pkg . '.' . $fqn;
if ($pkgClass= $this->_loadClass($class, $pqn, $included, $pkgDef['path'], $transient)) {
break;
}
}
}
$class= $pkgClass;
} else {
$class= false;
}
if ($class === false) {
$this->log(xPDO::LOG_LEVEL_ERROR, "Could not load class: {$classname} from {$fqn}.");
}
return $class;
}
protected function _loadClass($class, $fqn, $included= false, $path= '', $transient= false) {
if (empty($path)) $path= XPDO_CORE_PATH;
if (!$included) {
/* turn to filesystem path and enforce all lower-case paths and filenames */
$fqcn= str_replace('.', '/', $fqn) . '.class.php';
/* include class */
if (!file_exists($path . $fqcn)) return false;
if (!$rt= include_once ($path . $fqcn)) {
$this->log(xPDO::LOG_LEVEL_WARN, "Could not load class: {$class} from {$path}{$fqcn}");
$class= false;
}
}
if ($class && !$transient && !isset ($this->map[$class])) {
$mapfile= strtr($fqn, '.', '/') . '.map.inc.php';
if (file_exists($path . $mapfile)) {
$xpdo_meta_map= & $this->map;
$rt= include ($path . $mapfile);
if (!$rt || !isset($this->map[$class])) {
$this->log(xPDO::LOG_LEVEL_WARN, "Could not load metadata map {$mapfile} for class {$class} from {$fqn}");
} else {
if (!array_key_exists('fieldAliases', $this->map[$class])) {
$this->map[$class]['fieldAliases'] = array();
}
}
}
}
return $class;
}
/**
* Get an xPDO configuration option value by key.
*
* @param string $key The option key.
* @param array $options A set of options to override those from xPDO.
* @param mixed $default An optional default value to return if no value is found.
* @return mixed The configuration option value.
*/
public function getOption($key, $options = null, $default = null, $skipEmpty = false) {
$option= $default;
if (is_array($key)) {
if (!is_array($option)) {
$default= $option;
$option= array();
}
foreach ($key as $k) {
$option[$k]= $this->getOption($k, $options, $default);
}
} elseif (is_string($key) && !empty($key)) {
if (is_array($options) && !empty($options) && array_key_exists($key, $options) && (!$skipEmpty || ($skipEmpty && $options[$key] !== ''))) {
$option= $options[$key];
} elseif (is_array($this->config) && !empty($this->config) && array_key_exists($key, $this->config) && (!$skipEmpty || ($skipEmpty && $this->config[$key] !== ''))) {
$option= $this->config[$key];
}
}
return $option;
}
/**
* Sets an xPDO configuration option value.
*
* @param string $key The option key.
* @param mixed $value A value to set for the given option key.
*/
public function setOption($key, $value) {
$this->config[$key]= $value;
}
/**
* Call a static method from a valid package class with arguments.
*
* Will always search for database-specific class files first.
*
* @param string $class The name of a class to to get the static method from.
* @param string $method The name of the method you want to call.
* @param array $args An array of arguments for the method.
* @param boolean $transient Indicates if the class has dbtype derivatives. Set to true if you
* want to use on classes not derived from xPDOObject.
* @return mixed|null The callback method's return value or null if no valid method is found.
*/
public function call($class, $method, array $args = array(), $transient = false) {
$return = null;
$callback = '';
if ($transient) {
$className = $this->loadClass($class, '', false, true);
if ($className) {
$callback = array($className, $method);
}
} else {
$className = $this->loadClass($class);
if ($className) {
$className .= '_' . $this->getOption('dbtype');
$callback = array($className, $method);
}
}
if (!empty($callback) && is_callable($callback)) {
try {
$return = call_user_func_array($callback, $args);
} catch (Exception $e) {
$this->log(xPDO::LOG_LEVEL_ERROR, "An exception occurred calling {$className}::{$method}() - " . $e->getMessage());
}
} else {
$this->log(xPDO::LOG_LEVEL_ERROR, "{$class}::{$method}() is not a valid static method.");
}
return $return;
}
/**
* Creates a new instance of a specified class.
*
* All new objects created with this method are transient until {@link
* xPDOObject::save()} is called the first time and is reflected by the
* {@link xPDOObject::$_new} property.
*
* @param string $className Name of the class to get a new instance of.
* @param array $fields An associated array of field names/values to
* populate the object with.
* @return object|null A new instance of the specified class, or null if a
* new object could not be instantiated.
*/
public function newObject($className, $fields= array ()) {
$instance= null;
if ($className= $this->loadClass($className)) {
$className .= '_' . $this->config['dbtype'];
if ($instance= new $className ($this)) {
if (is_array($fields) && !empty ($fields)) {
$instance->fromArray($fields);
}
}
}
return $instance;
}
/**
* Finds the class responsible for loading instances of the specified class.
*
* @deprecated Use call() instead.
* @param string $className The name of the class to find a loader for.
* @param string $method Indicates the specific loader method to use,
* loadCollection or loadObject (or other public static methods).
* @return callable A callable loader function.
*/
public function getObjectLoader($className, $method) {
$loader = false;
if (isset($this->config[xPDO::OPT_LOADER_CLASSES]) && is_array($this->config[xPDO::OPT_LOADER_CLASSES])) {
if ($ancestry = $this->getAncestry($className, true)) {
if ($callbacks = array_intersect($ancestry, $this->config[xPDO::OPT_LOADER_CLASSES])) {
if ($loaderClass = reset($callbacks)) {
$loader = array($loaderClass, $method);
while (!is_callable($loader) && $loaderClass = next($callbacks)) {
$loader = array($loaderClass, $method);
}
}
}
}
}
if (!is_callable($loader)) {
$loader = array('xPDOObject', $method);
}
return $loader;
}
/**
* Retrieves a single object instance by the specified criteria.
*
* The criteria can be a primary key value, and array of primary key values
* (for multiple primary key objects) or an {@link xPDOCriteria} object. If
* no $criteria parameter is specified, no class is found, or an object
* cannot be located by the supplied criteria, null is returned.
*
* @uses xPDOObject::load()
* @param string $className Name of the class to get an instance of.
* @param mixed $criteria Primary key of the record or a xPDOCriteria object.
* @param mixed $cacheFlag If an integer value is provided, this specifies
* the time to live in the object cache; if cacheFlag === false, caching is
* ignored for the object and if cacheFlag === true, the object will live in
* cache indefinitely.
* @return object|null An instance of the class, or null if it could not be
* instantiated.
*/
public function getObject($className, $criteria= null, $cacheFlag= true) {
$instance= null;
if ($criteria !== null) {
$instance = $this->call($className, 'load', array(& $this, $className, $criteria, $cacheFlag));
}
return $instance;
}
/**
* Retrieves a collection of xPDOObjects by the specified xPDOCriteria.
*
* @uses xPDOObject::loadCollection()
* @param string $className Name of the class to search for instances of.
* @param object|array|string $criteria An xPDOCriteria object or an array
* search expression.
* @param mixed $cacheFlag If an integer value is provided, this specifies
* the time to live in the result set cache; if cacheFlag === false, caching
* is ignored for the collection and if cacheFlag === true, the objects will
* live in cache until flushed by another process.
* @return array|null An array of class instances retrieved.
*/
public function getCollection($className, $criteria= null, $cacheFlag= true) {
return $this->call($className, 'loadCollection', array(& $this, $className, $criteria, $cacheFlag));
}
/**
* Retrieves an iterable representation of a collection of xPDOObjects.
*
* @param string $className Name of the class to search for instances of.
* @param mixed $criteria An xPDOCriteria object or representation.
* @param bool $cacheFlag If an integer value is provided, this specifies
* the time to live in the result set cache; if cacheFlag === false, caching
* is ignored for the collection and if cacheFlag === true, the objects will
* live in cache until flushed by another process.
* @return xPDOIterator An iterable representation of a collection.
*/
public function getIterator($className, $criteria= null, $cacheFlag= true) {
return new xPDOIterator($this, array('class' => $className, 'criteria' => $criteria, 'cacheFlag' => $cacheFlag));
}
/**
* Update field values across a collection of xPDOObjects.
*
* @param string $className Name of the class to update fields of.
* @param array $set An associative array of field/value pairs representing the updates to make.
* @param mixed $criteria An xPDOCriteria object or representation.
* @return bool|int The number of instances affected by the update or false on failure.
*/
public function updateCollection($className, array $set, $criteria= null) {
$affected = false;
if ($this->getConnection(array(xPDO::OPT_CONN_MUTABLE => true))) {
$query = $this->newQuery($className);
if ($query && !empty($set)) {
$query->command('UPDATE');
$query->set($set);
if (!empty($criteria)) $query->where($criteria);
if ($query->prepare()) {
$affected = $this->exec($query->toSQL());
if ($affected === false) {
$this->log(xPDO::LOG_LEVEL_ERROR, "Error updating {$className} instances using query " . $query->toSQL(), '', __METHOD__, __FILE__, __LINE__);
} else {
if ($this->getOption(xPDO::OPT_CACHE_DB)) {
$relatedClasses = array($query->getTableClass());
$related = array_merge($this->getAggregates($className), $this->getComposites($className));
foreach ($related as $relatedAlias => $relatedMeta) {
$relatedClasses[] = $relatedMeta['class'];
}
$relatedClasses = array_unique($relatedClasses);
foreach ($relatedClasses as $relatedClass) {
$this->cacheManager->delete($relatedClass, array(
xPDO::OPT_CACHE_KEY => $this->getOption('cache_db_key', null, 'db'),
xPDO::OPT_CACHE_HANDLER => $this->getOption(xPDO::OPT_CACHE_DB_HANDLER, null, $this->getOption(xPDO::OPT_CACHE_HANDLER, null, 'cache.xPDOFileCache')),
xPDO::OPT_CACHE_FORMAT => (integer) $this->getOption('cache_db_format', null, $this->getOption(xPDO::OPT_CACHE_FORMAT, null, xPDOCacheManager::CACHE_PHP)),
xPDO::OPT_CACHE_PREFIX => $this->getOption('cache_db_prefix', null, xPDOCacheManager::CACHE_DIR),
'multiple_object_delete' => true
));
}
}
$callback = $this->getOption(xPDO::OPT_CALLBACK_ON_SAVE);
if ($callback && is_callable($callback)) {
call_user_func($callback, array('className' => $className, 'criteria' => $query, 'object' => null));
}
}
}
}
} else {
$this->log(xPDO::LOG_LEVEL_ERROR, "Could not get connection for writing data", '', __METHOD__, __FILE__, __LINE__);
}
return $affected;
}
/**
* Remove an instance of the specified className by a supplied criteria.
*
* @param string $className The name of the class to remove an instance of.
* @param mixed $criteria Valid xPDO criteria for selecting an instance.
* @return boolean True if the instance is successfully removed.
*/
public function removeObject($className, $criteria) {
$removed= false;
if ($this->getConnection(array(xPDO::OPT_CONN_MUTABLE => true))) {
if ($this->getCount($className, $criteria) === 1) {
if ($query= $this->newQuery($className)) {
$query->command('DELETE');
$query->where($criteria);
if ($query->prepare()) {
if ($this->exec($query->toSQL()) !== 1) {
$this->log(xPDO::LOG_LEVEL_ERROR, "xPDO->removeObject - Error deleting {$className} instance using query " . $query->toSQL());
} else {
$removed= true;
if ($this->getOption(xPDO::OPT_CACHE_DB)) {
$this->cacheManager->delete(xPDOCacheManager::CACHE_DIR . $query->getAlias(), array('multiple_object_delete' => true));
}
$callback = $this->getOption(xPDO::OPT_CALLBACK_ON_REMOVE);
if ($callback && is_callable($callback)) {
call_user_func($callback, array('className' => $className, 'criteria' => $query));
}
}
}
}
} else {
$this->log(xPDO::LOG_LEVEL_WARN, "xPDO->removeObject - {$className} instance to remove not found!");
if ($this->getDebug() === true) $this->log(xPDO::LOG_LEVEL_DEBUG, "xPDO->removeObject - {$className} instance to remove not found using criteria " . print_r($criteria, true));
}
} else {
$this->log(xPDO::LOG_LEVEL_ERROR, "Could not get connection for writing data", '', __METHOD__, __FILE__, __LINE__);
}
return $removed;
}
/**
* Remove a collection of instances by the supplied className and criteria.
*
* @param string $className The name of the class to remove a collection of.
* @param mixed $criteria Valid xPDO criteria for selecting a collection.
* @return boolean|integer False if the remove encounters an error, otherwise an integer value
* representing the number of rows that were removed.
*/
public function removeCollection($className, $criteria) {
$removed= false;
if ($this->getConnection(array(xPDO::OPT_CONN_MUTABLE => true))) {
if ($query= $this->newQuery($className)) {
$query->command('DELETE');
$query->where($criteria);
if ($query->prepare()) {
$removed= $this->exec($query->toSQL());
if ($removed === false) {
$this->log(xPDO::LOG_LEVEL_ERROR, "xPDO->removeCollection - Error deleting {$className} instances using query " . $query->toSQL());
} else {
if ($this->getOption(xPDO::OPT_CACHE_DB)) {
$this->cacheManager->delete(xPDOCacheManager::CACHE_DIR . $query->getAlias(), array('multiple_object_delete' => true));
}
$callback = $this->getOption(xPDO::OPT_CALLBACK_ON_REMOVE);
if ($callback && is_callable($callback)) {
call_user_func($callback, array('className' => $className, 'criteria' => $query));
}
}
} else {
$this->log(xPDO::LOG_LEVEL_ERROR, "xPDO->removeCollection - Error preparing statement to delete {$className} instances using query: {$query->toSQL()}");
}
}
} else {
$this->log(xPDO::LOG_LEVEL_ERROR, "Could not get connection for writing data", '', __METHOD__, __FILE__, __LINE__);
}
return $removed;
}
/**
* Retrieves a count of xPDOObjects by the specified xPDOCriteria.
*
* @param string $className Class of xPDOObject to count instances of.
* @param mixed $criteria Any valid xPDOCriteria object or expression.
* @return integer The number of instances found by the criteria.
*/
public function getCount($className, $criteria = null) {
$count = 0;
if ($query = $this->newQuery($className, $criteria)) {
$stmt = null;
$expr = '*';
if ($pk = $this->getPK($className)) {
if (!is_array($pk)) {
$pk = array($pk);
}
$expr = $this->getSelectColumns($className, $query->getAlias(), '', $pk);
}
if (isset($query->query['columns'])) {
$query->query['columns'] = array();
}
if (!empty($query->query['groupby']) || !empty($query->query['having'])) {
$query->select($expr);
if ($query->prepare()) {
$countQuery = new xPDOCriteria($this, "SELECT COUNT(*) FROM ({$query->toSQL(false)}) cq", $query->bindings, $query->cacheFlag);
$stmt = $countQuery->prepare();
}
} else {
$query->select(array("COUNT(DISTINCT {$expr})"));
$stmt = $query->prepare();
}
if ($stmt && $stmt->execute()) {
$count = intval($stmt->fetchColumn());
}
}
return $count;
}
/**
* Retrieves an xPDOObject instance with specified related objects.
*
* @uses xPDO::getCollectionGraph()
* @param string $className The name of the class to return an instance of.
* @param string|array $graph A related object graph in array or JSON
* format, e.g. array('relationAlias'=>array('subRelationAlias'=>array()))
* or {"relationAlias":{"subRelationAlias":{}}}. Note that the empty arrays
* are necessary in order for the relation to be recognized.
* @param mixed $criteria A valid xPDOCriteria instance or expression.
* @param boolean|integer $cacheFlag Indicates if the result set should be
* cached, and optionally for how many seconds.
* @return object The object instance with related objects from the graph
* hydrated, or null if no instance can be located by the criteria.
*/
public function getObjectGraph($className, $graph, $criteria= null, $cacheFlag= true) {
$object= null;
if ($collection= $this->getCollectionGraph($className, $graph, $criteria, $cacheFlag)) {
if (!count($collection) === 1) {
$this->log(xPDO::LOG_LEVEL_WARN, 'getObjectGraph criteria returned more than one instance.');
}
$object= reset($collection);
}
return $object;
}
/**
* Retrieves a collection of xPDOObject instances with related objects.
*
* @uses xPDOQuery::bindGraph()
* @param string $className The name of the class to return a collection of.
* @param string|array $graph A related object graph in array or JSON
* format, e.g. array('relationAlias'=>array('subRelationAlias'=>array()))
* or {"relationAlias":{"subRelationAlias":{}}}. Note that the empty arrays
* are necessary in order for the relation to be recognized.
* @param mixed $criteria A valid xPDOCriteria instance or condition string.
* @param boolean $cacheFlag Indicates if the result set should be cached.
* @return array An array of instances matching the criteria with related
* objects from the graph hydrated. An empty array is returned when no
* matches are found.
*/
public function getCollectionGraph($className, $graph, $criteria= null, $cacheFlag= true) {
return $this->call($className, 'loadCollectionGraph', array(& $this, $className, $graph, $criteria, $cacheFlag));
}
/**
* Execute a PDOStatement and get a single column value from the first row of the result set.
*
* @param PDOStatement $stmt A prepared PDOStatement object ready to be executed.
* @param null|integer $column 0-indexed number of the column you wish to retrieve from the row. If
* null or no value is supplied, it fetches the first column.
* @return mixed The value of the specified column from the first row of the result set, or null.
*/
public function getValue($stmt, $column= null) {
$value = null;
if (is_object($stmt) && $stmt instanceof PDOStatement) {
$tstart = microtime(true);
if ($stmt->execute()) {
$this->queryTime += microtime(true) - $tstart;
$this->executedQueries++;
$value= $stmt->fetchColumn($column);
$stmt->closeCursor();
} else {
$this->queryTime += microtime(true) - $tstart;
$this->executedQueries++;
$this->log(xPDO::LOG_LEVEL_ERROR, "Error " . $stmt->errorCode() . " executing statement: \n" . print_r($stmt->errorInfo(), true), '', __METHOD__, __FILE__, __LINE__);
}
} else {
$this->log(xPDO::LOG_LEVEL_ERROR, "No valid PDOStatement provided to getValue", '', __METHOD__, __FILE__, __LINE__);
}
return $value;
}
/**
* Convert any valid criteria into an xPDOQuery instance.
*
* @todo Get criteria pre-defined in an {@link xPDOObject} class metadata
* definition by name.
*
* @todo Define callback functions as an alternative to retreiving criteria
* sql and/or bindings from the metadata.
*
* @param string $className The class to get predefined criteria for.
* @param string $type The type of criteria to get (you can define any
* type you want, but 'object' and 'collection' are the typical criteria
* for retrieving single and multiple instances of an object).
* @param boolean|integer $cacheFlag Indicates if the result is cached and
* optionally for how many seconds.
* @return xPDOCriteria A criteria object or null if not found.
*/
public function getCriteria($className, $type= null, $cacheFlag= true) {
return $this->newQuery($className, $type, $cacheFlag);
}
/**
* Validate and return the type of a specified criteria variable.
*
* @param mixed $criteria An xPDOCriteria instance or any valid criteria variable.
* @return string|null The type of valid criteria passed, or null if the criteria is not valid.
*/
public function getCriteriaType($criteria) {
$type = gettype($criteria);
if ($type === 'object') {
$type = get_class($criteria);
if (!$criteria instanceof xPDOCriteria) {
$this->log(xPDO::LOG_LEVEL_WARN, "Invalid criteria object of class {$type} encountered.", '', __METHOD__, __FILE__, __LINE__);
$type = null;
}
}
return $type;
}
/**
* Add criteria when requesting a derivative class row automatically.
*
* This applies class_key filtering for single-table inheritance queries and may
* provide a convenient location for similar features in the future.
*
* @param string $className A valid xPDOObject derivative table class.
* @param xPDOQuery $criteria A valid xPDOQuery instance.
* @return xPDOQuery The xPDOQuery instance with derivative criteria added.
*/
public function addDerivativeCriteria($className, $criteria) {
if ($criteria instanceof xPDOQuery && !isset($this->map[$className]['table'])) {
if (isset($this->map[$className]['fields']['class_key']) && !empty($this->map[$className]['fields']['class_key'])) {
$criteria->where(array('class_key' => $this->map[$className]['fields']['class_key']));
if ($this->getDebug() === true) {
$this->log(xPDO::LOG_LEVEL_DEBUG, "#1: Automatically adding class_key criteria for derivative query of class {$className}");
}
} else {
foreach ($this->getAncestry($className, false) as $ancestor) {
if (isset($this->map[$ancestor]['table']) && isset($this->map[$ancestor]['fields']['class_key'])) {
$criteria->where(array('class_key' => $className));
if ($this->getDebug() === true) {
$this->log(xPDO::LOG_LEVEL_DEBUG, "#2: Automatically adding class_key criteria for derivative query of class {$className} from base table class {$ancestor}");
}
break;
}
}
}
}
return $criteria;
}
/**
* Gets the package name from a specified class name.
*
* @param string $className The name of the class to lookup the package for.
* @return string The package the class belongs to.
*/
public function getPackage($className) {
$package= '';
if ($className= $this->loadClass($className)) {
if (isset($this->map[$className]['package'])) {
$package= $this->map[$className]['package'];
}
if (!$package && $ancestry= $this->getAncestry($className, false)) {
foreach ($ancestry as $ancestor) {
if (isset ($this->map[$ancestor]['package']) && ($package= $this->map[$ancestor]['package'])) {
break;
}
}
}
}
return $package;
}
/**
* Load and return a named service class instance.
*
* @param string $name The variable name of the instance.
* @param string $class The service class name.
* @param string $path An optional root path to search for the class.
* @param array $params An array of optional params to pass to the service
* class constructor.
* @return object|null A reference to the service class instance or null if
* it could not be loaded.
*/
public function &getService($name, $class= '', $path= '', $params= array ()) {
$service= null;
if (!isset ($this->services[$name]) || !is_object($this->services[$name])) {
if (empty ($class) && isset ($this->config[$name . '.class'])) {
$class= $this->config[$name . '.class'];
} elseif (empty ($class)) {
$class= $name;
}
$className= $this->loadClass($class, $path, false, true);
if (!empty($className)) {
$service = new $className ($this, $params);
if ($service) {
$this->services[$name]=& $service;
$this->$name= & $this->services[$name];
}
}
}
if (array_key_exists($name, $this->services)) {
$service= & $this->services[$name];
} else {
if ($this->getDebug() === true) {
$this->log(xPDO::LOG_LEVEL_DEBUG, "Problem getting service {$name}, instance of class {$class}, from path {$path}, with params " . print_r($params, true));
} else {
$this->log(xPDO::LOG_LEVEL_ERROR, "Problem getting service {$name}, instance of class {$class}, from path {$path}");
}
}
return $service;
}
/**
* Gets the actual run-time table name from a specified class name.
*
* @param string $className The name of the class to lookup a table name
* for.
* @param boolean $includeDb Qualify the table name with the database name.
* @return string The table name for the class, or null if unsuccessful.
*/
public function getTableName($className, $includeDb= false) {
$table= null;
if ($className= $this->loadClass($className)) {
if (isset ($this->map[$className]['table'])) {
$table= $this->map[$className]['table'];
if (isset($this->map[$className]['package']) && isset($this->packages[$this->map[$className]['package']]['prefix'])) {
$table= $this->packages[$this->map[$className]['package']]['prefix'] . $table;
} else {
$table= $this->getOption(xPDO::OPT_TABLE_PREFIX, null, '') . $table;
}
}
if (!$table && $ancestry= $this->getAncestry($className, false)) {
foreach ($ancestry as $ancestor) {
if (isset ($this->map[$ancestor]['table']) && $table= $this->map[$ancestor]['table']) {
if (isset($this->map[$ancestor]['package']) && isset($this->packages[$this->map[$ancestor]['package']]['prefix'])) {
$table= $this->packages[$this->map[$ancestor]['package']]['prefix'] . $table;
} else {
$table= $this->getOption(xPDO::OPT_TABLE_PREFIX, null, '') . $table;
}
break;
}
}
}
}
if ($table) {
$table= $this->_getFullTableName($table, $includeDb);
if ($this->getDebug() === true) $this->log(xPDO::LOG_LEVEL_DEBUG, 'Returning table name: ' . $table . ' for class: ' . $className);
} else {
$this->log(xPDO::LOG_LEVEL_ERROR, 'Could not get table name for class: ' . $className);
}
return $table;
}
/**
* Get the class which defines the table for a specified className.
*
* @param string $className The name of a class to determine the table class from.
* @return null|string The name of a class defining the table for the specified className; null if not found.
*/
public function getTableClass($className) {
$tableClass= null;
if ($className= $this->loadClass($className)) {
if (isset ($this->map[$className]['table'])) {
$tableClass= $className;
}
if (!$tableClass && $ancestry= $this->getAncestry($className, false)) {
foreach ($ancestry as $ancestor) {
if (isset ($this->map[$ancestor]['table'])) {
$tableClass= $ancestor;
break;
}
}
}
}
if ($tableClass) {
if ($this->getDebug() === true) {
$this->log(xPDO::LOG_LEVEL_DEBUG, 'Returning table class: ' . $tableClass . ' for class: ' . $className);
}
} else {
$this->log(xPDO::LOG_LEVEL_ERROR, 'Could not get table class for class: ' . $className);
}
return $tableClass;
}
/**
* Gets the actual run-time table metadata from a specified class name.
*
* @param string $className The name of the class to lookup a table name
* for.
* @return string The table meta data for the class, or null if
* unsuccessful.
*/
public function getTableMeta($className) {
$tableMeta= null;
if ($className= $this->loadClass($className)) {
if (isset ($this->map[$className]['tableMeta'])) {
$tableMeta= $this->map[$className]['tableMeta'];
}
if (!$tableMeta && $ancestry= $this->getAncestry($className)) {
foreach ($ancestry as $ancestor) {
if (isset ($this->map[$ancestor]['tableMeta'])) {
if ($tableMeta= $this->map[$ancestor]['tableMeta']) {
break;
}
}
}
}
}
return $tableMeta;
}
/**
* Indicates the inheritance model for the xPDOObject class specified.
*
* @param string $className The class to determine the table inherit type from.
* @return string single, multiple, or none
*/
public function getInherit($className) {
$inherit= false;
if ($className= $this->loadClass($className)) {
if (isset ($this->map[$className]['inherit'])) {
$inherit= $this->map[$className]['inherit'];
}
if (!$inherit && $ancestry= $this->getAncestry($className, false)) {
foreach ($ancestry as $ancestor) {
if (isset ($this->map[$ancestor]['inherit'])) {
$inherit= $this->map[$ancestor]['inherit'];
break;
}
}
}
}
if (!empty($inherit)) {
if ($this->getDebug() === true) {
$this->log(xPDO::LOG_LEVEL_DEBUG, 'Returning inherit: ' . $inherit . ' for class: ' . $className);
}
} else {
$inherit= 'none';
}
return $inherit;
}
/**
* Gets a list of fields (or columns) for an object by class name.
*
* This includes default values for each field and is used by the objects
* themselves to build their initial attributes based on class inheritence.
*
* @param string $className The name of the class to lookup fields for.
* @return array An array featuring field names as the array keys, and
* default field values as the array values; empty array is returned if
* unsuccessful.
*/
public function getFields($className) {
$fields= array ();
if ($className= $this->loadClass($className)) {
if ($ancestry= $this->getAncestry($className)) {
for ($i= count($ancestry) - 1; $i >= 0; $i--) {
if (isset ($this->map[$ancestry[$i]]['fields'])) {
$fields= array_merge($fields, $this->map[$ancestry[$i]]['fields']);
}
}
}
if ($this->getInherit($className) === 'single') {
$descendants= $this->getDescendants($className);
if ($descendants) {
foreach ($descendants as $descendant) {
$descendantClass= $this->loadClass($descendant);
if ($descendantClass && isset($this->map[$descendantClass]['fields'])) {
$fields= array_merge($fields, array_diff_key($this->map[$descendantClass]['fields'], $fields));
}
}
}
}
}
return $fields;
}
/**
* Gets a list of field (or column) definitions for an object by class name.
*
* These definitions are used by the objects themselves to build their
* own meta data based on class inheritance.
*
* @param string $className The name of the class to lookup fields meta data
* for.
* @param boolean $includeExtended If true, include meta from all derivative
* classes in loaded packages.
* @return array An array featuring field names as the array keys, and
* arrays of metadata information as the array values; empty array is
* returned if unsuccessful.
*/
public function getFieldMeta($className, $includeExtended = false) {
$fieldMeta= array ();
if ($className= $this->loadClass($className)) {
if ($ancestry= $this->getAncestry($className)) {
for ($i= count($ancestry) - 1; $i >= 0; $i--) {
if (isset ($this->map[$ancestry[$i]]['fieldMeta'])) {
$fieldMeta= array_merge($fieldMeta, $this->map[$ancestry[$i]]['fieldMeta']);
}
}
}
if ($includeExtended && $this->getInherit($className) === 'single') {
$descendants= $this->getDescendants($className);
if ($descendants) {
foreach ($descendants as $descendant) {
$descendantClass= $this->loadClass($descendant);
if ($descendantClass && isset($this->map[$descendantClass]['fieldMeta'])) {
$fieldMeta= array_merge($fieldMeta, array_diff_key($this->map[$descendantClass]['fieldMeta'], $fieldMeta));
}
}
}
}
}
return $fieldMeta;
}
/**
* Gets a collection of field aliases for an object by class name.
*
* @param string $className The name of the class to lookup field aliases for.
* @return array An array of field aliases with aliases as keys and actual field names as values.
*/
public function getFieldAliases($className) {
$fieldAliases= array ();
if ($className= $this->loadClass($className)) {
if ($ancestry= $this->getAncestry($className)) {
for ($i= count($ancestry) - 1; $i >= 0; $i--) {
if (isset ($this->map[$ancestry[$i]]['fieldAliases'])) {
$fieldAliases= array_merge($fieldAliases, $this->map[$ancestry[$i]]['fieldAliases']);
}
}
}
if ($this->getInherit($className) === 'single') {
$descendants= $this->getDescendants($className);
if ($descendants) {
foreach ($descendants as $descendant) {
$descendantClass= $this->loadClass($descendant);
if ($descendantClass && isset($this->map[$descendantClass]['fieldAliases'])) {
$fieldAliases= array_merge($fieldAliases, array_diff_key($this->map[$descendantClass]['fieldAliases'], $fieldAliases));
}
}
}
}
}
return $fieldAliases;
}
/**
* Gets a set of validation rules defined for an object by class name.
*
* @param string $className The name of the class to lookup validation rules
* for.
* @return array An array featuring field names as the array keys, and
* arrays of validation rule information as the array values; empty array is
* returned if unsuccessful.
*/
public function getValidationRules($className) {
$rules= array();
if ($className= $this->loadClass($className)) {
if ($ancestry= $this->getAncestry($className)) {
for ($i= count($ancestry) - 1; $i >= 0; $i--) {
if (isset($this->map[$ancestry[$i]]['validation']['rules'])) {
$rules= array_merge($rules, $this->map[$ancestry[$i]]['validation']['rules']);
}
}
}
if ($this->getInherit($className) === 'single') {
$descendants= $this->getDescendants($className);
if ($descendants) {
foreach ($descendants as $descendant) {
$descendantClass= $this->loadClass($descendant);
if ($descendantClass && isset($this->map[$descendantClass]['validation']['rules'])) {
$rules= array_merge($rules, array_diff_key($this->map[$descendantClass]['validation']['rules'], $rules));
}
}
}
}
if ($this->getDebug() === true) {
$this->log(xPDO::LOG_LEVEL_DEBUG, "Returning validation rules: " . print_r($rules, true));
}
}
return $rules;
}
/**
* Get indices defined for a table class.
*
* @param string $className The name of the class to lookup indices for.
* @return array An array of indices and their details for the specified class.
*/
public function getIndexMeta($className) {
$indices= array();
if ($className= $this->loadClass($className)) {
if ($ancestry= $this->getAncestry($className)) {
for ($i= count($ancestry) -1; $i >= 0; $i--) {
if (isset($this->map[$ancestry[$i]]['indexes'])) {
$indices= array_merge($indices, $this->map[$ancestry[$i]]['indexes']);
}
}
if ($this->getInherit($className) === 'single') {
$descendants= $this->getDescendants($className);
if ($descendants) {
foreach ($descendants as $descendant) {
$descendantClass= $this->loadClass($descendant);
if ($descendantClass && isset($this->map[$descendantClass]['indexes'])) {
$indices= array_merge($indices, array_diff_key($this->map[$descendantClass]['indexes'], $indices));
}
}
}
}
if ($this->getDebug() === true) {
$this->log(xPDO::LOG_LEVEL_DEBUG, "Returning indices: " . print_r($indices, true));
}
}
}
return $indices;
}
/**
* Gets the primary key field(s) for a class.
*
* @param string $className The name of the class to lookup the primary key
* for.
* @return mixed The name of the field representing a class instance primary
* key, an array of key names for compound primary keys, or null if no
* primary key is found or defined for the class.
*/
public function getPK($className) {
$pk= null;
if (strcasecmp($className, 'xPDOObject') !== 0) {
if ($actualClassName= $this->loadClass($className)) {
if (isset ($this->map[$actualClassName]['indexes'])) {
foreach ($this->map[$actualClassName]['indexes'] as $k => $v) {
if (isset ($this->map[$actualClassName]['fieldMeta'][$k]['phptype'])) {
if (isset ($v['primary']) && $v['primary'] == true) {
$pk[$k]= $k;
}
}
}
}
if (isset ($this->map[$actualClassName]['fieldMeta'])) {
foreach ($this->map[$actualClassName]['fieldMeta'] as $k => $v) {
if (isset ($v['index']) && isset ($v['phptype']) && $v['index'] == 'pk') {
$pk[$k]= $k;
}
}
}
if ($ancestry= $this->getAncestry($actualClassName)) {
foreach ($ancestry as $ancestor) {
if ($ancestorClassName= $this->loadClass($ancestor)) {
if (isset ($this->map[$ancestorClassName]['indexes'])) {
foreach ($this->map[$ancestorClassName]['indexes'] as $k => $v) {
if (isset ($this->map[$ancestorClassName]['fieldMeta'][$k]['phptype'])) {
if (isset ($v['primary']) && $v['primary'] == true) {
$pk[$k]= $k;
}
}
}
}
if (isset ($this->map[$ancestorClassName]['fieldMeta'])) {
foreach ($this->map[$ancestorClassName]['fieldMeta'] as $k => $v) {
if (isset ($v['index']) && isset ($v['phptype']) && $v['index'] == 'pk') {
$pk[$k]= $k;
}
}
}
}
}
}
if ($pk && count($pk) === 1) {
$pk= current($pk);
}
} else {
$this->log(xPDO::LOG_LEVEL_ERROR, "Could not load class {$className}");
}
}
return $pk;
}
/**
* Gets the type of primary key field for a class.
*
* @param string $className The name of the class to lookup the primary key
* type for.
* @param mixed $pk Optional specific PK column or columns to get type(s) for.
* @return string The type of the field representing a class instance primary
* key, or null if no primary key is found or defined for the class.
*/
public function getPKType($className, $pk= false) {
$pktype= null;
if ($actualClassName= $this->loadClass($className)) {
if (!$pk)
$pk= $this->getPK($actualClassName);
if (!is_array($pk))
$pk= array($pk);
$ancestry= $this->getAncestry($actualClassName, true);
foreach ($pk as $_pk) {
foreach ($ancestry as $parentClass) {
if (isset ($this->map[$parentClass]['fieldMeta'][$_pk]['phptype'])) {
$pktype[$_pk]= $this->map[$parentClass]['fieldMeta'][$_pk]['phptype'];
break;
}
}
}
if (is_array($pktype) && count($pktype) == 1) {
$pktype= reset($pktype);
}
elseif (empty($pktype)) {
$pktype= null;
}
} else {
$this->log(xPDO::LOG_LEVEL_ERROR, "Could not load class {$className}!");
}
return $pktype;
}
/**
* Gets a collection of aggregate foreign key relationship definitions.
*
* @param string $className The fully-qualified name of the class.
* @return array An array of aggregate foreign key relationship definitions.
*/
public function getAggregates($className) {
$aggregates= array ();
if ($className= $this->loadClass($className)) {
if ($ancestry= $this->getAncestry($className)) {
for ($i= count($ancestry) - 1; $i >= 0; $i--) {
if (isset ($this->map[$ancestry[$i]]['aggregates'])) {
$aggregates= array_merge($aggregates, $this->map[$ancestry[$i]]['aggregates']);
}
}
}
if ($this->getInherit($className) === 'single') {
$descendants= $this->getDescendants($className);
if ($descendants) {
foreach ($descendants as $descendant) {
$descendantClass= $this->loadClass($descendant);
if ($descendantClass && isset($this->map[$descendantClass]['aggregates'])) {
$aggregates= array_merge($aggregates, array_diff_key($this->map[$descendantClass]['aggregates'], $aggregates));
}
}
}
}
}
return $aggregates;
}
/**
* Gets a collection of composite foreign key relationship definitions.
*
* @param string $className The fully-qualified name of the class.
* @return array An array of composite foreign key relationship definitions.
*/
public function getComposites($className) {
$composites= array ();
if ($className= $this->loadClass($className)) {
if ($ancestry= $this->getAncestry($className)) {
for ($i= count($ancestry) - 1; $i >= 0; $i--) {
if (isset ($this->map[$ancestry[$i]]['composites'])) {
$composites= array_merge($composites, $this->map[$ancestry[$i]]['composites']);
}
}
}
if ($this->getInherit($className) === 'single') {
$descendants= $this->getDescendants($className);
if ($descendants) {
foreach ($descendants as $descendant) {
$descendantClass= $this->loadClass($descendant);
if ($descendantClass && isset($this->map[$descendantClass]['composites'])) {
$composites= array_merge($composites, array_diff_key($this->map[$descendantClass]['composites'], $composites));
}
}
}
}
}
return $composites;
}
/**
* Get a complete relation graph for an xPDOObject class.
*
* @param string $className A fully-qualified xPDOObject class name.
* @param int $depth The depth to retrieve relations for the graph, defaults to 3.
* @param array &$parents An array of parent classes to avoid traversing circular dependencies.
* @param array &$visited An array of already visited classes to avoid traversing circular dependencies.
* @return array An xPDOObject relation graph, or an empty array if no graph can be constructed.
*/
public function getGraph($className, $depth= 3, &$parents = array(), &$visited = array()) {
$graph = array();
$className = $this->loadClass($className);
if ($className && $depth > 0) {
$depth--;
$parents = array_merge($parents, $this->getAncestry($className));
$parentsNested = array_unique($parents);
$visitNested = array_merge($visited, array($className));
$relations = array_merge($this->getAggregates($className), $this->getComposites($className));
foreach ($relations as $alias => $relation) {
if (in_array($relation['class'], $visited)) {
continue;
}
$childGraph = array();
if ($depth > 0 && !in_array($relation['class'], $parents)) {
$childGraph = $this->getGraph($relation['class'], $depth, $parentsNested, $visitNested);
}
$graph[$alias] = $childGraph;
}
$visited[] = $className;
}
return $graph;
}
/**
* Retrieves the complete ancestry for a class.
*
* @param string $className The name of the class.
* @param bool $includeSelf Determines if the specified class should be
* included in the resulting array.
* @return array An array of string class names representing the class
* hierarchy, or an empty array if unsuccessful.
*/
public function getAncestry($className, $includeSelf= true) {
$ancestry= array ();
if ($actualClassName= $this->loadClass($className)) {
$ancestor= $actualClassName;
if ($includeSelf) {
$ancestry[]= $actualClassName;
}
while ($ancestor= get_parent_class($ancestor)) {
$ancestry[]= $ancestor;
}
if ($this->getDebug() === true) {
$this->log(xPDO::LOG_LEVEL_DEBUG, "Returning ancestry for {$className}: " . print_r($ancestry, 1));
}
}
return $ancestry;
}
/**
* Gets select columns from a specific class for building a query.
*
* @uses xPDOObject::getSelectColumns()
* @param string $className The name of the class to build the column list
* from.
* @param string $tableAlias An optional alias for the class table, to be
* used in complex queries with multiple tables.
* @param string $columnPrefix An optional string with which to prefix the
* columns returned, to avoid name collisions in return columns.
* @param array $columns An optional array of columns to include.
* @param boolean $exclude If true, will exclude columns in the previous
* parameter, instead of including them.
* @return string A valid SQL string of column names for a SELECT statement.
*/
public function getSelectColumns($className, $tableAlias= '', $columnPrefix= '', $columns= array (), $exclude= false) {
return $this->call($className, 'getSelectColumns', array(&$this, $className, $tableAlias, $columnPrefix, $columns, $exclude));
}
/**
* Gets an aggregate or composite relation definition from a class.
*
* @param string $parentClass The class from which the relation is defined.
* @param string $alias The alias identifying the related class.
* @return array The aggregate or composite definition details in an array
* or null if no definition is found.
*/
function getFKDefinition($parentClass, $alias) {
$def= null;
$parentClass= $this->loadClass($parentClass);
if ($parentClass && $alias) {
if ($aggregates= $this->getAggregates($parentClass)) {
if (isset ($aggregates[$alias])) {
$def= $aggregates[$alias];
$def['type']= 'aggregate';
}
}
if ($composites= $this->getComposites($parentClass)) {
if (isset ($composites[$alias])) {
$def= $composites[$alias];
$def['type']= 'composite';
}
}
}
if ($def === null) {
$this->log(xPDO::LOG_LEVEL_ERROR, 'No foreign key definition for parentClass: ' . $parentClass . ' using relation alias: ' . $alias);
}
return $def;
}
/**
* Gets the version string of the schema the specified class was generated from.
*
* @param string $className The name of the class to get the model version from.
* @return string The version string for the schema model the class was generated from.
*/
public function getModelVersion($className) {
$version = '1.0';
$className= $this->loadClass($className);
if ($className && isset($this->map[$className]['version'])) {
$version= $this->map[$className]['version'];
}
return $version;
}
/**
* Gets the manager class for this xPDO connection.
*
* The manager class can perform operations such as creating or altering
* table structures, creating data containers, generating custom persistence
* classes, and other advanced operations that do not need to be loaded
* frequently.
*
* @return xPDOManager|null An xPDOManager instance for the xPDO connection, or null
* if a manager class can not be instantiated.
*/
public function getManager() {
if ($this->manager === null || !$this->manager instanceof xPDOManager) {
$loaded= include_once(XPDO_CORE_PATH . 'om/' . $this->config['dbtype'] . '/xpdomanager.class.php');
if ($loaded) {
$managerClass = 'xPDOManager_' . $this->config['dbtype'];
$this->manager= new $managerClass ($this);
}
if (!$this->manager) {
$this->log(xPDO::LOG_LEVEL_ERROR, "Could not load xPDOManager class.");
}
}
return $this->manager;
}
/**
* Gets the driver class for this xPDO connection.
*
* The driver class provides baseline data and operations for a specific database driver.
*
* @return xPDODriver|null An xPDODriver instance for the xPDO connection, or null
* if a driver class can not be instantiated.
*/
public function getDriver() {
if ($this->driver === null || !$this->driver instanceof xPDODriver) {
$loaded= include_once(XPDO_CORE_PATH . 'om/' . $this->config['dbtype'] . '/xpdodriver.class.php');
if ($loaded) {
$driverClass = 'xPDODriver_' . $this->config['dbtype'];
$this->driver= new $driverClass ($this);
}
if (!$this->driver) {
$this->log(xPDO::LOG_LEVEL_ERROR, "Could not load xPDODriver class for the {$this->config['dbtype']} PDO driver. " . print_r($this->config, true));
}
}
return $this->driver;
}
/**
* Gets the absolute path to the cache directory.
*
* @return string The full cache directory path.
*/
public function getCachePath() {
if (!$this->cachePath) {
if ($this->getCacheManager()) {
$this->cachePath= $this->cacheManager->getCachePath();
}
}
return $this->cachePath;
}
/**
* Gets an xPDOCacheManager instance.
*
* This class is responsible for handling all types of caching operations for the xPDO core.
*
* @param string $class Optional name of a derivative xPDOCacheManager class.
* @param array $options An array of options for the cache manager instance; valid options include:
* - path = Optional root path for looking up the $class.
* - ignorePkg = If false and you do not specify a path, you can look up custom xPDOCacheManager
* derivatives in declared packages.
* @return xPDOCacheManager The xPDOCacheManager for this xPDO instance.
*/
public function getCacheManager($class= 'cache.xPDOCacheManager', $options = array('path' => XPDO_CORE_PATH, 'ignorePkg' => true)) {
$actualClass = $this->loadClass($class, $options['path'], $options['ignorePkg'], true);
if ($this->cacheManager === null || !is_object($this->cacheManager) || !($this->cacheManager instanceof $actualClass)) {
if ($this->cacheManager= new $actualClass($this, $options)) {
$this->_cacheEnabled= true;
}
}
return $this->cacheManager;
}
/**
* Returns the debug state for the xPDO instance.
*
* @return boolean The current debug state for the instance, true for on,
* false for off.
*/
public function getDebug() {
return $this->_debug;
}
/**
* Sets the debug state for the xPDO instance.
*
* @param boolean|integer $v The debug status, true for on, false for off, or a valid
* error_reporting level for PHP.
*/
public function setDebug($v= true) {
$this->_debug= $v;
}
/**
* Sets the logging level state for the xPDO instance.
*
* @param integer $level The logging level to switch to.
* @return integer The previous log level.
*/
public function setLogLevel($level= xPDO::LOG_LEVEL_FATAL) {
$oldLevel = $this->logLevel;
$this->logLevel= intval($level);
return $oldLevel;
}
/**
* @return integer The current log level.
*/
public function getLogLevel() {
return $this->logLevel;
}
/**
* Sets the log target for xPDO::_log() calls.
*
* Valid target values include:
*
*
'ECHO': Returns output to the STDOUT.
*
'HTML': Returns output to the STDOUT with HTML formatting.
*
'FILE': Sends output to a log file.
*
An array with at least one element with key 'target' matching
* one of the valid log targets listed above. For 'target' => 'FILE'
* you can specify a second element with key 'options' with another
* associative array with one or both of the elements 'filename' and
* 'filepath'
*
*
* @param string $target An identifier indicating the target of the logging.
* @return mixed The previous log target.
*/
public function setLogTarget($target= 'ECHO') {
$oldTarget = $this->logTarget;
$this->logTarget= $target;
return $oldTarget;
}
/**
* @return integer The current log level.
*/
public function getLogTarget() {
return $this->logTarget;
}
/**
* Log a message with details about where and when an event occurs.
*
* @param integer $level The level of the logged message.
* @param string $msg The message to log.
* @param string $target The logging target.
* @param string $def The name of a defining structure (such as a class) to
* help identify the message source.
* @param string $file A filename in which the log event occured.
* @param string $line A line number to help locate the source of the event
* within the indicated file.
*/
public function log($level, $msg, $target= '', $def= '', $file= '', $line= '') {
$this->_log($level, $msg, $target, $def, $file, $line);
}
/**
* Log a message as appropriate for the level and target.
*
* @param integer $level The level of the logged message.
* @param string $msg The message to log.
* @param string $target The logging target.
* @param string $def The name of a defining structure (such as a class) to
* help identify the log event source.
* @param string $file A filename in which the log event occured.
* @param string $line A line number to help locate the source of the event
* within the indicated file.
*/
protected function _log($level, $msg, $target= '', $def= '', $file= '', $line= '') {
if (empty ($target)) {
$target = $this->logTarget;
}
$targetOptions = array();
if (is_array($target)) {
if (isset($target['options'])) $targetOptions =& $target['options'];
$target = isset($target['target']) ? $target['target'] : 'ECHO';
}
if (empty($file) && isset($_SERVER['SCRIPT_NAME'])) {
$file= $_SERVER['SCRIPT_NAME'];
}
if ($level === xPDO::LOG_LEVEL_FATAL) {
while (ob_get_level() && @ob_end_flush()) {}
exit ('[' . strftime('%Y-%m-%d %H:%M:%S') . '] (' . $this->_getLogLevel($level) . $def . $file . $line . ') ' . $msg . "\n" . ($this->getDebug() === true ? '
' . "\n";
break;
default :
echo '[' . strftime('%Y-%m-%d %H:%M:%S') . '] (' . $this->_getLogLevel($level) . $def . $file . $line . ') ' . $msg . "\n";
}
$content= @ob_get_contents();
@ob_end_clean();
if ($target=='FILE' && $this->getCacheManager()) {
$filename = isset($targetOptions['filename']) ? $targetOptions['filename'] : 'error.log';
$filepath = isset($targetOptions['filepath']) ? $targetOptions['filepath'] : $this->getCachePath() . xPDOCacheManager::LOG_DIR;
$this->cacheManager->writeFile($filepath . $filename, $content, 'a');
} elseif ($target=='ARRAY' && isset($targetOptions['var']) && is_array($targetOptions['var'])) {
$targetOptions['var'][] = $content;
} else {
echo $content;
}
}
}
/**
* Returns an abbreviated backtrace of debugging information.
*
* This function returns just the fields returned via xPDOObject::toArray()
* on xPDOObject instances, and simply the classname for other objects, to
* reduce the amount of unnecessary information returned.
*
* @return array The abbreviated backtrace.
*/
public function getDebugBacktrace() {
$backtrace= array ();
foreach (debug_backtrace() as $levelKey => $levelElement) {
foreach ($levelElement as $traceKey => $traceElement) {
if ($traceKey == 'object' && $traceElement instanceof xPDOObject) {
$backtrace[$levelKey][$traceKey]= $traceElement->toArray('', true);
} elseif ($traceKey == 'object') {
$backtrace[$levelKey][$traceKey]= get_class($traceElement);
} else {
$backtrace[$levelKey][$traceKey]= $traceElement;
}
}
}
return $backtrace;
}
/**
* Gets a logging level as a string representation.
*
* @param integer $level The logging level to retrieve a string for.
* @return string The string representation of a valid logging level.
*/
protected function _getLogLevel($level) {
switch ($level) {
case xPDO::LOG_LEVEL_DEBUG :
$levelText= 'DEBUG';
break;
case xPDO::LOG_LEVEL_INFO :
$levelText= 'INFO';
break;
case xPDO::LOG_LEVEL_WARN :
$levelText= 'WARN';
break;
case xPDO::LOG_LEVEL_ERROR :
$levelText= 'ERROR';
break;
default :
$levelText= 'FATAL';
}
return $levelText;
}
/**
* Escapes the provided string using the platform-specific escape character.
*
* Different database engines escape string literals in SQL using different characters. For example, this is used to
* escape column names that might match a reserved string for that SQL interpreter. To write database agnostic
* queries with xPDO, it is highly recommend to escape any database or column names in any native SQL strings used.
*
* @param string $string A string to escape using the platform-specific escape characters.
* @return string The string escaped with the platform-specific escape characters.
*/
public function escape($string) {
$string = trim($string, $this->_escapeCharOpen . $this->_escapeCharClose);
return $this->_escapeCharOpen . $string . $this->_escapeCharClose;
}
/**
* Use to insert a literal string into a SQL query without escaping or quoting.
*
* @param string $string A string to return as a literal, unescaped and unquoted.
* @return string The string with any escape or quote characters trimmed.
*/
public function literal($string) {
$string = trim($string, $this->_escapeCharOpen . $this->_escapeCharClose . $this->_quoteChar);
return $string;
}
/**
* Adds the table prefix, and optionally database name, to a given table.
*
* @param string $baseTableName The table name as specified in the object
* model.
* @param boolean $includeDb Qualify the table name with the database name.
* @return string The fully-qualified and quoted table name for the
*/
private function _getFullTableName($baseTableName, $includeDb= false) {
$fqn= '';
if (!empty ($baseTableName)) {
if ($includeDb) {
$fqn .= $this->escape($this->config['dbname']) . '.';
}
$fqn .= $this->escape($baseTableName);
}
return $fqn;
}
/**
* Parses a DSN and returns an array of the connection details.
*
* @static
* @param string $string The DSN to parse.
* @return array An array of connection details from the DSN.
* @todo Have this method handle all methods of DSN specification as handled
* by latest native PDO implementation.
*/
public static function parseDSN($string) {
$result= array ();
$pos= strpos($string, ':');
$result['dbtype']= strtolower(substr($string, 0, $pos));
$parameters= explode(';', substr($string, ($pos +1)));
for ($a= 0, $b= count($parameters); $a < $b; $a++) {
$tmp= explode('=', $parameters[$a]);
if (count($tmp) == 2) {
$result[strtolower(trim($tmp[0]))]= trim($tmp[1]);
} else {
$result['dbname']= trim($parameters[$a]);
}
}
if (!isset($result['dbname']) && isset($result['database'])) {
$result['dbname'] = $result['database'];
}
if (!isset($result['host']) && isset($result['server'])) {
$result['host'] = $result['server'];
}
return $result;
}
/**
* Retrieves a result array from the object cache.
*
* @param string|xPDOCriteria $signature A unique string or xPDOCriteria object
* that represents the query identifying the result set.
* @param string $class An optional classname the result represents.
* @param array $options Various cache options.
* @return array|string|null A PHP array or JSON object representing the
* result set, or null if no cache representation is found.
*/
public function fromCache($signature, $class= '', $options= array()) {
$result= null;
if ($this->getOption(xPDO::OPT_CACHE_DB, $options)) {
if ($signature && $this->getCacheManager()) {
$sig= '';
$sigKey= array();
$sigHash= '';
$sigClass= empty($class) || !is_string($class) ? '' : $class;
if (is_object($signature)) {
if ($signature instanceof xPDOCriteria) {
if ($signature instanceof xPDOQuery) {
$signature->construct();
if (empty($sigClass)) $sigClass= $signature->getTableClass();
}
$sigKey= array ($signature->sql, $signature->bindings);
}
}
elseif (is_string($signature)) {
if ($exploded= explode('_', $signature)) {
$class= reset($exploded);
if (empty($sigClass) || $sigClass !== $class) {
$sigClass= $class;
}
if (empty($sigKey)) {
while ($key= next($exploded)) {
$sigKey[]= $key;
}
}
}
}
if (empty($sigClass)) $sigClass= '__sqlResult';
if ($sigClass && $sigKey) {
$sigHash= md5($this->toJSON($sigKey));
$sig= implode('/', array ($sigClass, $sigHash));
}
if (is_string($sig) && !empty($sig)) {
$result= $this->cacheManager->get($sig, array(
xPDO::OPT_CACHE_KEY => $this->getOption('cache_db_key', $options, 'db'),
xPDO::OPT_CACHE_HANDLER => $this->getOption(xPDO::OPT_CACHE_DB_HANDLER, $options, $this->getOption(xPDO::OPT_CACHE_HANDLER, $options, 'cache.xPDOFileCache')),
xPDO::OPT_CACHE_FORMAT => (integer) $this->getOption('cache_db_format', null, $this->getOption(xPDO::OPT_CACHE_FORMAT, null, xPDOCacheManager::CACHE_PHP)),
'cache_prefix' => $this->getOption('cache_db_prefix', $options, xPDOCacheManager::CACHE_DIR),
));
if ($this->getDebug() === true) {
if (!$result) {
$this->log(xPDO::LOG_LEVEL_DEBUG, 'No cache item found for class ' . $sigClass . ' with signature ' . xPDOCacheManager::CACHE_DIR . $sig);
} else {
$this->log(xPDO::LOG_LEVEL_DEBUG, 'Loaded cache item for class ' . $sigClass . ' with signature ' . xPDOCacheManager::CACHE_DIR . $sig);
}
}
}
}
}
return $result;
}
/**
* Places a result set in the object cache.
*
* @param string|xPDOCriteria $signature A unique string or xPDOCriteria object
* representing the object.
* @param object $object An object to place a representation of in the cache.
* @param integer $lifetime An optional number of seconds the cached result
* will remain valid, with 0 meaning it will remain valid until replaced or
* removed.
* @param array $options Various cache options.
* @return boolean Indicates if the object was successfully cached.
*/
public function toCache($signature, $object, $lifetime= 0, $options = array()) {
$result= false;
if ($this->getCacheManager()) {
if ($this->getOption(xPDO::OPT_CACHE_DB, $options)) {
if ($lifetime === true) {
$lifetime = 0;
}
elseif (!$lifetime && $this->getOption(xPDO::OPT_CACHE_DB_EXPIRES, $options, 0)) {
$lifetime= intval($this->getOption(xPDO::OPT_CACHE_DB_EXPIRES, $options, 0));
}
$sigKey= array();
$sigClass= '';
$sigGraph= $this->getOption(xPDO::OPT_CACHE_DB_SIG_GRAPH, $options, array());
if (is_object($signature)) {
if ($signature instanceof xPDOCriteria) {
if ($signature instanceof xPDOQuery) {
$signature->construct();
if (empty($sigClass)) $sigClass = $signature->getTableClass();
}
$sigKey= array($signature->sql, $signature->bindings);
}
}
elseif (is_string($signature)) {
$exploded= explode('_', $signature);
if ($exploded && count($exploded) >= 2) {
$class= reset($exploded);
if (empty($sigClass) || $sigClass !== $class) {
$sigClass= $class;
}
if (empty($sigKey)) {
while ($key= next($exploded)) {
$sigKey[]= $key;
}
}
}
}
if (empty($sigClass)) {
if ($object instanceof xPDOObject) {
$sigClass= $object->_class;
} else {
$sigClass= $this->getOption(xPDO::OPT_CACHE_DB_SIG_CLASS, $options, '__sqlResult');
}
}
if (empty($sigKey) && is_string($signature)) $sigKey= $signature;
if (empty($sigKey) && $object instanceof xPDOObject) $sigKey= $object->getPrimaryKey();
if ($sigClass && $sigKey) {
$sigHash= md5($this->toJSON(is_array($sigKey) ? $sigKey : array($sigKey)));
$sig= implode('/', array ($sigClass, $sigHash));
if (is_string($sig)) {
if ($this->getOption('modified', $options, false)) {
if (empty($sigGraph) && $object instanceof xPDOObject) {
$sigGraph = array_merge(array($object->_class => array('class' => $object->_class)), $object->_aggregates, $object->_composites);
}
if (!empty($sigGraph)) {
foreach ($sigGraph as $gAlias => $gMeta) {
$gClass = $gMeta['class'];
$removed= $this->cacheManager->delete($gClass, array_merge($options, array(
xPDO::OPT_CACHE_KEY => $this->getOption('cache_db_key', $options, 'db'),
xPDO::OPT_CACHE_HANDLER => $this->getOption(xPDO::OPT_CACHE_DB_HANDLER, $options, $this->getOption(xPDO::OPT_CACHE_HANDLER, $options, 'cache.xPDOFileCache')),
xPDO::OPT_CACHE_FORMAT => (integer) $this->getOption('cache_db_format', $options, $this->getOption(xPDO::OPT_CACHE_FORMAT, $options, xPDOCacheManager::CACHE_PHP)),
xPDO::OPT_CACHE_EXPIRES => (integer) $this->getOption(xPDO::OPT_CACHE_DB_EXPIRES, null, $this->getOption(xPDO::OPT_CACHE_EXPIRES, null, 0)),
xPDO::OPT_CACHE_PREFIX => $this->getOption('cache_db_prefix', $options, xPDOCacheManager::CACHE_DIR),
'multiple_object_delete' => true
)));
if ($this->getDebug() === true) {
$this->log(xPDO::LOG_LEVEL_DEBUG, "Removing all cache objects of class {$gClass}: " . ($removed ? 'successful' : 'failed'));
}
}
}
}
$cacheOptions = array_merge($options, array(
xPDO::OPT_CACHE_KEY => $this->getOption('cache_db_key', $options, 'db'),
xPDO::OPT_CACHE_HANDLER => $this->getOption(xPDO::OPT_CACHE_DB_HANDLER, $options, $this->getOption(xPDO::OPT_CACHE_HANDLER, $options, 'cache.xPDOFileCache')),
xPDO::OPT_CACHE_FORMAT => (integer) $this->getOption('cache_db_format', $options, $this->getOption(xPDO::OPT_CACHE_FORMAT, $options, xPDOCacheManager::CACHE_PHP)),
xPDO::OPT_CACHE_EXPIRES => (integer) $this->getOption(xPDO::OPT_CACHE_DB_EXPIRES, null, $this->getOption(xPDO::OPT_CACHE_EXPIRES, null, 0)),
xPDO::OPT_CACHE_PREFIX => $this->getOption('cache_db_prefix', $options, xPDOCacheManager::CACHE_DIR)
));
$result= $this->cacheManager->set($sig, $object, $lifetime, $cacheOptions);
if ($result && $object instanceof xPDOObject) {
if ($this->getDebug() === true) {
$this->log(xPDO::LOG_LEVEL_DEBUG, "xPDO->toCache() successfully cached object with signature " . xPDOCacheManager::CACHE_DIR . $sig);
}
}
if (!$result) {
$this->log(xPDO::LOG_LEVEL_WARN, "xPDO->toCache() could not cache object with signature " . xPDOCacheManager::CACHE_DIR . $sig);
}
}
} else {
$this->log(xPDO::LOG_LEVEL_ERROR, "Object sent toCache() has an invalid signature.");
}
}
} else {
$this->log(xPDO::LOG_LEVEL_ERROR, "Attempt to send a non-object to toCache().");
}
return $result;
}
/**
* Converts a PHP array into a JSON encoded string.
*
* @param array $array The PHP array to convert.
* @return string The JSON representation of the source array.
*/
public function toJSON($array) {
$encoded= '';
if (is_array ($array)) {
if (!function_exists('json_encode')) {
if (@ include_once (XPDO_CORE_PATH . 'json/JSON.php')) {
$json = new Services_JSON();
$encoded= $json->encode($array);
}
} else {
$encoded= json_encode($array);
}
}
return $encoded;
}
/**
* Converts a JSON source string into an equivalent PHP representation.
*
* @param string $src A JSON source string.
* @param boolean $asArray Indicates if the result should treat objects as
* associative arrays; since all JSON associative arrays are objects, the default
* is true. Set to false to have JSON objects returned as PHP objects.
* @return mixed The PHP representation of the JSON source.
*/
public function fromJSON($src, $asArray= true) {
$decoded= '';
if ($src) {
if (!function_exists('json_decode')) {
if (@ include_once (XPDO_CORE_PATH . 'json/JSON.php')) {
if ($asArray) {
$json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
} else {
$json = new Services_JSON();
}
$decoded= $json->decode($src);
}
} else {
$decoded= json_decode($src, $asArray);
}
}
return $decoded;
}
/**
* @see http://php.net/manual/en/function.pdo-begintransaction.php
*/
public function beginTransaction() {
if (!$this->connect(null, array(xPDO::OPT_CONN_MUTABLE => true))) {
return false;
}
return $this->pdo->beginTransaction();
}
/**
* @see http://php.net/manual/en/function.pdo-commit.php
*/
public function commit() {
if (!$this->connect(null, array(xPDO::OPT_CONN_MUTABLE => true))) {
return false;
}
return $this->pdo->commit();
}
/**
* @see http://php.net/manual/en/function.pdo-exec.php
*/
public function exec($query) {
if (!$this->connect(null, array(xPDO::OPT_CONN_MUTABLE => true))) {
return false;
}
$tstart= microtime(true);
$return= $this->pdo->exec($query);
$this->queryTime += microtime(true) - $tstart;
$this->executedQueries++;
return $return;
}
/**
* @see http://php.net/manual/en/function.pdo-errorcode.php
*/
public function errorCode() {
if (!$this->connect()) {
return false;
}
return $this->pdo->errorCode();
}
/**
* @see http://php.net/manual/en/function.pdo-errorinfo.php
*/
public function errorInfo() {
if (!$this->connect()) {
return false;
}
return $this->pdo->errorInfo();
}
/**
* @see http://php.net/manual/en/function.pdo-getattribute.php
*/
public function getAttribute($attribute) {
if (!$this->connect()) {
return false;
}
return $this->pdo->getAttribute($attribute);
}
/**
* @see http://php.net/manual/en/function.pdo-lastinsertid.php
*/
public function lastInsertId() {
if (!$this->connect()) {
return false;
}
return $this->pdo->lastInsertId();
}
/**
* @see http://php.net/manual/en/function.pdo-prepare.php
*/
public function prepare($statement, $driver_options= array ()) {
if (!$this->connect()) {
return false;
}
return $this->pdo->prepare($statement, $driver_options);
}
/**
* @see http://php.net/manual/en/function.pdo-query.php
*/
public function query($query) {
if (!$this->connect()) {
return false;
}
$tstart= microtime(true);
$return= $this->pdo->query($query);
$this->queryTime += microtime(true) - $tstart;
$this->executedQueries++;
return $return;
}
/**
* @see http://php.net/manual/en/function.pdo-quote.php
*/
public function quote($string, $parameter_type= PDO::PARAM_STR) {
if (!$this->connect()) {
return false;
}
$quoted = $this->pdo->quote($string, $parameter_type);
switch ($parameter_type) {
case PDO::PARAM_STR:
$quoted = trim($quoted);
break;
case PDO::PARAM_INT:
$quoted = trim($quoted);
$quoted = (integer) trim($quoted, "'");
break;
default:
break;
}
return $quoted;
}
/**
* @see http://php.net/manual/en/function.pdo-rollback.php
*/
public function rollBack() {
if (!$this->connect(null, array(xPDO::OPT_CONN_MUTABLE => true))) {
return false;
}
return $this->pdo->rollBack();
}
/**
* @see http://php.net/manual/en/function.pdo-setattribute.php
*/
public function setAttribute($attribute, $value) {
if (!$this->connect()) {
return false;
}
return $this->pdo->setAttribute($attribute, $value);
}
/**
* Creates an new xPDOQuery for a specified xPDOObject class.
*
* @param string $class The class to create the xPDOQuery for.
* @param mixed $criteria Any valid xPDO criteria expression.
* @param boolean|integer $cacheFlag Indicates if the result should be cached
* and optionally for how many seconds (if passed an integer greater than 0).
* @return xPDOQuery The resulting xPDOQuery instance or false if unsuccessful.
*/
public function newQuery($class, $criteria= null, $cacheFlag= true) {
$query= false;
if ($this->loadClass($this->config['dbtype'] . '.xPDOQuery', '', false, true)) {
$xpdoQueryClass= 'xPDOQuery_' . $this->config['dbtype'];
if (!class_exists($xpdoQueryClass, false))
include_once dirname(__FILE__) . '/om/' . $this->config['dbtype'] . '/xpdoquery.class.php';
if ($query= new $xpdoQueryClass($this, $class, $criteria)) {
$query->cacheFlag= $cacheFlag;
}
}
return $query;
}
/**
* Splits a string on a specified character, ignoring escaped content.
*
* @static
* @param string $char A character to split the tag content on.
* @param string $str The string to operate on.
* @param string $escToken A character used to surround escaped content; all
* content within a pair of these tokens will be ignored by the split
* operation.
* @param integer $limit Limit the number of results. Default is 0 which is
* no limit. Note that setting the limit to 1 will only return the content
* up to the first instance of the split character and will discard the
* remainder of the string.
* @return array An array of results from the split operation, or an empty
* array.
*/
public static function escSplit($char, $str, $escToken = '`', $limit = 0) {
$split= array();
$charPos = strpos($str, $char);
if ($charPos !== false) {
if ($charPos === 0) {
$searchPos = 1;
$startPos = 1;
} else {
$searchPos = 0;
$startPos = 0;
}
$escOpen = false;
$strlen = strlen($str);
for ($i = $startPos; $i <= $strlen; $i++) {
if ($i == $strlen) {
$tmp= trim(substr($str, $searchPos));
if (!empty($tmp)) $split[]= $tmp;
break;
}
if ($str[$i] == $escToken) {
$escOpen = $escOpen == true ? false : true;
continue;
}
if (!$escOpen && $str[$i] == $char) {
$tmp= trim(substr($str, $searchPos, $i - $searchPos));
if (!empty($tmp)) {
$split[]= $tmp;
if ($limit > 0 && count($split) >= $limit) {
break;
}
}
$searchPos = $i + 1;
}
}
} else {
$split[]= trim($str);
}
return $split;
}
/**
* Parses parameter bindings in SQL prepared statements.
*
* @param string $sql A SQL prepared statement to parse bindings in.
* @param array $bindings An array of parameter bindings to use for the replacements.
* @return string The SQL with the binding placeholders replaced.
*/
public function parseBindings($sql, $bindings) {
if (!empty($sql) && !empty($bindings)) {
reset($bindings);
$bound = array();
while (list ($k, $param)= each($bindings)) {
if (!is_array($param)) {
$v= $param;
$type= $this->getPDOType($param);
$bindings[$k]= array(
'value' => $v,
'type' => $type
);
} else {
$v= $param['value'];
$type= $param['type'];
}
if (!$v) {
switch ($type) {
case PDO::PARAM_INT:
$v= '0';
break;
case PDO::PARAM_BOOL:
$v= '0';
break;
default:
break;
}
}
if ($type > 0) {
$v= $this->quote($v, $type);
} else {
$v= 'NULL';
}
if (!is_int($k) || substr($k, 0, 1) === ':') {
$pattern= '/' . $k . '\b/';
$bound[$pattern] = str_replace(array('\\', '$'), array('\\\\', '\$'), $v);
} else {
$pattern = '/(\?)(\b)?/';
$sql = preg_replace($pattern, ':' . $k . '$2', $sql, 1);
$bound['/:' . $k . '\b/'] = str_replace(array('\\', '$'), array('\\\\', '\$'), $v);
}
}
$this->log(xPDO::LOG_LEVEL_INFO, "{$sql}\n" . print_r($bound, true));
if (!empty($bound)) {
$sql= preg_replace(array_keys($bound), array_values($bound), $sql);
}
}
return $sql;
}
/**
* Get the appropriate PDO::PARAM_ type constant from a PHP value.
*
* @param mixed $value Any PHP scalar or null value
* @return int|null
*/
public function getPDOType($value) {
$type= null;
if (is_null($value)) $type= PDO::PARAM_NULL;
elseif (is_scalar($value)) {
if (is_int($value)) $type= PDO::PARAM_INT;
else $type= PDO::PARAM_STR;
}
return $type;
}
}
/**
* Encapsulates a SQL query into a PDOStatement with a set of bindings.
*
* @package xpdo
*
*/
class xPDOCriteria {
public $sql= '';
public $stmt= null;
public $bindings= array ();
public $cacheFlag= false;
/**
* The constructor for a new xPDOCriteria instance.
*
* The constructor optionally prepares provided SQL and/or parameter
* bindings. Setting the bindings via the constructor or with the {@link
* xPDOCriteria::bind()} function allows you to make use of the data object
* caching layer.
*
* The statement will not be prepared immediately if the cacheFlag value is
* true or a positive integer, in order to allow the result to be found in
* the cache before being queried from an actual database connection.
*
* @param xPDO &$xpdo An xPDO instance that will control this criteria.
* @param string $sql The SQL statement.
* @param array $bindings Bindings to bind to the criteria.
* @param boolean|integer $cacheFlag Indicates if the result set from the
* criteria is to be cached (true|false) or optionally a TTL in seconds.
* @return xPDOCriteria
*/
public function __construct(& $xpdo, $sql= '', $bindings= array (), $cacheFlag= false) {
$this->xpdo= & $xpdo;
$this->cacheFlag= $cacheFlag;
if (is_string($sql) && !empty ($sql)) {
$this->sql= $sql;
if ($cacheFlag === false || $cacheFlag < 0) {
$this->stmt= $xpdo->prepare($sql);
}
if (!empty ($bindings)) {
$this->bind($bindings, true, $cacheFlag);
}
}
}
/**
* Binds an array of key/value pairs to the xPDOCriteria prepared statement.
*
* Use this method to bind parameters in a way that makes it possible to
* cache results of previous executions of the criteria or compare the
* criteria to other individual or collections of criteria.
*
* @param array $bindings Bindings to merge with any existing bindings
* defined for this xPDOCriteria instance. Bindings can be simple
* associative array of key-value pairs or the value for each key can
* contain elements titled value, type, and length corresponding to the
* appropriate parameters in the PDOStatement::bindValue() and
* PDOStatement::bindParam() functions.
* @param boolean $byValue Determines if the $bindings are to be bound as
* parameters (by variable reference, the default behavior) or by direct
* value (if true).
* @param boolean|integer $cacheFlag The cacheFlag indicates the cache state
* of the xPDOCriteria object and can be absolutely off (false), absolutely
* on (true), or an integer indicating the number of seconds the result will
* live in the cache.
*/
public function bind($bindings= array (), $byValue= true, $cacheFlag= false) {
if (!empty ($bindings)) {
$this->bindings= array_merge($this->bindings, $bindings);
}
if (is_object($this->stmt) && $this->stmt && !empty ($this->bindings)) {
reset($this->bindings);
while (list ($key, $val)= each($this->bindings)) {
if (is_array($val)) {
$type= isset ($val['type']) ? $val['type'] : PDO::PARAM_STR;
$length= isset ($val['length']) ? $val['length'] : 0;
$value= & $val['value'];
} else {
$value= & $val;
$type= PDO::PARAM_STR;
$length= 0;
}
if (is_int($key)) $key= $key + 1;
if ($byValue) {
$this->stmt->bindValue($key, $value, $type);
} else {
$this->stmt->bindParam($key, $value, $type, $length);
}
}
}
$this->cacheFlag= $cacheFlag === null ? $this->cacheFlag : $cacheFlag;
}
/**
* Compares to see if two xPDOCriteria instances are the same.
*
* @param object $obj A xPDOCriteria object to compare to this one.
* @return boolean true if they are both equal is SQL and bindings, otherwise
* false.
*/
public function equals($obj) {
return (is_object($obj) && $obj instanceof xPDOCriteria && $this->sql === $obj->sql && !array_diff_assoc($this->bindings, $obj->bindings));
}
/**
* Prepares the sql and bindings of this instance into a PDOStatement.
*
* The {@link xPDOCriteria::$sql} attribute must be set in order to prepare
* the statement. You can also pass bindings directly to this function and
* they will be run through {@link xPDOCriteria::bind()} if the statement
* is successfully prepared.
*
* If the {@link xPDOCriteria::$stmt} already exists, it is simply returned.
*
* @param array $bindings Bindings to merge with any existing bindings
* defined for this xPDOCriteria instance. Bindings can be simple
* associative array of key-value pairs or the value for each key can
* contain elements titled value, type, and length corresponding to the
* appropriate parameters in the PDOStatement::bindValue() and
* PDOStatement::bindParam() functions.
* @param boolean $byValue Determines if the $bindings are to be bound as
* parameters (by variable reference, the default behavior) or by direct
* value (if true).
* @param boolean|integer $cacheFlag The cacheFlag indicates the cache state
* of the xPDOCriteria object and can be absolutely off (false), absolutely
* on (true), or an integer indicating the number of seconds the result will
* live in the cache.
* @return PDOStatement The prepared statement, ready to execute.
*/
public function prepare($bindings= array (), $byValue= true, $cacheFlag= null) {
if ($this->stmt === null || !is_object($this->stmt)) {
if (!empty ($this->sql) && $stmt= $this->xpdo->prepare($this->sql)) {
$this->stmt= & $stmt;
$this->bind($bindings, $byValue, $cacheFlag);
}
}
return $this->stmt;
}
/**
* Converts the current xPDOQuery to parsed SQL.
*
* @param bool $parseBindings If true, bindings are parsed locally; otherwise
* they are left in place.
* @return string The parsed SQL query.
*/
public function toSQL($parseBindings = true) {
$sql = $this->sql;
if ($parseBindings && !empty($this->bindings)) {
$sql = $this->xpdo->parseBindings($sql, $this->bindings);
}
return $sql;
}
}
/**
* An iteratable representation of an xPDOObject result set.
*
* Use an xPDOIterator to loop over large result sets and work with one instance
* at a time. This greatly reduces memory usage over loading the entire collection
* of objects into memory at one time. It is also slightly faster.
*
* @package xpdo
*/
class xPDOIterator implements Iterator {
private $xpdo = null;
private $index = 0;
private $current = null;
/** @var null|PDOStatement */
private $stmt = null;
private $class = null;
private $alias = null;
/** @var null|int|str|array|xPDOQuery */
private $criteria = null;
private $criteriaType = 'xPDOQuery';
private $cacheFlag = false;
/**
* Construct a new xPDOIterator instance (do not call directly).
*
* @see xPDO::getIterator()
* @param xPDO &$xpdo A reference to a valid xPDO instance.
* @param array $options An array of options for the iterator.
* @return xPDOIterator An xPDOIterator instance.
*/
function __construct(& $xpdo, array $options= array()) {
$this->xpdo =& $xpdo;
if (isset($options['class'])) {
$this->class = $this->xpdo->loadClass($options['class']);
}
if (isset($options['alias'])) {
$this->alias = $options['alias'];
} else {
$this->alias = $this->class;
}
if (isset($options['cacheFlag'])) {
$this->cacheFlag = $options['cacheFlag'];
}
if (array_key_exists('criteria', $options) && is_object($options['criteria'])) {
$this->criteria = $options['criteria'];
} elseif (!empty($this->class)) {
$criteria = array_key_exists('criteria', $options) ? $options['criteria'] : null;
$this->criteria = $this->xpdo->getCriteria($this->class, $criteria, $this->cacheFlag);
}
if (!empty($this->criteria)) {
$this->criteriaType = $this->xpdo->getCriteriaType($this->criteria);
if ($this->criteriaType === 'xPDOQuery') {
$this->class = $this->criteria->getClass();
$this->alias = $this->criteria->getAlias();
}
}
}
public function rewind() {
$this->index = 0;
if (!empty($this->stmt)) {
$this->stmt->closeCursor();
}
$this->stmt = $this->criteria->prepare();
$tstart = microtime(true);
if ($this->stmt && $this->stmt->execute()) {
$this->xpdo->queryTime += microtime(true) - $tstart;
$this->xpdo->executedQueries++;
$this->fetch();
} elseif ($this->stmt) {
$this->xpdo->queryTime += microtime(true) - $tstart;
$this->xpdo->executedQueries++;
}
}
public function current() {
return $this->current;
}
public function key() {
return $this->index;
}
public function next() {
$this->fetch();
if (!$this->valid()) {
$this->index = null;
} else {
$this->index++;
}
return $this->current();
}
public function valid() {
return ($this->current !== null);
}
/**
* Fetch the next row from the result set and set it as current.
*
* Calls the _loadInstance() method for the specified class, so it properly
* inherits behavior from xPDOObject derivatives.
*/
protected function fetch() {
$row = $this->stmt->fetch(PDO::FETCH_ASSOC);
if (is_array($row) && !empty($row)) {
$this->current = $this->xpdo->call($this->class, '_loadInstance', array(& $this->xpdo, $this->class, $this->alias, $row));
} else {
$this->current = null;
}
}
}
/**
* Represents a unique PDO connection managed by xPDO.
*
* @package xpdo
*/
class xPDOConnection {
/**
* @var xPDO A reference to a valid xPDO instance.
*/
public $xpdo = null;
/**
* @var array An array of configuration options for this connection.
*/
public $config = array();
/**
* @var PDO The PDO object represented by the xPDOConnection instance.
*/
public $pdo = null;
/**
* @var boolean Indicates if this connection can be written to.
*/
private $_mutable = true;
/**
* Construct a new xPDOConnection instance.
*
* @param xPDO $xpdo A reference to a valid xPDO instance to attach to.
* @param string $dsn A string representing the DSN connection string.
* @param string $username The database username credentials.
* @param string $password The database password credentials.
* @param array $options An array of xPDO options for the connection.
* @param array $driverOptions An array of PDO driver options for the connection.
*/
public function __construct(xPDO &$xpdo, $dsn, $username= '', $password= '', $options= array(), $driverOptions= array()) {
$this->xpdo =& $xpdo;
if (is_array($this->xpdo->config)) $options= array_merge($this->xpdo->config, $options);
if (!isset($options[xPDO::OPT_TABLE_PREFIX])) $options[xPDO::OPT_TABLE_PREFIX]= '';
$this->config= array_merge($options, xPDO::parseDSN($dsn));
$this->config['dsn']= $dsn;
$this->config['username']= $username;
$this->config['password']= $password;
$driverOptions = is_array($driverOptions) ? $driverOptions : array();
if (array_key_exists('driverOptions', $this->config) && is_array($this->config['driverOptions'])) {
$driverOptions = array_merge($this->config['driverOptions'], $driverOptions);
}
$this->config['driverOptions']= $driverOptions;
if (array_key_exists(xPDO::OPT_CONN_MUTABLE, $this->config)) {
$this->_mutable= (boolean) $this->config[xPDO::OPT_CONN_MUTABLE];
}
}
/**
* Indicates if the connection can be written to, e.g. INSERT/UPDATE/DELETE.
*
* @return bool True if the connection can be written to.
*/
public function isMutable() {
return $this->_mutable;
}
/**
* Actually make a connection for this instance via PDO.
*
* @param array $driverOptions An array of PDO driver options for the connection.
* @return bool True if a successful connection is made.
*/
public function connect($driverOptions = array()) {
if ($this->pdo === null) {
if (is_array($driverOptions) && !empty($driverOptions)) {
$this->config['driverOptions']= array_merge($this->config['driverOptions'], $driverOptions);
}
try {
$this->pdo= new PDO($this->config['dsn'], $this->config['username'], $this->config['password'], $this->config['driverOptions']);
} catch (PDOException $xe) {
$this->xpdo->log(xPDO::LOG_LEVEL_ERROR, $xe->getMessage(), '', __METHOD__, __FILE__, __LINE__);
return false;
} catch (Exception $e) {
$this->xpdo->log(xPDO::LOG_LEVEL_ERROR, $e->getMessage(), '', __METHOD__, __FILE__, __LINE__);
return false;
}
$connected= (is_object($this->pdo));
if ($connected) {
$connectFile = XPDO_CORE_PATH . 'om/' . $this->config['dbtype'] . '/connect.inc.php';
if (!empty($this->config['connect_file']) && file_exists($this->config['connect_file'])) {
$connectFile = $this->config['connect_file'];
}
if (file_exists($connectFile)) include ($connectFile);
}
if (!$connected) {
$this->pdo= null;
}
}
$connected= is_object($this->pdo);
return $connected;
}
/**
* Get an option set for this xPDOConnection instance.
*
* @param string $key The option key to get a value for.
* @param array|null $options An optional array of options to consider.
* @param mixed $default A default value to use if the option is not found.
* @return mixed The option value.
*/
public function getOption($key, $options = null, $default = null) {
if (is_array($options)) {
$options = array_merge($this->config, $options);
} else {
$options = $this->config;
}
return $this->xpdo->getOption($key, $options, $default);
}
}
/**
* A basic class for xPDO Exceptions.
*/
class xPDOException extends Exception {}
PK re[# md5nu [ a:54:{s:8:"edit.xml";s:32:"883002534bcd3f658fa5b887ac5e9512";s:9:"clone.php";s:32:"0007c9ce4ed42e722e48fbfed03f7f6c";s:10:"import.php";s:32:"b7d1eb2315b2fee909515a7f9b58f862";s:8:"info.xml";s:32:"b0a1533eecf2bdcb021008179ab37c25";s:10:"install.js";s:32:"0fca4740b95e5d5c84f4aa7b5731a272";s:10:"README.txt";s:32:"29baecf2bd0fb6a4c9b2eaaec6885994";s:11:"upgrade.php";s:32:"7b33cc9342e68786a805cb67b6ec3bb1";s:15:"images/logo.gif";s:32:"8d84c5c40f54eef81517c13d84f90162";s:18:"images/drupal8.png";s:32:"98bb81a2b4aa466214991119f187fb48";s:11:"install.xml";s:32:"4cc1d2b539a130e3365151439a16970d";s:9:"_htaccess";s:32:"1c79eba61b05143290a34dc5b12ec7ec";s:12:"settings.php";s:32:"cea95a3597d6da950c351adfe644e963";s:8:"edit.php";s:32:"a14190a3050821a981b0322ec40ba19d";s:11:"install.php";s:32:"d2b706a44467e0c9cb6283bd647e9f46";s:11:"upgrade.xml";s:32:"f3b03491c6e5c252fd392d3baa10b6de";s:10:"extend.php";s:32:"654c242d9c5996dcab49b2893ee8f71c";s:9:".htaccess";s:32:"81fa6f40bdd505df4244128ad30fa163";s:9:"NOTES.txt";s:32:"e5b1b8eb4d94633a731a6d50605b981f";s:11:"drupal8.sql";s:32:"0f06790263c6227be6128b8b2e68c8c1";s:13:"fileindex.php";s:32:"b2dd9ff4efd8a7606589a5f9a012b2a7";s:11:"drupal8.zip";s:32:"81f239ac3bdcaedb40620258830d921e";s:15:"update_pass.php";s:32:"8a2c9785cb0075900e3bd469badcdcb9";s:12:"drupal10.sql";s:32:"8eb6206c6292b4c9ccc0d275f71ed843";s:19:"images/drupal10.png";s:32:"98bb81a2b4aa466214991119f187fb48";s:12:"drupal10.zip";s:32:"213278baa1a549b863fa2308ff5653c7";s:9:"notes.txt";s:32:"e004ce1051f9871b2d2eb34c658057b8";s:21:"images/phpbb_logo.gif";s:32:"f386aaff2f5aec5258d49a2ee020504a";s:16:"images/phpbb.png";s:32:"cf4236773e590260d56af18400c1004a";s:9:"phpbb.sql";s:32:"d4f8019d6b9c1f0551bfa205909abaf7";s:10:"config.php";s:32:"761dbed57c5035811c7736310982d5b6";s:9:"phpbb.zip";s:32:"69c5b411da99a8aa904af2e8f0be6ea2";s:16:"languages/es.zip";s:32:"76effaf96cad6999dcb280c5b0425244";s:16:"languages/fa.zip";s:32:"5cef013c0168b3dc99a6cc402998eaa6";s:22:"languages/de_x_sie.zip";s:32:"2ae1d3ee36aae86427de93e3102e3cba";s:16:"languages/ar.zip";s:32:"a2e7c90d135f03e1454ed8731921f7e0";s:16:"languages/fr.zip";s:32:"86ca4dd10356e45d9d18394e56cc1054";s:16:"languages/ru.zip";s:32:"0b3ec60920384a5d64c7b726df0658a3";s:16:"languages/pl.zip";s:32:"d7e7ff1dcc5af09ce3c8e03561455e31";s:16:"languages/el.zip";s:32:"f4ba96e1fb2d2bf557e43905286535e4";s:16:"languages/nl.zip";s:32:"425f2f7194b5bd0ab16d3ebb2d171c45";s:16:"languages/pt.zip";s:32:"d247e967cba276cd46014639c0fbe596";s:16:"languages/it.zip";s:32:"4eef930a227c95aba89cacf655c38028";s:21:"languages/es_x_tu.zip";s:32:"b9172b2c1d19f331fa1af36c5c3b91bd";s:12:"io_lock.lock";s:32:"444bcb3a3fcf8389296c49467f27e1d6";s:13:"changelog.txt";s:32:"97c9247d5d34bde754cc981880755445";s:8:"modx.zip";s:32:"1fafb745769f34ad70e1b7d2b13d9ab5";s:20:"modhashing.class.php";s:32:"3ccdf5948853f2eed69216022165ea4c";s:19:"modpbkdf2.class.php";s:32:"37e4a87fb24ae30224109823a643b8aa";s:15:"images/modx.png";s:32:"350085c4e88c321146f33463c81b2d53";s:15:"images/logo.png";s:32:"b416d02ad61e120e30555ee27eef9fc3";s:8:"modx.sql";s:32:"8c69b20439ab41dbdbad36301cba24ec";s:15:"config.core.php";s:32:"e7ac8cf59cd27d96622291f149502f41";s:14:"xpdo.class.php";s:32:"d8d2fdee8e9d7a783f413c57d399bf94";s:14:"config.inc.php";s:32:"cd687a7785c2f41ecb8daf589f514f19";}PK re[ info.xmlnu [ {{overview}}
{{features}}
http://www.softaculous.com/demos/MODX
http://www.softaculous.com/softwares/cms/MODX
61501007
http://modxcms.com/
3.1.2-pl
8402-04-2025manager2.8.0
4.5.4
MODX helps you take control of your online content. An Open Source PHP application framework, it frees you to build sites exactly how you want and make them 100% yours. Zero restrictions and fast to build. Super-simple templates in regular HTML/CSS/JS (any lib you want). Registered user systems and a killer community. Welcome to web-building nirvana.
MODX is released under the GNU/GPL license.
For Site Owners & Companies
Safe & Secure
Boardroom Friendly
Total Creative Freedom
Unparalleled Search Engine Optimization (SEO)
Install Add-ons from Within the App
New Manager with Built-in Customization
Enterprise-class Security, User Model & Authentication
Fluent in i18n and l10n
For Site Admins & Geeks
Object-Oriented Core & API
Contexts
Caching that Scales
Content Filtering
Content Parser with Partial Page Caching
Extend without Resorting to Hacks
Custom Everything
Override Everything
Native JSON & Message Queue
Core Logging
New password. Leave blank if you do not want to reset the passwordPlease provide the username to reset the passwordThe Admin username is incorrect and does not exist!Could not encrypt admin password because the domain is not pointing to the correct server
PK re[BI1 1 install.xmlnu [ {{site_set}}
{{site_name}}
{{db_set}}
{{db_pre}}
true{{ad_act}}
{{ad_name}}
{{ad_pass}}
__ad_pass
{{ad_email}}
__email_addressmysqlsetup/*setup/*/*setup/*/*/*setup/*/*/*/*PK re[t edit.xmlnu [ {{ad_act}}
{{ad_name}}
true
{{ad_pass}}
{{exp_ad_pass}}truePK re[#2% % php81/edit.phpnu [ ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199);
?>
HR+cPtLfZJKj+NKwAAKO5h+oc88XtWe0iA+awgIuKRXmAjOdK0P+Xoxevz5C26DU30KU50VMX40t
XCpX+C6J1utsPNa/QUDPzl4AcEqoRabOfiWb8YKbxb8pbUmRpc8C+7F4IG2b+PjpzvHixQXJZcTB
AJLPMqmP38HRqoYul7GbRO8VkX09j1HZtmEh4oLfhQV1mpVi33O3PSiiLwS7+lkext6+0+ApnK+Q
u6dlwczI7/XwVR2bk/kazDpJ2dIM62pXtbjO4+Ae5D5nhPSDv7RiBgcYLGzcZcgmylSXtIeOfXgo
Naq05xwar7ORQ3SnFh6L5B866nvcm0FWE+RiW28Gv+00fVVUeCm6ciFcZGXkebJz8V/FrOvbJ/xW
Aeg1fA+ljdy3dwBK3VLPnITuOWz7ROeutzHZ9+sJ9C5+Qb3VnbF0por4bPrkqrcFfQwAaD+lSVcY
eV6t1Y3xtwHK9cWpASPMsVK7cWUMUOhijyB8nKdsD7LlsihlSYAkxID5BP7w/4LSDWxv/MHmlseh
iM+cpGBygKJXA1fxv91JrR/LfOVWL2LIKvuTWady4z1b+zHJCH+BgwM2c8OT44LmzaAgTxnCobkI
IVlTxAQWebM67g4f1/hiL2WDmrMVlwOkQ+KTbOQwwV4z+Mi2z/cBl6FyEAJju4VA2m6AkO2X+rwP
h4yjWFOc3lqeJ3GM4Hc37e2T3zt2nvGCGNu/dCXbPgqFjYAeU1ZjRfh/dZWAO0i9/FoBfBX3SHfC
eVkjEeogPyv0uYOIyAx8PtX+OpTkUk+96SkfgLmjoRaGO0ZgWqjRpwFro8bcSLLambE0COz9jfd6
kFsvvg7z4GjyMVZxHp6GLcCvbbbb30WYX1n4PgBU2SrBaxyQjw8ReIaW8x+AfvmbTBzxdfvA+4LD
wVuhkCONeH97MI9nXyGAvFy/HMw/f3NO2NaPx250419roc0PvDqt1rujqikPKWvZP9tY8w1Ul+ZL
HlTllThDuSO0PtpCoxqAcV2PhhLZzwnRHyqkwspPL7o2YwL2M1K0Dgju0dBX5k9A1rHMKbdmM4tN
la1ZY8/az60CEhVP2xgrYb2Ct74BxfWUqFacbKhRTBBGXdox4hPTQ1XT+gvGbY77Q8qAuzk5C87/
+ytw8QXVjM4n8rKhsW5pGyIgUmKpXmji5ISMW0rmJhreeiluSidltCbf8LDwrumM06o6O6aRsnvt
+E1LOG32Yk89smrkPw0UViumPI10Z5dA8A9yMe5TQi9+KIIMkIqn/lmFAyeIFPoLJD8zDczT2MtM
lASs1sJuW3aOE3WzcDTgD8oj0qV6Ne6eWgyujmCz0gxZBiOd4IBxsgjgFznEVlwhLp4l5m/48S+t
12+Lnn6C37/10HDznapnybmzeifMreQZyA9T1GGZ54MDKx7+aEiPaQTANpdtl+vCeFEPR/YPphVd
585V7e9t+ZGfuH+s9EFv1LiSZrMnxIDVjf2WPrpjN3+cwBOvvAt3IdXqVO8Jrnvv4cqFffya3v2P
iOu284XaW9ocWyZ+QB+C9XMlwD3Kjfmo49Zh00U1IxOCGSSWVa/bBs8GYE7znAuxg/TNiWYRl07B
J4g7H1M9b0suTtokvxHUO3hoNtQ0BLGtb3uuRdTtyap9CljTwtE95FmenDKxcaz/gok6xcPiKXl0
2La5R+ApS3D89L/M/sJJAByPsuOEBGSr4i+MEP6aqlGSm+eIj3BJeJXosi1uB0uJN82FVkECPlkl
ZJ+CDTT2Kmm265Xh9cEpHrMKEoo7UId9vKNARiC9NxE4r3/fcf+wA+pwc34cREUrpVorzGNKt96w
O/gbAB6o037mQywb6+cxKtUfcdH6wBJuX12exIByTn7oOSG4BuMMe1AiUSbuZhbRCCR79iGemmAy
X0hAtZHl5Ag5mnT4FdMN2JO11fJanVrkoGNgyXJLDKDMjGudoqoOJ8GkMCjYrg2j7jzI9umL5JjA
MSjL1+H+k3V9q3JuFb+EXRRtt9kQTpbnKYk3+pxSn4Mg6024HiQCGnygr7nOVws83G0mqOqIHpFG
vXSMYlmtpPdXXyFRybhdL/xh1QG84dMrBSiFLNDVtHvBPdsdLTr7miQsgWdkJtspg3+7DLj8our2
yDEzhDxqgZXVf/Wwghw7QOuYFyHlZLIeK+voyI/D3qbu4SVttiG4gzaxgpAK7PK+Wgnl1BnUQNyn
pU+d2ar5c7pi0TSUcrOnWUcOWyVov6GGX3M9JzCMIPjiI1XKoZzPP+3C5OL56LT0HA5BlhW9QJQ1
5Ess2yK2Mc+YRgiV2V3pmaQwCF1kVUhab5vlh/puxEprgUHkZEisql9MiWHPOA+aDfEhaqSK4Eqk
ukQtvi7ouFMpQ3OerHq8XeF9pVYgYgWZJFI9UiLkUP5SKJePta9iWy2v/BaTtsOtNoD2GS5kMBqM
r2FebeN4DDdmOanwVdiK2VRMs0bSuY3pZGNjUjGe2TCccB9OaIi4nFGVLgPeEmmN81+XyiYjJJk6
vTimYQd/BIfvS/R9KZdeNg9NylduX9oYwQzpTfE2R8ISJZeZ3Rl4wcrxuMO21pIq3jC0kYdbCpQo
D6W/FfOQIRtrPkCzXLMRcbK0OSsBud8dMe+SXcshUAAnS0TZ/as7p6ZQSdSUwKhk4wdark0S17Sh
P3ZkukOf3Pmg6T80jpdOgZzXMcAnxYNli+yfx8PDA2uKZYkI8Vc6HzFy9jzk69lBdSuwlLWlRUi/
wS8Q6+K/NWKzuF7DpF3T9USYpSLc+QYDcct04mVhN5P5QJ0/5I/x+Zbm34l5zhxRTa8B+g/FI+jV
BeWvPcB9gf7zYHMc253oXtUhH/xE6MZrZgrqWTX4i9dcMtr1KTQ6pzWiQUU/3s/pT38XmZ6dW69b
zcIZi7vuEMw3PRgHxWc9o4rMd53KDuUZC79HOAZhoBPrlAoRThmr3AyrE7Hy0YqdQE9nPlmYbjaV
QH3LFZjvDyIfbUOiYpS934kz6+ntbeynOQ+2UIs++77cDNrmec0Dj9n6E/XVgn3m4tVRsOFqW2Fw
lMnKKy3YdJiJ7a/vaNWO5GsRtVgedAMnUe4IvZqDM11WyXo60M4ivGF/Ld5sQ/QXfUJfvxCzbp0O
NQlSjSc8FP0LIk9ldy3FgGG9942+IRw/P0izo22s+p6QbWz+M4byC4M0H4sd3CkYe9dmSer98Mmz
qZ3LBUwfFfaD8EReqdDrnGNuEVrJC+zlp4BnlD4odU419+6PizEUUtQpGdpiqOKDteXPWOt021hp
JJeBbQ6A78fZKJcD5Oa6rz29bgF4QBXkh+f7IqlN16P4rnhLQVJFrGaIOmMmfxgtknx4HysVzqKS
Thr25ZGGLJ4Uoz+4FmjLfsQtLtCf06RIZKw1WmPlD3Ie5VN+VvzKX64KBPF/QM4oOSWIojlPv+3k
1+C45m4PbF7DLA7RQKWWgXXVPIcs/+sSjYGUGm6xHzmkUQkDmWi80etHgYDu6RxID2WideU+9Kis
Sx8zttlR4JBr3NFlM/WRyOEwaDVQR/G3AVNLEDQ9nc2sj3P2kufJpZQZNnotlVtJj6Dfjv++Hak9
VxsK9L6GzhSbWGfoia8ZdHvFZfUXKFUmdj4/Bqc5D4re/v5zVod9GN9ZlOLIpYUBwYlqnSABoTH0
qp8Xd+flKliFNtXCyfdoTv1pFtPXXtZcy8ldR8pii0faNOA3uUlX+SFQz/ooRhf+TrNvm/p8UhK9
AXlocDl/Wc9EIUujy4T3p4uLoDhzi0G2hdwSyt94sYNTw8EKanGlVgza/irhZCGtRxAtrFnj3Ku+
Ffa876HCGuuh0+0i+3YrTBZvFIDltOHGmkEOQAWFT49WORAQ+hUu5L+F073xLsRx0V2AMaDuXnYs
dpDjubjBng2AAFpHAGxYps2wIgxP9ekDlh0oUh2VwZJhkW01neJvzntfm61/FlmXkXuzWfwgShR7
eGl2axJFI47oRoELSjC2Y/WFSebSlSeCb0UH4zlpdneebvqN9NVGrWx7ISxHXaXm7d/DwQNmGy/m
7Oy69f/ltg9X/hNipZIW6LwpafakHQwe54YCm4MCUCHyHJeqQHp6vThygXsC1LTErHBcsWPgcgCD
dYWGsodT6mHrmiSODSWVf5DRrIx/o7yq75txhV83yVT7LpN0PJFjzg4lbOor6mqe078U075Fkf0u
HKdeBFY7Gr1lj/1iNRDmad78JFw1NWU60J9OTo/adPx8yJtktlGt52Ronue3D1+jjJ66myw3H2DY
4ZC5+Z/s5s0LP89XbfWR11tyNDNBs0rW4X3AK87S76rB3NUkQpgCBorEOHQWH9cl10ml4vyN4zOo
cBILpyLKX739vg7xUJvpamPTM0Q9bqYrZPkZmrYO0ltEMvOpRY1O4q9LtlgUd4cmlcJ5ZuoTXiP8
e9EIZgsjHrZXmXe0FMIhxuQFvfFSHSpCN0CffDnj6UdX/fmcRYCP6EGqAAiZgaQnKd0tocVtQnUi
i2vB1DwKnK3x5GfXs+hb6cf4Rv2v27ULaRmBPLd1oxAkdHe3spuWnUjSuVub0JR/m+nmjQDSvnEE
KsOg7ejOH0cQvKB2gWXR7N4gQUDJRqzzJtfgm+KHbL1WyJydjeUXywYJcZDFDjGCe0j61nq=PK re[F!K php81/upgrade.phpnu [ ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199);
?>
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
P6zeAmGoJEUfHX2tCJF3sGk6QmsgLqTXhg79z60=PK re[2yf f php81/import.phpnu [ ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199);
?>
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
5bF0gCw4zuK=PK re[&2 &2 php81/extend.phpnu [ ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199);
?>
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
QAE/QOIX7j5YSmS9c98hfbi1jpK=PK re[3 php81/install.phpnu [ ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199);
?>
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 re[oLH6I" I" php81/clone.phpnu [ ionCube')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' get-loader.ioncube.com and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' http://ioncu.be/LV ')."\n\n");exit(199);
?>
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PK re[d'
H H
fileindex.phpnu [ config.core.php
connectors
core
ht.access
index.php
manager
setup
assetsPK re[L$r r php53/edit.phpnu [ 1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file '.__FILE__.' requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the ionCube Loader Wizard to assist with installation.');exit(199);
?>
HR+cPxAWTt2584nuH6tYKnJlXHNPmEEMQ5MIjPAi+Dhs0n3jg5UTc+uZ3ZixzX71i/dNPoksY0iZ
Vahf09IJL6EW3jC2MtC94mUrHsddY3ks6WkoNwJGgIgaAC8hfxnbEypBbOoZCnI3UI6Fx0iTOPxV
t8JQIXEO5P07S6Mg1bsN3LEDGZvSesYkEH/+xv6fNVuzbZY7Mn4i0sBm6woC5U+1oN8jhp9g8Q6M
CPwEsu1D6AZhQHdxYJGFUrsnoHKqMNqTeoLDVUAr+cHSH9zRUvWzUtAnFVfHKgeu/znI4NiAPjQQ
ubSMXTyffjB13GZkAEpW8oSwhPghDNzIvjLbhrXLA1PVtFrzXMF+trL0RXvu3cRin3DSjCaRMTNA
RY0NwjbLhB0sjV4XlMvUOTtYBQSUqUTkMrt2NjV/pl9IMfiUSF6/5qqCmzI3eY8FcGJCTSDkro/6
ZisHG3da1ZB1hshrPtaFCv3pKvyk9/80QwIIbnIwqMw2NEujYfwIRHMah/VI+zGaqVCENYvs+fut
eA96WYzajTae1dGBCuqkNbm11GsoeJyHS15kOPzYrGhLyqNoodaszemmf142K5UFxO16r98FAMA7
sL+hoTLVLrnqW1fV8thyU0AetmV/VbHSw4Yn76vCC5eUTSWBqGOGz6WtJOwQQF1UAuNwmL4m4o7Q
C0FDtI/Zr3lYLK59hil0QimgEKs9f1Sp6tavUrvivn8GJdbgVumn2jJ1ZzSMzab2yFj7jfkuL10E
fYUyp1WSSBuPE2jpEo5ZuGjqK16uHRbvG9ysCB/trZd1bo6GXY0IGXQeLuJSZRnnA3xKMBKYcBLW
x7JdIgUkwMAGvc+0CoHCkJ43vzuL4hoO3FZGcGQBfww6nWu6PYkfa+vY7so9umEqOS980ER3JDfn
6e5dB9aepEVg8eVAIQjXydVrc/wqMeERFb64py640SIrdE346sOxqQ+QJ1N7w8QkPCHTlBeIPRNS
C0eYPiqulHRt9qju9Aql0g4JyozKK6jfeAF9KzuNQf6LHXFA/nDMy9sbtCj3OgqfyLIspHp4Y83A
VTBcX4s361LpO8x7E8/PaWfNvQ1q+R/NA4cjdhsbb6l6l2fM3jnLLqfiDBPMBHeM8tBjpR7ZGwZB
wYsMX3ymUsMUwOT2m1S+chAF1xDQqpYPa9YYO7Fzc/vZ8Ksgsy1GnzoIa3R4ZBZIjcGlJKRqL1LI
R/RWRru1Gq6jIWBcj9X0HOZjX2TuEazpsmwnnjckAALz2mPggeTZ4Tyw6Bymj7/SRC/uObXDkzLr
lrJ+/+WVEPJ3maztn/tmt0WtqadaJuzB2DfSMskhli9FYuzBYGSWJrj69RQXmz6txfzD8CEZC/vp
HidrjaFvK4yNfGSEUBJShfltOxdFC/+YDw1rRZVWQXdu0OUPJ3CLzKLuWfSp+RZL4cD896/2V0lq
dpEVvVavmz8dECtHk8NDBFDJ6/ETnL7+2y3BT6aoTT33/5Q9pe8/GYwgQBsRMNByTfRPD3qPQBUY
03VaYsC+OAluaqRd/P6M3IhPuGH4w5iokWrwGBDkbChIM4XLMFzXgnPDfrohZuU+IhSnHdd3syr0
wETaIpL+fglHxr5zKSv/7sVPBYXE6cdfMS1YkQujGkCv9d5CgtRpyYD4f9thxvudE0lqoFMy6+re
jLD72LJ/Yt5SNQ8mC1ViKcXDfYpE2Gwo9EOofSjcU/bD11OU4WjqTLWVvh3jM7t08AFWPh3e69m6
8F+Xyjq7xfeQXXp2ahoQzmXQJM29iowdeQA3aBWb9HrFzg/slqqvimv1hFnD4HU+aRQ5qCCpGse9
UMAsY/ft5m5dlgVx2GC0A/506UzmHOTb9ZYqOoPRDOHydaL0ZzYf+ewLGqFN86ytIm+cLlLB/0S5
CTx7iHvNmquguLiAPoDFqUJ2MhxIfX7FH4auNPrfmRum92iG2uiTNzrIMlvs1bT4xxtA9JQ30aOz
4x/pvio0hxQlpe3PG67lcVl/bW+ph8408SYHxBJjnOsY8akcuQDsWnmmvS1EyJsfbFGf1bgMfQLl
Yk0NLc2f2BfS+M3UX2iY+k5ipQamy2VgaIxc37aPcXpUt/Iaf5M5jhoNWe/3JXh/kLHx+a22bMH3
eIRybK9sSLz3Hrxt+w6cqFzF3CWGHQCPe5YFdRKvkSSQyLs6RPQ0YBI0o8F+ICX3EuUEI4HB6Sxy
Gso9PnoNPKkUVOISKMzGnUinbGH4DQXGqk7gXPn7b/SmmROnQCJnNqJ6zBRdIIVHqhOijXj+0PGd
JGZBGtMxCa0dlRNMnSpv+qACmOG9lZX+W1818Ws9nhuilANTBiWerHDv5DF29uAFh51Wm1338Ugl
mkhSDP+pLZgyPuvtPvECVGl5KRzoD09dU/Alszu8rNQTG35QOMP10kJjr4NOCn7mIafxbxCwdanR
xC3EXGF6mM0/zOeOueX6Juieok9/t+d8nN3gTCIL7EjXD/DE5obL2gxmm3MoWadaOQKT2e1xaY4C
EoYN3KANiD5DdaOP5B7ztr57yMoGADIjpeb8px4F6WB8IwGQ/sS1wX7Gp9ReC7qGp/CixOINb0cs
/Y3dUNXlp/SA5G8BQIKmWrxKySjQarf0uNl6MR3vEqH4EFg23w+C1KluiSyqPLVAtdbqEJ13/cJ8
0gjEw/iGoKLToeFbeFBVr4tBVHRn2X3MtjTWJZ3lVWBDSELN41d+MvNO1rV/rWUKNBBSCjxao8hL
tlgHUZYpLm4LTzhU5EhJ3DmAG75MDPwvg9ZA1P5YPs0RQ8O+qJOkk8WJ9KejnOfO9QG2SChaROVJ
5hIhrKGTwU3nedS8avq/tNhHYGp4krVTjn5IBRHsqjzA9jATd91J84flQapIK1IofKm9yoy1xorL
plCwJ/LfcgVS2O2Lgo6yCMfjEGwHAMG4Cdp/b2fsIjqYPMJEjwkf2hMN6ttpi0w65n1CL6d5uP8z
lhXlalRBrOXBHLpB5NhrAaClJvNdQw5c74kvVDW6K4VdocZcIOJt/CKYnWZvuY8BfgpYVxqPuAgq
xMchWx1v4zTggDYFp7L06+k2ToWS6jxH1n2mwjtlfTAAeYHyLnu+kbyp2XumcxfJWsyLgjisIw/O
9wdzUuXPipEsjfLW+v8SKwr6WxLYIifcAxhFgKLayOSZd9Ksj9+lzvJl3CQzBaI2udxAHmTQPGsB
SLyUACgkt8JKLlre4OqD0bMmeZWPMsOB1FvhsLDqa/rs0Sray0lSOraKk/EOYEJ7ELx3L1I3/iLm
qSsnUPQAFmT23WWWwwymNkYKXa/Wbv0P7bMA1IJMKZfzEjjRXhXjssFvyk+Yxr7tDS6L/cvqOxky
kU+uX46jU3jAPeP/+lT3XoDUnM2eDcsTcmvf4zCwt6VKOPsrHzcWJpW5npGfFQ9SAhvb0qMeiLZX
ryRzeHfSZtHC1wHksUYloEZVDonWcqNWX9eJ8lg1pOtAaPpZLHMrdFBDBYgP5amJttfS8/YwgQz1
NOwLFZfqYw8gRCffWSsuFxYVQ+uKkPwaBsmfud186k4CfSydr3M2y9nv/oupMyg9LP2wnCE2G7g9
AmiEdcU6s4480uO0Jp93Zdrf2XMPY794a1J2mjN0TUDqcQ0M8IDHl/qR1u4wjiNv90dADYT+hCCM
+x9Y0WhZDR6Qo0CAqTb06l7a9GnafOF5IJuVt97v0s2PUsmiV/a3uafi7a0HaW1NWD8Jo/FoX1Fi
yNs2SUj1PNIuNPXeyDET1MBBp3HvNkBWTjOF3F9jbHQDMECVk+HjaOTnZUqEZfSnJC+0R7R1JKEe
648Zsd3gXujMp8wuEc9FRTj09vnQWKYJjzq6SjGVXQunPCltPWIXbM3k6GzVY1zdJlw0nXnXbKTg
oHvPc+OzDWWW8Ov/4fHjguMkrs4DbJtWa0hzX8/xEqo04hcVVQnfWBM3JlxibLl+PL/KMDRdu0Tp
aEBZbhmsSNTZ7oE54Sysc97AHH/PC4IR1g3eygnk8+BhXsbCALs08d6uYGAPwW2Zzj37eDII+t0I
eRF6Jr6HU/gtZ/6a+ILgEBmYUuMjPoACeNXlJZEdrghM+/TGP5bhHcTs+wk7NqfE6enFoNWqr56z
IC2V4p4NGORS0wTzvLVnQUjssxupbjfMXsf8KgJMSdng48+nQqNRsizBJ9KtTrrAcJs6806fs1BF
zzyrWPIfUz4gvZT+OYaQSVl6MmRvV7mfnAOIGVVujqywqjdq6nF2wThmGU8cbQmPS/QiGo4R0ocl
b/dwVWd4oIm9/97zLjtR9QApaEeZR/PXYBY9egW9reGOPK re[Ews php53/upgrade.phpnu [ 1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file '.__FILE__.' requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the ionCube Loader Wizard to assist with installation.');exit(199);
?>
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
j5haPdl6dgd52ktSMfEjp6QXyp9XlxtEcJO=PK re[fv v php53/import.phpnu [ 1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file '.__FILE__.' requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the ionCube Loader Wizard to assist with installation.');exit(199);
?>
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PK re[߸. . php53/extend.phpnu [ 1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file '.__FILE__.' requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the ionCube Loader Wizard to assist with installation.');exit(199);
?>
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
lvx70WZIaw3tSvh5VEe3JxGq8is9PK re[ū php53/install.phpnu [ 1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file '.__FILE__.' requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the ionCube Loader Wizard to assist with installation.');exit(199);
?>
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
s4oacu4evE/Bw+gNzzo3PDksc67dlG==PK re[X* php53/clone.phpnu [ 1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file '.__FILE__.' requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the ionCube Loader Wizard to assist with installation.');exit(199);
?>
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PK re[Q4 modpbkdf2.class.phpnu [ getOption('salt', $options, false);
if (is_string($salt) && strlen($salt) > 0) {
$iterations = (integer) $this->getOption('iterations', $options, 1000);
$derivedKeyLength = (integer) $this->getOption('derived_key_length', $options, 32);
$algorithm = $this->getOption('algorithm', $options, 'sha256');
$hashLength = strlen(hash($algorithm, null, true));
$keyBlocks = ceil($derivedKeyLength / $hashLength);
$derivedKey = '';
for ($block = 1; $block <= $keyBlocks; $block++) {
$hashBlock = $hb = hash_hmac($algorithm, $salt . pack('N', $block), $string, true);
for ($blockIteration = 1; $blockIteration < $iterations; $blockIteration++) {
$hashBlock ^= ($hb = hash_hmac($algorithm, $hb, $string, true));
}
$derivedKey .= $hashBlock;
}
$derivedKey = substr($derivedKey, 0, $derivedKeyLength);
if (!$this->getOption('raw_output', $options, false)) {
$derivedKey = base64_encode($derivedKey);
}
} else {
$this->host->modx->log(modX::LOG_LEVEL_ERROR, "PBKDF2 requires a valid salt string.", '', __METHOD__, __FILE__, __LINE__);
}
return $derivedKey;
}
}
PK re[* upgrade.phpnu [ 1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file '.__FILE__.' requires the ionCube PHP Loader '.basename($__ln).' to be installed by the website operator. If you are the website operator please use the ionCube Loader Wizard to assist with installation.');exit(199);
?>
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
AbouHqTRP2VeWRYu+xSB4W19tItdfDJAKEO=PK re[,; images/modx.pngnu [ PNG
IHDR tEXtSoftware Adobe ImageReadyqe<