Index: branches/5.2.x/core/units/helpers/fck_helper.php =================================================================== diff -u -N -r14244 -r14699 --- branches/5.2.x/core/units/helpers/fck_helper.php (.../fck_helper.php) (revision 14244) +++ branches/5.2.x/core/units/helpers/fck_helper.php (.../fck_helper.php) (revision 14699) @@ -1,6 +1,6 @@ folder = $this->Application->GetVar('folder'); + $this->sortField = $this->Application->GetVar('sort_by'); + $this->sortDirection = $this->Application->GetVar('order_by'); + $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'); @@ -38,176 +66,243 @@ function CreateFolder($folder = '') { - if (!$folder) { + if ( !$folder ) { return false; } $folderPath = WRITEABLE . '/user_files/' . $folder; - if (file_exists($folderPath) && is_dir($folderPath)) { + if ( file_exists($folderPath) && is_dir($folderPath) ) { return true; } - $permissions = defined('FCK_FOLDERS_PERMISSIONS') ? FCK_FOLDERS_PERMISSIONS : '0777'; - return mkdir($folderPath); // , $permissions + /*$permissions = defined('FCK_FOLDERS_PERMISSIONS') ? FCK_FOLDERS_PERMISSIONS : '0777'; + return mkdir($folderPath, $permissions);*/ + + return mkdir($folderPath); } function IsAllowedExtension($folder, $file_name) { - $base_folder = $this->getBaseFolder($folder); $ext = strtolower( pathinfo($file_name, PATHINFO_EXTENSION) ); - if (isset($this->Config['DeniedExtensions'][$folder])) { - if (in_array($ext, $this->Config['DeniedExtensions'][$folder])) { + + 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])) { + + if ( isset($this->Config['AllowedExtensions'][$folder]) ) { + if ( !in_array($ext, $this->Config['AllowedExtensions'][$folder]) ) { return false; } } + return true; } - function getBaseFolder($folder) + /** + * Returns list of sub-folders from given folder (automatically excludes system folders) + * + * @param string $files_dir + * @return Array + * @access public + */ + public function ReadFolders($files_dir) { - $end = strpos('/', $folder); - if ($end) { - return substr($folder, 0, $end); + $iterator = new DirectoryIterator($files_dir); + /* @var $file_info DirectoryIterator */ + + $ret = Array (); + $system_folders = defined('KERNEL_SYSTEM_FOLDERS') ? KERNEL_SYSTEM_FOLDERS : Array ('icons', 'CVS', '.svn'); + + foreach ($iterator as $file_info) { + $filename = $file_info->getFilename(); + + if ( $file_info->isDir() && !$file_info->isDot() ) { + $ret[] = $filename; + } } - return $folder; + + return array_diff($ret, $system_folders); } - function ReadFolders($files_dir) + /** + * Returns list of files in given folder + * + * @param string $files_dir + * @return Array + * @access public + */ + public function ReadFiles($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; + $ret = Array (); + + $iterator = new DirectoryIterator($files_dir); + /* @var $file_info DirectoryIterator */ + + foreach ($iterator as $file_info) { + if ( !$file_info->isDir() ) { + $ret[] = $file_info->getFilename(); } } - closedir( $oCurrentFolder ) ; - return $aFolders; + + return $ret; } - function ReadFiles($files_dir) + /** + * Returns xml containing list of folders in current folder + * + * @return string + * @access public + */ + public function PrintFolders() { - $aFiles = array(); - $oCurrentFolder = opendir($files_dir) ; - while ( $sFile = readdir( $oCurrentFolder ) ) - { - if (!is_dir($files_dir . $sFile )) { - $aFiles[] = $sFile; - } + $files_dir = WRITEABLE . '/user_files/' . $this->folder . '/'; + + $sub_folders = $this->ReadFolders($files_dir); + natcasesort($sub_folders); + + $ret = $this->_buildFoldersXML($sub_folders, 'folder2'); + + if ( $this->sortField == 'name' && $this->sortDirection == '_desc' ) { + $sub_folders = array_reverse($sub_folders); } - closedir( $oCurrentFolder ) ; - return $aFiles; + + $ret .= $this->_buildFoldersXML($sub_folders, 'folder'); + + return $ret; } - function PrintFolders() + /** + * Build XML, that will output folders for FCKEditor + * + * @param Array $sub_folders + * @param string $xml_node + * @return string + */ + protected function _buildFoldersXML($sub_folders, $xml_node) { - $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); - $order_by = $this->Application->GetVar('order_by'); - $sort_by = $this->Application->GetVar('sort_by'); - natcasesort($aFolders); - $ret = ''; - foreach ($aFolders as $k => $v) { - $ret .= ''.$v.''."\n"; - } - if ($sort_by == 'name' && $order_by == '_desc') { - $aFolders = array_reverse($aFolders); + foreach ($sub_folders as $sub_folder) { + $ret .= '<' . $xml_node . ' path="' . $this->folder . "/" . $sub_folder . '">' . $sub_folder . '' . "\n"; } - foreach ($aFolders as $k => $v) { - $ret .= ''.$v.''."\n"; - } return $ret; } - function CalculateFileSize($size) + /** + * Transforms filesize in bytes into kilobytes + * + * @param int $size + * @return int + * @access protected + */ + protected function CalculateFileSize($size) { if ( $size > 0 ) { - $size = round( $size / 1024 ); - $size = ($size < 1)? 1:$size;// round( $iFileSize / 1024 ) ; + $size = round($size / 1024); + $size = ($size < 1) ? 1 : $size; } + return $size; } - function CheckIconType($v) + /** + * Detects icon for given file extension + * + * @param string $file + * @return string + * @access protected + */ + protected function CheckIconType($file) { - $ext = strtolower( pathinfo($v, PATHINFO_EXTENSION) ); - return ($ext && in_array($ext, $this->Config['ExtensionIcons']))? $ext : 'default.icon'; + $ext = strtolower( pathinfo($file, PATHINFO_EXTENSION) ); + + return $ext && in_array($ext, $this->Config['ExtensionIcons']) ? $ext : 'default.icon'; } - function GetXmlString($size,$url,$icon,$date,$file_name) + /** + * Build one file xml node + * + * @param int $size + * @param string $url + * @param string $icon + * @param string $date + * @param string $file_name + * @return string + */ + protected function _buildFileXml($size,$url,$icon,$date,$file_name) { - return ''.$file_name.''."\n"; + return '' . $file_name . '' . "\n"; } - function PrintFiles() + /** + * Returns xml containing list of files in current folder + * + * @return string + * @access public + */ + public 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 . str_replace(DIRECTORY_SEPARATOR, '/', WRITEBALE_BASE) . '/user_files/' . $folder . '/'; + $files_dir = WRITEABLE . '/user_files/' . $this->folder . '/'; + $files_url = BASE_PATH . str_replace(DIRECTORY_SEPARATOR, '/', WRITEBALE_BASE) . '/user_files/' . $this->folder . '/'; $aFiles = $this->ReadFiles($files_dir); $ret = ''; $date_format = "m/d/Y h:i A"; natcasesort($aFiles); - if ($sort_by == 'name' && $order_by == '_desc') { + + if ( $this->sortField == 'name' && $this->sortDirection == '_desc' ) { $aFiles = array_reverse($aFiles, TRUE); } - foreach ($aFiles as $k => $v) - { - $aFilesSize[$k] = filesize( $files_dir . $v); - $aFilesDate[$k] = filectime( $files_dir . $v); + $aFilesSize = $aFilesDate = Array (); + + foreach ($aFiles as $k => $v) { + $aFilesSize[$k] = filesize($files_dir . $v); + $aFilesDate[$k] = filectime($files_dir . $v); } - if ($sort_by == 'name') { + + if ( $this->sortField == '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); + $ret .= $this->_buildFileXml($size, $files_url . $file, $icon, $date, $file); } } - if ($sort_by == 'date') { + + if ( $this->sortField == 'date' ) { asort($aFilesDate); - if($order_by == '_desc') { - $aFilesDate = array_reverse($aFilesDate,TRUE); - } + if ( $this->sortDirection == '_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); + $ret .= $this->_buildFileXml($size, $files_url . $file, $icon, $date, $file); } } - if ($sort_by == 'size') { + + if ( $this->sortField == 'size' ) { asort($aFilesSize); - if($order_by == '_desc') { - $aFilesSize = array_reverse($aFilesSize,TRUE); - } + if ( $this->sortDirection == '_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); + $ret .= $this->_buildFileXml($size, $files_url . $file, $icon, $date, $file); } } + return $ret; } @@ -223,6 +318,7 @@ $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, $this->Config['AllowedExtensions'][$type])) @@ -270,6 +366,7 @@ else { $sErrorNumber = '202' ; } + echo '' ;