Index: branches/5.0.x/core/units/helpers/fck_helper.php =================================================================== --- branches/5.0.x/core/units/helpers/fck_helper.php (revision 13010) +++ branches/5.0.x/core/units/helpers/fck_helper.php (revision 13011) @@ -1,294 +1,294 @@ <?php /** * @version $Id$ * @package In-Portal * @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved. * @license GNU/GPL * In-Portal is Open Source software. * This means that this software may have been modified pursuant * the GNU General Public License, and as distributed it includes * or is derivative of works licensed under the GNU General Public License * or other free or open source software licenses. * See http://www.in-portal.org/license for copyright notices and details. */ defined('FULL_PATH') or die('restricted access!'); class fckFCKHelper extends kHelper { var $Config = Array(); function fckFCKHelper() { parent::kHelper(); $this->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','odt') ; $this->Config['DeniedExtensions']['Files'] = array('php','asp','aspx','ascx','jsp','cfm','cfc','pl','bat','exe','dll','reg') ; $this->Config['AllowedExtensions']['Images'] = array('jpg','gif','jpeg','png', 'bmp') ; $this->Config['DeniedExtensions']['Images'] = array('php','asp','aspx','ascx','jsp','cfm','cfc','pl','bat','exe','dll','reg'); $this->Config['AllowedExtensions']['Flash'] = array('swf','fla') ; $this->Config['DeniedExtensions']['Flash'] = array('php','asp','aspx','ascx','jsp','cfm','cfc','pl','bat','exe','dll','reg') ; $this->Config['AllowedExtensions']['Media'] = array('asf','asx','avi','wav','wax','wma','wm','wmv','m3u','mp2v','mpg','mpeg','m1v','mp2','mp3','mpa','mpe','mpv2','mp4','mid','midi','rmi','qt','aif','aifc','aiff','mov','flv','rm','svcd','swf','vcd') ; $this->Config['DeniedExtensions']['Media'] = array('php','asp','aspx','ascx','jsp','cfm','cfc','pl','bat','exe','dll','reg'); $this->Config['AllowedExtensions']['Documents'] = array('doc','pdf','ppt','rdp','swf','swt','txt','vsd','xls','csv','zip','odt') ; $this->Config['DeniedExtensions']['Documents'] = array('php','asp','aspx','ascx','jsp','cfm','cfc','pl','bat','exe','dll','reg'); } function CreateFolder($folder = '') { if (!$folder) { return false; } $folderPath = WRITEABLE . '/user_files/' . $folder; if (file_exists($folderPath) && is_dir($folderPath)) { return true; } $permissions = defined('FCK_FOLDERS_PERMISSIONS') ? FCK_FOLDERS_PERMISSIONS : '0777'; return mkdir($folderPath); // , $permissions } function IsAllowedExtension($folder, $file_name) { $base_folder = $this->getBaseFolder($folder); eregi("(\.[a-zA-Z0-9]{1,10})$", $file_name, $regs); $ext = strtolower(ltrim($regs[1],".")); if (isset($this->Config['DeniedExtensions'][$folder])) { if (in_array($ext, $this->Config['DeniedExtensions'][$folder])) { return false; } } if (isset($this->Config['AllowedExtensions'][$folder])) { if (!in_array($ext, $this->Config['AllowedExtensions'][$folder])) { return false; } } return true; } function getBaseFolder($folder) { $end = strpos("/", $folder); if ($end) { return substr($folder, 0, $end); } return $folder; } function ReadFolders($files_dir) { $aFolders = array(); $oCurrentFolder = opendir($files_dir) ; $KernelSystemFolders = defined('KERNEL_SYSTEM_FOLDERS') ? KERNEL_SYSTEM_FOLDERS : array('icons', 'CVS', '.svn'); while ( $sFile = readdir( $oCurrentFolder ) ) { if (is_dir($files_dir . $sFile ) && !in_array($sFile,$KernelSystemFolders) && $sFile != '.' && $sFile != '..') { $aFolders[] = $sFile; } } closedir( $oCurrentFolder ) ; return $aFolders; } function ReadFiles($files_dir) { $aFiles = array(); $oCurrentFolder = opendir($files_dir) ; while ( $sFile = readdir( $oCurrentFolder ) ) { if (!is_dir($files_dir . $sFile )) { $aFiles[] = $sFile; } } closedir( $oCurrentFolder ) ; return $aFiles; } function PrintFolders() { $order_by = $this->Application->GetVar('order_by'); $sort_by = $this->Application->GetVar('sort_by'); $folder = $this->Application->GetVar('folder'); $files_dir = WRITEABLE."/user_files/".$folder."/"; $aFolders = $this->ReadFolders($files_dir); $ret = ''; $order_by = $this->Application->GetVar('order_by'); $sort_by = $this->Application->GetVar('sort_by'); natcasesort($aFolders); foreach ($aFolders as $k => $v) { $ret .= '<folder2 path="'.$folder."/".$v.'">'.$v.'</folder2>'."\n"; } if ($sort_by == 'name' && $order_by == '_desc') { $aFolders = array_reverse($aFolders); } foreach ($aFolders as $k => $v) { $ret .= '<folder path="'.$folder."/".$v.'">'.$v.'</folder>'."\n"; } return $ret; } function CalculateFileSize($size) { if ( $size > 0 ) { $size = round( $size / 1024 ); $size = ($size < 1)? 1:$size;// round( $iFileSize / 1024 ) ; } return $size; } function CheckIconType($v) { $a_ext = Array('ai','avi','bmp','cs','dll','doc','exe','fla','gif','htm','html','jpg','js','mdb','mp3','pdf','png','ppt','rdp','swf','swt','txt','vsd','xls','xml','zip'); eregi("(\.[a-zA-Z0-9]{1,10})$", $v, $regs); $ext = strtolower(ltrim($regs[1],".")); if (in_array($ext, $a_ext)) { $icon = $ext; } else { $icon = 'default.icon'; } return $icon; } function GetXmlString($size,$url,$icon,$date,$file_name) { return '<file size="'.$size.'" url="'.$url.'" icon="'.$icon.'" date="'.$date.'">'.$file_name.'</file>'."\n"; } function PrintFiles() { $order_by = $this->Application->GetVar('order_by'); $sort_by = $this->Application->GetVar('sort_by'); $folder = $this->Application->GetVar('folder'); $files_dir = WRITEABLE . "/user_files/" . $folder."/"; - $files_url = BASE_PATH . WRITEBALE_BASE . "/user_files/" . $folder . "/"; + $files_url = BASE_PATH . str_replace(DIRECTORY_SEPARATOR, '/', WRITEBALE_BASE) . "/user_files/" . $folder . "/"; $aFiles = $this->ReadFiles($files_dir); $ret = ''; $date_format = "m/d/Y h:i A"; natcasesort($aFiles); if ($sort_by == 'name' && $order_by == '_desc') { $aFiles = array_reverse($aFiles,TRUE); } foreach ($aFiles as $k => $v) { $aFilesSize[$k] = filesize( $files_dir . $v); $aFilesDate[$k] = filectime( $files_dir . $v); } if ($sort_by == 'name') { foreach ($aFiles as $k => $file) { $size = $this->CalculateFileSize($aFilesSize[$k]); $date = date($date_format, $aFilesDate[$k]); $icon = $this->CheckIconType($file); $ret .= $this->GetXmlString($size,$files_url.$file,$icon,$date,$file); } } if ($sort_by == 'date') { asort($aFilesDate); if($order_by == '_desc') { $aFilesDate = array_reverse($aFilesDate,TRUE); } foreach ($aFilesDate as $k => $date) { $size = $this->CalculateFileSize($aFilesSize[$k]); $file = $aFiles[$k]; $date = date($date_format, $date); $icon = $this->CheckIconType($file); $ret .= $this->GetXmlString($size,$files_url.$file,$icon,$date,$file); } } if ($sort_by == 'size') { asort($aFilesSize); if($order_by == '_desc') { $aFilesSize = array_reverse($aFilesSize,TRUE); } foreach ($aFilesSize as $k => $size) { $size = $this->CalculateFileSize($size); $file = $aFiles[$k]; $date = date($date_format, $aFilesDate[$k]); $icon = $this->CheckIconType($file); $ret .= $this->GetXmlString($size,$files_url.$file,$icon,$date,$file); } } return $ret; } function UploadFile() { $Extensions['Allowed']['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','odt') ; $Extensions['Allowed']['Images'] = array('jpg','gif','jpeg','png', 'bmp') ; $Extensions['Allowed']['Flash'] = array('swf','fla') ; $Extensions['Allowed']['Media'] = array('asf','asx','avi','wav','wax','wma','wm','wmv','m3u','mp2v','mpg','mpeg','m1v','mp2','mp3','mpa','mpe','mpv2','mp4','mid','midi','rmi','qt','aif','aifc','aiff','mov','flv','rm','svcd','swf','vcd') ; $Extensions['Allowed']['Documents'] = array('doc','pdf','ppt','rdp','swf','swt','txt','vsd','xls','csv','zip','odt') ; $upload_dir = $this->Application->GetVar('upload_dir'); $type = explode("/",$upload_dir); $type = $type[0]; $sServerDir = WRITEABLE."/user_files/".$upload_dir."/"; $aUpFile = $_FILES['NewFile']; $sFileName = $aUpFile['name']; $sOriginalFileName = $aUpFile['name']; $sExtension = strtolower(substr( $sFileName, ( strrpos($sFileName, '.') + 1 ) ) ); $sErrorNumber = 0; if ( isset( $_FILES['NewFile'] ) && !is_null( $_FILES['NewFile']['tmp_name'] ) ) { if (in_array($sExtension,$Extensions['Allowed'][$type])) { if (!$aUpFile['error']) { $iCounter = 0 ; while ( true ) { $sFilePath = $sServerDir . $sFileName ; if ( is_file( $sFilePath ) ) { $iCounter++ ; $sFileName = $this->RemoveExtension( $sOriginalFileName ) . '(' . $iCounter . ').' . $sExtension ; $sErrorNumber = '201' ; } else { // Turn off all error reporting. error_reporting( 0 ) ; // Enable error tracking to catch the error. ini_set( 'track_errors', '1' ) ; move_uploaded_file( $aUpFile['tmp_name'], $sFilePath ) ; $sErrorMsg = $php_errormsg ; // Restore the configurations. ini_restore( 'track_errors' ) ; ini_restore( 'error_reporting' ) ; if ( is_file( $sFilePath ) ) { $oldumask = umask(0) ; chmod( $sFilePath, 0666 ) ; umask( $oldumask ) ; } break ; } } } } else { $sErrorNumber = '203'; } } else { $sErrorNumber = '202' ; } echo '<script type="text/javascript">' ; echo 'window.parent.frames["frmUpload"].OnUploadCompleted(' . $sErrorNumber . ',"' . str_replace( '"', '\\"', $sFileName ) . '") ;' ; echo '</script>' ; } function RemoveExtension( $fileName ) { return substr( $fileName, 0, strrpos( $fileName, '.' ) ) ; } } \ No newline at end of file Index: branches/5.0.x/core/units/fck/fck_eh.php =================================================================== --- branches/5.0.x/core/units/fck/fck_eh.php (revision 13010) +++ branches/5.0.x/core/units/fck/fck_eh.php (revision 13011) @@ -1,206 +1,207 @@ <?php /** * @version $Id$ * @package In-Portal * @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved. * @license GNU/GPL * In-Portal is Open Source software. * This means that this software may have been modified pursuant * the GNU General Public License, and as distributed it includes * or is derivative of works licensed under the GNU General Public License * or other free or open source software licenses. * See http://www.in-portal.org/license for copyright notices and details. */ defined('FULL_PATH') or die('restricted access!'); class FckEventHandler extends kDBEventHandler { /** * Checks permissions of user * * @param kEvent $event */ function CheckPermission(&$event) { if ($this->Application->isAdminUser) { // this limits all event execution only to logged-in users in admin return true; } return parent::CheckPermission($event); } function CreateXmlHeader() { ob_end_clean() ; // Prevent the browser from caching the result. // Date in the past header('Expires: Mon, 26 Jul 1997 05:00:00 GMT') ; // always modified header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT') ; // HTTP/1.1 header('Cache-Control: no-store, no-cache, must-revalidate') ; header('Cache-Control: post-check=0, pre-check=0', false) ; // HTTP/1.0 header('Pragma: no-cache') ; // Set the response format. header( 'Content-Type: text/xml; charset=utf-8' ) ; // Create the XML document header. } function OnLoadCmsTree(&$event) { $event->status = erSTOP; $this->CreateXmlHeader(); $res = '<?xml version="1.0" encoding="utf-8" ?>'."\n" ; $res.= "<CmsPages>"."\n"; $lang = $this->Application->GetVar('m_lang'); $st =& $this->Application->recallObject('st.-dummy'); /* @var $st kDBItem */ $st_options = $this->Application->getUnitOption('st'.'.ParentId', 'Fields'); $pages = $st_options['options']; $page_ids = array_keys($pages); $sql = 'SELECT NamedParentPath, CategoryId FROM ' . TABLE_PREFIX . 'Category WHERE CategoryId IN (' . implode(',', $page_ids) . ')'; $tpls = $this->Application->Conn->GetCol($sql, 'CategoryId'); //$res = ''; foreach ($pages as $id => $title) { $page_path = preg_replace('/^Content\//i', '', strtolower($tpls[$id]).'.html'); $title = $title.' ('.$page_path.')'; $real_url = $this->Application->HREF($tpls[$id], '_FRONT_END_', array('pass'=>'m'), 'index.php'); $res .= '<CmsPage real_url="'.$real_url.'" path="@@'.$id.'@@" title="'.$prefix.htmlspecialchars($title,ENT_QUOTES).'" st_id="'.$id.'" serverpath="" />'."\n"; } $res.= "</CmsPages>"; echo $res; } function OnRenameFile(&$event) { $event->status = erSTOP; if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) { return; } $old_name = $this->Application->GetVar('old_name'); $new_name = $this->Application->GetVar('new_name'); $folder = $this->Application->GetVar('folder'); $sServerDir = WRITEABLE . '/user_files/' . $folder . '/'; if (!file_exists($sServerDir.$old_name) || !is_file($sServerDir.$old_name)) { echo 204; return; } $fck_helper =& $this->Application->recallObject('FCKHelper'); /* @var fck_helper fckFCKHelper*/ if (!$fck_helper->IsAllowedExtension($folder, $new_name)) { echo 203; return; } if (!rename($sServerDir.$old_name,$sServerDir.$new_name)) { // echo $sServerDir.$old_name.' -> '.$sServerDir.$new_name; echo 205; return; } echo '0'; } function OnDeleteFiles(&$event) { $event->status = erSTOP; if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) { return; } $files = trim($this->Application->GetVar('files'),'|'); // echo $files; $a_files = explode('|', $files); $folder = $this->Application->GetVar('folder'); $sServerDir = WRITEABLE . '/user_files/' . $folder . '/'; foreach ($a_files AS $file) { @unlink($sServerDir.$file); } // print_r($a_files); } function OnGetFoldersFilesList(&$event) { $this->CreateXmlHeader(); + $fck_helper =& $this->Application->recallObject('FCKHelper'); - /* @var fck_helper fckFCKHelper*/ + /* @var $fck_helper fckFCKHelper */ $ret = '<?xml version="1.0" encoding="utf-8" ?>'."\n" ; $ret .= "<content>"."\n"; $ret .= $fck_helper->PrintFolders(); $ret .= $fck_helper->PrintFiles(); $ret .= "</content>"."\n"; echo $ret; exit; } function OnCreateFolder(&$event) { $event->status = erSTOP; if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) { return; } $new_folder = $this->Application->GetVar('new_folder'); $current_folder = $this->Application->GetVar('current_folder'); $folderPath = WRITEABLE . '/user_files' . '/' . $current_folder . "/" . $new_folder; if ( file_exists( $folderPath ) && is_dir($folderPath)) { echo "101"; } if ( !file_exists( $folderPath ) ) { // Turn off all error reporting. error_reporting( 0 ) ; // Enable error tracking to catch the error. ini_set( 'track_errors', '1' ) ; // To create the folder with 0777 permissions, we need to set umask to zero. $oldumask = umask(0) ; mkdir( $folderPath, 0777 ) ; umask( $oldumask ) ; $sErrorMsg = $php_errormsg ; // Restore the configurations. ini_restore( 'track_errors' ) ; ini_restore( 'error_reporting' ) ; if ($sErrorMsg) echo $sErrorMsg ; else echo '0'; } } function OnUploadFile(&$event) { $event->status = erSTOP; if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) { return; } $fck_helper =& $this->Application->recallObject('FCKHelper'); /* @var fck_helper fckFCKHelper*/ $fck_helper->UploadFile(); } } \ No newline at end of file