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 . '' . $xml_node . '>' . "\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 '' ;