class system { public $tpl; /* zewnetrzny template */ public $modulesLoaded = array(); /* zaladowane moduly */ private $modulesList; /* zawiera liste dostepnych modulow */ private $vars; /* holds system variables */ public $user; /** * * Instancja klasy Sql * @var ML_Sql */ public $sql; private $modulePrefix = ''; public static $instance; private function disableMagicQuotes() { // zignorowanie magicznych quotek, nawet jak są włączone... if (version_compare(phpversion(), '5.3', '<')) { // Dla PHP 5.2 i wcześniejszych wyłączmy magic quotes function removeSlashes(&$value) { if (is_array($value)) { return array_map('removeSlashes', $value); } else { return stripslashes($value); } } // end removeSlashes(); set_magic_quotes_runtime(0); if (get_magic_quotes_gpc()) { $_POST = array_map('removeSlashes', $_POST); $_REQUEST = array_map('removeSlashes', $_REQUEST); $_GET = array_map('removeSlashes', $_GET); $_COOKIE = array_map('removeSlashes', $_COOKIE); } } } private function requiredPHPConfiguration() { $errors = array(); if (get_magic_quotes_gpc()) { $errors[] = 'Turn OFF magic quotes please!'; } if (version_compare(phpversion(), '5.2', '<')) { $errors[] = 'Required PHP 5.2 or later!'; } if (!extension_loaded('gd') || !function_exists('gd_info')) { $errors[] = 'It looks like GD is not installed.'; } if (!empty($errors)) { die("
Fix following errors: \n" . implode("
", $errors));
}
}
/**
* Pobiera instancję systemu.
* @return system
*/
public static function getInstance() {
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
protected function __construct() {
$cli = !isset($_SERVER['HTTP_HOST']);
$this->set("CLI", $cli);
define('CLI', $cli);
$this->requiredPHPConfiguration();
require_once('Sql2/sql.php');
require_once('class.autoload.php');
require_once('class.module.php');
require_once('class.tree.php');
require_once('class.cms_tree.php');
require_once('class.cms_controller.php');
require_once('class.cms_module.php');
require_once('class.template.php');
require_once('class.paginate_base.php');
require_once('class.paginate.php');
require_once('class.config.php');
require_once('class.mailer.php');
require_once('class.cache.php');
require_once('AF_Forms/Form.php');
require_once('functions.php');
CMSAutoload::register();
$config = Config::run(dirname(__FILE__).'/../config');
$this->config = $config->get();
set_include_path(get_include_path() . PATH_SEPARATOR . INCLUDES_PATH);
require_once INCLUDES_PATH . 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();
}
function start() {
if (!CLI) {
if (isset($_GET['print'])){
$this->tpl = new Template('tpl/layout/print.php');
}
else {
$this->tpl = new Template('tpl/index.php');
}
}
$this->dbStart();
}
function show() {
if(!CLI){
$page = isset($this->getModule('pages')->page) ? $this->getModule('pages')->page : null;
$this->tpl->page = $page;
$parent = null;
if (is_array($page) && $page['parent_id']) {
$parent = $this->getModule('pages')->getTree()->rekord[$page['parent_id']];
if (!$parent['parent_id']) $parent = null;
}
$this->tpl->parent = $parent;
echo $this->tpl->fetch();
}else echo "\r\n \r\n";
}
function halt() {
$this->stop();
exit(0);
}
public function getModule($modName) {
if (isset($this->modulesLoaded[$modName])) {
return $this->modulesLoaded[$modName];
}
return null;
}
private function addModule($modName, module $object) {
$this->modulesLoaded[$modName] = $object;
}
public function setModulePrefix($prefix) {
$this->modulePrefix = $prefix;
}
public function loadModule($modName, $prefix = false) {
if ($prefix === false) {
$prefix = IS_CMS?'cms_':'';
}
// oszczędność 4 sekund przy 80+ objektach
if ($this->getModule($prefix.$modName)){
return $this->getModule($prefix.$modName);
}
$filename = "$modName/index.php";
$modPath = CMS_PATH . "mod/$filename";
if (IS_CMS || $prefix == 'cms_') {
$modPath = ADMIN_PATH . "mod/$filename";
}
if (!file_exists($modPath)) {
$filename = "$modName/$modName.php";
$modPath = CMS_PATH . "mod/$filename";
if (IS_CMS || $prefix == 'cms_') {
$modPath = ADMIN_PATH . "mod/$filename";
}
}
if (file_exists($modPath)) {
$class = $prefix.$modName;
$module = $this->getModule($class);
if (!$module) {
include_once($modPath);
$module = new $class();
$this->addModule($class, $module);
}
return $module;
}
else {
throw new Exception("Module '$modName' in '$modPath' not found!");
}
}
public function dbStart() {
$this->sql = new Sql(getConfig('db'));
$this->sql->debug = getConfig('debug');
}
public function setTemplate(Template $tpl) {
$this->tpl = $tpl;
}
public function getTemplate() {
return $this->tpl;
}
/**
* Zatrzymuje system.
* Zamyka połączenie do bazy, czyści flashowe zmienne sesyjne
* @return void
*/
public function stop() {
unset($this->sql);
}
public function set($name, $value) {
$this->vars[$name] = $value;
}
public function get($name) {
return isset($this->vars[$name])?$this->vars[$name]:false;
}
/**
* @return Sql
*/
public function getSql() {
return $this->sql;
}
}
?>