PageRenderTime 41ms CodeModel.GetById 13ms app.highlight 25ms RepoModel.GetById 1ms app.codeStats 0ms

/pigeoncms/Plugins/fckeditor/editor/filemanager/connectors/perl/commands.pl

http://pigeoncms.googlecode.com/
Perl | 200 lines | 148 code | 24 blank | 28 comment | 20 complexity | 7bed26c5bee093677bfdeafd7fc26fe7 MD5 | raw file
  1#####
  2#  FCKeditor - The text editor for Internet - http://www.fckeditor.net
  3#  Copyright (C) 2003-2009 Frederico Caldeira Knabben
  4#
  5#  == BEGIN LICENSE ==
  6#
  7#  Licensed under the terms of any of the following licenses at your
  8#  choice:
  9#
 10#   - GNU General Public License Version 2 or later (the "GPL")
 11#     http://www.gnu.org/licenses/gpl.html
 12#
 13#   - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
 14#     http://www.gnu.org/licenses/lgpl.html
 15#
 16#   - Mozilla Public License Version 1.1 or later (the "MPL")
 17#     http://www.mozilla.org/MPL/MPL-1.1.html
 18#
 19#  == END LICENSE ==
 20#
 21#  This is the File Manager Connector for Perl.
 22#####
 23
 24sub GetFolders
 25{
 26
 27	local($resourceType, $currentFolder) = @_;
 28
 29	# Map the virtual path to the local server path.
 30	$sServerDir = &ServerMapFolder($resourceType, $currentFolder);
 31	print "<Folders>";			# Open the "Folders" node.
 32
 33	opendir(DIR,"$sServerDir");
 34	@files = grep(!/^\.\.?$/,readdir(DIR));
 35	closedir(DIR);
 36
 37	foreach $sFile (@files) {
 38		if($sFile != '.' && $sFile != '..' && (-d "$sServerDir$sFile")) {
 39			$cnv_filename = &ConvertToXmlAttribute($sFile);
 40			print '<Folder name="' . $cnv_filename . '" />';
 41		}
 42	}
 43	print "</Folders>";			# Close the "Folders" node.
 44}
 45
 46sub GetFoldersAndFiles
 47{
 48
 49	local($resourceType, $currentFolder) = @_;
 50	# Map the virtual path to the local server path.
 51	$sServerDir = &ServerMapFolder($resourceType,$currentFolder);
 52
 53	# Initialize the output buffers for "Folders" and "Files".
 54	$sFolders	= '<Folders>';
 55	$sFiles		= '<Files>';
 56
 57	opendir(DIR,"$sServerDir");
 58	@files = grep(!/^\.\.?$/,readdir(DIR));
 59	closedir(DIR);
 60
 61	foreach $sFile (@files) {
 62		if($sFile ne '.' && $sFile ne '..') {
 63			if(-d "$sServerDir$sFile") {
 64				$cnv_filename = &ConvertToXmlAttribute($sFile);
 65				$sFolders .= '<Folder name="' . $cnv_filename . '" />' ;
 66			} else {
 67				($iFileSize,$refdate,$filedate,$fileperm) = (stat("$sServerDir$sFile"))[7,8,9,2];
 68				if($iFileSize > 0) {
 69					$iFileSize = int($iFileSize / 1024);
 70					if($iFileSize < 1) {
 71						$iFileSize = 1;
 72					}
 73				}
 74				$cnv_filename = &ConvertToXmlAttribute($sFile);
 75				$sFiles	.= '<File name="' . $cnv_filename . '" size="' . $iFileSize . '" />' ;
 76			}
 77		}
 78	}
 79	print $sFolders ;
 80	print '</Folders>';			# Close the "Folders" node.
 81	print $sFiles ;
 82	print '</Files>';			# Close the "Files" node.
 83}
 84
 85sub CreateFolder
 86{
 87
 88	local($resourceType, $currentFolder) = @_;
 89	$sErrorNumber	= '0' ;
 90	$sErrorMsg		= '' ;
 91
 92	if($FORM{'NewFolderName'} ne "") {
 93		$sNewFolderName = $FORM{'NewFolderName'};
 94		$sNewFolderName =~ s/\.|\\|\/|\||\:|\?|\*|\"|<|>|[[:cntrl:]]/_/g;
 95		# Map the virtual path to the local server path of the current folder.
 96		$sServerDir = &ServerMapFolder($resourceType, $currentFolder);
 97		if(-w $sServerDir) {
 98			$sServerDir .= $sNewFolderName;
 99			$sErrorMsg = &CreateServerFolder($sServerDir);
100			if($sErrorMsg == 0) {
101				$sErrorNumber = '0';
102			} elsif($sErrorMsg eq 'Invalid argument' || $sErrorMsg eq 'No such file or directory') {
103				$sErrorNumber = '102';		#// Path too long.
104			} else {
105				$sErrorNumber = '110';
106			}
107		} else {
108			$sErrorNumber = '103';
109		}
110	} else {
111		$sErrorNumber = '102' ;
112	}
113	# Create the "Error" node.
114	$cnv_errmsg = &ConvertToXmlAttribute($sErrorMsg);
115	print '<Error number="' . $sErrorNumber . '" />';
116}
117
118sub FileUpload
119{
120eval("use File::Copy;");
121
122	local($resourceType, $currentFolder) = @_;
123	$allowedExtensions = $allowedExtensions{$resourceType};
124
125	$sErrorNumber = '0' ;
126	$sFileName = '' ;
127	if($new_fname) {
128		# Map the virtual path to the local server path.
129		$sServerDir = &ServerMapFolder($resourceType,$currentFolder);
130
131		# Get the uploaded file name.
132		$sFileName = $new_fname;
133		$sFileName =~ s/\\|\/|\||\:|\?|\*|\"|<|>|[[:cntrl:]]/_/g;
134		$sFileName =~ s/\.(?![^.]*$)/_/g;
135
136		$ext = '';
137		if($sFileName =~ /([^\\\/]*)\.(.*)$/) {
138			$ext  = $2;
139		}
140
141		$allowedRegex = qr/^($allowedExtensions)$/i;
142		if (!($ext =~ $allowedRegex)) {
143			SendUploadResults('202', '', '', '');
144		}
145
146		$sOriginalFileName = $sFileName;
147
148		$iCounter = 0;
149		while(1) {
150			$sFilePath = $sServerDir . $sFileName;
151			if(-e $sFilePath) {
152				$iCounter++ ;
153				($path,$BaseName,$ext) = &RemoveExtension($sOriginalFileName);
154				$sFileName = $BaseName . '(' . $iCounter . ').' . $ext;
155				$sErrorNumber = '201';
156			} else {
157				copy("$img_dir/$new_fname","$sFilePath");
158				if (defined $CHMOD_ON_UPLOAD) {
159					if ($CHMOD_ON_UPLOAD) {
160						umask(000);
161						chmod($CHMOD_ON_UPLOAD,$sFilePath);
162					}
163				}
164				else {
165					umask(000);
166					chmod(0777,$sFilePath);
167				}
168				unlink("$img_dir/$new_fname");
169				last;
170			}
171		}
172	} else {
173		$sErrorNumber = '202' ;
174	}
175	$sFileName	=~ s/"/\\"/g;
176
177	SendUploadResults($sErrorNumber, $GLOBALS{'UserFilesPath'}.$resourceType.$currentFolder.$sFileName, $sFileName, '');
178}
179
180sub SendUploadResults
181{
182
183	local($sErrorNumber, $sFileUrl, $sFileName, $customMsg) = @_;
184
185	# Minified version of the document.domain automatic fix script (#1919).
186	# The original script can be found at _dev/domain_fix_template.js
187	# Note: in Perl replace \ with \\ and $ with \$
188	print <<EOF;
189Content-type: text/html
190
191<script type="text/javascript">
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;}}})();
193
194EOF
195	print 'window.parent.OnUploadCompleted(' . $sErrorNumber . ',"' . JS_cnv($sFileUrl) . '","' . JS_cnv($sFileName) . '","' . JS_cnv($customMsg) . '") ;';
196	print '</script>';
197	exit ;
198}
199
2001;