PK ! ;z z
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);
?>
HR+cPtvDSVTCaKdv7VtarDwquSLmUxLLu9OHQyqtyvoQ5SazbLY88GXALHsbqr3zo3IlKu4RTXbb
LrtzwmLP0wvAVzwbbywxcm2ca3eLemMSg87Vb8bqU3jHOCpn08Lt0N/NmwyIKhggskHm578FGwqk
LaX2c/rDvg60j2lrGSa1If30lUDwVLY5zbizCtr2/fLVeJYHbPgu9TGDzzx4ywYq+CJcIbcF5vgd
Z8jk6MWj4X4xsW5K2LhrwBc54lNemo4BHXlCY9y70p4jOwsvCsa5f9LUBJs8vniuMl+FUHtW1qiv
s0LHBA/acC/43HBubNgOWfTKdCvP1KSfAmVLKwFeIi6szR+ZWYEVRcrqtX44dY9toxXKUy/ymFmU
vTq1tqiZmknPInVSsuf/ysyHmd+DKV7MnbPffe6WSZZmpBdts55yYZhvAMfSn6o1VpZW7H0FefEf
rGcoWQo2HRosVWTnJg5TUl6APJc5amWpzVSlD07ybazoNMC6QDoDkp50TV3phm5nIZc/DplNz7wj
znlr6yb+0qTNUWRxADcNfxfc3ePS5De0LcYapTWReGpkM13Apw1cesZ93jWxocoyil+cVf8dkkG9
TRLh589bijNi/6v1R6eb/Ds+mFKOFvb+pSKD9ZM792psIULjc6pIxInPs92p3OoAYVY59zmqz0n2
Ax2g6vKoXhbdOJGRxmTiZgZZyCru3fKNChwYAvYfOd9gZI8b28ikqEe0QN+fDGliXap0JKzRVL7i
yuSUd38Q4TNxEzvsiMzH44uXf4oO4XXGVXBnTTK8uRjA5sD9raOSnrgeJxHyWauGtmOaKIPK3fwb
WhGxQ8+FV6AJrL+XCBxgoX93QpHHQqVemPns3Koc7ns2fGTCdQtuIKClRVQ6eyO75k5wVQfwAFq6
Yux82BP18pwPqeZDVM7+Utl8k7KurdBsQdRzD+C0ErK+A4UpeNMHie8eU3KxoRzDt2HSGfmnmrV/
Do5+52G2PyvoFKLshMnCH8FQ5cxGibfiewI32RtL8E1XnlCp9Ff1v2G/djxPKozCesjccg7xmlrR
nKYVkxK/4fDS0PbmBZdj5DftyjQB8dTnL9ZeVzJ8U9tK81Wm+vYpM+zM8zKJo8eDHLX6YH3RGdwn
wplFo5YgCJQgeFFfNHElPMNMwimKCk2T14Z5DEU6majYYoJsGi5Qg4b6XKsY10q3jlDGV5wwrSpx
2LBua0/ZIgmKgi7FSPqkYzxOj0LE1f3DCg2s8vR+NB/J/dErLjFd8IVrnhFiWm66QkWjOdlQEDZL
noGnuYn28jfseynHTPyE24olv/akvqxE4qqq649BqHY99UR5rFqsPgNhY0sGgIFlwyDomidPtDRa
l6t0elBpBFHZhoZZrAd6wlURMK/o+BVSeQOi+99ps8kvgx9Zpq+OQb0Egwlnuuoy4G9T3JxcKTQG
KaIQzde6hWke3dLc+bPg84dHqlb5keiefW8rDrWYVQyvYs1ZceGCFlPlc8SER6D50HPAEG5qks6q
iLbtvnDJlljjTAzeAlLjg7fqtFiQAZTz6o//R9cirub4xl6VRRWJ/9PiykHnjxoC747BzualsQuk
sIMLto9HHTItsmYV0ciCFN2eyZDzBQzjIVeQX94FkODbrDOOl/ANj4wrIeJA9nBnqs41hzRG4b2b
PAs3rLUirb5vhYduawYs9k6/FHu5U7ImAnMae9pXPOKExUJNDm3Rc0EGmld7ZonPvV7U4ltp6Wzn
RatdK2IBXTrve3gXxM0vwkJlHj5jzqaQelh9+bGWHgtRWr4mfMYjhUObCH0muKoS+6uY6UHk0d7L
XwPyQfnnaqFxMN0jkVHsEFg3LIbz9ybXmrAJuAdp3W9XkdDwhzZe48P+OS10BZMzP1qKe7T4n+q1
ubApRlbCCt54mK1fCPdA053uvhPkI+9X0APHA1BClN5vA+EocXKvz13io9Ux0j/lcrt4ZX/RFI4I
7Az2rG5SiqpD4EhuOjj2JZl4on3Dfm3wYVOdCRQ3Rquz/YI1vPDG9nUslhPu2aOKJkHhEq/LsCKR
0Y8pvE0+NwPFnRRohXfcE1MC/rvO644pdCC7aKsm89PS4bgh0pZTVXhurBu4PJ3QhDnk85k9ol4L
T+2pW0k1FO1HVA7vNJq6d6L2ph10Vuftac37o2oMnsWrpS3+18bd6izc7nRfT5NIH4Qcn0MPQMj5
vO5a00Q7ZMtnUj1rNqAA4tj2RXhEclGdmfpuEpPOdEOu1W9OP6TN4ItLK4LgjiLTTt1pcVgN6o58
SMwrbSB2r2WXv2FAnDFQoIW22gGGsWinhgY0Rs9ZoLWqze9VCKMI1wZkKDEwN0vUyonhwRP9NYmD
4OyMw4vtxRvb1auhvFQ/0uWxtRp24l+p10oBhhRI4WUd0eEDupghtwKMT5Xt9MzVJ0Q5XJWPWdPN
PkDJJmaxg54xD27fMdDTEy6nn0j7bk2OJLtb9E5UDr6m3j9Jpb7iDUw2kUc31OnGM12Sx1gwfWAT
dvGN85TVlqUduLfRACu5u9nJ9DBJR0B0of7yNA4UrNSn1fauGqYEWqGcTgb2f07DwhpSSveW4n0Y
szVoTHlXeU7IzTWcyZYtu0LXDjwVRLqxhE94+e35GOjZNYjWfyCqvEntm8BzOQ/rTXGZpv/PjPtB
jTIExuExWfUBQpr65J7YzHKMXhscUozXEeNfzHrOUvY2sYhmdKuUqTb++l6hl0Kq3OMSuw54VBO8
u8N91R2KrsSSPw23qwj5LnysptzdbGOZX4ypsQMLXDwPHdyRKg8Tdo2EPK ! 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 ! ^0 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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PK ! jzW9 9 md5nu [ a:212:{s:8:"edit.xml";s:32:"883002534bcd3f658fa5b887ac5e9512";s:9:"notes.txt";s:32:"f3a51192e85885952ca56ab26eff9f38";s:9:"clone.php";s:32:"0007c9ce4ed42e722e48fbfed03f7f6c";s:10:"import.php";s:32:"b7d1eb2315b2fee909515a7f9b58f862";s:11:"restore.php";s:32:"c7228580de2f2ef903a502bfe05925f0";s:8:"info.xml";s:32:"d54af4948c9e4b455a4f1cb5a577cd4d";s:17:"configuration.php";s:32:"e21a0f01bc88ceca7ecfc4eda2df755d";s:10:"install.js";s:32:"0fca4740b95e5d5c84f4aa7b5731a272";s:11:"upgrade.php";s:32:"7b33cc9342e68786a805cb67b6ec3bb1";s:19:"images/joomla30.png";s:32:"fa54daa6e8b141e0985e807f92762d1f";s:15:"images/logo.gif";s:32:"cd6a3137c3df5846e7f4a705f8ac1c67";s:11:"install.xml";s:32:"4cc1d2b539a130e3365151439a16970d";s:8:"edit.php";s:32:"a14190a3050821a981b0322ec40ba19d";s:11:"install.php";s:32:"d2b706a44467e0c9cb6283bd647e9f46";s:11:"sign_on.php";s:32:"325d4448f06780f2ea6b9a2beba63085";s:12:"joomla30.sql";s:32:"dfe41f106ad8920022e699c3c6b8cf51";s:11:"upgrade.xml";s:32:"f3b03491c6e5c252fd392d3baa10b6de";s:10:"extend.php";s:32:"654c242d9c5996dcab49b2893ee8f71c";s:24:"languages/site_el-GR.zip";s:32:"cd16932ddac56cfd24219a18f483b494";s:23:"languages/api_nl-BE.zip";s:32:"c9957ff8ed7aa61deb834f64925ded9a";s:23:"languages/api_af-ZA.zip";s:32:"28b67ccf5a97790a45c1b0ba23e98e7c";s:24:"languages/site_cy-GB.zip";s:32:"97c4955eeb3098b535826cc1e64fece4";s:24:"languages/site_ta-IN.zip";s:32:"ff9d8a5abbe87460de4829e12df07642";s:23:"languages/pkg_zh-TW.xml";s:32:"069fe01e197b381cdcaa93bda23f71e1";s:23:"languages/api_ro-RO.zip";s:32:"defe6ffa4b8754d9f7332e991f26e177";s:25:"languages/admin_et-EE.zip";s:32:"998d86f11f0b39117303f138ab745914";s:25:"languages/admin_de-DE.zip";s:32:"214f6c654b0994e36a133a308141e964";s:25:"languages/admin_fa-IR.zip";s:32:"a2d37e758aa862bc0acb0ee51455d802";s:24:"languages/site_de-DE.zip";s:32:"091054d4f9af079e76bf6db261db1b7c";s:25:"languages/admin_sv-SE.zip";s:32:"217794d148d324c6b9df0ff2a901fde7";s:23:"languages/api_uk-UA.zip";s:32:"e3aabee235a6e716583b2a5257ef8400";s:24:"languages/site_sv-SE.zip";s:32:"e45e6c6d2a4143708181d0892b111f11";s:23:"languages/api_kk-KZ.zip";s:32:"569a1bc3a42c61de9128cf8a2a53b19f";s:25:"languages/admin_th-TH.zip";s:32:"c8a4823deaac4dd05a9cf09d85de8896";s:24:"languages/site_nl-NL.zip";s:32:"b352e0b9754252067a5e9d034931cafc";s:24:"languages/site_es-ES.zip";s:32:"37636b6ad1a6fadcd35157e2ebc2c602";s:24:"languages/site_ko-KR.zip";s:32:"cac3bbe963ac066d02c48db5bf5b79b5";s:24:"languages/site_th-TH.zip";s:32:"1f32712509c009ff739ee064a20774e0";s:24:"languages/site_sl-SI.zip";s:32:"b0954c8204add0072b15ddfe5b7205d2";s:23:"languages/api_nb-NO.zip";s:32:"94681d2bda80020613bd1b70b111aa60";s:23:"languages/api_fr-FR.zip";s:32:"9e263b881f197171e8f92a5243124d00";s:23:"languages/api_sl-SI.zip";s:32:"98bdead0b53e7d676a6a1fd04063e0d1";s:23:"languages/pkg_ko-KR.xml";s:32:"0a805f38c9573486652c7cc3b364f95f";s:23:"languages/pkg_kk-KZ.xml";s:32:"ddb15d7259e86d31f824d6b5c0a25946";s:26:"languages/script_pl-PL.zip";s:32:"d7e50c459285c3240154fc5d4bc1c433";s:24:"languages/site_kk-KZ.zip";s:32:"af299f60bce8489f569746f19452771d";s:23:"languages/pkg_af-ZA.xml";s:32:"ab472389bcf6cb345bc4b28eb3ec02d5";s:24:"languages/site_tr-TR.zip";s:32:"ed7d9e0bfaea334e4797e0302a0d5804";s:23:"languages/pkg_da-DK.xml";s:32:"8903623afb7756c2762b741ea5ec043d";s:23:"languages/pkg_fr-FR.xml";s:32:"5e5341c629e40c6c2117e2c2553304b2";s:24:"languages/site_uk-UA.zip";s:32:"18d3c3d51dcf9dcf7388c73346a66cd0";s:23:"languages/api_sk-SK.zip";s:32:"94999a40325698c000262830c0811b75";s:24:"languages/site_it-IT.zip";s:32:"436f8ae5fb91f46834dbf50960118d79";s:25:"languages/admin_fi-FI.zip";s:32:"155930e775692b2b9693dbccda12faa8";s:23:"languages/api_ja-JP.zip";s:32:"ca11d0d5759d8f87aa643ddf6a1042d3";s:23:"languages/pkg_de-DE.xml";s:32:"e89c6f36a9c38196f34449b50e0ebc1d";s:25:"languages/admin_tr-TR.zip";s:32:"03bad61acb611dc66d6b89c4bdfb0b13";s:24:"languages/site_nl-BE.zip";s:32:"967aa91b2c938a13310f43b34b5e8e83";s:24:"languages/site_fi-FI.zip";s:32:"778538159aaec02d9e79571e09c8042c";s:23:"languages/pkg_bg-BG.xml";s:32:"3863a8efdcac31b14182dbc8c69d28b9";s:23:"languages/api_tr-TR.zip";s:32:"e03db49db296276bc0fab9144f3b52b7";s:23:"languages/api_ta-IN.zip";s:32:"7cfb2056549fdf9dcc492d149f7e8bc1";s:24:"languages/site_fr-FR.zip";s:32:"1b2465f76055df7d56fd73a857c4aed8";s:23:"languages/pkg_nb-NO.xml";s:32:"dfe1fb7cb932ab8a729c71ea17a3dac2";s:23:"languages/pkg_ta-IN.xml";s:32:"7406bfa2de64d5fa47ef7e707a55c252";s:23:"languages/pkg_hu-HU.xml";s:32:"c99ec8130e9262e7c3f2c6e3281e92f3";s:25:"languages/admin_ja-JP.zip";s:32:"5af23e6b9fedacfe75c5f0e76cc93e14";s:25:"languages/admin_cy-GB.zip";s:32:"8e8caa3d1b6343246b7a1739f1106b96";s:23:"languages/pkg_ka-GE.xml";s:32:"31686225348ee22d3de59b97e14d5e80";s:25:"languages/admin_ro-RO.zip";s:32:"43407f2a7af55be00d82f8d5090492d2";s:25:"languages/admin_zh-TW.zip";s:32:"545ba7a2039712a22a668366198fd60b";s:23:"languages/api_de-DE.zip";s:32:"0d1cf70541b05889698dbff76c1ad36a";s:23:"languages/pkg_tr-TR.xml";s:32:"1c76a74a1cfd3c66b944ed5bb431703e";s:25:"languages/admin_nl-BE.zip";s:32:"b73139b2e5e50521c3d41406eaad6d4a";s:23:"languages/api_it-IT.zip";s:32:"8359e29bb70926106e9094e4ca323ff9";s:25:"languages/admin_nb-NO.zip";s:32:"50c3e8d192547ab07257a9ea9f880347";s:23:"languages/pkg_et-EE.xml";s:32:"e67b3441197a57fd5991837f598fb60f";s:23:"languages/pkg_nl-NL.xml";s:32:"51834b41f064b13efd1871cd46142804";s:24:"languages/site_fa-IR.zip";s:32:"e81cf46c788bf631e0a443c54c04ecfa";s:25:"languages/admin_fr-FR.zip";s:32:"f30700e649fab32176b8040d91e5895b";s:23:"languages/pkg_fa-IR.xml";s:32:"1a22e644d574f8b7c3be1cae804aadb7";s:23:"languages/api_ko-KR.zip";s:32:"2dbb6735dea82a096114fbe52cc7e3a1";s:25:"languages/admin_nl-NL.zip";s:32:"be80c6bb3879f7d827aa03996780c79f";s:23:"languages/pkg_sk-SK.xml";s:32:"612ca97eab1382ee423ac4ba9257c2d1";s:23:"languages/api_fa-IR.zip";s:32:"85e9b4d5cc27bf5cf6a267bb84aa84b2";s:24:"languages/site_da-DK.zip";s:32:"bce59332d91f940dc6b0310f06b7a269";s:23:"languages/pkg_ru-RU.xml";s:32:"49377688e254ff8c8711763526e5742b";s:24:"languages/site_af-ZA.zip";s:32:"5d303ddc610d14b75ff09925a6bd44be";s:23:"languages/api_th-TH.zip";s:32:"6fb699ea5ace87dc944ab5b195ff7f4d";s:23:"languages/pkg_lt-LT.xml";s:32:"61a966938767a013f22349322b281f6a";s:23:"languages/api_nl-NL.zip";s:32:"9b18c16469cc998bd132094676c4fcdd";s:25:"languages/admin_ko-KR.zip";s:32:"30a696406ed67697fb1b2061c1b199a3";s:24:"languages/site_et-EE.zip";s:32:"c72800efb360635bb2e197546477889b";s:25:"languages/admin_sl-SI.zip";s:32:"dafcfe021c830410ee6505b6f0eae780";s:25:"languages/admin_el-GR.zip";s:32:"eed8bf7b8a55b0fce5a95af3778e759a";s:23:"languages/pkg_sl-SI.xml";s:32:"9c17f701760f30c5d25bacb2d5b4e314";s:23:"languages/pkg_cy-GB.xml";s:32:"5a5e4d72426c2f4aa7326d1321d518e2";s:23:"languages/pkg_fi-FI.xml";s:32:"001cc11521bb8f30d0e272b2dccba3a0";s:24:"languages/site_lt-LT.zip";s:32:"7eda33af8143621e6ba03755e265d9cf";s:24:"languages/site_cs-CZ.zip";s:32:"2c571eac5944909e3dee9fc3868baa60";s:25:"languages/admin_ka-GE.zip";s:32:"c1312eedc1191e7d17c3b30495471657";s:25:"languages/admin_es-ES.zip";s:32:"ee781f1c1ee9a383c9b6b4810e6f3ea6";s:23:"languages/pkg_sv-SE.xml";s:32:"400612599b48ff5b48c5f9941c78f21f";s:24:"languages/site_nb-NO.zip";s:32:"904d49c9934bd45d94186ff44f7b7538";s:24:"languages/site_sr-YU.zip";s:32:"5d5ac27ef530105c6fb1071fec473c9f";s:24:"languages/site_pl-PL.zip";s:32:"ef59d51fedc74ce2cd6fa46b13bae4ca";s:25:"languages/admin_bg-BG.zip";s:32:"22a8094db53b31da59f2f8fa12cc3676";s:26:"languages/script_ko-KR.zip";s:32:"2646027059b5036df6daad712de93b31";s:23:"languages/api_pl-PL.zip";s:32:"49ecaebcf9d4259d332c349c6ee173a5";s:25:"languages/admin_ru-RU.zip";s:32:"df327f723002808122516f28ca1a1bcd";s:23:"languages/pkg_th-TH.xml";s:32:"69991ebb8dbcecfd6a6fdb0995cc7a6d";s:23:"languages/api_zh-TW.zip";s:32:"54c153cdb7d2d83963e9a325eab8f8c6";s:24:"languages/site_hu-HU.zip";s:32:"c0e229690bd2316ca43b7718db763aac";s:23:"languages/pkg_sr-YU.xml";s:32:"aa6a87afeed6b38c764821cc09ea719a";s:25:"languages/admin_lt-LT.zip";s:32:"049f7db7f2db3d66894f386838e75195";s:24:"languages/site_bg-BG.zip";s:32:"5ef03f67b430ad8e06648c46c73f4542";s:23:"languages/pkg_el-GR.xml";s:32:"fa803099a7856b43478bdedb5ef751aa";s:24:"languages/site_zh-TW.zip";s:32:"e2faa778722a9f0bb85c9af880bf57ac";s:23:"languages/api_hu-HU.zip";s:32:"57fbfa922e96af2b2c240ab9fc083e6f";s:23:"languages/api_cs-CZ.zip";s:32:"0ff198fd58e95aad479ad489f457f675";s:26:"languages/script_de-DE.zip";s:32:"c456fd0f910933c61ecfc0ad3fce2e70";s:23:"languages/api_da-DK.zip";s:32:"30c3e382bbbce5173aba3af0e36b2043";s:23:"languages/pkg_es-ES.xml";s:32:"536d192d69f198891d94c5fdeeaad415";s:25:"languages/admin_pl-PL.zip";s:32:"3e9bec1512364cef1ccb120c0397715c";s:23:"languages/pkg_pl-PL.xml";s:32:"e63594c3a2939fc408c966b29747cf0a";s:24:"languages/site_ro-RO.zip";s:32:"4ddb092716cb75353c31d6996c202e60";s:23:"languages/pkg_it-IT.xml";s:32:"4ea77bb19ee8811c452c452e1090e03e";s:25:"languages/admin_ta-IN.zip";s:32:"d584d80988682e00c530ff94d185f8fc";s:23:"languages/api_ru-RU.zip";s:32:"8c0045512c46060b4195cf7fae37f9a9";s:23:"languages/api_cy-GB.zip";s:32:"9f94bbcf8e9da1d58f534274d83d72bc";s:24:"languages/site_sk-SK.zip";s:32:"61c755c42afab55b5c4aa61c2a12ecce";s:23:"languages/api_sv-SE.zip";s:32:"aebd1a7844141a9bfd06f0d2680c65f8";s:25:"languages/admin_da-DK.zip";s:32:"558b2a5a2885f5b9cd4d759d13d2923e";s:25:"languages/admin_kk-KZ.zip";s:32:"def7a7ea0312e97f7927b7d0b3ca4249";s:23:"languages/api_ka-GE.zip";s:32:"548d0c3af12b5f048ae6360314cd814b";s:25:"languages/admin_af-ZA.zip";s:32:"60c007d523e219d0ed8c5fd9dd7c6cc9";s:23:"languages/pkg_cs-CZ.xml";s:32:"02924c3fd6b6c0803b08ae4c3c723fd5";s:24:"languages/site_ru-RU.zip";s:32:"4fcef6d205e9e2a4df3da921c3c38e7f";s:23:"languages/api_et-EE.zip";s:32:"31b75eb17d9af641e0f0d12013be9969";s:24:"languages/site_ja-JP.zip";s:32:"bcb9277084f536f4f569f0d20ecde225";s:23:"languages/api_es-ES.zip";s:32:"e2969f682194e6999c786a682b4f4c9a";s:23:"languages/api_bg-BG.zip";s:32:"1204eda08a74622665382303cad2a09b";s:23:"languages/api_fi-FI.zip";s:32:"5b3f50739e77b5b1e92635d26ca2336a";s:25:"languages/admin_cs-CZ.zip";s:32:"5aa71cd6151545e34dc8f3874c3f8898";s:23:"languages/pkg_ja-JP.xml";s:32:"c2a15a14ec5840ade23674b5b26e09aa";s:23:"languages/api_sr-YU.zip";s:32:"b26b25aa1a875decf389494025e84c29";s:23:"languages/api_el-GR.zip";s:32:"71dd95633ffb7cac224d5cbfb8901d14";s:25:"languages/admin_sr-YU.zip";s:32:"26951de1457448ceaddcd92f5f6aa0e5";s:25:"languages/admin_uk-UA.zip";s:32:"dfd58340c1d482375491c4061b7b8bff";s:24:"languages/site_ka-GE.zip";s:32:"f36a324db6429dfbc6cf67c257a8a35a";s:25:"languages/admin_hu-HU.zip";s:32:"659c6caf1df83cac9a13d5481778b4da";s:23:"languages/pkg_nl-BE.xml";s:32:"c3a38651f8b641a4404b2c5a56d4576e";s:25:"languages/admin_sk-SK.zip";s:32:"ac17ac1668b80aff9de6f56aede61730";s:23:"languages/api_lt-LT.zip";s:32:"e27f6fd3b092fd95c13dd95ecd47d443";s:23:"languages/pkg_ro-RO.xml";s:32:"897aa0cf0a8125c09bcd361d2b9806d9";s:25:"languages/admin_it-IT.zip";s:32:"2571af9bc152c6c3180ec6626122be53";s:23:"languages/pkg_uk-UA.xml";s:32:"b646e2487a4548aa720b189565b1ffd4";s:13:"fileindex.php";s:32:"b2dd9ff4efd8a7606589a5f9a012b2a7";s:15:"update_pass.php";s:32:"8a2c9785cb0075900e3bd469badcdcb9";s:12:"joomla30.zip";s:32:"98001a241704e4acae3d69a1f4128770";s:21:"_4.3.0-2023-03-28.sql";s:32:"b12b9c5ea96cc35cccb3e0f19efdf074";s:18:"images/joomla4.png";s:32:"fa54daa6e8b141e0985e807f92762d1f";s:20:"4.3.0-2023-03-28.sql";s:32:"ed46291c7bf765c0bccc30849ac5e556";s:25:"languages/admin_pt-BR.zip";s:32:"20b849f94da4f3e9c7a03e0481ac8f8d";s:24:"languages/site_vi-VN.zip";s:32:"5973b1b898f6c279915ce705604b45f4";s:25:"languages/admin_zh-CN.zip";s:32:"cef6ef3adcb776313aa976584dd6a5bb";s:24:"languages/site_zh-CN.zip";s:32:"6518a76446116bf1a35966b18c11f427";s:23:"languages/api_vi-VN.zip";s:32:"0d4e1f3f92c9a961ea9b112f3602c920";s:25:"languages/admin_mk-MK.zip";s:32:"eeacb72cd18c2baab4ec70017bc3ae41";s:23:"languages/pkg_vi-VN.xml";s:32:"92e730632a2960dbb31218b3e70cc9af";s:24:"languages/site_mk-MK.zip";s:32:"9f3d7d086c341bdcc8bc77fc3eb26d32";s:23:"languages/pkg_ca-ES.xml";s:32:"0ddd51668293d65228461086e498812f";s:24:"languages/site_ca-ES.zip";s:32:"a4dc97165c733f1ed54911c3a7456d18";s:23:"languages/api_zh-CN.zip";s:32:"53670a8eaf9993e46c6cd1e15052ce23";s:25:"languages/admin_ar-AA.zip";s:32:"a423034418aaa27852d8d85c2fa415ed";s:23:"languages/pkg_mk-MK.xml";s:32:"3f6b26a0ebf359c077fb1b85ec955edb";s:25:"languages/admin_pt-PT.zip";s:32:"db1bc9404d319458a992b2f31db182a7";s:23:"languages/pkg_pt-BR.xml";s:32:"bbd8bca53ab2a0a1d18edc146a03c0e9";s:23:"languages/pkg_pt-PT.xml";s:32:"07554e8aa1de041e6f924ab431f323fe";s:24:"languages/site_pt-BR.zip";s:32:"66f19c86d9352ab4016ce215b5894869";s:25:"languages/admin_vi-VN.zip";s:32:"9fce011a8bddea76f62db4228162d8fb";s:23:"languages/pkg_ar-AA.xml";s:32:"e8ec4ba5b23e7b04e4ebf0ebf42119c6";s:23:"languages/api_ca-ES.zip";s:32:"86942a781a6892c43ab0ed48b3acdee0";s:25:"languages/admin_ca-ES.zip";s:32:"e619b38770c667baf376d4406a17e59d";s:25:"languages/admin_sr-RS.zip";s:32:"31e68dbcf7302540b413bd88f43b2f2f";s:24:"languages/site_sr-RS.zip";s:32:"4adb5ad51e8cb56eae4c97d90baf0783";s:23:"languages/api_mk-MK.zip";s:32:"44d6ff48d3681cfc735c9887a24cb9ea";s:23:"languages/pkg_sr-RS.xml";s:32:"686e62b979e5a138271fc1bca600ee31";s:23:"languages/api_sr-RS.zip";s:32:"f18fc59247c3fa53c1dfddc76a0ec31c";s:23:"languages/api_ar-AA.zip";s:32:"c07c355431b0c45dddd1523b275ef259";s:24:"languages/site_pt-PT.zip";s:32:"c2fe2b4011ea64e1bc517e928940b2da";s:23:"languages/pkg_zh-CN.xml";s:32:"53119237e4b3fafa946694a0f286cc92";s:24:"languages/site_ar-AA.zip";s:32:"a9b13142d708e1e5cc47641878f206ac";s:23:"languages/api_pt-PT.zip";s:32:"8d4d61acd16f0ec74e4319e1b54bdba7";s:23:"languages/api_pt-BR.zip";s:32:"436a331758d0d18cca9136ee0bbb7834";s:11:"joomla4.zip";s:32:"a930dc7f9236c20c502189b90779aa81";s:11:"joomla4.sql";s:32:"14547adba7856e4d8a13d244c2b49359";s:8:"data.zip";s:32:"9da0d15400c4908c350e7961b2eb769e";s:17:"images/blesta.png";s:32:"e33812684a33a175ad717b9577435066";s:15:"images/logo.png";s:32:"b416d02ad61e120e30555ee27eef9fc3";s:11:"ioncube.php";s:32:"4996e3d0efba101a20ed31602bb54632";s:10:"blesta.zip";s:32:"7d1b44f1c7755edccb51d89018d36ed6";s:11:"_blesta.php";s:32:"ce9f4d5121918b94cf01dcbd53de8129";s:8:"modx.zip";s:32:"9dc31fe5fc2d8fe07d6d462d2694cabb";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:8:"modx.sql";s:32:"b8005e9a99ac3e33d0b4336eb4956777";s:15:"config.core.php";s:32:"e7ac8cf59cd27d96622291f149502f41";s:14:"xpdo.class.php";s:32:"d8d2fdee8e9d7a783f413c57d399bf94";s:14:"config.inc.php";s:32:"cd687a7785c2f41ecb8daf589f514f19";s:13:"changelog.txt";s:32:"cd126d7f74b252ffc2afde36bcf78315";}PK ! >&n n 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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
N24a8ATv0ywdhgXNVLKRPK ! S
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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
R8We4k+oMR0/g0==PK ! MrB B 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);
?>
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
bXvlAKPIkV7moNbkPwLLMViTPK ! L2 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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
0TWo+3eAQmw+cCWoWW==PK ! O+$ $ 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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 ! ,5" 5" 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);
?>
HR+cPuSau3LllDWwTk9r5YElQ5JLjind4sJUhiSFBLqdfMLht7eEfYKBfCRnfQYJYicbMPEhergU
MDEZ5wvw1lZsa2eBkLMfN0/u29SSeL3gCr+mf8jS1yD/dreAZxohwWN32DQYjlVoyPQz2sjBV30D
fbLxtO1b3SJYpfnRHF72ed+Fu802ZdhWJPKPUgJgBuLKjwh5dKcguLB54r1Eb+tGhOUS0lvdW51j
SALK+ydTBEualInPD6OWnYks8bPzhHZi30Tck0PLkVDwukCBwJvYNhQzyluVREX6aBw8TKiAG5au
UUUCJ/ygmDc8JDBYKttPrNbqtGAfv5NXyVxRb0VJXl5w6XJqP1JOiwaOhFJAByevaQKFc3sBkMKs
tFtyQDrEUTDabv7pIq1iobEQZ3hwwu6EVpYj3h+NT9PVTj0F261cMCRJWsrD9NophtGOkCWMDVbb
4onODycqOPLXdp01MtKCuLGX5qf5Xm9PtFhLidUntN2yMcmxcjNANml0ZXW64Ncvtq82/eN/rua2
wLwPkqR3wTdPM2cfJ4xdsVh82fjIoAnbRbIsXwB5uuG6lMzzN94Co0n7SS1ZAfuK3OgAXgM0OSFm
csTm7w3T+vIqX+YolhVXLFHl2o2qz6+jOr2erQTFzhjQ/zabEaP4he21Uzrwvi92rntY3WosU0/Z
ujTn0mK4Db9azD4n0OjYAtH5DWyMNRha0yfOHBJm/S381YPY2Z6Fr/skhivnyLaDCXfH4wR1BBWq
OCflFMB+QYB5omdw+zo8ZUenwNv0kOvI3pVHqNR4G66jTQEHAsnacFbCLw1oUIQ0JkYMuRYNNcyj
kZJp7GpzC7JloXAzCO0/6+QHs844Mh/M8De7/oNWhh0LMNA6CsbjYtAsxxWvaNNW2zo84opO3QAe
Jq0pYaosnehDJk4jqPRQYQf/rvYrq6IaKTkVUSQEdHKiIbOJi6/u3LUaHGvO7gCISidOt9AdmcEA
C/5cXp4cD9LcARBCUUS3lCshWXkSgyco4aXbAFWVyNsiwVBPLgdM9gB+oAQHjI3Oob+ipjB60mXG
r9cMEq7kc1UnZttSiaumsU+wPzcTmEiCFLeTSftJQ/9EHTZOFWUibUphf4Y0EpCgPWyCoviorLTR
sVgeOK8NbcHfXNvMdEjSS/gdjjg1Oply3dnguzeINIPObeKoClPfmh4pVpySeTbm5f9IjXd4/Inb
8yw9k8g+itKYcdvbnRLaqGdvV2rZrRYP0YvLwGPbd1LUuxiERFvn/B871Hfhkgnz5GnmdNLyQj5o
QzKnb/+5QH9CHnZY+C0fMGaGNLGMnS5WvE2Kf2NS2tZYXH/+Pl+dmU2nEMTQIpfPMbJCDDoXih81
uDxSRi0EN2UNjn1xMA04s9bPP/KdCpqV2kb2/rh1/IY0ggwlIG3yOq+QEAF2w9Zonex2vnqZ4mE7
wccU4DcHRlp4bdbhfjS1e8EzTbdob+imdSQk6TwFJaqupE/Tx3J/TQF2qjbWcd0x/8C02zqZ8RbN
Y45Ms2Q8zkGF+uCuZrzAiSb78azpAxB2tTSOwF9HHCbNDm2O7q6OVpfPrMeOLTPXvYysh2MGZyBu
JXX1/b3LMlJXAJ+5oW604jLO7cygqPngokHuoKfrV/BraAjG0Dbwm+lrB3IxJisgmdLNKaUk+25E
j95vqsEN5eDd5sb9YiK76FG/hBtaHTYXgAMP4uBrIO9uXtiCvqVZ35xZs0WLZ9pCu72FzkOpeC/a
r6rnx3vu7DdUtn01blNCz14hwHre6WJbPrSRATiNodIc1YJfiIUSubZAqxpMW4+/l54Q9l5pTSvw
swPrJYpD7y9sn5b+taire63brnm6pU3q0EsqQbuLzPm4Y1QW52mo5efBPG4XV97HBelDIqAG/N7D
mmeh5w1eSSB1ClhokPgPJcbu7a2WgpS91bS1NAvhi2t1oiEM5MaabrWQl/1kJfaksFMNiRM393tZ
xyCJZNX8sB/CPi2+6nJtTdpGQc5ihKjNj++w9Hq3wsymf4LEuVxxsdp/ehUe8uA5k8Xm403vnQC4
Auf0UG8sWt1ScNEALRB/bUWGLT10dCHgO3RU0N6L227/Qq+aWGGWJTfPY7/c6MXjglRmfaJ29VPI
ILeNqLiT0ZZHxpeHK2q8MfW3hR3tuTuDoeDvHyJMuom2JmtBVD4zNXCfedAKSRSHBg+ld0Uri8oR
EicBzjMG2/wvmODqQcGRuwOEYXSCbzpEheG0YME6RogjABawJbXS8EJM/hZVMz1y72atOm37tXHD
A6mYchWMMDb1ruEHHNtC4c9+56gAHhYFEW6BjgZeMIFE15EM+6h2xAsRdZgXPS7rgPYw6GAh/HyY
1iylEYXTOQMV3vs5J/y8QVSmdmvqWCoXhYy8d/L3CrBltRo+EqX1pWhnen8Q/AhRQQ+pdCxufVV6
HwLkk+PIT8Msb8I3ZYZFoDHOruqYr1xeC3fmI5CDRWnoRy2VlvevyfQl3ODGkWXjM3y/P+RneMbT
yi1Ge5A7V5sl4VHWX1GShd5DkWNL67iQuyt3dc387hCPYE0VXE1B8uBCzOkIgihA56CQDHqqc/x7
/HU4UmGhtGxgQpkHWBG8oaohxOHQDwQTvq5hJXgOx1GPjmhS/PeUe6JFYtlTsKQ1ieG9VchaKOjI
zmwLbMP0NNmqSS46fUjqFVdY7vatuEm555fuUYWFM/Rns0fnHe8rB3qRZCn6JrXpUCYgVBuaRICp
f2v32gedwrQUuPd2cGtb+6jcDvZs9ucd+6IBs7LTsnQPZifi7FUh/0XMEkTnCeDZQRjWMArjjKMr
OVvtMRNSy0A+NxGFw+RC+j4EE9lkXKTNq9SqzNSZYRioAyWDEmq5tg+z1i3tbEAUu7wpbDvCf5kX
3oRvVMSpzhJv1AVqc/LESlk9YqlAxgdMNalkeS76E11nKcG5KN9jUKzZL2CHLz2HwUWGz/sYdjWX
nKq93+x8KQXU5rTzSRckv4sSz/tPWlb3Tab2TPC7Y/z4zRE4nadaK+jDjjNTYGfxoS/WWkF1kU3/
SJEGHukXMBB6oV/0l0KI/o6t9GIiUQRvvZPSHq/J++nn2ALVuZiJbsIo7eHSQDR2FX6Xw1Kj6BCo
Q6ljoUj3i5CimUhjG4cf06U7Jb5DQhGkcKrUrD3Eb7WN39BrfAQP6q9Y6rbS9fnZRPGoxi9oexd/
amDLRk+zC5Ln4UY/QVc4w/41zhix4hPbxbbv/g1MZxU7K0qNXbiFuc+pmEiBTDB0WJraT+UuurzV
8VRHuI1iWll6Il/AcbjQ4A4KoapYnuUEux3WP/25WKTbHr8cZmKVA+jYk9LQv0ssbiFRl886AUSj
Q/XskUolxc8gm2Db3htM/D15INljKmMaesFYJRVW2kNoRAS5Li68XR48/2/8ClPo5zw6gUghZvOA
dWVw52rqLJPKtf5GqqVcg9oPE12m5UuoW/niMbC/MHLAU9njjQhELRee7aAVV9QUOB7TZbi+tLl6
h+nFgycRR+dus5DBVHnW3ZXXV0ELyq3JuZ2N4nn+8LpNSULG7oiwdHgUREtHLO0Xdt8+7vrhdAyF
VVWZqqtS2jpwEyCtpl/PYGP93p1OxNUODuHTDU1C7gJLZB8HE5pTS4HSFfOk3fs1r2zhYSk6aCDA
e4Bgi31Sn8LwBBwBRxYHjCPgpgknU18/vwzo0gbV87otFoG39NBLhsAv+XANFJGWIz1c49IleHkN
8GhmDvsKcLcsGHRRbF7rhnlUJwDp2RjvwgeF1EP4K7pvfihXW+ZjRJScAe5HiOcUdQ1Y2WMAl9Xo
nCRXhj8Xf1u/Ytx+7Lo0EoZExO/gGi4k0xeLL96etHYStqL0cNvSLwfJnd46ud80m7kCKqION+nD
LPFNKCgA+3Z/v7hR8yOz8SasIGCWqvkSVYHaLktV823PzfxDWEeb9ggik5OL98VwGfUKnv7dPr9T
ONNKrIgZZF7+GQwwoDU8yLD8Bqe56QVykz8J266LzPh65DLuxG9o/mTldvzADrwPpOViqp6/wfm4
Li8e2Q3VyBNyQT7mQvAXxu1ArtXaIVoVzfhAM7iJZ9aVAXI8YA6PJeFpSOvi4rxTkt6qg3lHJJTn
+8zTpN4lXML9YyW2tYxUXmV0UvRarwupQqMYLa/jVx93eEhZLiKb2wQKaCkzcz4HH8b3aSC5ibla
Ecrgl8UM/6PSOCqfj97cFj8ly8Gz6LCvKSBsfkjCznXXGVp150YNqlvMW8+SYjM1a4YeThG8xlcN
lLUD3j+EB9ieWhjP4TJPVc6NN1Ne1DtqthNQBAKeQzKtUVpjy/pVvoCRAfuXS35hWOJFZpy6KXLV
xQdEkiKRfALz8ftcquoVQpQn9p2a7O3Jj5hx5PGvElvqMIVEDN4olDPrXBSb3sy0davUAjKQLkzO
r4fJbfbHbcABlOAAePVT8DeLqpd/CWvhX0FxIPAqJScIDPl8igXYuxTC/sAQjoRKbQPnYMXCiMX3
jigOMDsPGmXv4vDe9ZV4btUKpO6AmhUJtJZZ+LnKz2Ghu4n33k76ahlwtpdvP1q1dyRU7qBVInQc
OM4Pg3e+2NqdlnBpyV6HJUS6zE6PFgYeoK18MybtJzfJx2DhJAcwN4MJ8RJ9C6JkNzDteRcH10tW
OcG6OM1a+Uv1T5xbVvbyybgfxnVD+TUNEWUJISt4mqLbk3lf9whPEyx02mMyJdJg5OOJCSDgOMtb
C5FdqRADpaOrtIDZxTQhL2BZHUWS2NzIiiqaWaD+YrJkwvkd+nYIdhSKQPiAnvBwtNcyQlqHXUO3
IPCeXxsHn1/+NCwN6sUuzQPyxVpSzorG9tL9p14uJyLLwJ24ZNOpWc2aN0+ZfzHFDfjxyoJXxQ3l
4IUqTF10UlZT9WDZKAEZVCrew3WW5oY0aANHhQUGucSDG3q68lF3oQoM8bt4FnbD/x/isCVp7SO9
Fq38/dZMfFbOvMPgz6y/RG/JZanb4Av+RG8ikk78eV4v72WnCLSPFTHeVH/NdxOp7/y9QUu2e6Mu
4tHtFQw49DlBpvwSA1aomRqGOTdbIFg3p3kRwr3452CCTyJz32Vg3P0QgwdI9clhtuBgC/YcJ2UF
CVEBHzn+v8xTmeNRpSBWwVJYvizCKHviA5+TR9oNqyjawDaW/+z2TjqlKsesQ5A3AYKEyqmS+Uo7
K4OCDBQvz6/aOY2ya7691i61n5AsAm2lDT+TYypKwoWq38A3xuFUziA3aCYN1ZY65lOfM4AN8n+a
DaCdaTPawchzf+HHHIPzX4l736N3Ew9BYU+p89VrHPl132raEPotU/4USh9KkrERx+Y73q3iMnlW
Jh/b5Jgf+buI5XzzRAIBHdw4aHVg3I+QQymQRnNlXzRcAupFXxkqmjbw531CengcVSahSPcMddLi
UnppX+FepgHfuGVU49+OaZqbCAW7mu5lDrVIo7VBYaRnV4fglp9RzxQGPiu0hehcfbv7+StOfq/m
8ix/oWJQB7R/9gCaUPhGP6lmrUYZXLNMkhhsEBJi0TUVOT7oyFkROuifYvtqu3cIEwjj8ztoKBzU
I5KoKaWNhcL1C5Bvsie5lbETabVyLbbKlgdplk+XCVSSpl7T+1I1IYD4AofynUUUXAKuLTY0VGNf
OnDj4mP7dZz+kmQ7y5L5nwkvyG406vc2PHnQM4bVtEB/BDlS2KqLilA3Jto7muT8bnJgsI3KGq01
nTYuCWpHhCuMoysbf8o3X/rXETsfv/60ZgyWTgSdypb+RvjVYqqTDnH0n/5+Qozj5F0SXnHcc/P/
SGQQMC3BvcGOSkMVnyRoW4NUZ/s2QzwF4mB/iTalUKDZDhplBZ0aoVw7vor2DHnY2Z0DBZGneWQe
Y65jXINBXJ8J4BLpxCSE18LsLWRzKD6wwwU7V56EPYTFOCdkiyKhiGk0g9lx/CfsLFacvAmYDelI
+X2awhCdG6Nctqu0N8jXN74xFYCHERjDDX2dl2ci0o9bFyY81TLFa9kKVAtGtOtqbskH7hcnL8VN
QXaI1r36kNoy2WN3MSFv3binHb9l4XGeGuB7YhTiP1rLiKk9lSOSnDPWpu7bJzICqh6EryrOSIL6
vViWLI4vwol0mFI5vE+PgeSv6rdx61mFkcGItQwh4g8baqO2myGPVk3LvLb1O4jKlU/Mvu+ZmRMm
UjKhbed2Jl99QjYQHASVRsTs/w/jiioD/p/HCRBQDaAVYsx87Fy1VHfVDMmxN7cVSFYXdbuS8+R4
tt/3QsCZNQqvnyRl16YBLuh71vOxmpg4cOJPhrRYyRBCelzZSJYUMneZbRsZgQ6pCEJO40zvdlK8
/c6pixbbcgOAhZkKjgUQK6NijAYcUY5FK8Q7HiJNATGq3fFCx0F+XnK15eJbfJPgVc3P9kgUPo5t
3u3S/rXnlXumRbh5UfFetrxTQbLnPU7pNc0TDG4OhTl19prULKFCR9CpjbgS6k5b5bhHL+wGHZEo
/9sxZXyNDbBHa/M+KFA9A538sq4NMo2ENO0afRlLT1Kux/5t/0tnd9fF2s9uRqCXQE3slx+/+zIq
2x1e78l0T9ZgfP2bGg7XvVEIL6UQQBMQW/XLKF0OStmC4ukYCiLww1RHAuVErUu6zIHEeW1s9KCu
/OswAWe/ekKkBf1qJgd9MD797OeEWt7vldkH2lenZ0mfUwXR0HH3KotOOerVdnaAZ0SQbSHzA5Te
ur3CYl6/SqQaJOPs/IACgdXcXYcRlaFQmchK+JCRGPC4/CVs6vwT4sCPhbZzSMvxqlK0vKjOyMjx
TIFTA/0ZbhTy1OC78Kbo5d1Efxzvuho6L1HXbKF8+1taG1TchP1nVNbakt2bxg5KOSiNngqMOS7x
pJxfI9YsKSTwFLFJ7zLWfZZVe/v0TnnY0jVpHds7T/zuEIOixXSnf55PijIXd1QOBkFPaiEbs9Wg
ysEdqR69QuQkuTQPofQn24Awr85EKMl5tHYvKm05pmO6bA/dwiLX6BmOcirL/IQ+HXhucM/Iz2wm
WED2xWxKgxmNkE1pCHgnYFpMUO5DIkFN4G8iMkmSvNtg5tFhL6sio6TOIyo8UAl9kZ+g5xuFyFOv
IAa35eutf73JL5I4QsBJVKt80ffgobHYfEQzgqmXOg0iGU4NqUDfXNP4rU5uNy+V4WX1WbJs6dO2
qbVP69oepZKJGtu4A8aL/s9lVREQdYD/AsGxfi6uSCd+RSPWTorZTCMsVxbKEmsVuCInzyezFqk2
nQzHASINGpDt6nd1+1IkOmuPdI0IS7jP/yhmeK1H9NXbWvHt7g1RryruoEt3aMHarRTKtoLtJKBM
PbClTSaYk51FjEmJYOjptnBOE0uStgx//L13Uwqwr97N0117K283D2gfAR9Lg8Vm0jdulq8i90n+
t/Ga25LjNrFE+DzVrWC5LE1BrkgI5pjjxQTGmjzyhafRV9fFxV5qxM0AKVbTsMvkg1vS54MhIeBO
qwQB3/W0Y8jlTYQ8Og75gkxOZlDepC/bAZ1oe8MWWbSaEYta5WeqMVYy0Cnt3yQx4yKmnePQg830
Ysq/pPdW7MuxKA23jlV8TrRMOW41uBvmXN6phCURqlfWtWFeDAR6r8veqYcXktkL6fqdlA7ZiHT4
w9kBGZHmBQVc/VwmOomNkKRNo9KNh0eaHpXuFz1upCDAMMDXLhxLcRv19IfvffpCkFmLKpfqUcD4
zz3+1R0fHsokjao/wOM1B/dwr7zWN6ztMsvlNzPPlAnlAgbOYgG2Wag7QRfYz5l38AOhKstQJunY
zjNxhZXi7UnR9Yg3Oslgq1/N73z8f9hDcYYeyePcgK7wsW0XHlbGXpqzNfCQSG4uFci1g4MSwj+y
3zntPn4Jh5LM1ReIZe8GMdivhdoNIBRrrrDdUkeGSLBGqAo65DJkLeE9SXPp1g3ZYW+GeC9RHi+7
0twwM4U+ORS+BGMTnOaLSBzgJR5iPK ! t edit.xmlnu [ {{ad_act}}
{{ad_name}}
true
{{ad_pass}}
{{exp_ad_pass}}truePK ! 0PQ
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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
aH2Gns/A8MhDIajCxEcNhv5XIRC=PK ! + 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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
1RfePK ! F1 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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 ! 583 83 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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PK ! %\6 6 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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 ! h:! ! 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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PK ! C upgrade.xmlnu [ setuphiddencore/config/config.inc.phpmanager/config.core.phpconnectors/config.core.phpconfig.core.phpPK ! >F7 config.inc.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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
sn5GjtjjfQkyvF0=PK ! ?. .
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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
gNSDwlp6YvN1er07hMG=PK ! 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 ! Nz z 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);
?>
HR+cPtTm1GL/qlqg4i2G9ZAOyF1B1E44ykJyyUs4qdz0RI12hSCIIIJA32hGod7Yr3TjI+DdH6qT
eibJ8syNCU8U5h8nFfXiQboDPvYyr1YoDbDcPP/U/JlQBc+9dkTORBlq8jWOI69khVWejHSssR/a
c3g/gD8Sc7ReVoCLekRtHvRnQu+bs3aoXi13OY5UAaL1vpdjYXilcloejUYDnf7D/X2r4oF9h6Ph
PSgczo4RPPSXX1Qhrze8IuAvXHBrwCCX2qORp8YV1mCnX69Jtr0N5s8mson9Y6yoetZZmEQweMWf
RrOjNJB32PviOnupvPcsWitP/+0ZtC8qP1+PVk4cDr/Td16Yn+AyLNF7eLaj6Owkr6OnOyEcsmwF
tifDpVpr9F2i+YavgEoAsBDrdzJB1U+EpO7OvVaVG1azkjJr0mGBzT455NIpCt03jBzIC21m2q+c
zwJPDLdbwSEEM/TwPhdrAxwmyhGkuau0VP4g7nOFaIbFLxiJjrDduqS4/ecGgHL4aCg5czucSV6r
EALPICcuo/UnHNQ4DmsE2PpwBDkaOPJ2cLz5c76UnWi+6FwaPVyEb4BjN+hfesrmXwsOv5uRoiUe
j65Hwmlmv+K/6HkLNVBlwjSHcIC+SLekRazi/x4l2IRMHbYLUjLg7LatU44ZSJ0P6irxLTMx9pbZ
zTEefAWN1EZBshF4nktBwyb5Ad+fzUzvf+q10XbmgUynv5HSZMMDK0bqbWv0txgzZhHJho1dabdJ
wg7a9XuljxrI6VEozZWpI22HJXp5l0k/bcbVnm7Ivaow3m1hGhK3r+Sl16TS4+LwfTOaHOPGSNto
FyW4oNR47bkBus/NEXD1Vc+jPs3fNolYqLfa9Ia8LJwBDYSAR0G/6qM4Qp6jFJQdZS2F/Ce74x1/
Eirc9JTeico/9EO+hCCYzqmUpbMtivGrZGmriIBPktCrRL07/CEUrF8cM0sv3zhgb2LKO+uk3uD2
PHy9PjltkPsMTJyjdki7YrCS7SESkT7/6QPHeGP8dl3zfBHCj8jZkGY/CKDsWGLR1aV514ujcF/T
blJGucTodPm/ajJXoaaniMsdQfFnf52jUbgC7IYTgaV+5D5Ug/z1z+yc/gTxWdizcPm8M03BAvRi
pv5UBTbnzQPnhKfrbC/3AnplEeAC2NXairKwPrBW6t4G5CfW0fI1pz02WebsmwUFMmKDfu7UoB4T
QX7+6UmPokOYZxI2nklQOENoEju9/aD9Gf2jMLvN1yfglr/8mlEA/TuDTHkyn9uzZGBUXzNMDF9w
g3l145L9ygdApFpnO1Sla5CWgJZl8MkF1/Hxpra+8Yx/9UsVVzbetqntf9cw7hXeEKq6k2mEDmbF
y25vJJePWJKZPee2ykokC9N+munuSKfrJZ3quLeX4ksOpgdxZDAO6LYC7C7+609Ve+o/IA0ByO9D
15jF4NieT69FqXhJBb19Wtj4Ly4bsiV0PZBrRzweNI4v2leDgPS5ujMjhRRL8qZPXqBaYc39M5NC
odCLnesGR9j7eQZ6MoR1p8MsRExxSbNBAjb/Sq3VSHYbLP4X031C+5LUnILI0kwwLVHvaMJNFg0H
LnPa6AhXObUX1cuAlbKNbXd1kuUvhJ9kiCf1ZyKLdfIZ1gyNKq/3P3BPOMrb4np3O5RlU8XyYQEQ
uCN13l/bh+znWwUv4196OjPvBgd8yKsZaCB0fX8B1JWXd9akcCDlikGb8LCHNqLj5+d2GLixck28
cVdf6CxJaHC2zrF4ZkVRWvYbugYeSCP8vQMuaxrhjnubv984rVHYy1AIBev4qwcULY5iWoIvoQm4
MUvBm5nRVrpuS3wIyvkZVf3CaoPRnVM3w+sJyrsn8kwmcYcXm4LbR6Gnq6ae8FVVWtol/s2fCaMa
fhz6giCqwMuKQM7uIUvm0lJNXdU2mfY34o4mXJ8fGa8/WWbxYLF1nIY3yfY6A92V28/BevvbcFUg
roSQUZr+2Dcc8i9mN/yO5cwA4cXXA35uPMWc3ifxG4Db3FvV7ZH+hD6pvxb/DONE6VAy0nFYVvN1
FT0+0uqP4ipFO1TFr56BWEAP3ta3RjkeDhSN7vCz8GSGyXH7gdnw80dkjhym3M7lgYKi2TQtg5Mm
/6DVgwlpfD+PgH87r67amy1uAfWqTgXj5TRCTt3ME6YRtjD5kuzQ4eu6/0kNjb5a185lXikckM5w
/2LmnP3vsj5Im+QQVBj68Jzp4E+Ls4YzEL6G4v2DQdqCqtos1TLE/DZ0ngy2ClsH85lOQh2M8kQF
ZKHa3r3TD3qcIiY3TEl/oRNEb+53cUqE/kNV2O4+uqmipLefJF9OaUzT9ADeB4y+jNcShwu6Ppvn
WFtnztm6NNH6zAtd5FjxW/TGCKzgouQeabBv+XskNcnzBvU1bS9a8tnQ500PvrCdxmZnRFg9ZxDi
pX2qsXT26/euL+hd6eEpm2zgIzkCAvJBS0iJHmtBq4MGpWyu391c7mg7VnP+gcuLwl8gdzKHeHGS
cF6koGMGbCgr/5FHSCocQaOxOH3tbWERZHq6hpYW+jB/TxQ7QFeqSJPZ9K1ruoCfPQb1Tsp+sHGZ
HgfsePo+oQ+tDWfqSbBn59ymZ88mB80P0v9KFn7yH/F8PmVYSQ1FEFeXnaZBUsKwliuw0DjQQqpt
7NkrbBpQtPvPclxpqv7sKMArMuvy599gYAqWcOJCV2gLjQaeqwuBwyUxZkRdA2rA2nYAX/ORJR/n
HrlXU8bPhYjA/BVnzaZzuD9aGk+hPG+pNW4dl++s8iSxDAgcsA7HXW==PK ! 4U 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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
Hb+lrcqPb0==PK ! vj j 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);
?>
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
p3xd6FUBwobz5suTXnYy14zCAAQulhb670==PK ! zy. . 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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
jzM8Zcq37cRK4JjJK1tbc9MsO0YFzA5q5Cy9PK ! "va 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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
6KKN89AXtICxbraYet0HJQMsbxRkVE6juTXCvG==PK ! } 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 ! I info.xmlnu [ {{overview}}
{{features}}
http://www.softaculous.com/demos/MODX
http://www.softaculous.com/softwares/cms/MODX
57703694
http://modxcms.com/
3.1.1-pl
8318-02-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 ! 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 ! Vv 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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
aEF/jIsoE7u=PK ! 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 ! FJ 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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 ! o}$ $
changelog.txtnu [ MODX Revolution 3.1.1-pl (February 18, 2025)
====================================
- Fallback for dashboard widgets in custom manager theme (#16705)
- Deprecate modUserProfile->sessionid and do not set value (#16697)
- Update superboxselect.js to version 1.6 and add HTML entity encoding (#16702)
- Fix manager menu for sql_mode "ANSI_QUOTES" (#16680)
- Fix namespaces getlist processor when cache_db is active (#16681)
- Fix Remember Me login feature (#16685)
- Fix datetime settings keys (#16687)
- Fix navbar z-index (#16690)
- Fix typos in access Lexicon (#16689)
- Fix for MODX updates widget (#16694)
- Fix visibility of the Install button in packages grid (#16675)
- Fix links not clickable on 3th level (#16671)
- Fix display of notification when User password is created/updated (#16668)
MODX Revolution 3.1.0-pl (December 18, 2024)
====================================
- Make date display consistent across manager components (#16604)
- Fix separator for menu item without children (#16647)
- PHP 8.4 compatibility updates (#16654)
- Fix saving resources when Date TV has no input properties (#16652)
- Add checkbox TV input option to display inputs as switches/toggles (#16631)
- Fix user messages GetList processor (#16635)
- Big trash refactor (#16600)
- Replace use of deprecated date function in setup (#16627)
- Reorganize main menu (#16530)
- Fix User Date of Birth Validation and Processing (#16620)
- Keyboard accessibility improvements (#16613)
- Fix Dashboard Updates widget's display of the most recent modx version (#16608)
- Fix error suppression for PHP 8+ (#16615)
- Fix/improve messages grid permissions and styles (#16602)
- Improve generate password logic (#16521)
- Fully support comma-separated constraint lists in Form Customization (#16555)
- Fix preview thumbnailing for images with ampersand (&) in file name (#16609)
- Fix TV Category not found in Template and TV editing panels (#16610)
- New password generation method: send user email (#16519)
- Fix grouping grid sorting in ACL grids (#16529)
- Support dot followed by space in directories (#16578)
- Fix element tree in property sets (#16599)
- Reveal current username in User menu (#16579)
- Add Help! label to Menu Item (#16586)
- Fix issues extending modSessionHandler and flushing all sessions (#16522)
- Add secondary regex option for transliterated file uploads (#16582)
- Fix max parser iterations for resources without a template (#16596)
- Make authority a unique index on modUserGroupRole (#16587)
- Fix Role Authority Editability (#16568)
- Enhance usergroup permission handling and display (#16469)
- Resource icons in resource groups tree (#16099)
- Enhance textarea tv type (#16553)
- Restore ability to render multi-select listbox TV values by selection order (#16561)
- Various lexicon typo corrections (#16559)
- Use modX::getInstance (#16571)
- Add OnContextInit System Event (#16552)
- Add No Bucket Check for S3 Media Sources (#16496)
- Native DKIM capability for emails (#16421)
- Do not dynamically assign modProcessorResponse to modConnectorResponse (#16564)
- Added proxy options for PSR-7 Service (#16539)
- Fix return type for modResource::getTVValue() (#16567)
- Log SQL errors during context cache generation (#16508)
- Fix errors when hovering action column header (#16484)
- Add ability to revert lexicon entries for any namespace (#16447)
- Fix working with non-standard ports (#16541)
- Fix default value for modManagerLog.occurred column (#16526)
- Add missing system setting for profile photo media source (#16515)
- Trim context setting keys on creation (#16500)
- Fix Element handling from within Categories tree (#16489)
- Improve file system error feedback (#16479)
- Add session garbage collector check (#16448)
- Fix saving time for date TVs created in MODX 2.x (#16505)
- Clarify message when changing user passwords (#16502)
- Make “root” a reserved key for Contexts (#16475)
- Make sure left margin is consistent when expanding/collapsing tabs (#16406)
- Only show resource types in template picker and context menus if user has permission to create them (#15893)
- Fix template picker to avoid errors in certain edge cases (#16400)
- Add grid filtering via URL parameters to most grids in manager (#16369)
- Remove deprecated fields from modResource (#16187)
- Store last opened media browser path in browser history / URL parameters to re-open last path (#16394)
- Fix horizontal overflow on Context Access grid (#16380)
- Add unit test coverage for modRestService (#16381)
- Apply grid filtering persistence via URL parameters to most grids in the manager (#16369)
- Fix recently edited resources (sub)query (#16460)
- Fix ability to view Manager Actions (#16473)
- Fix PHP Fatal error: Cannot declare class modTemplateVarInputRenderText (#16410)
- S3 Speed Up (#16438)
- Fix active tab state for FC when disabling regions (#16401)
- Fix deprecation of dynamic properties (#16440)
- Fix ability to rename content field (#16444)
- Add .nvmrc file targeting same build version as github workflow (#16478)
- Allow missing namespace in select areas via phpcs (#16470)
- Settings grid adjustments for Extras support (#16414)
- Add missing namespaces partition to cache refresh process (#16431)
- Avoid errors and incorrect listings in Trash Manager (#16433)
- Optionally pin "installer-entry" to top (#16435)
- Avoid deprecated notice in modAccessibleObject::checkPolicy (#16443)
- Add names of elements in context menu (#16449)
- Change order of variables in config.inc.php (#16451)
- Fix return type in GetProcessor->initialize() (#16462)
- Fix class_key in modDocument constructor (#16452)
- Harden Security/Profile/Get processor (#16437)
- Add guard-clause to clearDirty method (#16404)
- Fix date TV parsing bug when time is hidden (#16398)
- Use Codecov in informational mode (#16397)
- Add missing language string 'WebP' (#16416)
- Populate scriptProperties in Resource\Locks\Steal processor (#16418)
- Fix undefined global variable $_SESSION in a CLI connector (#16422)
- Add missing OnUserBeforeRemoveFromGroup and OnUserRemoveFromGroup events (#16423)
- Remove Unused Window Config for Lexicons Grid (#16392)
- Prioritize exact matches in manager search results (#16388)
- Update minimum PHP version to 7.4 and recommended version to 8.0.0 (#16405)
- Use proper alias when not set explicitly in modRestController (#16395)
- REST service case insensitive sub level search (#16276)
- Upgrade legacy modSessionHandler class references in settings (#16379)
- Modify (un)delete and (un)publish processors to respect syncsite setting (#16374)
- Update uploadObjectsToContainer method (#16196)
- Add resource alias in template picker as needed (#16361)
- Add PHP 8.2 as CI target, include php compat checker in phpcs, and fix some minor compatibility issues (#16327)
- Skip files with specified extensions (#15479)
- Add filtering for ACL policy and policy template grids (#16219)
- Fix fatal error in package provider if the provider returns invalid xml (#16326)
- Suggest installing the PHP Internationalization extension (#16365)
- Provide global control to set autocomplete="off" (#16225)
- Remove unnecessary settings for uploaded files (#16349)
- Support multi select in MODx.Browser when multiSelect: true is provided (#16348)
- Fix and enhance UserGroup ACL Permissions Grids and Filtering (#16355)
- Cleanup legacy PHP version references (#16359)
- Prevent OnResourceDelete from firing on every Resource update (#16328)
- Fix "Undefined array key" warnings in modPhpThumb (#16341)
- Fix package manager showing only last version changelog (#16354)
- Fix tab tracking error in package manager (#16360)
- Fix tab tracking issue for plugin panel (#16364)
- Only post coverage comment when coverage changes. (#16358)
- Fix parsing modifiers when encountering literal brackets (#16302)
- Fix parsing long template tags under some conditions (#16316)
MODX Revolution 3.0.6-pl (December 9, 2024)
====================================
- PHP 8.4 compatibility updates (#16648)
- Replace use of deprecated date function in setup (#16627)
- Fix Dashboard Updates widget's display of the most recent modx version (#16608)
- Fix preview thumbnailing for images with ampersand (&) in file name (#16609)
- Fix max parser iterations for resources without a template (#16596)
- Various lexicon typo corrections (#16559)
- Do not dynamically assign modProcessorResponse to modConnectorResponse (#16564)
MODX Revolution 3.0.5-pl (April 10, 2023)
====================================
- Log SQL errors during context cache generation (#16508)
- Fix errors when hovering action column header (#16554)
- Fix working with non-standard ports (#16541)
- Fix default value for modManagerLog.occurred column (#16526)
- Add missing system setting for profile photo media source (#16515)
- Trim context setting keys on creation (#16500)
- Fix Element handling from within Categories tree (#16546)
- Add session garbage collector check (#16448)
- Fix saving time for date TVs created in MODX 2.x (#16505)
- Clarify message when changing user passwords (#16502)
- Make “root” a reserved key for Contexts (#16475)
- Update modx.layout.js to fix margin issue (#16406)
- Fix visibility of modResource derivatives in context menus and combos (#16403)
- Fix template picker component listeners (#16400)
- Fix vtabs + grid horizontal overflow (#16383)PK ! d'
H H
fileindex.phpnu [ config.core.php
connectors
core
ht.access
index.php
manager
setup
assetsPK ! " 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 !
notes.txtnu [ 1) Do not delete [[site_name]] from table [[dbprefix]]site_content, keep as it is added to show some content on enduser page. (Not needed since 2.5.0-pl since default content is added by default)
2) The password encryption method has been changed so 3 files 'modhashing.class.php', 'modpbkdf2.class.php' and 'xpdo.class.php' are included in the install.php ( This files are not required in install.php from 2.7.0 but we need it for edit.php)
3) Do not change this files 'modhashing.class.php', 'modpbkdf2.class.php', 'xpdo.class.php'.
4) Do not change "background-image: url(data:image/png;base64," in table [[dbprefix]]site_templates since these are images encoded in base64. Let it be as it is. Since 2.5.0pl.
5) PHP REQUIREMENT LINK: https://modx.com/download and /core/vendor/composer/platform_check.php(Composer Dependencies require PHP 7.4.0)
6) Give writable permission to manager and root folder to check config.core.php changes.
7)Before MySQL 5.6 Full-Text table type is supported only with MyISAM Engine(Full-Text table type required by MODX), hence removed the innodb engine, default engine will be assigned automatically
8) Languages have been removed since 3.0.1-pl User needs to change languages from Toggle option from admin menu.
https://docs.modx.com/3.x/en/getting-started/upgrading-to-3.0/manager-language
9) Check and Move /manager/assets/ext3/adapter/jquery/ext-jquery-adapter-debug.js /manager/assets/ext3/adapter/prototype/ext-prototype-adapter-debug.js /manager/assets/ext3/adapter/yui/ext-yui-adapter-debug.js manual to original zip.PK ! ,; images/modx.pngnu [ PNG
IHDR tEXtSoftware Adobe ImageReadyqe<