2 # FCKeditor - The text editor for Internet - http://www.fckeditor.net
\r
3 # Copyright (C) 2003-2010 Frederico Caldeira Knabben
\r
5 # == BEGIN LICENSE ==
\r
7 # Licensed under the terms of any of the following licenses at your
\r
10 # - GNU General Public License Version 2 or later (the "GPL")
\r
11 # http://www.gnu.org/licenses/gpl.html
\r
13 # - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
\r
14 # http://www.gnu.org/licenses/lgpl.html
\r
16 # - Mozilla Public License Version 1.1 or later (the "MPL")
\r
17 # http://www.mozilla.org/MPL/MPL-1.1.html
\r
21 # This is the File Manager Connector for Perl.
\r
27 local($resourceType, $currentFolder) = @_;
\r
29 # Map the virtual path to the local server path.
\r
30 $sServerDir = &ServerMapFolder($resourceType, $currentFolder);
\r
31 print "<Folders>"; # Open the "Folders" node.
\r
33 opendir(DIR,"$sServerDir");
\r
34 @files = grep(!/^\.\.?$/,readdir(DIR));
\r
37 foreach $sFile (@files) {
\r
38 if($sFile != '.' && $sFile != '..' && (-d "$sServerDir$sFile")) {
\r
39 $cnv_filename = &ConvertToXmlAttribute($sFile);
\r
40 print '<Folder name="' . $cnv_filename . '" />';
\r
43 print "</Folders>"; # Close the "Folders" node.
\r
46 sub GetFoldersAndFiles
\r
49 local($resourceType, $currentFolder) = @_;
\r
50 # Map the virtual path to the local server path.
\r
51 $sServerDir = &ServerMapFolder($resourceType,$currentFolder);
\r
53 # Initialize the output buffers for "Folders" and "Files".
\r
54 $sFolders = '<Folders>';
\r
55 $sFiles = '<Files>';
\r
57 opendir(DIR,"$sServerDir");
\r
58 @files = grep(!/^\.\.?$/,readdir(DIR));
\r
61 foreach $sFile (@files) {
\r
62 if($sFile ne '.' && $sFile ne '..') {
\r
63 if(-d "$sServerDir$sFile") {
\r
64 $cnv_filename = &ConvertToXmlAttribute($sFile);
\r
65 $sFolders .= '<Folder name="' . $cnv_filename . '" />' ;
\r
67 ($iFileSize,$refdate,$filedate,$fileperm) = (stat("$sServerDir$sFile"))[7,8,9,2];
\r
68 if($iFileSize > 0) {
\r
69 $iFileSize = int($iFileSize / 1024);
\r
70 if($iFileSize < 1) {
\r
74 $cnv_filename = &ConvertToXmlAttribute($sFile);
\r
75 $sFiles .= '<File name="' . $cnv_filename . '" size="' . $iFileSize . '" />' ;
\r
80 print '</Folders>'; # Close the "Folders" node.
\r
82 print '</Files>'; # Close the "Files" node.
\r
88 local($resourceType, $currentFolder) = @_;
\r
89 $sErrorNumber = '0' ;
\r
92 if($FORM{'NewFolderName'} ne "") {
\r
93 $sNewFolderName = $FORM{'NewFolderName'};
\r
94 $sNewFolderName =~ s/\.|\\|\/|\||\:|\?|\*|\"|<|>|[[:cntrl:]]/_/g;
\r
95 # Map the virtual path to the local server path of the current folder.
\r
96 $sServerDir = &ServerMapFolder($resourceType, $currentFolder);
\r
97 if(-w $sServerDir) {
\r
98 $sServerDir .= $sNewFolderName;
\r
99 $sErrorMsg = &CreateServerFolder($sServerDir);
\r
100 if($sErrorMsg == 0) {
\r
101 $sErrorNumber = '0';
\r
102 } elsif($sErrorMsg eq 'Invalid argument' || $sErrorMsg eq 'No such file or directory') {
\r
103 $sErrorNumber = '102'; #// Path too long.
\r
105 $sErrorNumber = '110';
\r
108 $sErrorNumber = '103';
\r
111 $sErrorNumber = '102' ;
\r
113 # Create the "Error" node.
\r
114 $cnv_errmsg = &ConvertToXmlAttribute($sErrorMsg);
\r
115 print '<Error number="' . $sErrorNumber . '" />';
\r
120 eval("use File::Copy;");
\r
122 local($resourceType, $currentFolder) = @_;
\r
123 $allowedExtensions = $allowedExtensions{$resourceType};
\r
125 $sErrorNumber = '0' ;
\r
128 # Map the virtual path to the local server path.
\r
129 $sServerDir = &ServerMapFolder($resourceType,$currentFolder);
\r
131 # Get the uploaded file name.
\r
132 $sFileName = $new_fname;
\r
133 $sFileName =~ s/\\|\/|\||\:|\?|\*|\"|<|>|[[:cntrl:]]/_/g;
\r
134 $sFileName =~ s/\.(?![^.]*$)/_/g;
\r
137 if($sFileName =~ /([^\\\/]*)\.(.*)$/) {
\r
141 $allowedRegex = qr/^($allowedExtensions)$/i;
\r
142 if (!($ext =~ $allowedRegex)) {
\r
143 SendUploadResults('202', '', '', '');
\r
146 $sOriginalFileName = $sFileName;
\r
150 $sFilePath = $sServerDir . $sFileName;
\r
151 if(-e $sFilePath) {
\r
153 ($path,$BaseName,$ext) = &RemoveExtension($sOriginalFileName);
\r
154 $sFileName = $BaseName . '(' . $iCounter . ').' . $ext;
\r
155 $sErrorNumber = '201';
\r
157 copy("$img_dir/$new_fname","$sFilePath");
\r
158 if (defined $CHMOD_ON_UPLOAD) {
\r
159 if ($CHMOD_ON_UPLOAD) {
\r
161 chmod($CHMOD_ON_UPLOAD,$sFilePath);
\r
166 chmod(0777,$sFilePath);
\r
168 unlink("$img_dir/$new_fname");
\r
173 $sErrorNumber = '202' ;
\r
175 $sFileName =~ s/"/\\"/g;
\r
177 SendUploadResults($sErrorNumber, $GLOBALS{'UserFilesPath'}.$resourceType.$currentFolder.$sFileName, $sFileName, '');
\r
180 sub SendUploadResults
\r
183 local($sErrorNumber, $sFileUrl, $sFileName, $customMsg) = @_;
\r
185 # Minified version of the document.domain automatic fix script (#1919).
\r
186 # The original script can be found at _dev/domain_fix_template.js
\r
187 # Note: in Perl replace \ with \\ and $ with \$
\r
189 Content-type: text/html
\r
191 <script type="text/javascript">
\r
192 (function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e) {};d=d.replace(/.*?(?:\\.|\$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();
\r
195 print 'window.parent.OnUploadCompleted(' . $sErrorNumber . ',"' . JS_cnv($sFileUrl) . '","' . JS_cnv($sFileName) . '","' . JS_cnv($customMsg) . '") ;';
\r