Page MenuHomeIn-Portal Phabricator

in-portal
No OneTemporary

File Metadata

Created
Sun, Feb 2, 7:03 PM

in-portal

Index: trunk/admin/editor/cmseditor/editor/filemanager/browser/default/connectors/php/commands.php
===================================================================
--- trunk/admin/editor/cmseditor/editor/filemanager/browser/default/connectors/php/commands.php (revision 1594)
+++ trunk/admin/editor/cmseditor/editor/filemanager/browser/default/connectors/php/commands.php (revision 1595)
@@ -1 +1 @@
-<?php /* * FCKeditor - The text editor for internet * Copyright (C) 2003-2004 Frederico Caldeira Knabben * * Licensed under the terms of the GNU Lesser General Public License: * http://www.opensource.org/licenses/lgpl-license.php * * For further information visit: * http://www.fckeditor.net/ * * File Name: commands.php * This is the File Manager Connector for ASP. * * Version: 2.0 RC3 * Modified: 2005-02-19 16:02:38 * * File Authors: * Frederico Caldeira Knabben (fredck@fckeditor.net) */ function GetFolders( $resourceType, $currentFolder ) { // Map the virtual path to the local server path. $sServerDir = ServerMapFolder( $resourceType, $currentFolder ) ; // Open the "Folders" node. echo "<Folders>" ; $oCurrentFolder = opendir( $sServerDir ) ; while ( $sFile = readdir( $oCurrentFolder ) ) { if ( $sFile != '.' && $sFile != '..' && $sFile != 'CVS' && is_dir( $sServerDir . $sFile ) ) echo '<Folder name="' . ConvertToXmlAttribute( $sFile ) . '" />' ; } closedir( $oCurrentFolder ) ; // Close the "Folders" node. echo "</Folders>" ; } /* function GetCmsTree() { $conn = GetADODbConnection(); $query="SELECT st.* , wb.eng_content AS page_title FROM structure_templates st LEFT JOIN working_blocks AS wb ON (st.st_id = wb.template_id) AND (wb.block_type = 3) WHERE st_id != '5' AND st_path != '/cms' GROUP BY st_id ORDER BY st_lastupdate desc"; $rs = $conn->Execute($query); if ($rs && !$rs->EOF) { $ret = "<CmsPages>"; while($rs && !$rs->EOF) { $ret.= '<CmsPage path="'.BASE_PATH.'/index.php?t='.$rs->fields['st_path'].'" title="'.$rs->fields['page_title'].'" />'; //echo $rs->fields['page_title']."<br>"; $rs->MoveNext(); } $ret.= '</CmsPages>'; echo $ret; } } */ function GetCmsTree() { $ret = "<CmsPages>"; $ret.= ReadCmsTree(0); $ret.= "</CmsPages>"; echo $ret; } function ReadCmsTree($st_id, $level = 0) { $conn = GetADODbConnection(); $query = "SELECT value FROM config WHERE name = 'cms_direct_mode'"; $rs = $conn->Execute($query); if ($rs && !$rs->EOF) { $cms_mode = $rs->fields['value']; } $query = "SELECT value FROM config WHERE name = 'email_templates_folder_id'"; $rs = $conn->Execute($query); if ($rs && !$rs->EOF) { $email_templates_folder_id = $rs->fields['value']; } if ( $email_templates_folder_id == "" ) $email_templates_folder_id = 0; if ( $cms_mode == 1 ) { $query = " SELECT st.*, IF(lb.eng_content='' OR lb.eng_content IS NULL, st.st_path, lb.eng_content ) AS page_title FROM structure_templates AS st LEFT JOIN live_blocks AS lb ON (st.st_id = lb.template_id) AND (lb.block_type = 3) WHERE st.st_parent_id = ".$st_id." AND st_id != ".$email_templates_folder_id." AND st_path != '/cms' ORDER BY st.st_order"; } else { $query = " SELECT st.*, IF(wb.eng_content='' OR wb.eng_content IS NULL, st.st_path, wb.eng_content ) AS page_title FROM structure_templates AS st LEFT JOIN working_blocks AS wb ON (st.st_id = wb.template_id) AND (wb.block_type = 3) WHERE st.st_parent_id = ".$st_id." AND st_id != ".$email_templates_folder_id." AND st_path != '/cms%' ORDER BY st.st_order"; } //echo $query." <br>"; $rs = $conn->Execute($query); if ($rs && !$rs->EOF) { while ($rs && !$rs->EOF) { $page_path = ltrim($rs->fields['st_path'], '/'); //$page_path = SERVER_NAME.BASE_PATH.'/index.php?t='.$page_path; //$page_path = $page_path; $prefix=''; for ($i = 0; $i < $level; $i++) $prefix .= '--'; if ($level > 0) $prefix=$prefix.'- '; $res .= '<CmsPage path="'.$page_path.'" title="'.$prefix.htmlspecialchars($rs->fields['page_title'],ENT_QUOTES).'" serverpath="'.BASE_PATH.'/index.php?t=" />'; $res .= ReadCmsTree($rs->fields['st_id'], $level+1); $rs->MoveNext(); } return $res; } } function GetFoldersAndFiles( $resourceType, $currentFolder ) { // Map the virtual path to the local server path. $sServerDir = ServerMapFolder( $resourceType, $currentFolder ) ; // Initialize the output buffers for "Folders" and "Files". $sFolders = '<Folders>' ; $sFiles = '<Files>' ; $oCurrentFolder = opendir( $sServerDir ) ; while ( $sFile = readdir( $oCurrentFolder ) ) { if ( $sFile != '.' && $sFile != '..' && $sFile != 'CVS') { if ( is_dir( $sServerDir . $sFile ) ) $sFolders .= '<Folder name="' . ConvertToXmlAttribute( $sFile ) . '" />' ; else { $iFileSize = filesize( $sServerDir . $sFile ) ; if ( $iFileSize > 0 ) { $iFileSize = round( $iFileSize / 1024 ) ; if ( $iFileSize < 1 ) $iFileSize = 1 ; } $sFiles .= '<File name="' . ConvertToXmlAttribute( $sFile ) . '" size="' . $iFileSize . '" />' ; } } } echo $sFolders ; // Close the "Folders" node. echo '</Folders>' ; echo $sFiles ; // Close the "Files" node. echo '</Files>' ; } function CreateFolder( $resourceType, $currentFolder ) { $sErrorNumber = '0' ; $sErrorMsg = '' ; if ( isset( $_GET['NewFolderName'] ) ) { $sNewFolderName = $_GET['NewFolderName'] ; // Map the virtual path to the local server path of the current folder. $sServerDir = ServerMapFolder( $resourceType, $currentFolder ) ; if ( is_writable( $sServerDir ) ) { $sServerDir .= $sNewFolderName ; $sErrorMsg = CreateServerFolder( $sServerDir ) ; switch ( $sErrorMsg ) { case '' : $sErrorNumber = '0' ; break ; case 'Invalid argument' : case 'No such file or directory' : $sErrorNumber = '102' ; // Path too long. break ; default : $sErrorNumber = '110' ; break ; } } else $sErrorNumber = '103' ; } else $sErrorNumber = '102' ; // Create the "Error" node. echo '<Error number="' . $sErrorNumber . '" originalDescription="' . ConvertToXmlAttribute( $sErrorMsg ) . '" />' ; } function FileUpload( $resourceType, $currentFolder ) { $sErrorNumber = '0' ; $sFileName = '' ; if ( isset( $_FILES['NewFile'] ) && !is_null( $_FILES['NewFile']['tmp_name'] ) ) { $oFile = $_FILES['NewFile'] ; // Map the virtual path to the local server path. $sServerDir = ServerMapFolder( $resourceType, $currentFolder ) ; // Get the uploaded file name. $sFileName = $oFile['name'] ; $sOriginalFileName = $sFileName ; $sExtension = substr( $sFileName, ( strrpos($sFileName, '.') + 1 ) ) ; global $Config ; $arAllowed = $Config['AllowedExtensions'][$resourceType] ; $arDenied = $Config['DeniedExtensions'][$resourceType] ; if ( ( count($arAllowed) == 0 || in_array( $sExtension, $arAllowed ) ) && ( count($arDenied) == 0 || !in_array( $sExtension, $arDenied ) ) ) { $iCounter = 0 ; while ( true ) { $sFilePath = $sServerDir . $sFileName ; if ( is_file( $sFilePath ) ) { $iCounter++ ; $sFileName = RemoveExtension( $sOriginalFileName ) . '(' . $iCounter . ').' . $sExtension ; $sErrorNumber = '201' ; } else { move_uploaded_file( $oFile['tmp_name'], $sFilePath ) ; if ( is_file( $sFilePath ) ) { $oldumask = umask(0) ; chmod( $sFilePath, 0777 ) ; umask( $oldumask ) ; } break ; } } } else $sErrorNumber = '202' ; } else $sErrorNumber = '202' ; echo '<script type="text/javascript">' ; echo 'window.parent.frames["frmUpload"].OnUploadCompleted(' . $sErrorNumber . ',"' . str_replace( '"', '\\"', $sFileName ) . '") ;' ; echo '</script>' ; exit ; } ?>
\ No newline at end of file
+<?php /* * FCKeditor - The text editor for internet * Copyright (C) 2003-2004 Frederico Caldeira Knabben * * Licensed under the terms of the GNU Lesser General Public License: * http://www.opensource.org/licenses/lgpl-license.php * * For further information visit: * http://www.fckeditor.net/ * * File Name: commands.php * This is the File Manager Connector for ASP. * * Version: 2.0 RC3 * Modified: 2005-02-19 16:02:38 * * File Authors: * Frederico Caldeira Knabben (fredck@fckeditor.net) */ function GetFolders( $resourceType, $currentFolder ) { // Map the virtual path to the local server path. $sServerDir = ServerMapFolder( $resourceType, $currentFolder ) ; // Open the "Folders" node. echo "<Folders>" ; $oCurrentFolder = opendir( $sServerDir ) ; while ( $sFile = readdir( $oCurrentFolder ) ) { if ( $sFile != '.' && $sFile != '..' && $sFile != 'CVS' && is_dir( $sServerDir . $sFile ) ) echo '<Folder name="' . ConvertToXmlAttribute( $sFile ) . '" />' ; } closedir( $oCurrentFolder ) ; // Close the "Folders" node. echo "</Folders>" ; } /* function GetCmsTree() { $conn = GetADODbConnection(); $query="SELECT st.* , wb.eng_content AS page_title FROM structure_templates st LEFT JOIN working_blocks AS wb ON (st.st_id = wb.template_id) AND (wb.block_type = 3) WHERE st_id != '5' AND st_path != '/cms' GROUP BY st_id ORDER BY st_lastupdate desc"; $rs = $conn->Execute($query); if ($rs && !$rs->EOF) { $ret = "<CmsPages>"; while($rs && !$rs->EOF) { $ret.= '<CmsPage path="'.BASE_PATH.'/index.php?t='.$rs->fields['st_path'].'" title="'.$rs->fields['page_title'].'" />'; //echo $rs->fields['page_title']."<br>"; $rs->MoveNext(); } $ret.= '</CmsPages>'; echo $ret; } } */ function GetCmsTree() { global $Config; $ret = "<CmsPages>"; if (isset($Config['K4Mode'])) { $ret.= K4ReadCmsTree(0); } else { $ret.= ReadCmsTree(0); } $ret.= "</CmsPages>"; echo $ret; } function K4ReadCmsTree($cat_id, $level = 0) { $application =& kApplication::Instance(); $application->Init(); $query = 'SELECT Path, Title FROM '.TABLE_PREFIX.'Pages'; $pages = $application->DB->Query($query); $res = ''; foreach ($pages as $page) { $page_path = $page['Path'].'.html'; $title = $page['Title'].' ('.$page_path.')'; $res .= '<CmsPage path="'.$page_path.'" title="'.$prefix.htmlspecialchars($title,ENT_QUOTES).'" serverpath="'.BASE_PATH.'/" />'; } return $res; } function ReadCmsTree($st_id, $level = 0) { $conn = GetADODbConnection(); $query = "SELECT value FROM config WHERE name = 'cms_direct_mode'"; $rs = $conn->Execute($query); if ($rs && !$rs->EOF) { $cms_mode = $rs->fields['value']; } $query = "SELECT value FROM config WHERE name = 'email_templates_folder_id'"; $rs = $conn->Execute($query); if ($rs && !$rs->EOF) { $email_templates_folder_id = $rs->fields['value']; } if ( $email_templates_folder_id == "" ) $email_templates_folder_id = 0; if ( $cms_mode == 1 ) { $query = " SELECT st.*, IF(lb.eng_content='' OR lb.eng_content IS NULL, st.st_path, lb.eng_content ) AS page_title FROM structure_templates AS st LEFT JOIN live_blocks AS lb ON (st.st_id = lb.template_id) AND (lb.block_type = 3) WHERE st.st_parent_id = ".$st_id." AND st_id != ".$email_templates_folder_id." AND st_path != '/cms' ORDER BY st.st_order"; } else { $query = " SELECT st.*, IF(wb.eng_content='' OR wb.eng_content IS NULL, st.st_path, wb.eng_content ) AS page_title FROM structure_templates AS st LEFT JOIN working_blocks AS wb ON (st.st_id = wb.template_id) AND (wb.block_type = 3) WHERE st.st_parent_id = ".$st_id." AND st_id != ".$email_templates_folder_id." AND st_path != '/cms%' ORDER BY st.st_order"; } //echo $query." <br>"; $rs = $conn->Execute($query); if ($rs && !$rs->EOF) { while ($rs && !$rs->EOF) { $page_path = ltrim($rs->fields['st_path'], '/'); //$page_path = SERVER_NAME.BASE_PATH.'/index.php?t='.$page_path; //$page_path = $page_path; $prefix=''; for ($i = 0; $i < $level; $i++) $prefix .= '--'; if ($level > 0) $prefix=$prefix.'- '; $res .= '<CmsPage path="'.$page_path.'" title="'.$prefix.htmlspecialchars($rs->fields['page_title'],ENT_QUOTES).'" serverpath="'.BASE_PATH.'/index.php?t=" />'; $res .= ReadCmsTree($rs->fields['st_id'], $level+1); $rs->MoveNext(); } return $res; } } function GetFoldersAndFiles( $resourceType, $currentFolder ) { // Map the virtual path to the local server path. $sServerDir = ServerMapFolder( $resourceType, $currentFolder ) ; // Initialize the output buffers for "Folders" and "Files". $sFolders = '<Folders>' ; $sFiles = '<Files>' ; $oCurrentFolder = opendir( $sServerDir ) ; while ( $sFile = readdir( $oCurrentFolder ) ) { if ( $sFile != '.' && $sFile != '..' && $sFile != 'CVS') { if ( is_dir( $sServerDir . $sFile ) ) $sFolders .= '<Folder name="' . ConvertToXmlAttribute( $sFile ) . '" />' ; else { $iFileSize = filesize( $sServerDir . $sFile ) ; if ( $iFileSize > 0 ) { $iFileSize = round( $iFileSize / 1024 ) ; if ( $iFileSize < 1 ) $iFileSize = 1 ; } $sFiles .= '<File name="' . ConvertToXmlAttribute( $sFile ) . '" size="' . $iFileSize . '" />' ; } } } echo $sFolders ; // Close the "Folders" node. echo '</Folders>' ; echo $sFiles ; // Close the "Files" node. echo '</Files>' ; } function CreateFolder( $resourceType, $currentFolder ) { $sErrorNumber = '0' ; $sErrorMsg = '' ; if ( isset( $_GET['NewFolderName'] ) ) { $sNewFolderName = $_GET['NewFolderName'] ; // Map the virtual path to the local server path of the current folder. $sServerDir = ServerMapFolder( $resourceType, $currentFolder ) ; if ( is_writable( $sServerDir ) ) { $sServerDir .= $sNewFolderName ; $sErrorMsg = CreateServerFolder( $sServerDir ) ; switch ( $sErrorMsg ) { case '' : $sErrorNumber = '0' ; break ; case 'Invalid argument' : case 'No such file or directory' : $sErrorNumber = '102' ; // Path too long. break ; default : $sErrorNumber = '110' ; break ; } } else $sErrorNumber = '103' ; } else $sErrorNumber = '102' ; // Create the "Error" node. echo '<Error number="' . $sErrorNumber . '" originalDescription="' . ConvertToXmlAttribute( $sErrorMsg ) . '" />' ; } function FileUpload( $resourceType, $currentFolder ) { $sErrorNumber = '0' ; $sFileName = '' ; if ( isset( $_FILES['NewFile'] ) && !is_null( $_FILES['NewFile']['tmp_name'] ) ) { $oFile = $_FILES['NewFile'] ; // Map the virtual path to the local server path. $sServerDir = ServerMapFolder( $resourceType, $currentFolder ) ; // Get the uploaded file name. $sFileName = $oFile['name'] ; $sOriginalFileName = $sFileName ; $sExtension = substr( $sFileName, ( strrpos($sFileName, '.') + 1 ) ) ; global $Config ; $arAllowed = $Config['AllowedExtensions'][$resourceType] ; $arDenied = $Config['DeniedExtensions'][$resourceType] ; if ( ( count($arAllowed) == 0 || in_array( $sExtension, $arAllowed ) ) && ( count($arDenied) == 0 || !in_array( $sExtension, $arDenied ) ) ) { $iCounter = 0 ; while ( true ) { $sFilePath = $sServerDir . $sFileName ; if ( is_file( $sFilePath ) ) { $iCounter++ ; $sFileName = RemoveExtension( $sOriginalFileName ) . '(' . $iCounter . ').' . $sExtension ; $sErrorNumber = '201' ; } else { move_uploaded_file( $oFile['tmp_name'], $sFilePath ) ; if ( is_file( $sFilePath ) ) { $oldumask = umask(0) ; chmod( $sFilePath, 0777 ) ; umask( $oldumask ) ; } break ; } } } else $sErrorNumber = '202' ; } else $sErrorNumber = '202' ; echo '<script type="text/javascript">' ; echo 'window.parent.frames["frmUpload"].OnUploadCompleted(' . $sErrorNumber . ',"' . str_replace( '"', '\\"', $sFileName ) . '") ;' ; echo '</script>' ; exit ; } ?>
\ No newline at end of file
Property changes on: trunk/admin/editor/cmseditor/editor/filemanager/browser/default/connectors/php/commands.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.5
\ No newline at end of property
+1.6
\ No newline at end of property
Index: trunk/admin/editor/cmseditor/editor/filemanager/browser/default/connectors/php/config.php
===================================================================
--- trunk/admin/editor/cmseditor/editor/filemanager/browser/default/connectors/php/config.php (revision 1594)
+++ trunk/admin/editor/cmseditor/editor/filemanager/browser/default/connectors/php/config.php (revision 1595)
@@ -1 +1 @@
-<?php /* * FCKeditor - The text editor for internet * Copyright (C) 2003-2004 Frederico Caldeira Knabben * * Licensed under the terms of the GNU Lesser General Public License: * http://www.opensource.org/licenses/lgpl-license.php * * For further information visit: * http://www.fckeditor.net/ * * File Name: config.php * Configuration file for the File Manager Connector for PHP. * * Version: 2.0 RC3 * Modified: 2005-02-08 12:01:53 * * File Authors: * Frederico Caldeira Knabben (fredck@fckeditor.net) */ global $Config ; // Path to user files relative to the document root. // SECURITY TIP: Uncomment the following line to set a fixed path. define('FULL_PATH', dirname(realpath(__FILE__))); define('BASE_PATH', str_replace('/cmseditor/editor/filemanager/browser/default/connectors/php', '', ereg_replace($_SERVER['DOCUMENT_ROOT'], '', FULL_PATH) ) ); $kernel3_config = $_SERVER['DOCUMENT_ROOT'].BASE_PATH."/config/config.php"; if (file_exists($kernel3_config)) { include_once($kernel3_config); $Config['UserFilesPath'] = BASE_PATH.'/templates/UserFiles/' ; } $Config['AllowedExtensions']['Files'] = array('jpg','gif','jpeg','png','swf','fla','jpg','gif','jpeg','png','avi','mpg','mpeg','zip','rar','arj','gz','tar','doc','pdf','ppt','rdp','swf','swt','txt','vsd','xls','csv') ; $Config['DeniedExtensions']['Files'] = array('php','asp','aspx','ascx','jsp','cfm','cfc','pl','bat','exe','dll','reg') ; $Config['AllowedExtensions']['Images'] = array('jpg','gif','jpeg','png', 'bmp') ; $Config['DeniedExtensions']['Images'] = array('php','asp','aspx','ascx','jsp','cfm','cfc','pl','bat','exe','dll','reg'); $Config['AllowedExtensions']['Flash'] = array('swf','fla') ; $Config['DeniedExtensions']['Flash'] = array('php','asp','aspx','ascx','jsp','cfm','cfc','pl','bat','exe','dll','reg') ; $Config['AllowedExtensions']['Media'] = array('swf','fla','jpg','gif','jpeg','png','avi','mpg','mpeg') ; $Config['DeniedExtensions']['Media'] = array('php','asp','aspx','ascx','jsp','cfm','cfc','pl','bat','exe','dll','reg'); $Config['AllowedExtensions']['Documents'] = array('doc','pdf','ppt','rdp','swf','swt','txt','vsd','xls','csv','zip') ; $Config['DeniedExtensions']['Documents'] = array('php','asp','aspx','ascx','jsp','cfm','cfc','pl','bat','exe','dll','reg'); ?>
\ No newline at end of file
+<?php /* * FCKeditor - The text editor for internet * Copyright (C) 2003-2004 Frederico Caldeira Knabben * * Licensed under the terms of the GNU Lesser General Public License: * http://www.opensource.org/licenses/lgpl-license.php * * For further information visit: * http://www.fckeditor.net/ * * File Name: config.php * Configuration file for the File Manager Connector for PHP. * * Version: 2.0 RC3 * Modified: 2005-02-08 12:01:53 * * File Authors: * Frederico Caldeira Knabben (fredck@fckeditor.net) */ global $Config ; // Path to user files relative to the document root. // SECURITY TIP: Uncomment the following line to set a fixed path. define('K3_FULL_PATH', dirname(realpath(__FILE__))); define('K3_BASE_PATH', str_replace('/cmseditor/editor/filemanager/browser/default/connectors/php', '', ereg_replace($_SERVER['DOCUMENT_ROOT'], '', FULL_PATH) ) ); $kernel3_config = $_SERVER['DOCUMENT_ROOT'].BASE_PATH."/config/config.php"; if (file_exists($kernel3_config)) { define('FULL_PATH', K3_FULL_PATH); define('BASE_PATH', K3_BASE_PATH); include_once($kernel3_config); $Config['UserFilesPath'] = BASE_PATH.'/templates/UserFiles/' ; } else { $fp = realpath(dirname(__FILE__).'/../../../../../../../../../'); define('FULL_PATH', $fp); define('DEBUG_MODE', 0); define('APPLICATION_CLASS', 'MyApplication'); $kernel4_startup = $fp."/kernel/kernel4/startup.php"; $Config['K4Mode'] = 1; include_once($kernel4_startup); } $Config['AllowedExtensions']['Files'] = array('jpg','gif','jpeg','png','swf','fla','jpg','gif','jpeg','png','avi','mpg','mpeg','zip','rar','arj','gz','tar','doc','pdf','ppt','rdp','swf','swt','txt','vsd','xls','csv') ; $Config['DeniedExtensions']['Files'] = array('php','asp','aspx','ascx','jsp','cfm','cfc','pl','bat','exe','dll','reg') ; $Config['AllowedExtensions']['Images'] = array('jpg','gif','jpeg','png', 'bmp') ; $Config['DeniedExtensions']['Images'] = array('php','asp','aspx','ascx','jsp','cfm','cfc','pl','bat','exe','dll','reg'); $Config['AllowedExtensions']['Flash'] = array('swf','fla') ; $Config['DeniedExtensions']['Flash'] = array('php','asp','aspx','ascx','jsp','cfm','cfc','pl','bat','exe','dll','reg') ; $Config['AllowedExtensions']['Media'] = array('swf','fla','jpg','gif','jpeg','png','avi','mpg','mpeg') ; $Config['DeniedExtensions']['Media'] = array('php','asp','aspx','ascx','jsp','cfm','cfc','pl','bat','exe','dll','reg'); $Config['AllowedExtensions']['Documents'] = array('doc','pdf','ppt','rdp','swf','swt','txt','vsd','xls','csv','zip') ; $Config['DeniedExtensions']['Documents'] = array('php','asp','aspx','ascx','jsp','cfm','cfc','pl','bat','exe','dll','reg'); ?>
\ No newline at end of file
Property changes on: trunk/admin/editor/cmseditor/editor/filemanager/browser/default/connectors/php/config.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.3
\ No newline at end of property
+1.4
\ No newline at end of property
Index: trunk/admin/editor/inp_fckconfig.js
===================================================================
--- trunk/admin/editor/inp_fckconfig.js (revision 1594)
+++ trunk/admin/editor/inp_fckconfig.js (revision 1595)
@@ -1,130 +1,132 @@
/*
* Edited by Kostja
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 Frederico Caldeira Knabben
*
* Licensed under the terms of the GNU Lesser General Public License:
* http://www.opensource.org/licenses/lgpl-license.php
*
* For further information visit:
* http://www.fckeditor.net/
*
* File Name: fckconfig.js
* Editor configuration settings.
* See the documentation for more info.
*
* Version: 2.0 RC3
* Modified: 2005-02-27 21:31:48
*
* File Authors:
* Frederico Caldeira Knabben (fredck@fckeditor.net)
*/
FCKConfig.CustomConfigurationsPath = '' ;
FCKConfig.EditorAreaCSS = FCKConfig.BasePath + 'css/fck_editorarea.css' ;
FCKConfig.BaseHref = '' ;
FCKConfig.FullPage = false ;
FCKConfig.Debug = false ;
FCKConfig.SkinPath = FCKConfig.BasePath + 'skins/default/' ;
FCKConfig.PluginsPath = FCKConfig.BasePath + 'plugins/' ;
// FCKConfig.Plugins.Add( 'placeholder', 'en,it' ) ;
FCKConfig.AutoDetectLanguage = true ;
FCKConfig.DefaultLanguage = 'en' ;
FCKConfig.ContentLangDirection = 'ltr' ;
FCKConfig.EnableXHTML = true ;
FCKConfig.EnableSourceXHTML = true ;
FCKConfig.FillEmptyBlocks = true ;
FCKConfig.FormatSource = true ;
FCKConfig.FormatOutput = true ;
FCKConfig.FormatIndentator = ' ' ;
FCKConfig.GeckoUseSPAN = true ;
FCKConfig.StartupFocus = false ;
FCKConfig.ForcePasteAsPlainText = true ;
FCKConfig.ForceSimpleAmpersand = false ;
FCKConfig.TabSpaces = 0;
FCKConfig.ShowBorders = true;
FCKConfig.ShowTableBorders = true;
FCKConfig.UseBROnCarriageReturn = false ;
FCKConfig.ToolbarStartExpanded = true ;
FCKConfig.ToolbarCanCollapse = true ;
//FCKConfig.ProjectPath = FCKConfig.BasePath.replace(/\/cmseditor\/editor\/$/,'');
FCKConfig.IconImagesUrl = FCKConfig.ProjectPath+'kernel/user_files/icons';
FCKConfig.ToolbarSets["Default"] = [
['Cut','Copy','Paste','PasteText','PasteWord','NewPage','SelectAll','-','Link','Unlink','Anchor','-','Image','SpecialChar','-','Find','Replace','-','Rule'],
['Source'],
'/',
['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyFull','-','OrderedList','UnorderedList','Outdent','Indent'],
'/',
['Style','RemoveFormat']
] ;
FCKConfig.ToolbarSets["Advanced"] = [
['Cut','Copy','Paste','PasteText','PasteWord','-','NewPage','SelectAll','-','Find','Replace','-','Print','Preview','-','Link','Unlink','Anchor','Rule','-','Image','Document','Table','SpecialChar'],
'/',
['Bold','Italic','Underline','StrikeThrough','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyFull','-','OrderedList','UnorderedList','Outdent','Indent','-','Subscript','Superscript','-','TextColor','BGColor','-','Undo','Redo'],
'/',
['Style','FontName','FontSize','RemoveFormat','-','SpellCheck','100%','|','Source']
] ;
FCKConfig.ToolbarSets["Basic"] = [
['Bold','Italic','-','OrderedList','UnorderedList','-','Link','Unlink','-','About']
] ;
FCKConfig.ContextMenu = ['Generic','Link','Anchor','Image','Select','Document','Textarea','Checkbox','Radio','TextField','HiddenField','ImageButton','Button','BulletedList','NumberedList','TableCell','Table','Form'] ;
FCKConfig.FontColors = '000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,808080,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF' ;
FCKConfig.FontNames = 'Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ;
FCKConfig.FontSizes = '1/xx-small;2/x-small;3/small;4/medium;5/large;6/x-large;7/xx-large' ;
FCKConfig.FontFormats = 'p;div;pre;address;h1;h2;h3;h4;h5;h6' ;
FCKConfig.StylesXmlPath = '../fckstyles.xml' ;
FCKConfig.SpellChecker = 'ieSpell' ; // 'ieSpell' | 'SpellerPages'
FCKConfig.IeSpellDownloadUrl = 'http://www.iespell.com/rel/ieSpellSetup211325.exe' ;
FCKConfig.LinkBrowser = true ;
FCKConfig.LinkBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Connector=connectors/php/connector.php&ServerPath='+FCKConfig.ProjectPath+'kernel/user_files' ;
FCKConfig.LinkBrowserWindowWidth = screen.width * 0.7 ; // 70%
FCKConfig.LinkBrowserWindowHeight = screen.height * 0.7 ; // 70%
FCKConfig.ImageBrowser = true ;
FCKConfig.ImageBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Images&Connector=connectors/php/connector.php&ServerPath='+FCKConfig.ProjectPath+'kernel/user_files' ;
FCKConfig.ImageBrowserWindowWidth = screen.width * 0.7 ; // 70% ;
FCKConfig.ImageBrowserWindowHeight = screen.height * 0.7 ; // 70% ;
FCKConfig.DocumentBrowser = true ;
FCKConfig.DocumentBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Documents&Connector=connectors/php/connector.php&ServerPath='+FCKConfig.ProjectPath+'kernel/user_files' ;
FCKConfig.ImageBrowserWindowWidth = screen.width * 0.7 ; // 70% ;
FCKConfig.ImageBrowserWindowHeight = screen.height * 0.7 ; // 70% ;
FCKConfig.DocumentsServerPath = FCKConfig.ProjectPath+'kernel/user_files/Documents'
FCKConfig.StructureBrowser = true ;
FCKConfig.StructureBrowserURL = FCKConfig.ProjectPath+'/admin/index.php?t=structure/tree' ;
FCKConfig.StructureBrowserWindowWidth = screen.width * 0.5 ; // 50%
FCKConfig.StructureBrowserWindowHeight = screen.height * 0.7 ; // 70%
FCKConfig.FilesBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Files&Connector=connectors/php/connector.php&ServerPath='+FCKConfig.ProjectPath+'kernel/user_files/' ;
FCKConfig.SmileyPath = FCKConfig.BasePath + 'images/smiley/msn/' ;
FCKConfig.SmileyImages = ['regular_smile.gif','sad_smile.gif','wink_smile.gif','teeth_smile.gif','confused_smile.gif','tounge_smile.gif','embaressed_smile.gif','omg_smile.gif','whatchutalkingabout_smile.gif','angry_smile.gif','angel_smile.gif','shades_smile.gif','devil_smile.gif','cry_smile.gif','lightbulb.gif','thumbs_down.gif','thumbs_up.gif','heart.gif','broken_heart.gif','kiss.gif','envelope.gif'] ;
FCKConfig.SmileyColumns = 8 ;
FCKConfig.SmileyWindowWidth = 320 ;
-FCKConfig.SmileyWindowHeight = 240 ;
\ No newline at end of file
+FCKConfig.SmileyWindowHeight = 240 ;
+
+FCKConfig.K4Mode = 1;
\ No newline at end of file
Property changes on: trunk/admin/editor/inp_fckconfig.js
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.2
\ No newline at end of property
+1.3
\ No newline at end of property
Index: trunk/core/kernel/processors/main_processor.php
===================================================================
--- trunk/core/kernel/processors/main_processor.php (revision 1594)
+++ trunk/core/kernel/processors/main_processor.php (revision 1595)
@@ -1,736 +1,741 @@
<?php
class MainProcessor extends TagProcessor {
function Init($prefix,$special)
{
parent::Init($prefix,$special);
$actions =& $this->Application->recallObject('kActions');
$actions->Set('t', $this->Application->GetVar('t'));
$actions->Set('sid', $this->Application->GetSID());
$actions->Set('m_opener', $this->Application->GetVar('m_opener') );
}
/**
* Used to handle calls where tag name
* match with existing php function name
*
* @param Tag $tag
* @return string
*/
function ProcessTag(&$tag)
{
if ($tag->Tag=='include') $tag->Tag='MyInclude';
return parent::ProcessTag($tag);
}
/**
* Creates <base href ..> HTML tag for all templates
* affects future css, js files and href params of links
*
* @return string
* @access public
*/
function Base_Ref()
{
$url = $this->Application->BaseURL().substr(THEMES_PATH,1).'/';
return '<base href="'.$url.'" />';
}
/**
* Returns base url for web-site
*
* @return string
* @access public
*/
function BaseURL()
{
return $this->Application->BaseURL();
}
function TemplatesBase($params)
{
return $this->Application->BaseURL().THEMES_PATH;
}
function ProjectBase($params)
{
return $this->Application->BaseURL();
}
/*function Base($params)
{
return $this->Application->BaseURL().$params['add'];
}*/
/**
* Used to create link to any template.
* use "pass" paramter if "t" tag to specify
* prefix & special of object to be represented
* in resulting url
*
* @param Array $params
* @return string
* @access public
*/
function T($params)
{
//by default link to current template
$t = $this->SelectParam($params, 't,template');
if ($t === false) {
$t = $this->Application->GetVar('t');
}
unset($params['t']);
unset($params['template']);
$prefix=isset($params['prefix']) ? $params['prefix'] : ''; unset($params['prefix']);
$index_file = isset($params['index_file']) ? $params['index_file'] : null; unset($params['index_file']);
/*$pass=isset($params['pass']) ? $params['pass'] : $this->Application->GetVar('t_pass'); unset($params['pass']);
$this->Application->SetVar('t_pass', $pass);
$pass_events = isset($params['pass_events']) && $params['pass_events'] ? 1 : 0; unset($params['pass_events']);
$this->Application->SetVar('t_pass_events', $pass_events);*/
//Use only implicit params passing, do not set into APP
// $this->Set($params); // set other params as application vars
return str_replace('&', '&amp;', $this->Application->HREF($t,$prefix,$params,$index_file));
}
function Link($params)
{
if (isset($params['template'])) {
$params['t'] = $params['template'];
unset($params['template']);
}
if (!isset($params['pass']) && !isset($params['no_pass'])) $params['pass'] = 'm';
if (isset($params['no_pass'])) unset($params['no_pass']);
return $this->T($params);
}
function Env($params)
{
$t = $params['template'];
unset($params['template']);
return $this->Application->BuildEnv($t, $params, 'm', null, false);
}
function FormAction($params)
{
return $this->Application->ProcessParsedTag('m', 't', Array( 'pass'=>'all,m' ) );
}
/*// NEEDS TEST
function Config($params)
{
return $this->Application->ConfigOption($params['var']);
}
function Object($params)
{
$name = $params['name'];
$method = $params['method'];
$tmp =& $this->Application->recallObject($name);
if ($tmp != null) {
if (method_exists($tmp, $method))
return $tmp->$method($params);
else
echo "Method $method does not exist in object ".get_class($tmp)." named $name<br>";
}
else
echo "Object $name does not exist in the appliaction<br>";
}*/
/**
* Tag, that always returns true.
* For parser testing purposes
*
* @param Array $params
* @return bool
* @access public
*/
function True($params)
{
return true;
}
/**
* Tag, that always returns false.
* For parser testing purposes
*
* @param Array $params
* @return bool
* @access public
*/
function False($params)
{
return false;
}
/**
* Returns block parameter by name
*
* @param Array $params
* @return stirng
* @access public
*/
function Param($params)
{
//$parser =& $this->Application->recallObject('TemplateParser');
$res = $this->Application->Parser->GetParam($params['name']);
if ($res === false) $res = '';
if (isset($params['plus']))
$res += $params['plus'];
return $res;
}
/**
* Compares block parameter with value specified
*
* @param Array $params
* @return bool
* @access public
*/
function ParamEquals($params)
{
//$parser =& $this->Application->recallObject('TemplateParser');
$name = $this->SelectParam($params, 'name,var,param');
$value = $params['value'];
return ($this->Application->Parser->GetParam($name) == $value);
}
/*function PHP_Self($params)
{
return $HTTP_SERVER_VARS['PHP_SELF'];
}
*/
/**
* Returns session variable value by name
*
* @param Array $params
* @return string
* @access public
*/
function Recall($params)
{
$ret = $this->Application->RecallVar( $this->SelectParam($params,'name,var,param') );
$ret = ($ret === false && isset($params['no_null'])) ? '' : $ret;
if( getArrayValue($params,'special') || getArrayValue($params,'htmlchars')) $ret = htmlspecialchars($ret);
return $ret;
}
// bad style to store something from template to session !!! (by Alex)
// Used here only to test how session works, nothing more
function Store($params)
{
//echo"Store $params[name]<br>";
$name = $params['name'];
$value = $params['value'];
$this->Application->StoreVar($name,$value);
}
/**
* Sets application variable value(-s)
*
* @param Array $params
* @access public
*/
function Set($params)
{
foreach ($params as $param => $value) {
$this->Application->SetVar($param, $value);
}
}
/**
* Increment application variable
* specified by number specified
*
* @param Array $params
* @access public
*/
function Inc($params)
{
$this->Application->SetVar($params['param'], $this->Application->GetVar($params['param']) + $params['by']);
}
/**
* Retrieves application variable
* value by name
*
* @param Array $params
* @return string
* @access public
*/
function Get($params)
{
$ret = $this->Application->GetVar($this->SelectParam($params, 'name,var,param'), EMPTY_ON_NULL);
return getArrayValue($params, 'htmlchars') ? htmlspecialchars($ret) : $ret;
}
/**
* Retrieves application constant
* value by name
*
* @param Array $params
* @return string
* @access public
*/
function GetConst($params)
{
return defined($this->SelectParam($params, 'name,const')) ? constant($this->SelectParam($params, 'name,const,param')) : '';
}
/*function Config_Equals($params)
{
foreach ($params as $name => $val) {
if (in_array($name, Array( 'prefix', 'function'))) continue;
return $this->Application->ConfigOption($name) == $val;
}
return false;
}*/
/**
* Creates all hidden fields
* needed for kernel_form
*
* @param Array $params
* @return string
* @access public
*/
function DumpSystemInfo($params)
{
$actions =& $this->Application->recallObject('kActions');
$actions->Set('t', $this->Application->GetVar('t') );
$params = $actions->GetParams();
$o='';
foreach ($params AS $name => $val)
{
$o .= "<input type='hidden' name='$name' id='$name' value='$val'>\n";
}
return $o;
}
function GetFormHiddens($params)
{
$sid = $this->Application->GetSID();
$t = $this->SelectParam($params, 'template,t');
unset($params['template']);
$env = $this->Application->BuildEnv($t, $params, 'm', null, false);
$o = '';
if (defined('MOD_REWRITE') && MOD_REWRITE) {
$session =& $this->Application->recallObject('Session');
if ($session->NeedQueryString()) {
$o .= "<input type='hidden' name='sid' id='sid' value='$sid'>\n";
}
}
else {
$o .= "<input type='hidden' name='env' id='env' value='$env'>\n";
}
return $o;
}
function Odd_Even($params)
{
$odd = $params['odd'];
$even = $params['even'];
if (!isset($params['var'])) {
$var = 'odd_even';
}
else {
$var = $params['var'];
}
if ($this->Application->GetVar($var) == 'even') {
$this->Application->SetVar($var, 'odd');
return $even;
}
else {
$this->Application->SetVar($var, 'even');
return $odd;
}
}
/**
* Returns phrase translation by name
*
* @param Array $params
* @return string
* @access public
*/
function Phrase($params)
{
// m:phrase name="phrase_name" default="Tr-alala" updated="2004-01-29 12:49"
if (array_key_exists('default', $params)) return $params['default']; //backward compatibility
return $this->Application->Phrase($this->SelectParam($params, 'label,name,title'));
}
// for tabs
function is_active($params)
{
$test_templ = $this->SelectParam($params, 'templ,template,t');
if ( !getArrayValue($params,'allow_empty') )
{
$if_true=getArrayValue($params,'true') ? $params['true'] : 1;
$if_false=getArrayValue($params,'false') ? $params['false'] : 0;
}
else
{
$if_true=$params['true'];
$if_false=$params['false'];
}
if ( preg_match("/^".str_replace('/', '\/', $test_templ)."/", $this->Application->GetVar('t'))) {
return $if_true;
}
else {
return $if_false;
}
}
function IsNotActive($params)
{
return !$this->is_active($params);
}
function IsActive($params)
{
return $this->is_active($params);
}
function is_t_active($params)
{
return $this->is_active($params);
}
function CurrentTemplate($params)
{
return $this->is_active($params);
}
/**
* Checks if session variable
* specified by name value match
* value passed as parameter
*
* @param Array $params
* @return string
* @access public
*/
function RecallEquals($params)
{
$name = $params['var'];
$value = $params['value'];
return ($this->Application->RecallVar($name) == $value);
}
/**
* Checks if application variable
* specified by name value match
* value passed as parameter
*
* @param Array $params
* @return bool
* @access public
*/
function GetEquals($params)
{
$name = $this->SelectParam($params, 'var,name,param');
$value = $params['value'];
if ($this->Application->GetVar($name) == $value) {
return 1;
}
}
/**
* Includes template
* and returns it's
* parsed version
*
* @param Array $params
* @return string
* @access public
*/
function MyInclude($params)
{
$BlockParser =& $this->Application->makeClass('TemplateParser');
$BlockParser->SetParams($params);
$parser =& $this->Application->Parser;
$this->Application->Parser =& $BlockParser;
$t = $this->SelectParam($params, 't,template,block,name');
$t = eregi_replace("\.tpl$", '', $t);
$templates_cache =& $this->Application->recallObject('TemplatesCache');
$res = $BlockParser->Parse( $templates_cache->GetTemplateBody($t), $t );
if ( !$BlockParser->DataExists && (isset($params['data_exists']) || isset($params['block_no_data'])) ) {
if ($block_no_data = getArrayValue($params, 'block_no_data')) {
$res = $BlockParser->Parse(
$templates_cache->GetTemplateBody($block_no_data, $silent),
$t
);
}
else {
$res = '';
}
}
$this->Application->Parser =& $parser;
$this->Application->Parser->DataExists = $this->Application->Parser->DataExists || $BlockParser->DataExists;
return $res;
}
/*function Kernel_Scripts($params)
{
return '<script type="text/javascript" src="'.PROTOCOL.SERVER_NAME.BASE_PATH.'/kernel3/js/grid.js"></script>';
}*/
/*function GetUserPermission($params)
{
// echo"GetUserPermission $params[name]";
if ($this->Application->RecallVar('user_type') == 1)
return 1;
else {
$perm_name = $params[name];
$aPermissions = unserialize($this->Application->RecallVar('user_permissions'));
if ($aPermissions)
return $aPermissions[$perm_name];
}
}*/
/**
* Set's parser block param value
*
* @param Array $params
* @access public
*/
function AddParam($params)
{
$parser =& $this->Application->Parser; // recallObject('TemplateParser');
foreach ($params as $param => $value) {
$this->Application->SetVar($param, $value);
$parser->SetParam($param, $value);
$parser->AddParam('/\$'.$param.'/', $value);
}
}
/*function ParseToVar($params)
{
$var = $params['var'];
$tagdata = $params['tag'];
$parser =& $this->Application->Parser; //recallObject('TemplateParser');
$res = $this->Application->ProcessTag($tagdata);
$parser->SetParam($var, $res);
$parser->AddParam('/\$'.$var.'/', $res);
return '';
}*/
/*function TagNotEmpty($params)
{
$tagdata = $params['tag'];
$res = $this->Application->ProcessTag($tagdata);
return $res != '';
}*/
/*function TagEmpty($params)
{
return !$this->TagNotEmpty($params);
}*/
/**
* Parses block and returns result
*
* @param Array $params
* @return string
* @access public
*/
function ParseBlock($params)
{
$parser =& $this->Application->Parser; // recallObject('TemplateParser');
return $parser->ParseBlock($params);
}
+ function RenderElement($params)
+ {
+ return $this->ParseBlock($params);
+ }
+
/**
* Checks if debug mode is on
*
* @return bool
* @access public
*/
function IsDebugMode()
{
return $this->Application->isDebugMode();
}
function MassParse($params)
{
$qty = $params['qty'];
$block = $params['block'];
$mode = $params['mode'];
$o = '';
if ($mode == 'func') {
$func = create_function('$params', '
$o = \'<tr>\';
$o.= \'<td>a\'.$params[\'param1\'].\'</td>\';
$o.= \'<td>a\'.$params[\'param2\'].\'</td>\';
$o.= \'<td>a\'.$params[\'param3\'].\'</td>\';
$o.= \'<td>a\'.$params[\'param4\'].\'</td>\';
$o.= \'</tr>\';
return $o;
');
for ($i=1; $i<$qty; $i++) {
$block_params['param1'] = rand(1, 10000);
$block_params['param2'] = rand(1, 10000);
$block_params['param3'] = rand(1, 10000);
$block_params['param4'] = rand(1, 10000);
$o .= $func($block_params);
}
return $o;
}
$block_params['name'] = $block;
for ($i=0; $i<$qty; $i++) {
$block_params['param1'] = rand(1, 10000);
$block_params['param2'] = rand(1, 10000);
$block_params['param3'] = rand(1, 10000);
$block_params['param4'] = rand(1, 10000);
$block_params['passed'] = $params['passed'];
$block_params['prefix'] = 'm';
$o.= $this->Application->ParseBlock($block_params, 1);
}
return $o;
}
function AfterScript($params)
{
$after_script = $this->Application->GetVar('after_script');
if ( $after_script ) {
return '<script type="text/javascript">'.$after_script.'</script>';
}
return '';
}
function LoggedIn($params)
{
return $this->Application->LoggedIn();
}
/**
* Checks if user is logged in and if not redirects it to template passed
*
* @param Array $params
*/
function RequireLogin($params)
{
if($permission_groups = getArrayValue($params, 'permissions'))
{
$permission_groups = explode('|', $permission_groups);
$group_has_permission = false;
foreach($permission_groups as $permission_group)
{
$permissions = explode(',', $permission_group);
$has_permission = true;
foreach($permissions as $permission)
{
$has_permission = $has_permission && $this->Application->CheckPermission($permission);
}
$group_has_permission = $group_has_permission || $has_permission;
if($group_has_permission)
{
return;
}
}
if( !$this->Application->LoggedIn() )
{
$t = $this->Application->GetVar('t');
$this->Application->Redirect( $params['login_template'], Array('next_template'=>$t) );
}
else
{
$this->Application->Redirect( $params['no_permissions_template'] );
}
}
$condition = getArrayValue($params,'condition');
if(!$condition)
{
$condition = true;
}
else
{
if( substr($condition,0,1) == '!' )
{
$condition = !$this->Application->ConfigValue( substr($condition,1) );
}
else
{
$condition = $this->Application->ConfigValue($condition);
}
}
if( !$this->Application->LoggedIn() && $condition )
{
$t = $this->Application->GetVar('t');
$this->Application->Redirect( $params['login_template'], Array('next_template'=>$t) );
}
}
function SaveReturnScript($params)
{
// admin/save_redirect.php?do=
$url = str_replace($this->Application->BaseURL(), '', $this->T($params) );
$url = explode('?', $url, 2);
$url = 'save_redirect.php?'.$url[1].'&do='.$url[0];
$this->Application->StoreVar('ReturnScript', $url);
}
/*
function Login($params)
{
$user_prefix = 'users';
$this->parser->registerprefix($user_prefix);
$user_class = $this->parser->processors[$user_prefix]->item_class;
$candidate = new $user_class(NULL, $this->parser->processors[$user_prefix]);
//print_pre($this->Session->Property);
$special = array_shift($params);
//echo"$special<br>";
$candidate_id = $candidate->Login($this->Session->GetProperty('username'), $this->Session->GetProperty('password'), $special);
if ($candidate_id !== false) {
$this->Session->SetField('user_id', $candidate_id);
$this->Session->Update();
$this->Session->AfterLogin();
$this->parser->register_prefix('m');
$template = array_shift($params);
if ($template == '') $template = 'index';
$location = $this->parser->do_process_tag('m', 't', Array($template));
header("Location: $location");
exit;
}
elseif ($this->Session->GetProperty('username') != '') {
$this->Session->SetProperty('login_error', 'Incorrect username or password');
}
}
*/
}
?>
\ No newline at end of file
Property changes on: trunk/core/kernel/processors/main_processor.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.8
\ No newline at end of property
+1.9
\ No newline at end of property
Index: trunk/core/kernel/application.php
===================================================================
--- trunk/core/kernel/application.php (revision 1594)
+++ trunk/core/kernel/application.php (revision 1595)
@@ -1,1291 +1,1300 @@
-<?php
-
-/**
-* Basic class for Kernel3-based Application
-*
-* This class is a Facade for any other class which needs to deal with Kernel3 framework.<br>
-* The class incapsulates the main run-cycle of the script, provide access to all other objects in the framework.<br>
-* <br>
-* The class is a singleton, which means that there could be only one instance of KernelApplication in the script.<br>
-* 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.<br>
-* See singleton pattern by GOF.
-* @package kernel4
-*/
-
-class kApplication {
-
- /**
- * Holds internal TemplateParser object
- * @access private
- * @var TemplateParser
- */
- var $Parser;
-
- var $Profiler;
-
- /**
- * Holds parser output buffer
- * @access private
- * @var string
- */
- var $HTML;
-
- var $DocRoot;
- var $BasePath;
- var $KernelPath;
- var $Server;
-
-
- /**
- * 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;
-
- var $XMLFactory; // in use?
-
- /**
- * Holds all phrases used
- * in code and template
- *
- * @var PhrasesCache
- */
- var $Phrases;
-
- /**
- * Holds DBConnection
- *
- * @var kDBConnection
- */
- var $DB;
-
- /**
- * Constucts KernelApplication - constructor is PRIVATE
- *
- * The constuructor of KernelApplication should NOT be called directly
- * To create KernelApplication, call its Instance() method
- * @see KerenelApplication::Instance
- * @access private
- */
- function kApplication()
- {
- global $doc_root, $base_path, $kernel_path, $protocol, $server;
- $this->DocRoot = $doc_root;
- $this->BasePath = $base_path;
- $this->KernelPath = $kernel_path;
- $this->Protocol = $protocol;
- $this->Server = $server;
- }
-
- /**
- * 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:
- * <code>
- * $application =& kApplication::Instance();
- * </code>
- * or in an object:
- * <code>
- * $this->Application =& kApplication::Instance();
- * </code>
- * 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) {
- if (!defined('APPLICATION_CLASS')) define('APPLICATION_CLASS', 'kApplication');
- $class = APPLICATION_CLASS;
- $instance = new $class();
- }
- return $instance;
- }
-
- /**
- * Initializes the Application
- *
- * Creates Utilites instance, HTTPQuery, Session, Profiler, TemplatesCache, Parser
- * @access public
- * @see HTTPQuery
- * @see Session
- * @see TemplatesCache
- * @return void
- */
- function Init()
- {
- if (defined('DEBUG_MODE') && DEBUG_MODE && dbg_ConstOn('DBG_PROFILE_MEMORY') ) {
- global $debugger;
- $debugger->appendMemoryUsage('Application before Init:');
- }
-
- if( !$this->isDebugMode() ) set_error_handler( Array(&$this,'handleError') );
-
- $this->DB = new kDBConnection(SQL_TYPE, Array(&$this,'handleSQLError') );
- $this->DB->Connect(SQL_SERVER, SQL_USER, SQL_PASS, SQL_DB);
- $this->DB->debugMode = $this->isDebugMode();
-
- $this->SetDefaultConstants();
-
- $this->Factory = new kFactory();
-
- $this->registerDefaultClasses();
-
- // 1. to read configs before doing any recallObject
- $config_reader =& $this->recallObject('kUnitConfigReader');
-
- if( !$this->GetVar('m_lang') ) $this->SetVar('m_lang', $this->GetDefaultLanguageId() );
- if( !$this->GetVar('m_theme') ) $this->SetVar('m_theme', $this->GetDefaultThemeId());
- $this->Phrases = new PhrasesCache( $this->GetVar('m_lang') );
-
- $this->SetVar('lang.current_id', $this->GetVar('m_lang') );
- $language =& $this->recallObject('lang.current', null, Array('live_table'=>true) );
-
- if( !$this->GetVar('m_theme') ) $this->SetVar('m_theme', $this->GetDefaultThemeId() );
- $this->SetVar('theme.current_id', $this->GetVar('m_theme') );
-
- if ( $this->GetVar('m_cat_id') === false ) $this->SetVar('m_cat_id', 2); //need to rewrite
-
- if( !$this->RecallVar('UserGroups') )
- {
- $this->StoreVar('UserGroups', $this->ConfigValue('User_GuestGroup'));
- }
-
- if( !$this->RecallVar('curr_iso') ) $this->StoreVar('curr_iso', $this->GetPrimaryCurrency() );
-
- $this->ValidateLogin(); // TODO: write that method
-
- if( $this->isDebugMode() )
- {
- global $debugger;
- $debugger->profileFinish('kernel4_startup');
- }
- }
-
- function GetDefaultLanguageId()
- {
- $table = $this->getUnitOption('lang','TableName');
- $id_field = $this->getUnitOption('lang','IDField');
- return $this->DB->GetOne('SELECT '.$id_field.' FROM '.$table.' WHERE PrimaryLang = 1');
- }
-
- function GetDefaultThemeId()
- {
- if (defined('DBG_FORCE_THEME') && DBG_FORCE_THEME){
- return DBG_FORCE_THEME;
- }
- $table = $this->getUnitOption('theme','TableName');
- $id_field = $this->getUnitOption('theme','IDField');
- return $this->DB->GetOne('SELECT '.$id_field.' FROM '.$table.' WHERE PrimaryTheme = 1');
- }
-
- function GetPrimaryCurrency()
- {
- $this->setUnitOption('mod','AutoLoad',false);
- $module =& $this->recallObject('mod');
- $this->setUnitOption('mod','AutoLoad',true);
-
- if( $module->Load('In-Commerce') )
- {
- $table = $this->getUnitOption('curr','TableName');
- return $this->DB->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('Utilites',KERNEL_PATH.'/utility/utilities.php');
- $this->registerClass('HTTPQuery',KERNEL_PATH.'/utility/http_query.php');
- $this->registerClass('Session',KERNEL_PATH.'/session/session.php');
- $this->registerClass('SessionStorage',KERNEL_PATH.'/session/session.php');
- $this->registerClass('LoginEventHandler',KERNEL_PATH.'/session/login_event_handler.php','login_EventHandler');
- $this->registerClass('kEventManager',KERNEL_PATH.'/event_manager.php','EventManager');
-
- $this->registerClass('kUnitConfigReader',KERNEL_PATH.'/utility/unit_config_reader.php');
-
-
- $this->registerClass('Params',KERNEL_PATH.'/utility/params.php','kActions');
- $this->registerClass('kArray',KERNEL_PATH.'/utility/params.php','kArray');
- $this->registerClass('kFormatter', KERNEL_PATH.'/utility/formatters.php');
- $this->registerClass('kOptionsFormatter', KERNEL_PATH.'/utility/formatters.php');
- $this->registerClass('kPictureFormatter', KERNEL_PATH.'/utility/formatters.php');
- $this->registerClass('kDateFormatter', KERNEL_PATH.'/utility/formatters.php');
- $this->registerClass('kLEFTFormatter', KERNEL_PATH.'/utility/formatters.php');
- $this->registerClass('kMultiLanguage', KERNEL_PATH.'/utility/formatters.php');
- $this->registerClass('kPasswordFormatter', KERNEL_PATH.'/utility/formatters.php');
- $this->registerClass('kCCDateFormatter', KERNEL_PATH.'/utility/formatters.php');
-
- $this->registerClass('kTempTablesHandler', KERNEL_PATH.'/utility/temp_handler.php');
-
- $event_manager =& $this->recallObject('EventManager');
- $event_manager->registerBuildEvent('kTempTablesHandler','OnTempHandlerBuild');
- //$this->registerClass('Configuration',KERNEL_PATH.'/utility/configuration.php');
-
- $this->registerClass('TemplatesCache',KERNEL_PATH.'/parser/template.php');
- $this->registerClass('Template',KERNEL_PATH.'/parser/template.php');
- $this->registerClass('TemplateParser',KERNEL_PATH.'/parser/template_parser.php');
-
- $this->registerClass('MainProcessor', KERNEL_PATH.'/processors/main_processor.php','m_TagProcessor');
-
- $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('kDBTagProcessor', KERNEL_PATH.'/db/db_tag_processor.php');
-
- $this->registerClass('kTagProcessor', KERNEL_PATH.'/processors/tag_processor.php');
- $this->registerClass('kEmailMessage',KERNEL_PATH.'/utility/email.php');
- $this->registerClass('kSmtpClient',KERNEL_PATH.'/utility/smtp_client.php');
-
- if (file_exists(MODULES_PATH.'/in-commerce/units/rates/currency_rates.php')) {
- $this->registerClass('kCurrencyRates',MODULES_PATH.'/in-commerce/units/rates/currency_rates.php');
- }
-
- /*$this->RegisterClass('LoginController', KERNEL_PATH.'/users/login_controller.php');*/
- }
-
- /**
- * Defines default constants if it's not defined before - in config.php
- *
- * Called automatically while initializing Application and defines:
- * LOGIN_CONTROLLER, XML_FACTORY etc.
- * @access private
- * @return void
- */
- function SetDefaultConstants()
- {
- if (!defined('SERVER_NAME')) define('SERVER_NAME', $_SERVER['SERVER_NAME']);
- if (!defined('LOGIN_CONTROLLER')) define('LOGIN_CONTROLLER', 'LoginController');
- if (!defined('XML_FACTORY')) define('XML_FACTORY', 'XMLFactory');
- if (!defined('ADMINS_LIST')) define('ADMINS_LIST', '/users/users.php');
- if (!defined('USER_MODEL')) define('USER_MODEL', 'Users');
- if (!defined('DEFAULT_LANGUAGE_ID')) define('DEFAULT_LANGUAGE_ID', 1);
- }
-
- function ProcessRequest()
- {
- $event_manager =& $this->recallObject('EventManager');
-
- if( $this->isDebugMode() && dbg_ConstOn('DBG_SHOW_HTTPQUERY') )
- {
- global $debugger;
- $http_query =& $this->recallObject('HTTPQuery');
- $debugger->appendHTML('HTTPQuery:');
- $debugger->dumpVars($http_query->_Params);
- }
-
- $event_manager->ProcessRequest();
- $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 (defined('DEBUG_MODE') && DEBUG_MODE && dbg_ConstOn('DBG_PROFILE_MEMORY') ) {
- global $debugger;
- $debugger->appendMemoryUsage('Application before Run:');
- }
-
- if (!$this->RequestProcessed) $this->ProcessRequest();
-
- $this->InitParser();
- $template_cache =& $this->recallObject('TemplatesCache');
- $t = $this->GetVar('t');
-
-
- if (defined('CMS') && CMS) {
- if (!$template_cache->TemplateExists($t)) {
- $cms_handler =& $this->recallObject('cms_EventHandler');
- $t = $cms_handler->GetDesignTemplate();
- }
- }
-
- if (defined('DEBUG_MODE') && DEBUG_MODE && dbg_ConstOn('DBG_PROFILE_MEMORY') ) {
- global $debugger;
- $debugger->appendMemoryUsage('Application before Parsing:');
- }
-
- $this->HTML = $this->Parser->Parse( $template_cache->GetTemplateBody($t), $t );
-
- if (defined('DEBUG_MODE') && DEBUG_MODE && dbg_ConstOn('DBG_PROFILE_MEMORY') ) {
- global $debugger;
- $debugger->appendMemoryUsage('Application after Parsing:');
- }
- }
-
- function InitParser()
- {
- if( !is_object($this->Parser) ) $this->Parser =& $this->recallObject('TemplateParser');
- }
-
- /**
- * 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()
- {
- if (defined('DEBUG_MODE') && DEBUG_MODE && dbg_ConstOn('DBG_PROFILE_MEMORY') ) {
- global $debugger;
- $debugger->appendMemoryUsage('Application before Done:');
- }
-
- //eval("?".">".$this->HTML);
- echo $this->HTML;
- $this->Phrases->UpdateCache();
-
- $session =& $this->recallObject('Session');
- $session->SaveData();
- //$this->SaveBlocksCache();
- }
-
- function SaveBlocksCache()
- {
- if (defined('EXPERIMENTAL_PRE_PARSE')) {
- $data = serialize($this->PreParsedCache);
-
- $this->DB->Query('REPLACE '.TABLE_PREFIX.'Cache (VarName, Data, Cached) VALUES ("blocks_cache", '.$this->DB->qstr($data).', '.time().')');
- }
- }
-
- // 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 $var Variable name
- * @return mixed
- */
- function GetVar($var,$mode=FALSE_ON_NULL)
- {
- $http_query =& $this->recallObject('HTTPQuery');
- return $http_query->Get($var,$mode);
- }
-
- /**
- * Returns ALL variables passed to the script as GET/POST/COOKIE
- *
- * @access public
- * @return array
- */
- function GetVars()
- {
- $http_query =& $this->recallObject('HTTPQuery');
- return $http_query->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.<br>
- *
- * 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)
- {
- $http_query =& $this->recallObject('HTTPQuery');
- $http_query->Set($var,$val);
- }
-
- /**
- * Deletes Session variable
- *
- * @param string $var
- */
- function RemoveVar($var)
- {
- $session =& $this->recallObject('Session');
- return $session->RemoveVar($var);
- }
-
- /**
- * Deletes HTTPQuery variable
- *
- * @param string $var
- * @todo think about method name
- */
- function DeleteVar($var)
- {
- $http_query =& $this->recallObject('HTTPQuery');
- return $http_query->Remove($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)
- {
- $session =& $this->recallObject('Session');
- return $session->RecallVar($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)
- {
- $session =& $this->recallObject('Session');
- $session->StoreVar($var, $val);
- }
-
- function StoreVarDefault($var, $val)
- {
- $session =& $this->recallObject('Session');
- $session->StoreVarDefault($var, $val);
- }
-
- /**
- * 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).<br>
- * 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='')
- {
- if (!isset($ses_var)) $ses_var = $var;
- if ($this->GetVar($var) !== false)
- {
- $this->StoreVar($ses_var, $this->GetVar($var));
- }
- 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='')
- {
- if (!isset($ses_var)) $ses_var = $var;
- $this->LinkVar($var, $ses_var, $default);
- return $this->GetVar($var);
- }
-
- /*function ExtractByMask($array, $mask, $key_id=1, $ret_mode=1)
- {
- $utils =& $this->recallObject('Utilities');
- return $utils->ExtractByMask($array, $mask, $key_id, $ret_mode);
- }
-
- function GetSelectedIDs($mask, $format)
- {
- $http_query =& $this->recallObject('HTTPQuery');
- return $http_query->GetSelectedIDs($mask, $format);
- }
-
- function GetSelectedIDsArray($mask, $value_mask="%s,")
- {
- $http_query =& $this->recallObject('HTTPQuery');
- return $http_query->GetSelectedIDsArray($mask, $value_mask);
- }*/
-
- /**
- * Returns configurtion option
- *
- * @param string $option
- * @return string
- * @access public
- */
- /*function ConfigOption($option)
- {
- $config =& $this->recallObject('Configuration');
- return $config->Get($option);
- }*/
-
- /**
- * Sets configuration option
- *
- * @param string $option
- * @param string $value
- * @return bool
- * @access public
- */
- /*function SetConfigOption($option,$value)
- {
- $config =& $this->recallObject('Configuration');
- return $config->Set($option, $value);
- }*/
-
- function AddBlock($name, $tpl)
- {
- $this->cache[$name] = $tpl;
- }
-
- 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)
- {
- $a_tag = new Tag('',$this->Parser);
- $a_tag->Tag = $tag;
- $a_tag->Processor = $prefix;
- $a_tag->NamedParams = $params;
- return $a_tag->DoProcessTag();
- }
-
- /* DEFINETLY NEEDS TO BE MOVED AWAY!!!!! */
- /*var $email_body;
- function Email($params)
- {
- $this->email_body = $this->ParseBlock($params);
- $from = $this->GetVar('email_from');
- $to = $this->GetVar('email_to');
- $replay = $this->GetVar('email_replay');
- if ( $replay == "" ) $replay = $from;
- $subject = $this->GetVar('email_subject');
- $charset = $this->GetVar('email_charset');
- // $display = $this->GetVar('email_display');
- $display = 0;
- if (!isset($charset) || $charset == '') $charset = 'US-ASCII';
- $mime = $this->GetVar('email_mime');
-
- if ($mime == 'yes') {
- $mime_mail = new MIMEMail($to, $from, $subject, $charset);
- $mime_mail->mailbody($this->email_body);
-
- if ($f_name = $this->GetVar('email_attach')) {
- $full_path = DOC_ROOT.BASE_PATH.'/'.$f_name;
- $data = '';
- if(file_exists($full_path)) {
- $fd = fopen($full_path, "r");
- $data = fread($fd, filesize($full_path));
- fclose($fd);
- }
- else exit;
-
- $filename = $this->GetVar('email_attach_filename');
- $type = $this->GetVar('email_attach_type');
-
- $mime_mail->attachfile_raw($data, $filename, $type);
- $mime_mail->send();
- }
- }
- else {
- $headers.="From: $from\n";
- $headers.="Reply-To: $replay\n";
- $headers.="Content-Type: text/html; charset=\"$charset\"\n";
- if ( $display == 1 ) {
- echo "<pre>";
- echo " from : $from <br>";
- echo " to : $to <br>";
- echo " replay : $replay <br>";
- echo " subject : $subject <br>";
- echo " this->email_body : $this->email_body <br>";
- echo " headers : $headers <br>";
- echo "</pre>";
- }
- mail($to, $subject, $this->email_body, $headers);
- }
- }*/
-
- /**
- * Return ADODB Connection object
- *
- * Returns ADODB Connection object already connected to the project database, configurable in config.php
- * @access public
- * @return ADODBConnection
- */
- function &GetADODBConnection()
- {
- return $this->DB;
- }
-
- 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);
- }
-
- function &GetXMLFactory()
- {
- return $this->XMLFactory;
- }
-
- /**
- * 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)
- {
- global $HTTP_SERVER_VARS;
- if (defined('ADMIN') && $prefix == '') $prefix='/admin';
- if (defined('ADMIN') && $prefix == '_FRONT_END_') $prefix = '';
- $index_file = isset($index_file) ? $index_file : (defined('INDEX_FILE') ? INDEX_FILE : basename($_SERVER['PHP_SELF']));
-
- if( isset($params['index_file']) ) $index_file = $params['index_file'];
-
- if (getArrayValue($params, 'opener') == 'u') {
- $opener_stack=$this->RecallVar('opener_stack');
- if($opener_stack) {
- $opener_stack=unserialize($opener_stack);
- if (count($opener_stack) > 0) {
- list($index_file, $env) = explode('|', $opener_stack[count($opener_stack)-1]);
- $ret = $this->BaseURL($prefix).$index_file.'?'.ENV_VAR_NAME.'='.$env;
- if( getArrayValue($params,'escape') ) $ret = addslashes($ret);
- return $ret;
- }
- else {
- //define('DBG_REDIRECT', 1);
- $t = $this->GetVar('t');
- }
- }
- 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
-
-
-
- if (defined('MOD_REWRITE') && MOD_REWRITE) {
- $env = $this->BuildEnv('', $params, $pass, $pass_events, false);
- $env = ltrim($env, ':-');
-
- $session =& $this->recallObject('Session');
- $sid = $session->NeedQueryString() ? '?sid='.$this->GetSID() : '';
-// $env = str_replace(':', '/', $env);
- $ret = $this->BaseURL($prefix).$t.'.html/'.$env.'/'.$sid;
-
- }
- else {
- $env = $this->BuildEnv($t, $params, $pass, $pass_events);
- $ret = $this->BaseURL($prefix).$index_file.'?'.$env;
- }
-
- return $ret;
- }
-
- function BuildEnv($t, $params, $pass='all', $pass_events=false, $env_var=true)
- {
- $session =& $this->recallObject('Session');
- $sid = $session->NeedQueryString() && !(defined('MOD_REWRITE') && MOD_REWRITE) ? $this->GetSID() : '';
- $ret = '';
- if ($env_var) {
- $ret = ENV_VAR_NAME.'=';
- }
- $ret .= defined('INPORTAL_ENV') ? $sid.'-'.$t : $sid.':'.$t;
-
- $pass = str_replace('all', trim($this->GetVar('passed'), ','), $pass);
-
- if(strlen($pass) > 0)
- {
- $pass_info = array_unique( explode(',',$pass) ); // array( prefix[.special], prefix[.special] ...
- foreach($pass_info as $pass_element)
- {
- $ret.=':';
- list($prefix)=explode('.',$pass_element);
- $query_vars = $this->getUnitOption($prefix,'QueryString');
-
- //if pass events is off and event is not implicity passed
- if(!$pass_events && !isset($params[$pass_element.'_event'])) {
- $params[$pass_element.'_event'] = ''; // remove event from url if requested
- //otherwise it will use value from get_var
- }
-
- if($query_vars)
- {
- $tmp_string=Array(0=>$pass_element);
- foreach($query_vars as $index => $var_name)
- {
- //if value passed in params use it, otherwise use current from application
- $tmp_string[$index] = isset( $params[$pass_element.'_'.$var_name] ) ? $params[$pass_element.'_'.$var_name] : $this->GetVar($pass_element.'_'.$var_name);
- if ( isset($params[$pass_element.'_'.$var_name]) ) {
- unset( $params[$pass_element.'_'.$var_name] );
- }
- }
-
- $escaped = array();
- foreach ($tmp_string as $tmp_val) {
- $escaped[] = str_replace(Array('-',':'), Array('\-','\:'), $tmp_val);
- }
-
- if ($this->getUnitOption($prefix, 'PortalStyleEnv') == true) {
- $ret.= array_shift($escaped).array_shift($escaped).'-'.implode('-',$escaped);
- }
- else {
- $ret.=implode('-',$escaped);
- }
- }
- }
- }
- unset($params['pass']);
- unset($params['opener']);
- unset($params['m_event']);
-
- if ($this->GetVar('admin') && !isset($params['admin'])) {
- $params['admin'] = 1;
- }
-
- foreach ($params as $param => $value)
- {
- $ret .= '&'.$param.'='.$value;
- }
- if( getArrayValue($params,'escape') ) $ret = addslashes($ret);
- return $ret;
- }
-
- function BaseURL($prefix='')
- {
- return PROTOCOL.SERVER_NAME.(defined('PORT')?':'.PORT : '').BASE_PATH.$prefix.'/';
- }
-
- function Redirect($t='', $params=null, $prefix='', $index_file=null)
- {
- if ($t == '' || $t === true) $t = $this->GetVar('t');
-
- // pass prefixes and special from previous url
- if (!isset($params['pass'])) $params['pass'] = 'all';
-
- $location = $this->HREF($t, $prefix, $params, $index_file);
- $a_location = $location;
- $location = "Location: $location";
- //echo " location : $location <br>";
-
- if (headers_sent() != '' || ($this->isDebugMode() && dbg_ConstOn('DBG_REDIRECT')) ) {
- /*$GLOBALS['debugger']->appendTrace();
- echo "<b>Debug output above!!!</b> Proceed to redirect: <a href=\"$a_location\">$a_location</a><br>";*/
- echo '<script language="javascript" type="text/javascript">window.location.href = \''.$a_location.'\';</script>';
- }
- else {
- header("$location");
- }
-
- $session =& $this->recallObject('Session');
- $session->SaveData();
- $this->SaveBlocksCache();
- 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)
- {
- return $this->Phrases->ReplaceLanguageTags($text,$force_escape);
- }
-
- /**
- * Validtates user in session if required
- *
- */
- function ValidateLogin()
- {
- if (defined('LOGIN_REQUIRED'))
- {
- // Original Kostja call
- //$login_controller =& $this->Factory->MakeClass(LOGIN_CONTROLLER, Array('model' => USER_MODEL, 'prefix' => 'login'));
-
- // Call proposed by Alex
- //$login_controller =& $this->RecallObject(LOGIN_CONTROLLER, Array('model' => USER_MODEL, 'prefix' => 'login'));
-
- //$login_controller->CheckLogin();
- }
- }
-
- /**
- * Returns configuration option value by name
- *
- * @param string $name
- * @return string
- */
- function ConfigValue($name)
- {
- return $this->DB->GetOne('SELECT VariableValue FROM '.TABLE_PREFIX.'ConfigurationValues WHERE VariableName = '.$this->DB->qstr($name) );
- }
-
- /**
- * 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 );
- }
- $event_manager =& $this->recallObject('EventManager');
- $event_manager->HandleEvent($event);
- }
-
- /**
- * Registers new class in the factory
- *
- * @param string $real_class
- * @param string $file
- * @param string $pseudo_class
- * @access public
- * @author Alex
- */
- function registerClass($real_class,$file,$pseudo_class=null)
- {
- $this->Factory->registerClass($real_class,$file,$pseudo_class);
- }
-
- /**
- * 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']));
- }
-
- /**
- * 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())
- {
- $o1 =& $this->Factory->getObject($name,$pseudo_class,$event_params);
-
- //$o1->param1 = 'one';
-
- /*$func_args = func_get_args();
- $factory =& $this->Factory;
- $o2 =& call_user_func_array( Array(&$factory, 'getObject'), $func_args );*/
-
- //$o2->param1 = 'two';
- return $o1;
- }
-
- /**
- * 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();
- return call_user_func_array( Array(&$this->Factory, 'makeClass'), $func_args);
- }
-
- /**
- * Checks if application is in debug mode
- *
- * @return bool
- * @access public
- * @author Alex
- */
- function isDebugMode()
- {
- return defined('DEBUG_MODE') && DEBUG_MODE;
- }
-
- /**
- * Checks if it is admin
- *
- * @return bool
- * @author Alex
- */
- function IsAdmin()
- {
- return defined('ADMIN') && ADMIN;
- }
-
- /**
- * Reads unit (specified by $prefix)
- * option specified by $option
- *
- * @param string $prefix
- * @param string $option
- * @return string
- * @access public
- * @author Alex
- */
- function getUnitOption($prefix,$option)
- {
- $unit_config_reader =& $this->recallObject('kUnitConfigReader');
- return $unit_config_reader->getUnitOption($prefix,$option);
- }
-
- /**
- * 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 $unit_config_reader->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 $unit_config_reader->getUnitOptions($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)
- {
- global $debugger;
- if($debugger)
- {
- $errorLevel=defined('DBG_SQL_FAILURE') && DBG_SQL_FAILURE ? E_USER_ERROR : E_USER_WARNING;
- $debugger->dumpVars($_REQUEST);
- $debugger->appendTrace();
-
- $error_msg = '<span class="debug_error">'.$msg.' ('.$code.')</span><br><a href="javascript:SetClipboard(\''.htmlspecialchars($sql).'\');"><b>SQL</b></a>: '.$debugger->formatSQL($sql);
- $long_id=$debugger->mapLongError($error_msg);
- trigger_error( substr($msg.' ('.$code.') ['.$sql.']',0,1000).' #'.$long_id, $errorLevel);
- return true;
- }
- else
- {
- $errorLevel = defined('IS_INSTALL') && IS_INSTALL ? E_USER_WARNING : E_USER_ERROR;
- trigger_error('<b>SQL Error</b> in sql: '.$sql.', code <b>'.$code.'</b> ('.$msg.')', $errorLevel);
- /*echo '<b>xProcessing SQL</b>: '.$sql.'<br>';
- echo '<b>Error ('.$code.'):</b> '.$msg.'<br>';*/
- 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 = '')
- {
- $fp = fopen(DOC_ROOT.BASE_PATH.'/silent_log.txt','a');
- $time = date('d/m/Y H:i:s');
- fwrite($fp, '['.$time.'] #'.$errno.': '.strip_tags($errstr).' in ['.$errfile.'] on line '.$errline."\n");
- fclose($fp);
- }
-
- /**
- * Returns & blocks next ResourceId available in system
- *
- * @return int
- * @access public
- * @author Eduard
- */
- function NextResourceId()
- {
- $this->DB->Query('LOCK TABLES '.TABLE_PREFIX.'IdGenerator WRITE');
- $this->DB->Query('UPDATE '.TABLE_PREFIX.'IdGenerator SET lastid = lastid+1');
- $id = $this->DB->GetOne("SELECT lastid FROM ".TABLE_PREFIX."IdGenerator");
- $this->DB->Query('UNLOCK TABLES');
- return $id;
- }
-
- /**
- * Returns main prefix for subtable prefix passes
- *
- * @param string $current_prefix
- * @return string
- * @access public
- * @author Kostja
- */
- function GetTopmostPrefix($current_prefix)
- {
- while ( $parent_prefix = $this->getUnitOption($current_prefix, 'ParentPrefix') )
- {
- $current_prefix = $parent_prefix;
- }
- return $current_prefix;
- }
-
- function EmailEventAdmin($email_event_name, $to_user_id = -1, $send_params = false)
- {
- return $this->EmailEvent($email_event_name, 1, $to_user_id, $send_params);
- }
-
- function EmailEventUser($email_event_name, $to_user_id = -1, $send_params = false)
- {
- return $this->EmailEvent($email_event_name, 0, $to_user_id, $send_params);
- }
-
- function EmailEvent($email_event_name, $email_event_type, $to_user_id = -1, $send_params = false)
- {
- $event = new kEvent('emailevents:OnEmailEvent');
- $event->setEventParam('EmailEventName', $email_event_name);
- $event->setEventParam('EmailEventToUserId', $to_user_id);
- $event->setEventParam('EmailEventType', $email_event_type);
- if ($send_params){
- $event->setEventParam('DirectSendParams', $send_params);
- }
- $this->HandleEvent($event);
-
- return $event;
- }
-
-
- function LoggedIn()
- {
- $user =& $this->recallObject('u');
- return ($user->GetDBField('PortalUserId') > 0);
- }
-
- function CheckPermission($name, $cat_id = null)
- {
- if(!$cat_id)
- {
- $cat_id = $this->GetVar('m_cat_id');
- }
- $sql = 'SELECT ParentPath FROM '.$this->getUnitOption('c', 'TableName').'
- WHERE CategoryId = '.$cat_id;
- $cat_hierarchy = $this->DB->GetOne($sql);
- $cat_hierarchy = explode('|', $cat_hierarchy);
- array_shift($cat_hierarchy);
- array_pop($cat_hierarchy);
- $cat_hierarchy = array_reverse($cat_hierarchy);
-
- $groups = $this->RecallVar('UserGroups');
-
- foreach($cat_hierarchy as $category_id)
- {
- $sql = 'SELECT PermissionValue FROM '.TABLE_PREFIX.'Permissions
- WHERE Permission = "'.$name.'"
- AND CatId = '.$category_id.'
- AND GroupId IN ('.$groups.')';
- $res = $this->DB->GetOne($sql);
- if( $res !== false )
- {
- return $res;
- }
- }
-
- return 0;
- }
-}
-
+<?php
+
+/**
+* Basic class for Kernel3-based Application
+*
+* This class is a Facade for any other class which needs to deal with Kernel3 framework.<br>
+* The class incapsulates the main run-cycle of the script, provide access to all other objects in the framework.<br>
+* <br>
+* The class is a singleton, which means that there could be only one instance of KernelApplication in the script.<br>
+* 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.<br>
+* See singleton pattern by GOF.
+* @package kernel4
+*/
+
+class kApplication {
+
+ /**
+ * Holds internal TemplateParser object
+ * @access private
+ * @var TemplateParser
+ */
+ var $Parser;
+
+ var $Profiler;
+
+ /**
+ * Holds parser output buffer
+ * @access private
+ * @var string
+ */
+ var $HTML;
+
+ var $DocRoot;
+ var $BasePath;
+ var $KernelPath;
+ var $Server;
+
+
+ /**
+ * 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;
+
+ var $XMLFactory; // in use?
+
+ /**
+ * Holds all phrases used
+ * in code and template
+ *
+ * @var PhrasesCache
+ */
+ var $Phrases;
+
+ /**
+ * Holds DBConnection
+ *
+ * @var kDBConnection
+ */
+ var $DB;
+
+ /**
+ * Constucts KernelApplication - constructor is PRIVATE
+ *
+ * The constuructor of KernelApplication should NOT be called directly
+ * To create KernelApplication, call its Instance() method
+ * @see KerenelApplication::Instance
+ * @access private
+ */
+ function kApplication()
+ {
+ global $doc_root, $base_path, $kernel_path, $protocol, $server;
+ $this->DocRoot = $doc_root;
+ $this->BasePath = $base_path;
+ $this->KernelPath = $kernel_path;
+ $this->Protocol = $protocol;
+ $this->Server = $server;
+ }
+
+ /**
+ * 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:
+ * <code>
+ * $application =& kApplication::Instance();
+ * </code>
+ * or in an object:
+ * <code>
+ * $this->Application =& kApplication::Instance();
+ * </code>
+ * 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) {
+ if (!defined('APPLICATION_CLASS')) define('APPLICATION_CLASS', 'kApplication');
+ $class = APPLICATION_CLASS;
+ $instance = new $class();
+ }
+ return $instance;
+ }
+
+ /**
+ * Initializes the Application
+ *
+ * Creates Utilites instance, HTTPQuery, Session, Profiler, TemplatesCache, Parser
+ * @access public
+ * @see HTTPQuery
+ * @see Session
+ * @see TemplatesCache
+ * @return void
+ */
+ function Init()
+ {
+ if (defined('DEBUG_MODE') && DEBUG_MODE && dbg_ConstOn('DBG_PROFILE_MEMORY') ) {
+ global $debugger;
+ $debugger->appendMemoryUsage('Application before Init:');
+ }
+
+ if( !$this->isDebugMode() ) set_error_handler( Array(&$this,'handleError') );
+
+ $this->DB = new kDBConnection(SQL_TYPE, Array(&$this,'handleSQLError') );
+ $this->DB->Connect(SQL_SERVER, SQL_USER, SQL_PASS, SQL_DB);
+ $this->DB->debugMode = $this->isDebugMode();
+
+ $this->SetDefaultConstants();
+
+ $this->Factory = new kFactory();
+
+ $this->registerDefaultClasses();
+
+ // 1. to read configs before doing any recallObject
+ $config_reader =& $this->recallObject('kUnitConfigReader');
+
+ if( !$this->GetVar('m_lang') ) $this->SetVar('m_lang', $this->GetDefaultLanguageId() );
+ if( !$this->GetVar('m_theme') ) $this->SetVar('m_theme', $this->GetDefaultThemeId());
+ $this->Phrases = new PhrasesCache( $this->GetVar('m_lang') );
+
+ $this->SetVar('lang.current_id', $this->GetVar('m_lang') );
+ $language =& $this->recallObject('lang.current', null, Array('live_table'=>true) );
+
+ if( !$this->GetVar('m_theme') ) $this->SetVar('m_theme', $this->GetDefaultThemeId() );
+ $this->SetVar('theme.current_id', $this->GetVar('m_theme') );
+
+ if ( $this->GetVar('m_cat_id') === false ) $this->SetVar('m_cat_id', 2); //need to rewrite
+
+ if( !$this->RecallVar('UserGroups') )
+ {
+ $this->StoreVar('UserGroups', $this->ConfigValue('User_GuestGroup'));
+ }
+
+ if (!defined('ADMIN') && !$this->GetVar('admin')) {
+ define('MOD_REWRITE', 1);
+ }
+
+ if( !$this->RecallVar('curr_iso') ) $this->StoreVar('curr_iso', $this->GetPrimaryCurrency() );
+
+ $this->ValidateLogin(); // TODO: write that method
+
+ if( $this->isDebugMode() )
+ {
+ global $debugger;
+ $debugger->profileFinish('kernel4_startup');
+ }
+ }
+
+ function GetDefaultLanguageId()
+ {
+ $table = $this->getUnitOption('lang','TableName');
+ $id_field = $this->getUnitOption('lang','IDField');
+ return $this->DB->GetOne('SELECT '.$id_field.' FROM '.$table.' WHERE PrimaryLang = 1');
+ }
+
+ function GetDefaultThemeId()
+ {
+ if (defined('DBG_FORCE_THEME') && DBG_FORCE_THEME){
+ return DBG_FORCE_THEME;
+ }
+ $table = $this->getUnitOption('theme','TableName');
+ $id_field = $this->getUnitOption('theme','IDField');
+ return $this->DB->GetOne('SELECT '.$id_field.' FROM '.$table.' WHERE PrimaryTheme = 1');
+ }
+
+ function GetPrimaryCurrency()
+ {
+ $this->setUnitOption('mod','AutoLoad',false);
+ $module =& $this->recallObject('mod');
+ $this->setUnitOption('mod','AutoLoad',true);
+
+ if( $module->Load('In-Commerce') )
+ {
+ $table = $this->getUnitOption('curr','TableName');
+ return $this->DB->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('Utilites',KERNEL_PATH.'/utility/utilities.php');
+ $this->registerClass('HTTPQuery',KERNEL_PATH.'/utility/http_query.php');
+ $this->registerClass('Session',KERNEL_PATH.'/session/session.php');
+ $this->registerClass('SessionStorage',KERNEL_PATH.'/session/session.php');
+ $this->registerClass('LoginEventHandler',KERNEL_PATH.'/session/login_event_handler.php','login_EventHandler');
+ $this->registerClass('kEventManager',KERNEL_PATH.'/event_manager.php','EventManager');
+
+ $this->registerClass('kUnitConfigReader',KERNEL_PATH.'/utility/unit_config_reader.php');
+
+
+ $this->registerClass('Params',KERNEL_PATH.'/utility/params.php','kActions');
+ $this->registerClass('kArray',KERNEL_PATH.'/utility/params.php','kArray');
+ $this->registerClass('kFormatter', KERNEL_PATH.'/utility/formatters.php');
+ $this->registerClass('kOptionsFormatter', KERNEL_PATH.'/utility/formatters.php');
+ $this->registerClass('kPictureFormatter', KERNEL_PATH.'/utility/formatters.php');
+ $this->registerClass('kDateFormatter', KERNEL_PATH.'/utility/formatters.php');
+ $this->registerClass('kLEFTFormatter', KERNEL_PATH.'/utility/formatters.php');
+ $this->registerClass('kMultiLanguage', KERNEL_PATH.'/utility/formatters.php');
+ $this->registerClass('kPasswordFormatter', KERNEL_PATH.'/utility/formatters.php');
+ $this->registerClass('kCCDateFormatter', KERNEL_PATH.'/utility/formatters.php');
+
+ $this->registerClass('kTempTablesHandler', KERNEL_PATH.'/utility/temp_handler.php');
+
+ $event_manager =& $this->recallObject('EventManager');
+ $event_manager->registerBuildEvent('kTempTablesHandler','OnTempHandlerBuild');
+ //$this->registerClass('Configuration',KERNEL_PATH.'/utility/configuration.php');
+
+ $this->registerClass('TemplatesCache',KERNEL_PATH.'/parser/template.php');
+ $this->registerClass('Template',KERNEL_PATH.'/parser/template.php');
+ $this->registerClass('TemplateParser',KERNEL_PATH.'/parser/template_parser.php');
+
+ $this->registerClass('MainProcessor', KERNEL_PATH.'/processors/main_processor.php','m_TagProcessor');
+
+ $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('kDBTagProcessor', KERNEL_PATH.'/db/db_tag_processor.php');
+
+ $this->registerClass('kTagProcessor', KERNEL_PATH.'/processors/tag_processor.php');
+ $this->registerClass('kEmailMessage',KERNEL_PATH.'/utility/email.php');
+ $this->registerClass('kSmtpClient',KERNEL_PATH.'/utility/smtp_client.php');
+
+ if (file_exists(MODULES_PATH.'/in-commerce/units/rates/currency_rates.php')) {
+ $this->registerClass('kCurrencyRates',MODULES_PATH.'/in-commerce/units/rates/currency_rates.php');
+ }
+
+ /*$this->RegisterClass('LoginController', KERNEL_PATH.'/users/login_controller.php');*/
+ }
+
+ /**
+ * Defines default constants if it's not defined before - in config.php
+ *
+ * Called automatically while initializing Application and defines:
+ * LOGIN_CONTROLLER, XML_FACTORY etc.
+ * @access private
+ * @return void
+ */
+ function SetDefaultConstants()
+ {
+ if (!defined('SERVER_NAME')) define('SERVER_NAME', $_SERVER['SERVER_NAME']);
+ if (!defined('LOGIN_CONTROLLER')) define('LOGIN_CONTROLLER', 'LoginController');
+ if (!defined('XML_FACTORY')) define('XML_FACTORY', 'XMLFactory');
+ if (!defined('ADMINS_LIST')) define('ADMINS_LIST', '/users/users.php');
+ if (!defined('USER_MODEL')) define('USER_MODEL', 'Users');
+ if (!defined('DEFAULT_LANGUAGE_ID')) define('DEFAULT_LANGUAGE_ID', 1);
+ }
+
+ function ProcessRequest()
+ {
+ $event_manager =& $this->recallObject('EventManager');
+
+ if( $this->isDebugMode() && dbg_ConstOn('DBG_SHOW_HTTPQUERY') )
+ {
+ global $debugger;
+ $http_query =& $this->recallObject('HTTPQuery');
+ $debugger->appendHTML('HTTPQuery:');
+ $debugger->dumpVars($http_query->_Params);
+ }
+
+ $event_manager->ProcessRequest();
+ $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 (defined('DEBUG_MODE') && DEBUG_MODE && dbg_ConstOn('DBG_PROFILE_MEMORY') ) {
+ global $debugger;
+ $debugger->appendMemoryUsage('Application before Run:');
+ }
+
+ if (!$this->RequestProcessed) $this->ProcessRequest();
+
+ $this->InitParser();
+ $template_cache =& $this->recallObject('TemplatesCache');
+ $t = $this->GetVar('t');
+
+
+ if (defined('CMS') && CMS) {
+ if (!$template_cache->TemplateExists($t)) {
+ $cms_handler =& $this->recallObject('cms_EventHandler');
+ $t = $cms_handler->GetDesignTemplate();
+ }
+ }
+
+ if (defined('DEBUG_MODE') && DEBUG_MODE && dbg_ConstOn('DBG_PROFILE_MEMORY') ) {
+ global $debugger;
+ $debugger->appendMemoryUsage('Application before Parsing:');
+ }
+
+ $this->HTML = $this->Parser->Parse( $template_cache->GetTemplateBody($t), $t );
+
+ if (defined('DEBUG_MODE') && DEBUG_MODE && dbg_ConstOn('DBG_PROFILE_MEMORY') ) {
+ global $debugger;
+ $debugger->appendMemoryUsage('Application after Parsing:');
+ }
+ }
+
+ function InitParser()
+ {
+ if( !is_object($this->Parser) ) $this->Parser =& $this->recallObject('TemplateParser');
+ }
+
+ /**
+ * 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()
+ {
+ if (defined('DEBUG_MODE') && DEBUG_MODE && dbg_ConstOn('DBG_PROFILE_MEMORY') ) {
+ global $debugger;
+ $debugger->appendMemoryUsage('Application before Done:');
+ }
+
+ if ($this->GetVar('admin')) {
+ $reg = '/('.preg_quote(BASE_PATH, '/').'.*\.html)(#.*){0,1}(")/sU';
+ $this->HTML = preg_replace($reg, "$1?admin=1$2$3", $this->HTML);
+ }
+
+ //eval("?".">".$this->HTML);
+ echo $this->HTML;
+ $this->Phrases->UpdateCache();
+
+ $session =& $this->recallObject('Session');
+ $session->SaveData();
+ //$this->SaveBlocksCache();
+ }
+
+ function SaveBlocksCache()
+ {
+ if (defined('EXPERIMENTAL_PRE_PARSE')) {
+ $data = serialize($this->PreParsedCache);
+
+ $this->DB->Query('REPLACE '.TABLE_PREFIX.'Cache (VarName, Data, Cached) VALUES ("blocks_cache", '.$this->DB->qstr($data).', '.time().')');
+ }
+ }
+
+ // 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 $var Variable name
+ * @return mixed
+ */
+ function GetVar($var,$mode=FALSE_ON_NULL)
+ {
+ $http_query =& $this->recallObject('HTTPQuery');
+ return $http_query->Get($var,$mode);
+ }
+
+ /**
+ * Returns ALL variables passed to the script as GET/POST/COOKIE
+ *
+ * @access public
+ * @return array
+ */
+ function GetVars()
+ {
+ $http_query =& $this->recallObject('HTTPQuery');
+ return $http_query->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.<br>
+ *
+ * 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)
+ {
+ $http_query =& $this->recallObject('HTTPQuery');
+ $http_query->Set($var,$val);
+ }
+
+ /**
+ * Deletes Session variable
+ *
+ * @param string $var
+ */
+ function RemoveVar($var)
+ {
+ $session =& $this->recallObject('Session');
+ return $session->RemoveVar($var);
+ }
+
+ /**
+ * Deletes HTTPQuery variable
+ *
+ * @param string $var
+ * @todo think about method name
+ */
+ function DeleteVar($var)
+ {
+ $http_query =& $this->recallObject('HTTPQuery');
+ return $http_query->Remove($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)
+ {
+ $session =& $this->recallObject('Session');
+ return $session->RecallVar($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)
+ {
+ $session =& $this->recallObject('Session');
+ $session->StoreVar($var, $val);
+ }
+
+ function StoreVarDefault($var, $val)
+ {
+ $session =& $this->recallObject('Session');
+ $session->StoreVarDefault($var, $val);
+ }
+
+ /**
+ * 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).<br>
+ * 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='')
+ {
+ if (!isset($ses_var)) $ses_var = $var;
+ if ($this->GetVar($var) !== false)
+ {
+ $this->StoreVar($ses_var, $this->GetVar($var));
+ }
+ 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='')
+ {
+ if (!isset($ses_var)) $ses_var = $var;
+ $this->LinkVar($var, $ses_var, $default);
+ return $this->GetVar($var);
+ }
+
+ /*function ExtractByMask($array, $mask, $key_id=1, $ret_mode=1)
+ {
+ $utils =& $this->recallObject('Utilities');
+ return $utils->ExtractByMask($array, $mask, $key_id, $ret_mode);
+ }
+
+ function GetSelectedIDs($mask, $format)
+ {
+ $http_query =& $this->recallObject('HTTPQuery');
+ return $http_query->GetSelectedIDs($mask, $format);
+ }
+
+ function GetSelectedIDsArray($mask, $value_mask="%s,")
+ {
+ $http_query =& $this->recallObject('HTTPQuery');
+ return $http_query->GetSelectedIDsArray($mask, $value_mask);
+ }*/
+
+ /**
+ * Returns configurtion option
+ *
+ * @param string $option
+ * @return string
+ * @access public
+ */
+ /*function ConfigOption($option)
+ {
+ $config =& $this->recallObject('Configuration');
+ return $config->Get($option);
+ }*/
+
+ /**
+ * Sets configuration option
+ *
+ * @param string $option
+ * @param string $value
+ * @return bool
+ * @access public
+ */
+ /*function SetConfigOption($option,$value)
+ {
+ $config =& $this->recallObject('Configuration');
+ return $config->Set($option, $value);
+ }*/
+
+ function AddBlock($name, $tpl)
+ {
+ $this->cache[$name] = $tpl;
+ }
+
+ 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)
+ {
+ $a_tag = new Tag('',$this->Parser);
+ $a_tag->Tag = $tag;
+ $a_tag->Processor = $prefix;
+ $a_tag->NamedParams = $params;
+ return $a_tag->DoProcessTag();
+ }
+
+ /* DEFINETLY NEEDS TO BE MOVED AWAY!!!!! */
+ /*var $email_body;
+ function Email($params)
+ {
+ $this->email_body = $this->ParseBlock($params);
+ $from = $this->GetVar('email_from');
+ $to = $this->GetVar('email_to');
+ $replay = $this->GetVar('email_replay');
+ if ( $replay == "" ) $replay = $from;
+ $subject = $this->GetVar('email_subject');
+ $charset = $this->GetVar('email_charset');
+ // $display = $this->GetVar('email_display');
+ $display = 0;
+ if (!isset($charset) || $charset == '') $charset = 'US-ASCII';
+ $mime = $this->GetVar('email_mime');
+
+ if ($mime == 'yes') {
+ $mime_mail = new MIMEMail($to, $from, $subject, $charset);
+ $mime_mail->mailbody($this->email_body);
+
+ if ($f_name = $this->GetVar('email_attach')) {
+ $full_path = DOC_ROOT.BASE_PATH.'/'.$f_name;
+ $data = '';
+ if(file_exists($full_path)) {
+ $fd = fopen($full_path, "r");
+ $data = fread($fd, filesize($full_path));
+ fclose($fd);
+ }
+ else exit;
+
+ $filename = $this->GetVar('email_attach_filename');
+ $type = $this->GetVar('email_attach_type');
+
+ $mime_mail->attachfile_raw($data, $filename, $type);
+ $mime_mail->send();
+ }
+ }
+ else {
+ $headers.="From: $from\n";
+ $headers.="Reply-To: $replay\n";
+ $headers.="Content-Type: text/html; charset=\"$charset\"\n";
+ if ( $display == 1 ) {
+ echo "<pre>";
+ echo " from : $from <br>";
+ echo " to : $to <br>";
+ echo " replay : $replay <br>";
+ echo " subject : $subject <br>";
+ echo " this->email_body : $this->email_body <br>";
+ echo " headers : $headers <br>";
+ echo "</pre>";
+ }
+ mail($to, $subject, $this->email_body, $headers);
+ }
+ }*/
+
+ /**
+ * Return ADODB Connection object
+ *
+ * Returns ADODB Connection object already connected to the project database, configurable in config.php
+ * @access public
+ * @return ADODBConnection
+ */
+ function &GetADODBConnection()
+ {
+ return $this->DB;
+ }
+
+ 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);
+ }
+
+ function &GetXMLFactory()
+ {
+ return $this->XMLFactory;
+ }
+
+ /**
+ * 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)
+ {
+ global $HTTP_SERVER_VARS;
+ if (defined('ADMIN') && $prefix == '') $prefix='/admin';
+ if (defined('ADMIN') && $prefix == '_FRONT_END_') $prefix = '';
+ $index_file = isset($index_file) ? $index_file : (defined('INDEX_FILE') ? INDEX_FILE : basename($_SERVER['PHP_SELF']));
+
+ if( isset($params['index_file']) ) $index_file = $params['index_file'];
+
+ if (getArrayValue($params, 'opener') == 'u') {
+ $opener_stack=$this->RecallVar('opener_stack');
+ if($opener_stack) {
+ $opener_stack=unserialize($opener_stack);
+ if (count($opener_stack) > 0) {
+ list($index_file, $env) = explode('|', $opener_stack[count($opener_stack)-1]);
+ $ret = $this->BaseURL($prefix).$index_file.'?'.ENV_VAR_NAME.'='.$env;
+ if( getArrayValue($params,'escape') ) $ret = addslashes($ret);
+ return $ret;
+ }
+ else {
+ //define('DBG_REDIRECT', 1);
+ $t = $this->GetVar('t');
+ }
+ }
+ 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
+
+
+
+ if (defined('MOD_REWRITE') && MOD_REWRITE) {
+ $env = $this->BuildEnv('', $params, $pass, $pass_events, false);
+ $env = ltrim($env, ':-');
+
+ $session =& $this->recallObject('Session');
+ $sid = $session->NeedQueryString() ? '?sid='.$this->GetSID() : '';
+// $env = str_replace(':', '/', $env);
+ $ret = rtrim($this->BaseURL($prefix).$t.'.html/'.$env.'/'.$sid, '/');
+
+ }
+ else {
+ $env = $this->BuildEnv($t, $params, $pass, $pass_events);
+ $ret = $this->BaseURL($prefix).$index_file.'?'.$env;
+ }
+
+ return $ret;
+ }
+
+ function BuildEnv($t, $params, $pass='all', $pass_events=false, $env_var=true)
+ {
+ $session =& $this->recallObject('Session');
+ $sid = $session->NeedQueryString() && !(defined('MOD_REWRITE') && MOD_REWRITE) ? $this->GetSID() : '';
+ $ret = '';
+ if ($env_var) {
+ $ret = ENV_VAR_NAME.'=';
+ }
+ $ret .= defined('INPORTAL_ENV') ? $sid.'-'.$t : $sid.':'.$t;
+
+ $pass = str_replace('all', trim($this->GetVar('passed'), ','), $pass);
+
+ if(strlen($pass) > 0)
+ {
+ $pass_info = array_unique( explode(',',$pass) ); // array( prefix[.special], prefix[.special] ...
+ foreach($pass_info as $pass_element)
+ {
+ $ret.=':';
+ list($prefix)=explode('.',$pass_element);
+ $query_vars = $this->getUnitOption($prefix,'QueryString');
+
+ //if pass events is off and event is not implicity passed
+ if(!$pass_events && !isset($params[$pass_element.'_event'])) {
+ $params[$pass_element.'_event'] = ''; // remove event from url if requested
+ //otherwise it will use value from get_var
+ }
+
+ if($query_vars)
+ {
+ $tmp_string=Array(0=>$pass_element);
+ foreach($query_vars as $index => $var_name)
+ {
+ //if value passed in params use it, otherwise use current from application
+ $tmp_string[$index] = isset( $params[$pass_element.'_'.$var_name] ) ? $params[$pass_element.'_'.$var_name] : $this->GetVar($pass_element.'_'.$var_name);
+ if ( isset($params[$pass_element.'_'.$var_name]) ) {
+ unset( $params[$pass_element.'_'.$var_name] );
+ }
+ }
+
+ $escaped = array();
+ foreach ($tmp_string as $tmp_val) {
+ $escaped[] = str_replace(Array('-',':'), Array('\-','\:'), $tmp_val);
+ }
+
+ if ($this->getUnitOption($prefix, 'PortalStyleEnv') == true) {
+ $ret.= array_shift($escaped).array_shift($escaped).'-'.implode('-',$escaped);
+ }
+ else {
+ $ret.=implode('-',$escaped);
+ }
+ }
+ }
+ }
+ unset($params['pass']);
+ unset($params['opener']);
+ unset($params['m_event']);
+
+ if ($this->GetVar('admin') && !isset($params['admin'])) {
+ $params['admin'] = 1;
+ }
+
+ foreach ($params as $param => $value)
+ {
+ $ret .= '&'.$param.'='.$value;
+ }
+ if( getArrayValue($params,'escape') ) $ret = addslashes($ret);
+ return $ret;
+ }
+
+ function BaseURL($prefix='')
+ {
+ return PROTOCOL.SERVER_NAME.(defined('PORT')?':'.PORT : '').BASE_PATH.$prefix.'/';
+ }
+
+ function Redirect($t='', $params=null, $prefix='', $index_file=null)
+ {
+ if ($t == '' || $t === true) $t = $this->GetVar('t');
+
+ // pass prefixes and special from previous url
+ if (!isset($params['pass'])) $params['pass'] = 'all';
+
+ $location = $this->HREF($t, $prefix, $params, $index_file);
+ $a_location = $location;
+ $location = "Location: $location";
+ //echo " location : $location <br>";
+
+ if (headers_sent() != '' || ($this->isDebugMode() && dbg_ConstOn('DBG_REDIRECT')) ) {
+ /*$GLOBALS['debugger']->appendTrace();
+ echo "<b>Debug output above!!!</b> Proceed to redirect: <a href=\"$a_location\">$a_location</a><br>";*/
+ echo '<script language="javascript" type="text/javascript">window.location.href = \''.$a_location.'\';</script>';
+ }
+ else {
+ header("$location");
+ }
+
+ $session =& $this->recallObject('Session');
+ $session->SaveData();
+ $this->SaveBlocksCache();
+ 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)
+ {
+ return $this->Phrases->ReplaceLanguageTags($text,$force_escape);
+ }
+
+ /**
+ * Validtates user in session if required
+ *
+ */
+ function ValidateLogin()
+ {
+ if (defined('LOGIN_REQUIRED'))
+ {
+ // Original Kostja call
+ //$login_controller =& $this->Factory->MakeClass(LOGIN_CONTROLLER, Array('model' => USER_MODEL, 'prefix' => 'login'));
+
+ // Call proposed by Alex
+ //$login_controller =& $this->RecallObject(LOGIN_CONTROLLER, Array('model' => USER_MODEL, 'prefix' => 'login'));
+
+ //$login_controller->CheckLogin();
+ }
+ }
+
+ /**
+ * Returns configuration option value by name
+ *
+ * @param string $name
+ * @return string
+ */
+ function ConfigValue($name)
+ {
+ return $this->DB->GetOne('SELECT VariableValue FROM '.TABLE_PREFIX.'ConfigurationValues WHERE VariableName = '.$this->DB->qstr($name) );
+ }
+
+ /**
+ * 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 );
+ }
+ $event_manager =& $this->recallObject('EventManager');
+ $event_manager->HandleEvent($event);
+ }
+
+ /**
+ * Registers new class in the factory
+ *
+ * @param string $real_class
+ * @param string $file
+ * @param string $pseudo_class
+ * @access public
+ * @author Alex
+ */
+ function registerClass($real_class,$file,$pseudo_class=null)
+ {
+ $this->Factory->registerClass($real_class,$file,$pseudo_class);
+ }
+
+ /**
+ * 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']));
+ }
+
+ /**
+ * 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())
+ {
+ $o1 =& $this->Factory->getObject($name,$pseudo_class,$event_params);
+
+ //$o1->param1 = 'one';
+
+ /*$func_args = func_get_args();
+ $factory =& $this->Factory;
+ $o2 =& call_user_func_array( Array(&$factory, 'getObject'), $func_args );*/
+
+ //$o2->param1 = 'two';
+ return $o1;
+ }
+
+ /**
+ * 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();
+ return call_user_func_array( Array(&$this->Factory, 'makeClass'), $func_args);
+ }
+
+ /**
+ * Checks if application is in debug mode
+ *
+ * @return bool
+ * @access public
+ * @author Alex
+ */
+ function isDebugMode()
+ {
+ return defined('DEBUG_MODE') && DEBUG_MODE;
+ }
+
+ /**
+ * Checks if it is admin
+ *
+ * @return bool
+ * @author Alex
+ */
+ function IsAdmin()
+ {
+ return defined('ADMIN') && ADMIN;
+ }
+
+ /**
+ * Reads unit (specified by $prefix)
+ * option specified by $option
+ *
+ * @param string $prefix
+ * @param string $option
+ * @return string
+ * @access public
+ * @author Alex
+ */
+ function getUnitOption($prefix,$option)
+ {
+ $unit_config_reader =& $this->recallObject('kUnitConfigReader');
+ return $unit_config_reader->getUnitOption($prefix,$option);
+ }
+
+ /**
+ * 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 $unit_config_reader->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 $unit_config_reader->getUnitOptions($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)
+ {
+ global $debugger;
+ if($debugger)
+ {
+ $errorLevel=defined('DBG_SQL_FAILURE') && DBG_SQL_FAILURE ? E_USER_ERROR : E_USER_WARNING;
+ $debugger->dumpVars($_REQUEST);
+ $debugger->appendTrace();
+
+ $error_msg = '<span class="debug_error">'.$msg.' ('.$code.')</span><br><a href="javascript:SetClipboard(\''.htmlspecialchars($sql).'\');"><b>SQL</b></a>: '.$debugger->formatSQL($sql);
+ $long_id=$debugger->mapLongError($error_msg);
+ trigger_error( substr($msg.' ('.$code.') ['.$sql.']',0,1000).' #'.$long_id, $errorLevel);
+ return true;
+ }
+ else
+ {
+ $errorLevel = defined('IS_INSTALL') && IS_INSTALL ? E_USER_WARNING : E_USER_ERROR;
+ trigger_error('<b>SQL Error</b> in sql: '.$sql.', code <b>'.$code.'</b> ('.$msg.')', $errorLevel);
+ /*echo '<b>xProcessing SQL</b>: '.$sql.'<br>';
+ echo '<b>Error ('.$code.'):</b> '.$msg.'<br>';*/
+ 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 = '')
+ {
+ $fp = fopen(DOC_ROOT.BASE_PATH.'/silent_log.txt','a');
+ $time = date('d/m/Y H:i:s');
+ fwrite($fp, '['.$time.'] #'.$errno.': '.strip_tags($errstr).' in ['.$errfile.'] on line '.$errline."\n");
+ fclose($fp);
+ }
+
+ /**
+ * Returns & blocks next ResourceId available in system
+ *
+ * @return int
+ * @access public
+ * @author Eduard
+ */
+ function NextResourceId()
+ {
+ $this->DB->Query('LOCK TABLES '.TABLE_PREFIX.'IdGenerator WRITE');
+ $this->DB->Query('UPDATE '.TABLE_PREFIX.'IdGenerator SET lastid = lastid+1');
+ $id = $this->DB->GetOne("SELECT lastid FROM ".TABLE_PREFIX."IdGenerator");
+ $this->DB->Query('UNLOCK TABLES');
+ return $id;
+ }
+
+ /**
+ * Returns main prefix for subtable prefix passes
+ *
+ * @param string $current_prefix
+ * @return string
+ * @access public
+ * @author Kostja
+ */
+ function GetTopmostPrefix($current_prefix)
+ {
+ while ( $parent_prefix = $this->getUnitOption($current_prefix, 'ParentPrefix') )
+ {
+ $current_prefix = $parent_prefix;
+ }
+ return $current_prefix;
+ }
+
+ function EmailEventAdmin($email_event_name, $to_user_id = -1, $send_params = false)
+ {
+ return $this->EmailEvent($email_event_name, 1, $to_user_id, $send_params);
+ }
+
+ function EmailEventUser($email_event_name, $to_user_id = -1, $send_params = false)
+ {
+ return $this->EmailEvent($email_event_name, 0, $to_user_id, $send_params);
+ }
+
+ function EmailEvent($email_event_name, $email_event_type, $to_user_id = -1, $send_params = false)
+ {
+ $event = new kEvent('emailevents:OnEmailEvent');
+ $event->setEventParam('EmailEventName', $email_event_name);
+ $event->setEventParam('EmailEventToUserId', $to_user_id);
+ $event->setEventParam('EmailEventType', $email_event_type);
+ if ($send_params){
+ $event->setEventParam('DirectSendParams', $send_params);
+ }
+ $this->HandleEvent($event);
+
+ return $event;
+ }
+
+
+ function LoggedIn()
+ {
+ $user =& $this->recallObject('u');
+ return ($user->GetDBField('PortalUserId') > 0);
+ }
+
+ function CheckPermission($name, $cat_id = null)
+ {
+ if(!$cat_id)
+ {
+ $cat_id = $this->GetVar('m_cat_id');
+ }
+ $sql = 'SELECT ParentPath FROM '.$this->getUnitOption('c', 'TableName').'
+ WHERE CategoryId = '.$cat_id;
+ $cat_hierarchy = $this->DB->GetOne($sql);
+ $cat_hierarchy = explode('|', $cat_hierarchy);
+ array_shift($cat_hierarchy);
+ array_pop($cat_hierarchy);
+ $cat_hierarchy = array_reverse($cat_hierarchy);
+
+ $groups = $this->RecallVar('UserGroups');
+
+ foreach($cat_hierarchy as $category_id)
+ {
+ $sql = 'SELECT PermissionValue FROM '.TABLE_PREFIX.'Permissions
+ WHERE Permission = "'.$name.'"
+ AND CatId = '.$category_id.'
+ AND GroupId IN ('.$groups.')';
+ $res = $this->DB->GetOne($sql);
+ if( $res !== false )
+ {
+ return $res;
+ }
+ }
+
+ return 0;
+ }
+}
+
?>
\ No newline at end of file
Property changes on: trunk/core/kernel/application.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.14
\ No newline at end of property
+1.15
\ No newline at end of property

Event Timeline