1[//lasso
2/*
3 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
4 * Copyright (C) 2003-2007 Frederico Caldeira Knabben
5 *
6 * == BEGIN LICENSE ==
7 *
8 * Licensed under the terms of any of the following licenses at your
9 * choice:
10 *
11 *  - GNU General Public License Version 2 or later (the "GPL")
12 *    http://www.gnu.org/licenses/gpl.html
13 *
14 *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
15 *    http://www.gnu.org/licenses/lgpl.html
16 *
17 *  - Mozilla Public License Version 1.1 or later (the "MPL")
18 *    http://www.mozilla.org/MPL/MPL-1.1.html
19 *
20 * == END LICENSE ==
21 *
22 * This is the "File Uploader" for Lasso.
23 */
24
25    /*.....................................................................
26    Include global configuration. See config.lasso for details.
27    */
28	include('config.lasso');
29
30
31    /*.....................................................................
32    Convert query string parameters to variables and initialize output.
33    */
34	var(
35		'Type'			=	action_param('Type'),
36		'CurrentFolder'	=	action_param('CurrentFolder'),
37		'ServerPath'	=	action_param('ServerPath'),
38		'NewFile'		=	null,
39		'NewFileName'	=	string,
40		'OrigFilePath'	=	string,
41		'NewFilePath'	=	string,
42		'errorNumber'	=	0,
43		'customMsg'		=	''
44	);
45
46	$Type == '' ? $Type = 'File';
47
48
49    /*.....................................................................
50    Calculate the path to the current folder.
51    */
52	$ServerPath == '' ? $ServerPath = $config->find('UserFilesPath');
53
54	var('currentFolderURL' = $ServerPath
55		+ $config->find('Subdirectories')->find(action_param('Type'))
56		+ action_param('CurrentFolder')
57	);
58
59
60	/*.....................................................................
61	Custom tag sets the HTML response.
62	*/
63
64	define_tag(
65		'sendresults',
66		-namespace='fck_',
67		-priority='replace',
68		-required='errorNumber',
69		-type='integer',
70		-optional='fileUrl',
71		-type='string',
72		-optional='fileName',
73		-type='string',
74		-optional='customMsg',
75		-type='string',
76		-description='Sets the HTML response for the FCKEditor Quick Upload feature.'
77	);
78		$__html_reply__ = '\
79<script type="text/javascript">
80	window.parent.OnUploadCompleted(' + #errorNumber + ',"'
81		+ string_replace(#fileUrl, -find='"', -replace='\\"') + '","'
82		+ string_replace(#fileName, -find='"', -replace='\\"') + '","'
83		+ string_replace(#customMsg, -find='"', -replace='\\"') + '");
84</script>
85		';
86	/define_tag;
87
88
89	if($config->find('Enabled'));
90		/*.................................................................
91		Process an uploaded file.
92		*/
93		inline($connection);
94			/*.............................................................
95			Was a file actually uploaded?
96			*/
97			file_uploads->size ? $NewFile = file_uploads->get(1) | $errorNumber = 202;
98
99			if($errorNumber == 0);
100				/*.........................................................
101				Split the file's extension from the filename in order
102				to follow the API's naming convention for duplicate
103				files. (Test.txt, Test(1).txt, Test(2).txt, etc.)
104				*/
105				$NewFileName = $NewFile->find('OrigName');
106				$OrigFilePath = $currentFolderURL + $NewFileName;
107				$NewFilePath = $OrigFilePath;
108				local('fileExtension') = '.' + $NewFile->find('OrigExtension');
109				local('shortFileName') = $NewFileName->removetrailing(#fileExtension)&;
110
111
112				/*.........................................................
113				Make sure the file extension is allowed.
114				*/
115
116				if($config->find('DeniedExtensions')->find($Type) >> $NewFile->find('OrigExtension'));
117					$errorNumber = 202;
118				else;
119					/*.....................................................
120					Rename the target path until it is unique.
121					*/
122					while(file_exists($NewFilePath));
123						$NewFileName = #shortFileName + '(' + loop_count + ')' + #fileExtension;
124						$NewFilePath = $currentFolderURL + $NewFileName;
125					/while;
126
127
128					/*.....................................................
129					Copy the uploaded file to its final location.
130					*/
131					file_copy($NewFile->find('path'), $NewFilePath);
132
133
134					/*.....................................................
135					Set the error code for the response.
136					*/
137					select(file_currenterror( -errorcode));
138						case(0);
139							$OrigFilePath != $NewFilePath ? $errorNumber = 201;
140						case;
141							$errorNumber = 202;
142					/select;
143				/if;
144			/if;
145		/inline;
146	else;
147		$errorNumber = 1;
148		$customMsg = 'This file uploader is disabled. Please check the "editor/filemanager/upload/lasso/config.lasso" file.';
149	/if;
150
151	fck_sendresults(
152		-errorNumber=$errorNumber,
153		-fileUrl=$NewFilePath,
154		-fileName=$NewFileName,
155		-customMsg=$customMsg
156	);
157]
158