Index: branches/RC/core/kernel/application.php
===================================================================
diff -u -N
--- branches/RC/core/kernel/application.php (revision 11917)
+++ branches/RC/core/kernel/application.php (revision 0)
@@ -1,2892 +0,0 @@
-
-* The class incapsulates the main run-cycle of the script, provide access to all other objects in the framework.
-*
-* The class is a singleton, which means that there could be only one instance of KernelApplication in the script.
-* This could be guranteed by NOT calling the class constuctor directly, but rather calling KernelApplication::Instance() method,
-* which returns an instance of the application. The method gurantees that it will return exactly the same instance for any call.
-* See singleton pattern by GOF.
-* @package kernel4
-*/
-
-class kApplication {
-
- /**
- * Is true, when Init method was called already, prevents double initialization
- *
- * @var bool
- */
- var $InitDone = false;
-
- /**
- * Holds internal NParser object
- * @access private
- * @var NParser
- */
- var $Parser;
-
-
- /**
- * New Parser (Experimental)
- *
- * @var NParser
- */
- var $NParser;
-
- /**
- * Holds parser output buffer
- * @access private
- * @var string
- */
- var $HTML;
-
- /**
- * Prevents request from beeing proceeded twice in case if application init is called mere then one time
- *
- * @var bool
- * @todo This is not good anyway (by Alex)
- */
- var $RequestProcessed = false;
-
- /**
- * The main Factory used to create
- * almost any class of kernel and
- * modules
- *
- * @access private
- * @var kFactory
- */
- var $Factory;
-
- /**
- * All ConfigurationValues table content (hash) here
- *
- * @var Array
- * @access private
- */
- var $ConfigHash = Array();
-
- /**
- * Ids of config variables used in current run (for caching)
- *
- * @var Array
- * @access private
- */
- var $ConfigCacheIds = array();
-
- /**
- * Template names, that will be used instead of regular templates
- *
- * @var Array
- */
- var $ReplacementTemplates = Array ();
-
- /**
- * Reference to debugger
- *
- * @var Debugger
- */
- var $Debugger = null;
-
- /**
- * Holds all phrases used
- * in code and template
- *
- * @var PhrasesCache
- */
- var $Phrases;
-
- /**
- * Modules table content, key - module name
- *
- * @var Array
- */
- var $ModuleInfo = Array();
-
- /**
- * Holds DBConnection
- *
- * @var kDBConnection
- */
- var $Conn = null;
-
- /**
- * Maintains list of user-defined error handlers
- *
- * @var Array
- */
- var $errorHandlers = Array();
-
-
- // performance needs:
- /**
- * Holds a refererence to httpquery
- *
- * @var kHttpQuery
- */
- var $HttpQuery = null;
-
- /**
- * Holds a reference to UnitConfigReader
- *
- * @var kUnitConfigReader
- */
- var $UnitConfigReader = null;
-
- /**
- * Holds a reference to Session
- *
- * @var Session
- */
- var $Session = null;
-
- /**
- * Holds a ref to kEventManager
- *
- * @var kEventManager
- */
- var $EventManager = null;
-
- /**
- * Ref to itself, needed because everybody used to write $this->Application, even inside kApplication
- *
- * @var kApplication
- */
- var $Application = null;
-
- /**
- * Ref for TemplatesChache
- *
- * @var TemplatesCache
- */
- var $TemplatesCache = null;
-
- var $CompilationCache = array(); //used when compiling templates
- var $CachedProcessors = array(); //used when running compiled templates
-
- var $LambdaElements = 1; // for autonumbering unnamed RenderElements [any better place for this prop? KT]
-
- /**
- * Holds current NParser tag while parsing, can be used in error messages to display template file and line
- *
- * @var unknown_type
- */
- var $CurrentNTag = null;
-
- /**
- * Memcache object pointer
- *
- * @var Memcache
- */
- var $Memcached = null;
-
- /**
- * Returns kApplication instance anywhere in the script.
- *
- * This method should be used to get single kApplication object instance anywhere in the
- * Kernel-based application. The method is guranteed to return the SAME instance of kApplication.
- * Anywhere in the script you could write:
- *
- * $application =& kApplication::Instance();
- *
- * or in an object:
- *
- * $this->Application =& kApplication::Instance();
- *
- * to get the instance of kApplication. Note that we call the Instance method as STATIC - directly from the class.
- * To use descendand of standard kApplication class in your project you would need to define APPLICATION_CLASS constant
- * BEFORE calling kApplication::Instance() for the first time. If APPLICATION_CLASS is not defined the method would
- * create and return default KernelApplication instance.
- * @static
- * @access public
- * @return kApplication
- */
- function &Instance()
- {
- static $instance = false;
-
- if(!$instance)
- {
- safeDefine('APPLICATION_CLASS', 'kApplication');
- $class = APPLICATION_CLASS;
- $instance = new $class();
- $instance->Application =& $instance;
- }
- return $instance;
- }
-
- function InitMemcached()
- {
- return ;
-
- $memcached_servers = 'localhost:11211'; // $this->Application->ConfigValue('MemcachedServers');
-
- if ($memcached_servers && class_exists('Memcache')) {
- $this->Memcached = new Memcache();
- $servers = explode(';', $memcached_servers);
- foreach ($servers as $server) {
- list ($server, $port) = strpos($server, ':') !== false ? explode(':', $server, 2) : Array ($server, 11211);
- $this->Memcached->addServer($server, $port);
- }
- }
-
- //try to set something to cache, if not working - set $this->Memcached to null
- }
-
- function CacheSet($name, $value, $expiration)
- {
- if (isset($this->Memcached)) {
- return $this->Memcached->set($name, $value, 0, $expiration);
- }
- return false;
- }
-
- function CacheGet($name)
- {
- if (isset($this->Memcached)) {
- return $this->Memcached->get($name);
- }
- return false;
- }
-
- /**
- * Initializes the Application
- *
- * @access public
- * @see kHTTPQuery
- * @see Session
- * @see TemplatesCache
- * @return bool Was Init actually made now or before
- */
- function Init()
- {
- if($this->InitDone) return false;
-
- $this->InitMemcached();
-
- if (!constOn('SKIP_OUT_COMPRESSION')) {
- ob_start(); // collect any output from method (other then tags) into buffer
- }
-
- if(defined('DEBUG_MODE') && $this->isDebugMode() && constOn('DBG_PROFILE_MEMORY')) {
- $this->Debugger->appendMemoryUsage('Application before Init:');
- }
- if (!$this->isDebugMode() && !constOn('DBG_ZEND_PRESENT')) {
- error_reporting(0);
- ini_set('display_errors', 0);
- }
- if (!constOn('DBG_ZEND_PRESENT')) {
- $error_handler = set_error_handler( Array (&$this, 'handleError') );
- if ($error_handler) {
- // wrap around previous error handler, if any was set
- $this->errorHandlers[] = $error_handler;
- }
- }
-
- $this->Conn = new kDBConnection(SQL_TYPE, Array(&$this, 'handleSQLError') );
- $this->Conn->debugMode = $this->isDebugMode();
- $this->Conn->Connect(SQL_SERVER, SQL_USER, SQL_PASS, SQL_DB);
-
- $this->Factory = new kFactory();
- $this->registerDefaultClasses();
- $this->Phrases = new PhrasesCache();
- $this->EventManager =& $this->Factory->makeClass('EventManager');
- $this->Factory->Storage['EventManager'] =& $this->EventManager;
- $this->RegisterDefaultBuildEvents();
- $this->SetDefaultConstants();
-
- if( defined('DEBUG_MODE') && $this->isDebugMode() ) {
- $this->Debugger->appendTimestamp('Before UnitConfigReader');
- }
-
- $this->UnitConfigReader =& $this->recallObject('kUnitConfigReader');
- $this->UnitConfigReader->scanModules(MODULES_PATH);
- $this->registerModuleConstants();
-
- if( defined('DEBUG_MODE') && $this->isDebugMode() ) {
- $this->Debugger->appendTimestamp('After UnitConfigReader');
- }
-
- $rewrite_on = $this->ConfigValue('UseModRewrite');
- // admin=1 - when front is browsed using admin session
- $admin_on = getArrayValue($_REQUEST, 'admin') || $this->IsAdmin();
- define('MOD_REWRITE', $rewrite_on && !$admin_on ? 1 : 0);
-
- $this->HttpQuery =& $this->recallObject('HTTPQuery');
-
- if( defined('DEBUG_MODE') && $this->isDebugMode() ) {
- $this->Debugger->appendTimestamp('Processed HTTPQuery initial');
- }
-
- $this->Session =& $this->recallObject('Session');
-
- if( defined('DEBUG_MODE') && $this->isDebugMode() ) {
- $this->Debugger->appendTimestamp('Processed Session');
- }
-
- if (!$this->RecallVar('UserGroups')) {
- $user_groups = trim($this->Session->GetField('GroupList'), ',');
- if (!$user_groups) {
- $user_groups = $this->ConfigValue('User_GuestGroup');
- }
-
- $this->Session->SetField('GroupList', $user_groups);
- $this->StoreVar('UserGroups', $user_groups);
- }
-
- $this->HttpQuery->AfterInit();
-
- $this->Session->ValidateExpired();
-
- if( defined('DEBUG_MODE') && $this->isDebugMode() ) {
- $this->Debugger->appendTimestamp('Processed HTTPQuery AfterInit');
- }
-
- $this->LoadCache();
- $this->InitConfig();
-
- $this->Phrases->Init('phrases');
-
- if( defined('DEBUG_MODE') && $this->isDebugMode() ) {
- $this->Debugger->appendTimestamp('Loaded cache and phrases');
- }
-
- $this->UnitConfigReader->AfterConfigRead();
-
- if( defined('DEBUG_MODE') && $this->isDebugMode() ) {
- $this->Debugger->appendTimestamp('Processed AfterConfigRead');
- }
-
-
- /*// Module items are recalled during url parsing & PhrasesCache is needed already there,
- // because it's used in their build events. That's why phrases cache initialization is
- // called from kHTTPQuery in case when mod_rewrite is used
- if (!$this->RewriteURLs()) {
- $this->Phrases = new PhrasesCache();
- }*/
-
- if ($this->GetVar('m_cat_id') === false) $this->SetVar('m_cat_id', 0);
- if( !$this->RecallVar('curr_iso') ) $this->StoreVar('curr_iso', $this->GetPrimaryCurrency() );
-
- $this->SetVar('visits_id', $this->RecallVar('visit_id') );
-
- $language =& $this->recallObject( 'lang.current', null, Array('live_table' => true) );
- if (preg_match('/utf-8/', $language->GetDBField('Charset'))) {
- setlocale(LC_ALL, 'en_US.UTF-8');
- mb_internal_encoding('UTF-8');
- }
-
- $this->ValidateLogin();
-
- if( defined('DEBUG_MODE') && $this->isDebugMode() ) {
- $this->Debugger->profileFinish('kernel4_startup');
- }
-
- $this->InitDone = true;
-
- $this->HandleEvent( new kEvent('adm:OnStartup') );
-
- return true;
- }
-
- /**
- * Returns module information. Searches module by requested field
- *
- * @param string $field
- * @param mixed $value
- * @param string field value to returns, if not specified, then return all fields
- * @param string field to return
- * @return Array
- */
- function findModule($field, $value, $return_field = null)
- {
- $found = false;
- foreach ($this->ModuleInfo as $module_name => $module_info) {
- if (strtolower($module_info[$field]) == strtolower($value)) {
- $found = true;
- break;
- }
- }
-
- if ($found) {
- return isset($return_field) ? $module_info[$return_field] : $module_info;
- }
-
- return false;
- }
-
- function refreshModuleInfo()
- {
- if (defined('IS_INSTALL') && IS_INSTALL && !$this->TableFound('Modules')) {
- $this->registerModuleConstants();
- return false;
- }
-
- $modules_helper =& $this->recallObject('ModulesHelper');
- /* @var $modules_helper kModulesHelper */
-
- $sql = 'SELECT *
- FROM ' . TABLE_PREFIX . 'Modules
- WHERE Loaded = 1
- ORDER BY LoadOrder';
- $this->ModuleInfo = $this->Conn->Query($sql, 'Name');
-
- $sql = 'SELECT *
- FROM '.TABLE_PREFIX.'Modules
- WHERE '.$modules_helper->getWhereClause().'
- ORDER BY LoadOrder';
- $this->ModuleInfo = $this->Conn->Query($sql, 'Name');
-
- $this->registerModuleConstants();
- }
-
- /**
- * Checks if passed language id if valid and sets it to primary otherwise
- *
- */
- function VerifyLanguageId()
- {
- $language_id = $this->GetVar('m_lang');
- if (!$language_id) {
- $language_id = 'default';
- }
- $this->SetVar('lang.current_id', $language_id );
- $this->SetVar('m_lang', $language_id );
-
- $lang_mode = $this->GetVar('lang_mode');
- $this->SetVar('lang_mode', '');
- $lang =& $this->recallObject('lang.current');
- if ( !$lang->IsLoaded() || (!$this->Application->IsAdmin() && !$lang->GetDBField('Enabled')) ) {
- if (!defined('IS_INSTALL')) $this->ApplicationDie('Unknown or disabled language');
- }
- $this->SetVar('lang_mode',$lang_mode);
- }
-
- /**
- * Checks if passed theme id if valid and sets it to primary otherwise
- *
- */
- function VerifyThemeId()
- {
- if ($this->Application->IsAdmin()) {
- safeDefine('THEMES_PATH', '/core/admin_templates');
- return;
- }
-
- $path = $this->GetFrontThemePath();
- if ($path === false) {
- $this->ApplicationDie('No Primary Theme Selected or Current Theme is Unknown or Disabled');
- }
- safeDefine('THEMES_PATH', $path);
-
- /*$theme_id = $this->GetVar('m_theme');
- if (!$theme_id) {
- $theme_id = $this->GetDefaultThemeId();
- if (!$theme_id) {
- if (!defined('IS_INSTALL')) $this->ApplicationDie('No Primary Theme Selected');
- }
- }
- $this->SetVar('m_theme', $theme_id);
- $this->SetVar('theme.current_id', $theme_id ); // KOSTJA: this is to fool theme' getPassedId
- $theme =& $this->recallObject('theme.current');
- if (!$theme->IsLoaded() || !$theme->GetDBField('Enabled')) {
- if (!defined('IS_INSTALL')) $this->ApplicationDie('Unknown or disabled theme');
- }
- safeDefine('THEMES_PATH', '/themes/'.$theme->GetDBField('Name'));*/
- }
-
- function GetFrontThemePath($force=0)
- {
- static $path=null;
- if (!$force && isset($path)) return $path;
-
- $theme_id = $this->GetVar('m_theme');
- if (!$theme_id) {
-// $theme_id = $this->GetDefaultThemeId(1); //1 to force front-end mode!
- $theme_id = 'default';
- }
- $this->SetVar('m_theme', $theme_id);
- $this->SetVar('theme.current_id', $theme_id ); // KOSTJA: this is to fool theme' getPassedId
- $theme =& $this->recallObject('theme.current');
- if (!$theme->IsLoaded() || !$theme->GetDBField('Enabled')) {
- return false;
- }
- $path = '/themes/'.$theme->GetDBField('Name');
- return $path;
- }
-
- function GetDefaultLanguageId()
- {
- static $language_id = 0;
-
- if ($language_id > 0) {
- return $language_id;
- }
-
- $table = $this->getUnitOption('lang', 'TableName');
- $id_field = $this->getUnitOption('lang', 'IDField');
-
- $sql = 'SELECT '.$id_field.'
- FROM '.$table.'
- WHERE (PrimaryLang = 1) AND (Enabled = 1)';
- $language_id = $this->Conn->GetOne($sql);
-
- if (!$language_id && defined('IS_INSTALL') && IS_INSTALL) {
- $language_id = 1;
- }
-
- return $language_id;
- }
-
- function GetDefaultThemeId($force_front=0)
- {
- static $theme_id = 0;
-
- if ($theme_id > 0) {
- return $theme_id;
- }
-
- if (constOn('DBG_FORCE_THEME')) {
- $theme_id = DBG_FORCE_THEME;
- }
- elseif (!$force_front && $this->IsAdmin()) {
- $theme_id = 999;
- }
- else {
- $table = $this->getUnitOption('theme','TableName');
- $id_field = $this->getUnitOption('theme','IDField');
- $sql = 'SELECT '.$id_field.'
- FROM '.$table.'
- WHERE (PrimaryTheme = 1) AND (Enabled = 1)';
- $theme_id = $this->Conn->GetOne($sql);
- }
-
- return $theme_id;
- }
-
- function GetPrimaryCurrency()
- {
- if ($this->isModuleEnabled('In-Commerce')) {
- $table = $this->getUnitOption('curr', 'TableName');
- return $this->Conn->GetOne('SELECT ISO FROM '.$table.' WHERE IsPrimary = 1');
- }
- else {
- return 'USD';
- }
- }
-
- /**
- * Registers default classes such as ItemController, GridController and LoginController
- *
- * Called automatically while initializing Application
- * @access private
- * @return void
- */
- function RegisterDefaultClasses()
- {
- $this->registerClass('kTempTablesHandler', KERNEL_PATH.'/utility/temp_handler.php');
- $this->registerClass('kEventManager', KERNEL_PATH.'/event_manager.php', 'EventManager');
- $this->registerClass('kUnitConfigReader', KERNEL_PATH.'/utility/unit_config_reader.php');
-
- $this->registerClass('kArray', KERNEL_PATH.'/utility/params.php');
- $this->registerClass('Params', KERNEL_PATH.'/utility/params.php');
- $this->registerClass('kHelper', KERNEL_PATH.'/kbase.php');
-
- $this->registerClass('kCache', KERNEL_PATH.'/utility/cache.php', 'Cache', Array('Params'));
- $this->registerClass('kHTTPQuery', KERNEL_PATH.'/utility/http_query.php', 'HTTPQuery', Array('Params') );
-
- $this->registerClass('Session', KERNEL_PATH.'/session/session.php');
- $this->registerClass('SessionStorage', KERNEL_PATH.'/session/session.php');
-
-
-
- $this->registerClass('Params', KERNEL_PATH.'/utility/params.php', 'kActions');
-
- $this->registerClass('kMultipleFilter', KERNEL_PATH.'/utility/filters.php');
- $this->registerClass('kDBList', KERNEL_PATH.'/db/dblist.php');
- $this->registerClass('kDBItem', KERNEL_PATH.'/db/dbitem.php');
- $this->registerClass('kDBEventHandler', KERNEL_PATH.'/db/db_event_handler.php');
-
- $this->registerClass('kTagProcessor', KERNEL_PATH.'/processors/tag_processor.php');
- $this->registerClass('kMainTagProcessor', KERNEL_PATH.'/processors/main_processor.php','m_TagProcessor', 'kTagProcessor');
- $this->registerClass('kDBTagProcessor', KERNEL_PATH.'/db/db_tag_processor.php', null, 'kTagProcessor');
-
- $this->registerClass('TemplatesCache', KERNEL_PATH.'/parser/template.php',null, 'kDBTagProcessor');
- $this->registerClass('Template', KERNEL_PATH.'/parser/template.php');
- $this->registerClass('TemplateParser', KERNEL_PATH.'/parser/template_parser.php',null, 'kDBTagProcessor');
- $this->registerClass('NParser', KERNEL_PATH.'/nparser/nparser.php');
-
- $this->registerClass('kEmailSendingHelper', KERNEL_PATH.'/utility/email_send.php', 'EmailSender', Array('kHelper'));
- $this->registerClass('kSocket', KERNEL_PATH.'/utility/socket.php', 'Socket');
-
- if (file_exists(MODULES_PATH.'/in-commerce/units/currencies/currency_rates.php')) {
- $this->registerClass('kCurrencyRates', MODULES_PATH.'/in-commerce/units/currencies/currency_rates.php');
- }
-
- $this->registerClass('FCKeditor', FULL_PATH.'/admin/editor/cmseditor/fckeditor.php'); // need this?
-
- /* Moved from MyApplication */
-
- $this->registerClass('Inp1Parser',KERNEL_PATH.'/../units/general/inp1_parser.php','Inp1Parser');
-
- $this->registerClass('InpSession',KERNEL_PATH.'/../units/general/inp_ses_storage.php','Session');
- $this->registerClass('InpSessionStorage',KERNEL_PATH.'/../units/general/inp_ses_storage.php','SessionStorage');
-
- $this->registerClass('kCatDBItem',KERNEL_PATH.'/../units/general/cat_dbitem.php');
- $this->registerClass('kCatDBItemExportHelper',KERNEL_PATH.'/../units/general/cat_dbitem_export.php', 'CatItemExportHelper');
- $this->registerClass('kCatDBList',KERNEL_PATH.'/../units/general/cat_dblist.php');
- $this->registerClass('kCatDBEventHandler',KERNEL_PATH.'/../units/general/cat_event_handler.php');
- $this->registerClass('kCatDBTagProcessor',KERNEL_PATH.'/../units/general/cat_tag_processor.php');
-
- // Do not move to config - this helper is used before configs are read
- $this->registerClass('kModulesHelper', KERNEL_PATH.'/../units/general/helpers/modules.php', 'ModulesHelper');
-
- /* End moved */
-
- }
-
- function RegisterDefaultBuildEvents()
- {
- $event_manager =& $this->recallObject('EventManager');
- $event_manager->registerBuildEvent('kTempTablesHandler', 'OnTempHandlerBuild');
- }
-
- /**
- * Returns item's filename that corresponds id passed. If possible, then get it from cache
- *
- * @param string $prefix
- * @param int $id
- * @return string
- */
- function getFilename($prefix, $id, $category_id=null)
- {
- $filename = $this->getCache('filenames', $prefix.'_'.$id);
- if ($filename === false) {
- $table = $this->getUnitOption($prefix, 'TableName');
- $id_field = $this->getUnitOption($prefix, 'IDField');
-
- if ($prefix == 'c') {
- if(!$id) {
- $this->setCache('filenames', $prefix.'_'.$id, '');
- return '';
- }
-
- // this allows to save 2 sql queries for each category
- $sql = 'SELECT NamedParentPath, CachedTemplate, TreeLeft, TreeRight
- FROM '.$table.'
- WHERE '.$id_field.' = '.$this->Conn->qstr($id);
- $category_data = $this->Conn->GetRow($sql);
-
- // only direct links to category pages work (symlinks, container pages and so on won't work)
- $filename = $category_data['NamedParentPath'];
- $this->setCache('category_templates', $id, $filename);
- $this->setCache('category_designs', $id, ltrim($category_data['CachedTemplate'], '/'));
- $this->setCache('category_tree', $id, $category_data['TreeLeft'] . ';' . $category_data['TreeRight']);
- }
- else {
- $resource_id = $this->Conn->GetOne('SELECT ResourceId FROM '.$table.' WHERE '.$id_field.' = '.$this->Conn->qstr($id));
- if (is_null($category_id)) $category_id = $this->GetVar('m_cat_id');
- $sql = 'SELECT Filename FROM '.TABLE_PREFIX.'CategoryItems WHERE ItemResourceId = '.$resource_id.' AND CategoryId = '.$category_id;
- $filename = $this->Conn->GetOne($sql);
-
- /*if (!$filename) {
- $sql = 'SELECT Filename FROM '.TABLE_PREFIX.'CategoryItems WHERE ItemResourceId = '.$resource_id.' AND PrimaryCat = 1';
- $filename = $this->Conn->GetOne($sql);
- }*/
-
- /*$sql = 'SELECT Filename
- FROM '.$table.'
- WHERE '.$id_field.' = '.$this->Conn->qstr($id);
- $filename = $this->Conn->GetOne($sql);*/
- }
- $this->setCache('filenames', $prefix.'_'.$id, $filename);
- }
- return $filename;
- }
-
-
- /**
- * Adds new value to cache $cache_name and identified by key $key
- *
- * @param string $cache_name cache name
- * @param int $key key name to add to cache
- * @param mixed $value value of chached record
- */
- function setCache($cache_name, $key, $value, $expiration=3600)
- {
- $cache =& $this->recallObject('Cache');
- /* @var $cache kCache */
-
- return $cache->setCache($cache_name, $key, $value, $expiration);
- }
-
- /**
- * Returns cached $key value from cache named $cache_name
- *
- * @param string $cache_name cache name
- * @param int $key key name from cache
- * @return mixed
- */
- function getCache($cache_name, $key)
- {
- $cache =& $this->recallObject('Cache');
- return $cache->getCache($cache_name, $key);
- }
-
- /**
- * Defines default constants if it's not defined before - in config.php
- *
- * @access private
- */
- function SetDefaultConstants() // it's defined in startup.php - can be removed??
- {
- safeDefine('SERVER_NAME', $_SERVER['HTTP_HOST']);
- }
-
- /**
- * Registers each module specific constants if any found
- *
- */
- function registerModuleConstants()
- {
- if (file_exists(KERNEL_PATH.'/constants.php')) {
- k4_include_once(KERNEL_PATH.'/constants.php');
- }
-
- if (!$this->ModuleInfo) return false;
- foreach($this->ModuleInfo as $module_name => $module_info)
- {
- $module_path = '/'.$module_info['Path'];
- $contants_file = FULL_PATH.$module_path.'constants.php';
- if( file_exists($contants_file) ) k4_include_once($contants_file);
- }
- return true;
- }
-
- function ProcessRequest()
- {
- $event_manager =& $this->recallObject('EventManager');
- /* @var $event_manager kEventManager */
-
- if($this->isDebugMode() && constOn('DBG_SHOW_HTTPQUERY')) {
- $this->Debugger->appendHTML('HTTPQuery:');
- $this->Debugger->dumpVars($this->HttpQuery->_Params);
- }
-
- $event_manager->ProcessRequest();
- $event_manager->RunRegularEvents(reBEFORE);
- $this->RequestProcessed = true;
- }
-
- /**
- * Actually runs the parser against current template and stores parsing result
- *
- * This method gets t variable passed to the script, loads the template given in t variable and
- * parses it. The result is store in {@link $this->HTML} property.
- * @access public
- * @return void
- */
- function Run()
- {
- if($this->isDebugMode() && constOn('DBG_PROFILE_MEMORY')) {
- $this->Debugger->appendMemoryUsage('Application before Run:');
- }
-
- if ($this->IsAdmin()) {
- // for permission checking in events & templates
- $this->LinkVar('module'); // for common configuration templates
- $this->LinkVar('module_key'); // for common search templates
- $this->LinkVar('section'); // for common configuration templates
-
- if ($this->GetVar('m_opener') == 'p') {
- $this->LinkVar('main_prefix'); // window prefix, that opened selector
- $this->LinkVar('dst_field'); // field to set value choosed in selector
-// $this->LinkVar('return_template'); // template to go, when something was coosen from popup (from finalizePopup)
-// $this->LinkVar('return_m'); // main env part to restore after popup will be closed (from finalizePopup)
- }
-
- if ($this->GetVar('ajax') == 'yes' && !$this->GetVar('debug_ajax')) {
- // hide debug output from ajax requests automatically
- define('DBG_SKIP_REPORTING', 1);
- }
- }
- elseif ($this->GetVar('admin')) {
- // viewing front-end through admin's frame
- $admin_session =& $this->Application->recallObject('Session.admin');
- $user = (int)$admin_session->RecallVar('user_id'); // in case, when no valid admin session found
- $perm_helper =& $this->recallObject('PermissionsHelper');
- /* @var $perm_helper kPermissionsHelper */
-
- if ($perm_helper->CheckUserPermission($user, 'CATEGORY.MODIFY', 0, 0)) {
- // user can edit cms blocks
- $editing_mode = $this->GetVar('editing_mode');
- define('EDITING_MODE', $editing_mode ? $editing_mode : EDITING_MODE_CMS);
- }
- }
-
- safeDefine('EDITING_MODE', ''); // user can't edit anything
-
- if (!$this->RequestProcessed) $this->ProcessRequest();
-
- $this->InitParser();
- $t = $this->GetVar('t');
-
- if (!$this->TemplatesCache->TemplateExists($t) && !$this->IsAdmin()) {
- $cms_handler =& $this->recallObject('st_EventHandler');
- /* @var $cms_handler CategoriesEventHandler */
-
- $t = ltrim($cms_handler->GetDesignTemplate(), '/');
-
- if ($this->isDebugMode()) {
- $this->Debugger->appendHTML('Design Template: ' . $t . '; CategoryID: ' . $this->GetVar('m_cat_id'));
- }
- }
- /*else {
- $cms_handler->SetCatByTemplate();
- }*/
-
- if($this->isDebugMode() && constOn('DBG_PROFILE_MEMORY')) {
- $this->Debugger->appendMemoryUsage('Application before Parsing:');
- }
-
- if (defined('NPARSER') && 'NPARSER') {
- $this->HTML = $this->NParser->Run( $t );
- }
- else {
- $this->HTML = $this->Parser->ParseTemplate( $t );
- }
-
- if ($this->isDebugMode() && constOn('DBG_PROFILE_MEMORY')) {
- $this->Debugger->appendMemoryUsage('Application after Parsing:');
- }
- }
-
- function InitParser($theme_name = false)
- {
- if (defined('NPARSER') && 'NPARSER') {
- if( !is_object($this->NParser) ) {
- $this->NParser =& $this->recallObject('NParser');
- $this->TemplatesCache =& $this->recallObject('TemplatesCache');
-
- // can be removed in future
-// $this->Parser =& $this->recallObject('TemplateParser');
- $this->Parser =& $this->NParser;
- }
- }
- else {
- if( !is_object($this->Parser) ) {
- $this->Parser =& $this->recallObject('TemplateParser');
- $this->TemplatesCache =& $this->recallObject('TemplatesCache');
- }
- }
-
- $this->TemplatesCache->forceThemeName = $theme_name;
- }
-
- /**
- * Send the parser results to browser
- *
- * Actually send everything stored in {@link $this->HTML}, to the browser by echoing it.
- * @access public
- * @return void
- */
- function Done()
- {
- $this->HandleEvent( new kEvent('adm:OnBeforeShutdown') );
- if ($this->isDebugMode() && constOn('DBG_PROFILE_MEMORY')) {
- $this->Debugger->appendMemoryUsage('Application before Done:');
- }
-
- //eval("?".">".$this->HTML);
-
- if ($this->isDebugMode()) {
- $this->EventManager->RunRegularEvents(reAFTER);
- $this->Session->SaveData();
-
- if (constOn('DBG_CACHE')) {
- $cache =& $this->recallObject('Cache');
- $cache->printStatistics();
- }
-
- $this->HTML = ob_get_clean() . $this->HTML . $this->Debugger->printReport(true);
- }
- else {
- $this->HTML = ob_get_clean().$this->HTML;
- }
-
- if ($this->UseOutputCompression()) {
- header('Content-Encoding: gzip');
- $compression_level = $this->ConfigValue('OutputCompressionLevel');
- if ($compression_level < 0 || $compression_level > 9) $compression_level = 7;
- echo gzencode($this->HTML, $compression_level);
- }
- else {
- echo $this->HTML;
- }
-
- $this->UpdateCache();
-
- flush();
- if (!$this->isDebugMode()) {
- $this->EventManager->RunRegularEvents(reAFTER);
- $this->Session->SaveData();
- }
-
- if (defined('DBG_CAPTURE_STATISTICS') && DBG_CAPTURE_STATISTICS && !$this->IsAdmin()) {
- $this->_storeStatistics();
- }
- }
-
- /**
- * Stores script execution statistics to database
- *
- */
- function _storeStatistics()
- {
- global $start;
-
- $script_time = getmicrotime() - $start;
- $query_statistics = $this->Conn->getQueryStatistics(); // time & count
-
- $sql = 'SELECT *
- FROM ' . TABLE_PREFIX . 'StatisticsCapture
- WHERE TemplateName = "' . $this->GetVar('t') . '"';
- $data = $this->Conn->GetRow($sql);
-
- if ($data) {
- $this->_updateAverageStatistics($data, 'ScriptTime', $script_time);
- $this->_updateAverageStatistics($data, 'SqlTime', $query_statistics['time']);
- $this->_updateAverageStatistics($data, 'SqlCount', $query_statistics['count']);
-
- $data['Hits']++;
- $data['LastHit'] = adodb_mktime();
-
- $this->Conn->doUpdate($data, TABLE_PREFIX . 'StatisticsCapture', 'StatisticsId = ' . $data['StatisticsId']);
- }
- else {
- $data['ScriptTimeMin'] = $data['ScriptTimeAvg'] = $data['ScriptTimeMax'] = $script_time;
- $data['SqlTimeMin'] = $data['SqlTimeAvg'] = $data['SqlTimeMax'] = $query_statistics['time'];
- $data['SqlCountMin'] = $data['SqlCountAvg'] = $data['SqlCountMax'] = $query_statistics['count'];
- $data['TemplateName'] = $this->GetVar('t');
- $data['Hits'] = 1;
- $data['LastHit'] = adodb_mktime();
- $this->Conn->doInsert($data, TABLE_PREFIX . 'StatisticsCapture');
- }
- }
-
- /**
- * Calculates average time for statistics
- *
- * @param Array $data
- * @param string $field_prefix
- * @param float $current_value
- */
- function _updateAverageStatistics(&$data, $field_prefix, $current_value)
- {
- $data[$field_prefix . 'Avg'] = (($data['Hits'] * $data[$field_prefix . 'Avg']) + $current_value) / ($data['Hits'] + 1);
-
- if ($current_value < $data[$field_prefix . 'Min']) {
- $data[$field_prefix . 'Min'] = $current_value;
- }
-
- if ($current_value > $data[$field_prefix . 'Max']) {
- $data[$field_prefix . 'Max'] = $current_value;
- }
- }
-
- function logSlowQuery($slow_sql, $time)
- {
- $query_crc = crc32($slow_sql);
-
- $sql = 'SELECT *
- FROM ' . TABLE_PREFIX . 'SlowSqlCapture
- WHERE QueryCrc = ' . $query_crc;
- $data = $this->Conn->Query($sql, null, true);
-
- if ($data) {
- $this->_updateAverageStatistics($data, 'Time', $time);
-
- $template_names = explode(',', $data['TemplateNames']);
- array_push($template_names, $this->GetVar('t'));
- $data['TemplateNames'] = implode(',', array_unique($template_names));
-
- $data['Hits']++;
- $data['LastHit'] = adodb_mktime();
-
- $this->Conn->doUpdate($data, TABLE_PREFIX . 'SlowSqlCapture', 'CaptureId = ' . $data['CaptureId']);
- }
- else {
- $data['TimeMin'] = $data['TimeAvg'] = $data['TimeMax'] = $time;
- $data['SqlQuery'] = $slow_sql;
- $data['QueryCrc'] = $query_crc;
- $data['TemplateNames'] = $this->GetVar('t');
- $data['Hits'] = 1;
- $data['LastHit'] = adodb_mktime();
-
- $this->Conn->doInsert($data, TABLE_PREFIX . 'SlowSqlCapture');
- }
- }
-
- /**
- * Checks if output compression options is available
- *
- * @return string
- */
- function UseOutputCompression()
- {
- if (constOn('IS_INSTALL') || constOn('DBG_ZEND_PRESENT') || constOn('SKIP_OUT_COMPRESSION')) return false;
- return $this->ConfigValue('UseOutputCompression') && function_exists('gzencode') && strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip');
- }
-
- // Facade
-
- /**
- * Returns current session id (SID)
- * @access public
- * @return longint
- */
- function GetSID()
- {
- $session =& $this->recallObject('Session');
- return $session->GetID();
- }
-
- function DestroySession()
- {
- $session =& $this->recallObject('Session');
- $session->Destroy();
- }
-
- /**
- * Returns variable passed to the script as GET/POST/COOKIE
- *
- * @access public
- * @param string $name Name of variable to retrieve
- * @param int $default default value returned in case if varible not present
- * @return mixed
- */
- function GetVar($name, $default = false)
- {
- return isset($this->HttpQuery->_Params[$name]) ? $this->HttpQuery->_Params[$name] : $default;
- }
-
- /**
- * Returns ALL variables passed to the script as GET/POST/COOKIE
- *
- * @access public
- * @return array
- */
- function GetVars()
- {
- return $this->HttpQuery->GetParams();
- }
-
- /**
- * Set the variable 'as it was passed to the script through GET/POST/COOKIE'
- *
- * This could be useful to set the variable when you know that
- * other objects would relay on variable passed from GET/POST/COOKIE
- * or you could use SetVar() / GetVar() pairs to pass the values between different objects.
- *
- * This method is formerly known as $this->Session->SetProperty.
- * @param string $var Variable name to set
- * @param mixed $val Variable value
- * @access public
- * @return void
- */
- function SetVar($var,$val)
- {
- return $this->HttpQuery->Set($var, $val);
- }
-
- /**
- * Deletes kHTTPQuery variable
- *
- * @param string $var
- * @todo think about method name
- */
- function DeleteVar($var)
- {
- return $this->HttpQuery->Remove($var);
- }
-
- /**
- * Deletes Session variable
- *
- * @param string $var
- */
- function RemoveVar($var)
- {
- return $this->Session->RemoveVar($var);
- }
-
- function RemovePersistentVar($var)
- {
- return $this->Session->RemovePersistentVar($var);
- }
-
- /**
- * Restores Session variable to it's db version
- *
- * @param string $var
- */
- function RestoreVar($var)
- {
- return $this->Session->RestoreVar($var);
- }
-
- /**
- * Returns session variable value
- *
- * Return value of $var variable stored in Session. An optional default value could be passed as second parameter.
- *
- * @see SimpleSession
- * @access public
- * @param string $var Variable name
- * @param mixed $default Default value to return if no $var variable found in session
- * @return mixed
- */
- function RecallVar($var,$default=false)
- {
- return $this->Session->RecallVar($var,$default);
- }
-
- function RecallPersistentVar($var, $default = false)
- {
- return $this->Session->RecallPersistentVar($var, $default);
- }
-
- /**
- * Stores variable $val in session under name $var
- *
- * Use this method to store variable in session. Later this variable could be recalled.
- * @see RecallVar
- * @access public
- * @param string $var Variable name
- * @param mixed $val Variable value
- */
- function StoreVar($var, $val, $optional = false)
- {
- $session =& $this->recallObject('Session');
- $this->Session->StoreVar($var, $val, $optional);
- }
-
- function StorePersistentVar($var, $val)
- {
- $this->Session->StorePersistentVar($var, $val);
- }
-
- function StoreVarDefault($var, $val, $optional=false)
- {
- $session =& $this->recallObject('Session');
- $this->Session->StoreVarDefault($var, $val, $optional);
- }
-
- /**
- * Links HTTP Query variable with session variable
- *
- * If variable $var is passed in HTTP Query it is stored in session for later use. If it's not passed it's recalled from session.
- * This method could be used for making sure that GetVar will return query or session value for given
- * variable, when query variable should overwrite session (and be stored there for later use).
- * This could be used for passing item's ID into popup with multiple tab -
- * in popup script you just need to call LinkVar('id', 'current_id') before first use of GetVar('id').
- * After that you can be sure that GetVar('id') will return passed id or id passed earlier and stored in session
- * @access public
- * @param string $var HTTP Query (GPC) variable name
- * @param mixed $ses_var Session variable name
- * @param mixed $default Default variable value
- */
- function LinkVar($var, $ses_var = null, $default = '', $optional = false)
- {
- if (!isset($ses_var)) $ses_var = $var;
- if ($this->GetVar($var) !== false) {
- $this->StoreVar($ses_var, $this->GetVar($var), $optional);
- }
- else {
- $this->SetVar($var, $this->RecallVar($ses_var, $default));
- }
- }
-
- /**
- * Returns variable from HTTP Query, or from session if not passed in HTTP Query
- *
- * The same as LinkVar, but also returns the variable value taken from HTTP Query if passed, or from session if not passed.
- * Returns the default value if variable does not exist in session and was not passed in HTTP Query
- *
- * @see LinkVar
- * @access public
- * @param string $var HTTP Query (GPC) variable name
- * @param mixed $ses_var Session variable name
- * @param mixed $default Default variable value
- * @return mixed
- */
- function GetLinkedVar($var, $ses_var = null, $default = '')
- {
- $this->LinkVar($var, $ses_var, $default);
- return $this->GetVar($var);
- }
-
- function AddBlock($name, $tpl)
- {
- $this->cache[$name] = $tpl;
- }
-
- /* Seems to be not used anywhere... /Kostja
-
- function SetTemplateBody($title,$body)
- {
- $templates_cache =& $this->recallObject('TemplatesCache');
- $templates_cache->SetTemplateBody($title,$body);
- }*/
-
- function ProcessTag($tag_data)
- {
- $a_tag = new Tag($tag_data,$this->Parser);
- return $a_tag->DoProcessTag();
- }
-
- function ProcessParsedTag($prefix, $tag, $params)
- {
- if (defined('NPARSER') && NPARSER) {
- $p = $this->Parser->GetProcessor($prefix);
- return $p->ProcessParsedTag($tag, $params, $prefix);
- }
-
- $a_tag = new Tag('',$this->Parser);
- $a_tag->Tag = $tag;
- $tmp=$this->Application->processPrefix($prefix);
- $a_tag->Processor = $tmp['prefix'];
- $a_tag->Special = $tmp['special'];
- $a_tag->NamedParams = $params;
- return $a_tag->DoProcessTag();
- }
-
- /**
- * Return ADODB Connection object
- *
- * Returns ADODB Connection object already connected to the project database, configurable in config.php
- * @access public
- * @return kDBConnection
- */
- function &GetADODBConnection()
- {
- return $this->Conn;
- }
-
- /**
- * Allows to parse given block name or include template
- *
- * @param Array $params Parameters to pass to block/template. Reserved parameter "name" used to specify block/template name.
- * @param Array $pass_params Forces to pass current parser params to this block/template. Use with cauntion, because you can accidently pass "block_no_data" parameter.
- * @param bool $as_template
- * @return string
- */
- function ParseBlock($params, $pass_params = 0, $as_template = false)
- {
- if (substr($params['name'], 0, 5) == 'html:') return substr($params['name'], 6);
- return $this->Parser->ParseBlock($params, $pass_params, $as_template);
- }
-
- /**
- * Returns index file, that could be passed as parameter to method, as parameter to tag and as constant or not passed at all
- *
- * @param string $prefix
- * @param string $index_file
- * @param Array $params
- * @return string
- */
- function getIndexFile($prefix, $index_file, &$params)
- {
- if (isset($params['index_file'])) {
- $index_file = $params['index_file'];
- unset($params['index_file']);
- return $index_file;
- }
-
- if (isset($index_file)) {
- return $index_file;
- }
-
- if (defined('INDEX_FILE')) {
- return INDEX_FILE;
- }
-
- $cut_prefix = trim(BASE_PATH, '/').'/'.trim($prefix, '/');
- return trim(preg_replace('/'.preg_quote($cut_prefix, '/').'(.*)/', '\\1', $_SERVER['PHP_SELF']), '/');
- }
-
- /**
- * Return href for template
- *
- * @access public
- * @param string $t Template path
- * @var string $prefix index.php prefix - could be blank, 'admin'
- */
- function HREF($t, $prefix='', $params=null, $index_file=null)
- {
- if(!$t) $t = $this->GetVar('t'); // moved from kMainTagProcessor->T()
-
- $t = preg_replace('/^Content\//i', '', $t);
-
-
- /*if ($this->GetVar('skip_last_template')) {
- $params['opener'] = 'p';
- $this->SetVar('m_opener', 'p');
- }
-
- if ($t == 'incs/close_popup') {
- // because this template closes the popup and we don't need popup mark here anymore
- $params['m_opener'] = 's';
- }*/
-
- if( substr($t, -4) == '.tpl' ) $t = substr($t, 0, strlen($t) - 4 );
-
- if ( $this->IsAdmin() && $prefix == '') $prefix = ADMIN_DIRECTORY;
- if ( $this->IsAdmin() && $prefix == '_FRONT_END_') $prefix = '';
-
- $index_file = $this->getIndexFile($prefix, $index_file, $params);
-
- if (isset($params['_auto_prefix_'])) {
- unset($params['_auto_prefix_']); // this is parser-related param, do not need to pass it here
- }
-
- $ssl = isset($params['__SSL__']) ? $params['__SSL__'] : null;
- if ($ssl !== null) {
- $session =& $this->recallObject('Session');
- $cookie_url = trim($session->CookieDomain.$session->CookiePath, '/.');
- if ($ssl) {
- $target_url = defined('ADMIN') && ADMIN ? $this->ConfigValue('AdminSSL_URL') : false;
- if (!$target_url) {
- $target_url = $this->ConfigValue('SSL_URL');
- }
- }
- else {
- $target_url = 'http://'.DOMAIN.$this->ConfigValue('Site_Path');
- }
-
- if (!preg_match('#'.preg_quote($cookie_url).'#', $target_url)) {
- $session->SetMode(smGET_ONLY);
- }
- }
-
- if (isset($params['opener']) && $params['opener'] == 'u') {
- $wid = $this->Application->GetVar('m_wid');
- $stack_name = rtrim('opener_stack_'.$wid, '_');
- $opener_stack = $this->RecallVar($stack_name);
-
- if ($opener_stack && $opener_stack != serialize(Array())) {
- $opener_stack = unserialize($opener_stack);
- list($index_file, $env) = explode('|', $opener_stack[count($opener_stack) - 1]);
- $ret = $this->BaseURL($prefix, $ssl).$index_file.'?'.ENV_VAR_NAME.'='.$env;
- if ( getArrayValue($params,'escape') ) $ret = addslashes($ret);
-
- if (isset($params['m_opener']) && $params['m_opener'] == 'u') {
- array_pop($opener_stack);
- if (!$opener_stack) {
- $this->RemoveVar($stack_name);
- // remove popups last templates, because popup is closing now
- $this->RemoveVar('last_template_'.$wid);
- $this->RemoveVar('last_template_popup_'.$wid);
-
- // don't save popups last templates again :)
- $this->SetVar('skip_last_template', 1);
- }
- else {
- $this->StoreVar($stack_name, serialize($opener_stack));
- }
-
- /*// store window relations
- $window_relations = $this->Application->RecallVar('window_relations');
- $window_relations = $window_relations ? unserialize($window_relations) : Array ();
- if (array_key_exists($wid, $window_relations)) {
- unset($window_relations[$wid]);
- $this->Application->StoreVar('window_relations', serialize($window_relations));
- }*/
- }
- return $ret;
- }
- else {
- //define('DBG_REDIRECT', 1);
- $t = $this->GetVar('t');
- }
- }
-
- $pass = isset($params['pass']) ? $params['pass'] : '';
- $pass_events = isset($params['pass_events']) ? $params['pass_events'] : false; // pass events with url
-
- $map_link = '';
- if( isset($params['anchor']) )
- {
- $map_link = '#'.$params['anchor'];
- unset($params['anchor']);
- }
-
- if ( isset($params['no_amp']) )
- {
- $params['__URLENCODE__'] = $params['no_amp'];
- unset($params['no_amp']);
- }
-
- $no_rewrite = false;
- if( isset($params['__NO_REWRITE__']) )
- {
- $no_rewrite = true;
- unset($params['__NO_REWRITE__']);
- }
-
- $force_rewrite = false;
- if( isset($params['__MOD_REWRITE__']) )
- {
- $force_rewrite = true;
- unset($params['__MOD_REWRITE__']);
- }
-
- $force_no_sid = false;
- if( isset($params['__NO_SID__']) )
- {
- $force_no_sid = true;
- unset($params['__NO_SID__']);
- }
-
- // append pass through variables to each link to be build
- // $params = array_merge_recursive2($this->getPassThroughVariables($params), $params);
- $params = array_merge($this->getPassThroughVariables($params), $params);
-
- if ($force_rewrite || ($this->RewriteURLs($ssl) && !$no_rewrite))
- {
- $session =& $this->recallObject('Session');
- if( $session->NeedQueryString() && !$force_no_sid ) $params['sid'] = $this->GetSID();
- $url = $this->BuildEnv_NEW($t, $params, $pass, $pass_events);
- $ret = $this->BaseURL($prefix, $ssl).$url.$map_link;
- }
- else
- {
- unset($params['pass_category']); // we don't need to pass it when mod_rewrite is off
- $env = $this->BuildEnv($t, $params, $pass, $pass_events);
- $ret = $this->BaseURL($prefix, $ssl).$index_file.'?'.$env.$map_link;
- }
-
- return $ret;
- }
-
- /**
- * Returns variables with values that should be passed throught with this link + variable list
- *
- * @param Array $params
- * @return Array
- */
- function getPassThroughVariables(&$params)
- {
- static $cached_pass_through = null;
-
- if (isset($params['no_pass_through']) && $params['no_pass_through']) {
- unset($params['no_pass_through']);
- return Array();
- }
-
- // because pass through is not changed during script run, then we can cache it
- if (is_null($cached_pass_through)) {
-
- $cached_pass_through = Array();
- $pass_through = $this->Application->GetVar('pass_through');
-
- if ($pass_through) {
- // names of variables to pass to each link
- $cached_pass_through['pass_through'] = $pass_through;
- $pass_through = explode(',', $pass_through);
- foreach ($pass_through as $pass_through_var) {
- $cached_pass_through[$pass_through_var] = $this->Application->GetVar($pass_through_var);
- }
- }
-
- }
-
- return $cached_pass_through;
- }
-
-
- /**
- * Returns sorted array of passed prefixes (to build url from)
- *
- * @param string $pass
- * @return Array
- */
- function getPassInfo($pass = 'all')
- {
- if (!$pass) $pass = 'all';
- $pass = trim(
- preg_replace(
- '/(?<=,|\\A)all(?=,|\\z)/',
- trim($this->GetVar('passed'), ','),
- trim($pass, ',')
- ),
- ',');
-
- if (!$pass) {
- return Array();
- }
-
- $pass_info = array_unique( explode(',', $pass) ); // array( prefix[.special], prefix[.special] ...
-
- // we need to keep that sorting despite the sorting below, because this sorts prefixes with same priority by name
- sort($pass_info, SORT_STRING); // to be prefix1,prefix1.special1,prefix1.special2,prefix3.specialX
-
- foreach ($pass_info as $prefix) {
- list($prefix_only) = explode('.', $prefix, 1);
- $sorted[$prefix] = $this->getUnitOption($prefix_only, 'PassPriority', 0);
- }
-
- arsort($sorted);
- $pass_info = array_keys($sorted);
-
- // ensure that "m" prefix is at the beginning
- $main_index = array_search('m', $pass_info);
- if ($main_index !== false) {
- unset($pass_info[$main_index]);
- array_unshift($pass_info, 'm');
- }
- return $pass_info;
- }
-
- function BuildEnv_NEW($t, $params, $pass='all', $pass_events = false)
- {
-// $session =& $this->recallObject('Session');
- $force_admin = getArrayValue($params,'admin') || $this->GetVar('admin');
-
-// if($force_admin) $sid = $this->GetSID();
-
- $ret = '';
- $env = '';
-
- $encode = false;
- if (isset($params['__URLENCODE__']))
- {
- $encode = $params['__URLENCODE__'];
- unset($params['__URLENCODE__']);
- }
-
- if (isset($params['__SSL__'])) {
- unset($params['__SSL__']);
- }
-
- $m_only = true;
- $pass_info = $this->getPassInfo($pass);
- if ($pass_info) {
- if ($pass_info[0] == 'm') array_shift($pass_info);
- $params['t'] = $t;
- foreach($pass_info as $pass_index => $pass_element)
- {
- list($prefix) = explode('.', $pass_element);
- $require_rewrite = $this->findModule('Var', $prefix) && $this->getUnitOption($prefix, 'CatalogItem');
- if ($require_rewrite) {
- // if next prefix is same as current, but with special => exclude current prefix from url
- $next_prefix = getArrayValue($pass_info, $pass_index + 1);
- if ($next_prefix) {
- $next_prefix = substr($next_prefix, 0, strlen($prefix) + 1);
- if ($prefix.'.' == $next_prefix) continue;
- }
- $a = $this->BuildModuleEnv_NEW($pass_element, $params, $pass_events);
- if ($a) {
- $ret .= '/'.$a;
- $m_only = false;
- }
- }
- else
- {
- $env .= ':'.$this->BuildModuleEnv($pass_element, $params, $pass_events);
- }
- }
-
- if (!$m_only || preg_match('/c\.[-\d]*/', implode(',', $pass_info))) {
- $params['pass_category'] = 1;
- }
- $ret = $this->BuildModuleEnv_NEW('m', $params, $pass_events).$ret;
- $cat_processed = isset($params['category_processed']) && $params['category_processed'];
- if ($cat_processed) {
- unset($params['category_processed']);
- }
-
- if (!$m_only || !$cat_processed || !defined('EXP_DIR_URLS')) {
- $ret = trim($ret, '/').'.html';
- }
- else {
- $ret .= '/';
- }
-
-// $ret = trim($ret, '/').'/';
- if($env) $params[ENV_VAR_NAME] = ltrim($env, ':');
- }
-
- unset($params['pass'], $params['opener'], $params['m_event']);
- if ($force_admin) $params['admin'] = 1;
-
- if( getArrayValue($params,'escape') )
- {
- $ret = addslashes($ret);
- unset($params['escape']);
- }
-
- $ret = str_replace('%2F', '/', urlencode($ret));
-
- $params_str = '';
- $join_string = $encode ? '&' : '&';
- foreach ($params as $param => $value)
- {
- $params_str .= $join_string.$param.'='.$value;
- }
- $ret .= preg_replace('/^'.$join_string.'(.*)/', '?\\1', $params_str);
-
- if ($encode) {
- $ret = str_replace('\\', '%5C', $ret);
- }
- return $ret;
- }
-
-
- function BuildModuleEnv_NEW($prefix_special, &$params, $pass_events = false)
- {
- $event_params = Array('pass_events' => $pass_events, 'url_params' => $params);
- $event = new kEvent($prefix_special.':BuildEnv', $event_params);
- $this->HandleEvent($event);
- $params = $event->getEventParam('url_params'); // save back unprocessed parameters
-
- $ret = '';
- if ($event->getEventParam('env_string')) {
- $ret = trim( $event->getEventParam('env_string'), '/');
- }
- return $ret;
- }
-
- /**
- * Builds env part that corresponds prefix passed
- *
- * @param string $prefix_special item's prefix & [special]
- * @param Array $params url params
- * @param bool $pass_events
- */
- function BuildModuleEnv($prefix_special, &$params, $pass_events = false)
- {
- list($prefix) = explode('.', $prefix_special);
- $query_vars = $this->getUnitOption($prefix, 'QueryString');
-
- //if pass events is off and event is not implicity passed
- if( !$pass_events && !isset($params[$prefix_special.'_event']) ) {
- $params[$prefix_special.'_event'] = ''; // remove event from url if requested
- //otherwise it will use value from get_var
- }
-
- if(!$query_vars) return '';
-
- $tmp_string = Array(0 => $prefix_special);
- foreach($query_vars as $index => $var_name)
- {
- //if value passed in params use it, otherwise use current from application
- $var_name = $prefix_special.'_'.$var_name;
- $tmp_string[$index] = isset( $params[$var_name] ) ? $params[$var_name] : $this->GetVar($var_name);
- if ( isset($params[$var_name]) ) unset( $params[$var_name] );
- }
-
- $escaped = array();
- foreach ($tmp_string as $tmp_val) {
- $escaped[] = str_replace(Array('-',':'), Array('\-','\:'), $tmp_val);
- }
-
- $ret = implode('-', $escaped);
- if ($this->getUnitOption($prefix, 'PortalStyleEnv') == true)
- {
- $ret = preg_replace('/^([a-zA-Z]+)-([0-9]+)-(.*)/','\\1\\2-\\3', $ret);
- }
- return $ret;
- }
-
- function BuildEnv($t, $params, $pass='all', $pass_events = false, $env_var = true)
- {
- $session =& $this->recallObject('Session');
- $ssl = isset($params['__SSL__']) ? $params['__SSL__'] : 0;
- $sid = $session->NeedQueryString() && !$this->RewriteURLs($ssl) ? $this->GetSID() : '';
-// if (getArrayValue($params,'admin') == 1) $sid = $this->GetSID();
-
- $ret = '';
- if ($env_var) {
- $ret = ENV_VAR_NAME.'=';
- }
-
- $ret .= $sid.(constOn('INPORTAL_ENV') ? '-' : ':');
-
- $encode = false;
- if (isset($params['__URLENCODE__'])) {
- $encode = $params['__URLENCODE__'];
- unset($params['__URLENCODE__']);
- }
-
- if (isset($params['__SSL__'])) {
- unset($params['__SSL__']);
- }
-
- $env_string = '';
- $category_id = isset($params['m_cat_id']) ? $params['m_cat_id'] : $this->GetVar('m_cat_id');
-
- $item_id = false;
- $pass_info = $this->getPassInfo($pass);
- if ($pass_info) {
- if ($pass_info[0] == 'm') array_shift($pass_info);
- foreach ($pass_info as $pass_element) {
- list($prefix) = explode('.', $pass_element);
- $require_rewrite = $this->findModule('Var', $prefix);
- if ($require_rewrite) {
- $item_id = isset($params[$pass_element.'_id']) ? $params[$pass_element.'_id'] : $this->GetVar($pass_element.'_id');
- }
- $env_string .= ':'.$this->BuildModuleEnv($pass_element, $params, $pass_events);
- }
- }
-
- if (strtolower($t) == '__default__') {
- // to put category & item templates into cache
- $filename = $this->getFilename('c', $category_id);
- if (is_numeric($item_id)) {
- $mod_rw_helper =& $this->Application->recallObject('ModRewriteHelper');
- /* @var $mod_rw_helper kModRewriteHelper */
-
- $t = $mod_rw_helper->GetItemTemplate($category_id, $pass_element); // $pass_element should be the last processed element
-// $t = $this->getCache('item_templates', $category_id);
- }
- elseif ($category_id) {
- $t = strtolower( preg_replace('/^Content\//i', '', $this->getCache('category_templates', $category_id)) );
- }
- else {
- $t = 'index';
- }
- }
-
- $ret .= $t.':'.$this->BuildModuleEnv('m', $params, $pass_events).$env_string;
-
- unset($params['pass'], $params['opener'], $params['m_event']);
-
- if ($this->GetVar('admin') && !isset($params['admin'])) {
- $params['admin'] = 1;
-
- if (!array_key_exists('editing_mode', $params)) {
- $params['editing_mode'] = EDITING_MODE;
- }
- }
-
- if (array_key_exists('escape', $params) && $params['escape']) {
- $ret = addslashes($ret);
- unset($params['escape']);
- }
-
- $join_string = $encode ? '&' : '&';
- $params_str = '';
- foreach ($params as $param => $value)
- {
- $params_str .= $join_string.$param.'='.$value;
- }
- $ret .= $params_str;
-
- if ($encode) {
- $ret = str_replace('\\', '%5C', $ret);
- }
- return $ret;
- }
-
- function BaseURL($prefix='', $ssl=null)
- {
- if ($ssl === null) {
- return PROTOCOL.SERVER_NAME.(defined('PORT')?':'.PORT : '').rtrim(BASE_PATH, '/').$prefix.'/';
- }
- else {
- if ($ssl) {
- $base_url = defined('ADMIN') && ADMIN ? $this->ConfigValue('AdminSSL_URL') : false;
- if (!$base_url) {
- $base_url = $this->ConfigValue('SSL_URL');
- }
-
- return rtrim($base_url, '/').$prefix.'/';
- }
- else {
- return 'http://'.DOMAIN.(defined('PORT')?':'.PORT : '').rtrim( $this->ConfigValue('Site_Path'), '/').$prefix.'/';
- }
- }
- }
-
- function Redirect($t='', $params=null, $prefix='', $index_file=null)
- {
- $js_redirect = getArrayValue($params, 'js_redirect');
- if (preg_match("/external:(.*)/", $t, $rets)) {
- $location = $rets[1];
- }
- else {
- if ($t == '' || $t === true) $t = $this->GetVar('t');
-
- // pass prefixes and special from previous url
- if( isset($params['js_redirect']) ) unset($params['js_redirect']);
-
- if (!isset($params['pass'])) $params['pass'] = 'all';
- if ($this->GetVar('ajax') == 'yes' && $t == $this->GetVar('t')) {
- // redirects to the same template as current
- $params['ajax'] = 'yes';
- }
- $params['__URLENCODE__'] = 1;
- $location = $this->HREF($t, $prefix, $params, $index_file);
- //echo " location : $location
";
- }
-
- $a_location = $location;
- $location = "Location: $location";
-
-
- if ($this->isDebugMode() && constOn('DBG_REDIRECT')) {
- $this->Debugger->appendTrace();
- echo "Debug output above!!! Proceed to redirect: $a_location
";
- }
- else {
- if ($js_redirect) {
- $this->SetVar('t', 'redirect');
- $this->SetVar('redirect_to_js', addslashes($a_location) );
- $this->SetVar('redirect_to', $a_location);
- return true;
- }
- else {
- if ($this->GetVar('ajax') == 'yes' && $t != $this->GetVar('t')) {
- // redirection to other then current template during ajax request
- echo '#redirect#'.$a_location;
- }
- elseif (headers_sent() != '') {
- // some output occured -> redirect using javascript
- echo '';
- }
- else {
- // no output before -> redirect using HTTP header
-
-// header('HTTP/1.1 302 Found');
- header("$location");
- }
- }
- }
-
- ob_end_flush();
- // session expiration is called from session initialization,
- // that's why $this->Session may be not defined here
- $session =& $this->Application->recallObject('Session');
- /* @var $session Session */
-
- $this->HandleEvent( new kEvent('adm:OnBeforeShutdown') );
- $session->SaveData();
- exit;
- }
-
- function Phrase($label)
- {
- return $this->Phrases->GetPhrase($label);
- }
-
- /**
- * Replace language tags in exclamation marks found in text
- *
- * @param string $text
- * @param bool $force_escape force escaping, not escaping of resulting string
- * @return string
- * @access public
- */
- function ReplaceLanguageTags($text, $force_escape=null)
- {
- // !!!!!!!!
-// if( !is_object($this->Phrases) ) $this->Debugger->appendTrace();
- return $this->Phrases->ReplaceLanguageTags($text,$force_escape);
- }
-
- /**
- * Checks if user is logged in, and creates
- * user object if so. User object can be recalled
- * later using "u.current" prefix_special. Also you may
- * get user id by getting "u.current_id" variable.
- *
- * @access private
- */
- function ValidateLogin()
- {
- $session =& $this->recallObject('Session');
- $user_id = $session->GetField('PortalUserId');
- if (!$user_id && $user_id != -1) $user_id = -2;
- $this->SetVar('u.current_id', $user_id);
-
- if (!$this->IsAdmin()) {
- // needed for "profile edit", "registration" forms ON FRONT ONLY
- $this->SetVar('u_id', $user_id);
- }
-
- $this->StoreVar('user_id', $user_id);
-
- if ($this->GetVar('expired') == 1) {
- // this parameter is set only from admin
- $user =& $this->recallObject('u.current');
- $user->SetError('ValidateLogin', 'session_expired', 'la_text_sess_expired');
- }
-
- if (($user_id != -2) && constOn('DBG_REQUREST_LOG') ) {
- $http_query =& $this->recallObject('HTTPQuery');
- $http_query->writeRequestLog(DBG_REQUREST_LOG);
- }
-
- if ($user_id != -2) {
- // normal users + root
- $this->LoadPersistentVars();
- }
- }
-
- /**
- * Loads current user persistent session data
- *
- */
- function LoadPersistentVars()
- {
- $this->Session->LoadPersistentVars();
- }
-
- function LoadCache() {
- $cache_key = $this->GetVar('t').$this->GetVar('m_theme').$this->GetVar('m_lang').$this->IsAdmin();
- $query = sprintf("SELECT PhraseList, ConfigVariables FROM %s WHERE Template = %s",
- TABLE_PREFIX.'PhraseCache',
- $this->Conn->qstr(md5($cache_key)));
- $res = $this->Conn->GetRow($query);
-
- if ($res) {
- $this->Caches['PhraseList'] = $res['PhraseList'] ? explode(',', $res['PhraseList']) : array();
-
- $config_ids = $res['ConfigVariables'] ? explode(',', $res['ConfigVariables']) : array();
- if (isset($this->Caches['ConfigVariables'])) {
- $config_ids = array_diff($config_ids, $this->Caches['ConfigVariables']);
- }
- }
- else {
- $config_ids = array();
- }
- $this->Caches['ConfigVariables'] = $config_ids;
- $this->ConfigCacheIds = $config_ids;
- }
-
- function UpdateCache()
- {
- $update = false;
- //something changed
- $update = $update || $this->Phrases->NeedsCacheUpdate();
- $update = $update || (count($this->ConfigCacheIds) && $this->ConfigCacheIds != $this->Caches['ConfigVariables']);
- if ($update) {
- $cache_key = $this->GetVar('t').$this->GetVar('m_theme').$this->GetVar('m_lang').$this->IsAdmin();
- $query = sprintf("REPLACE %s (PhraseList, CacheDate, Template, ConfigVariables)
- VALUES (%s, %s, %s, %s)",
- TABLE_PREFIX.'PhraseCache',
- $this->Conn->Qstr(join(',', $this->Phrases->Ids)),
- adodb_mktime(),
- $this->Conn->Qstr(md5($cache_key)),
- $this->Conn->qstr(implode(',', array_unique($this->ConfigCacheIds))));
- $this->Conn->Query($query);
- }
- }
-
- function InitConfig()
- {
- if (isset($this->Caches['ConfigVariables']) && count($this->Caches['ConfigVariables']) > 0) {
- $this->ConfigHash = array_merge($this->ConfigHash, $this->Conn->GetCol(
- 'SELECT VariableValue, VariableName FROM '.TABLE_PREFIX.'ConfigurationValues
- WHERE VariableId IN ('.implode(',', $this->Caches['ConfigVariables']).')', 'VariableName'));
- }
- }
-
- /**
- * Returns configuration option value by name
- *
- * @param string $name
- * @return string
- */
- function ConfigValue($name)
- {
- $res = array_key_exists($name, $this->ConfigHash) ? $this->ConfigHash[$name] : false;
- if ($res !== false) {
- return $res;
- }
-
- if (defined('IS_INSTALL') && IS_INSTALL && !$this->TableFound('ConfigurationValues')) {
- return false;
- }
-
- $sql = 'SELECT VariableId, VariableValue
- FROM '.TABLE_PREFIX.'ConfigurationValues
- WHERE VariableName = '.$this->Conn->qstr($name);
- $res = $this->Conn->GetRow($sql);
-
- if ($res !== false) {
- $this->ConfigHash[$name] = $res['VariableValue'];
- $this->ConfigCacheIds[] = $res['VariableId'];
- return $res['VariableValue'];
- }
-
- return false;
- }
-
- function UpdateConfigCache()
- {
- if ($this->ConfigCacheIds) {
-
- }
- }
-
- /**
- * Allows to process any type of event
- *
- * @param kEvent $event
- * @access public
- * @author Alex
- */
- function HandleEvent(&$event, $params=null, $specificParams=null)
- {
- if ( isset($params) ) {
- $event = new kEvent( $params, $specificParams );
- }
-
- if (!isset($this->EventManager)) {
- $this->EventManager =& $this->recallObject('EventManager');
- }
-
- $this->EventManager->HandleEvent($event);
- }
-
- /**
- * Registers new class in the factory
- *
- * @param string $real_class Real name of class as in class declaration
- * @param string $file Filename in what $real_class is declared
- * @param string $pseudo_class Name under this class object will be accessed using getObject method
- * @param Array $dependecies List of classes required for this class functioning
- * @access public
- * @author Alex
- */
- function registerClass($real_class, $file, $pseudo_class = null, $dependecies = Array() )
- {
- $this->Factory->registerClass($real_class, $file, $pseudo_class, $dependecies);
- }
-
- /**
- * Add $class_name to required classes list for $depended_class class.
- * All required class files are included before $depended_class file is included
- *
- * @param string $depended_class
- * @param string $class_name
- * @author Alex
- */
- function registerDependency($depended_class, $class_name)
- {
- $this->Factory->registerDependency($depended_class, $class_name);
- }
-
- /**
- * Registers Hook from subprefix event to master prefix event
- *
- * @param string $hookto_prefix
- * @param string $hookto_special
- * @param string $hookto_event
- * @param string $mode
- * @param string $do_prefix
- * @param string $do_special
- * @param string $do_event
- * @param string $conditional
- * @access public
- * @todo take care of a lot parameters passed
- * @author Kostja
- */
- function registerHook($hookto_prefix, $hookto_special, $hookto_event, $mode, $do_prefix, $do_special, $do_event, $conditional)
- {
- $event_manager =& $this->recallObject('EventManager');
- $event_manager->registerHook($hookto_prefix, $hookto_special, $hookto_event, $mode, $do_prefix, $do_special, $do_event, $conditional);
- }
-
- /**
- * Allows one TagProcessor tag act as other TagProcessor tag
- *
- * @param Array $tag_info
- * @author Kostja
- */
- function registerAggregateTag($tag_info)
- {
- $aggregator =& $this->recallObject('TagsAggregator', 'kArray');
- $aggregator->SetArrayValue($tag_info['AggregateTo'], $tag_info['AggregatedTagName'], Array($tag_info['LocalPrefix'], $tag_info['LocalTagName'], getArrayValue($tag_info, 'LocalSpecial')));
- }
-
- /**
- * Returns object using params specified,
- * creates it if is required
- *
- * @param string $name
- * @param string $pseudo_class
- * @param Array $event_params
- * @return Object
- * @author Alex
- */
- function &recallObject($name,$pseudo_class=null,$event_params=Array())
- {
- $result =& $this->Factory->getObject($name, $pseudo_class, $event_params);
- return $result;
- }
-
- /**
- * Returns object using Variable number of params,
- * all params starting with 4th are passed to object consturctor
- *
- * @param string $name
- * @param string $pseudo_class
- * @param Array $event_params
- * @return Object
- * @author Alex
- */
- function &recallObjectP($name,$pseudo_class=null,$event_params=Array())
- {
- $func_args = func_get_args();
- $result =& ref_call_user_func_array( Array(&$this->Factory, 'getObjectP'), $func_args );
- return $result;
- }
-
- /**
- * Returns tag processor for prefix specified
- *
- * @param string $prefix
- * @return kDBTagProcessor
- */
- function &recallTagProcessor($prefix)
- {
- $this->InitParser(); // because kDBTagProcesor is in TemplateParser dependencies
- $result =& $this->recallObject($prefix.'_TagProcessor');
- return $result;
- }
-
- /**
- * Checks if object with prefix passes was already created in factory
- *
- * @param string $name object presudo_class, prefix
- * @return bool
- * @author Kostja
- */
- function hasObject($name)
- {
- return isset($this->Factory->Storage[$name]);
- }
-
- /**
- * Removes object from storage by given name
- *
- * @param string $name Object's name in the Storage
- * @author Kostja
- */
- function removeObject($name)
- {
- $this->Factory->DestroyObject($name);
- }
-
- /**
- * Get's real class name for pseudo class,
- * includes class file and creates class
- * instance
- *
- * @param string $pseudo_class
- * @return Object
- * @access public
- * @author Alex
- */
- function &makeClass($pseudo_class)
- {
- $func_args = func_get_args();
- $result =& ref_call_user_func_array( Array(&$this->Factory, 'makeClass'), $func_args);
-
- return $result;
- }
-
- /**
- * Checks if application is in debug mode
- *
- * @param bool $check_debugger check if kApplication debugger is initialized too, not only for defined DEBUG_MODE constant
- * @return bool
- * @author Alex
- * @access public
- */
- function isDebugMode($check_debugger = true)
- {
- $debug_mode = defined('DEBUG_MODE') && DEBUG_MODE;
- if ($check_debugger) {
- $debug_mode = $debug_mode && is_object($this->Debugger);
- }
- return $debug_mode;
- }
-
- /**
- * Checks if it is admin
- *
- * @return bool
- * @author Alex
- */
- function IsAdmin()
- {
- return constOn('ADMIN');
- }
-
- /**
- * Apply url rewriting used by mod_rewrite or not
- *
- * @param bool $ssl Force ssl link to be build
- * @return bool
- */
- function RewriteURLs($ssl = false)
- {
- // case #1,#4:
- // we want to create https link from http mode
- // we want to create https link from https mode
- // conditions: ($ssl || PROTOCOL == 'https://') && $this->ConfigValue('UseModRewriteWithSSL')
-
- // case #2,#3:
- // we want to create http link from https mode
- // we want to create http link from http mode
- // conditions: !$ssl && (PROTOCOL == 'https://' || PROTOCOL == 'http://')
-
- $allow_rewriting =
- (!$ssl && (PROTOCOL == 'https://' || PROTOCOL == 'http://')) // always allow mod_rewrite for http
- || // or allow rewriting for redirect TO httpS or when already in httpS
- (($ssl || PROTOCOL == 'https://') && $this->ConfigValue('UseModRewriteWithSSL')); // but only if it's allowed in config!
- return constOn('MOD_REWRITE') && $allow_rewriting;
- }
-
- /**
- * Reads unit (specified by $prefix)
- * option specified by $option
- *
- * @param string $prefix
- * @param string $option
- * @param mixed $default
- * @return string
- * @access public
- * @author Alex
- */
- function getUnitOption($prefix, $option, $default = false)
- {
- /*if (!isset($this->UnitConfigReader)) {
- $this->UnitConfigReader =& $this->recallObject('kUnitConfigReader');
- }*/
- return $this->UnitConfigReader->getUnitOption($prefix, $option, $default);
- }
-
- /**
- * Set's new unit option value
- *
- * @param string $prefix
- * @param string $name
- * @param string $value
- * @author Alex
- * @access public
- */
- function setUnitOption($prefix, $option, $value)
- {
-// $unit_config_reader =& $this->recallObject('kUnitConfigReader');
- return $this->UnitConfigReader->setUnitOption($prefix,$option,$value);
- }
-
- /**
- * Read all unit with $prefix options
- *
- * @param string $prefix
- * @return Array
- * @access public
- * @author Alex
- */
- function getUnitOptions($prefix)
- {
-// $unit_config_reader =& $this->recallObject('kUnitConfigReader');
- return $this->UnitConfigReader->getUnitOptions($prefix);
- }
-
- /**
- * Returns true if config exists and is allowed for reading
- *
- * @param string $prefix
- * @return bool
- */
- function prefixRegistred($prefix)
- {
- /*if (!isset($this->UnitConfigReader)) {
- $this->UnitConfigReader =& $this->recallObject('kUnitConfigReader');
- }*/
- return $this->UnitConfigReader->prefixRegistred($prefix);
- }
-
- /**
- * Splits any mixing of prefix and
- * special into correct ones
- *
- * @param string $prefix_special
- * @return Array
- * @access public
- * @author Alex
- */
- function processPrefix($prefix_special)
- {
- return $this->Factory->processPrefix($prefix_special);
- }
-
- /**
- * Set's new event for $prefix_special
- * passed
- *
- * @param string $prefix_special
- * @param string $event_name
- * @access public
- */
- function setEvent($prefix_special,$event_name)
- {
- $event_manager =& $this->recallObject('EventManager');
- $event_manager->setEvent($prefix_special,$event_name);
- }
-
-
- /**
- * SQL Error Handler
- *
- * @param int $code
- * @param string $msg
- * @param string $sql
- * @return bool
- * @access private
- * @author Alex
- */
- function handleSQLError($code, $msg, $sql)
- {
- if ( isset($this->Debugger) )
- {
- $errorLevel = constOn('DBG_SQL_FAILURE') && !defined('IS_INSTALL') ? E_USER_ERROR : E_USER_WARNING;
- $this->Debugger->appendTrace();
-
- $error_msg = ''.$msg.' ('.$code.')
SQL: '.$this->Debugger->formatSQL($sql);
- $long_id = $this->Debugger->mapLongError($error_msg);
- trigger_error( mb_substr($msg.' ('.$code.') ['.$sql.']',0,1000).' #'.$long_id, $errorLevel);
- return true;
- }
- else
- {
- //$errorLevel = constOn('IS_INSTALL') ? E_USER_WARNING : E_USER_ERROR;
- $errorLevel = E_USER_WARNING;
- trigger_error('SQL Error in sql: '.$sql.', code '.$code.' ('.$msg.')', $errorLevel);
- /*echo 'xProcessing SQL: '.$sql.'
';
- echo 'Error ('.$code.'): '.$msg.'
';*/
- return $errorLevel == E_USER_ERROR ? false : true;
- }
- }
-
- /**
- * Default error handler
- *
- * @param int $errno
- * @param string $errstr
- * @param string $errfile
- * @param int $errline
- * @param Array $errcontext
- */
- function handleError($errno, $errstr, $errfile = '', $errline = '', $errcontext = '')
- {
- if (defined('SILENT_LOG') && SILENT_LOG) {
- if ( !(defined('DBG_IGNORE_STRICT_ERRORS') && DBG_IGNORE_STRICT_ERRORS && defined('E_STRICT') && ($errno == E_STRICT)) ) {
- $fp = fopen(FULL_PATH.'/silent_log.txt','a');
- $time = adodb_date('d/m/Y H:i:s');
- fwrite($fp, '['.$time.'] #'.$errno.': '.strip_tags($errstr).' in ['.$errfile.'] on line '.$errline."\n");
- fclose($fp);
- }
- }
-
- $debug_mode = defined('DEBUG_MODE') && DEBUG_MODE;
- $skip_reporting = defined('DBG_SKIP_REPORTING') && DBG_SKIP_REPORTING;
-
- if (!$this->errorHandlers || ($debug_mode && $skip_reporting)) {
- // when debugger absent OR it's present, but we actually can't see it's error report (e.g. during ajax request)
- $ignore_fatal_errors = defined('DBG_IGNORE_FATAL_ERRORS') && DBG_IGNORE_FATAL_ERRORS;
-
- if (($errno == E_USER_ERROR) && !$ignore_fatal_errors) {
- header('HTTP/1.0 500 Script Fatal Error');
- echo ('