1
|
[//lasso
|
2
|
/*
|
3
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
4
|
* Copyright (C) 2003-2009 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' = (Encode_HTML: action_param('Type')),
|
36
|
'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
|
+ $CurrentFolder
|
57
|
);
|
58
|
|
59
|
$currentFolderURL = string_replace($currentFolderURL, -find='//', -replace='/');
|
60
|
|
61
|
/*.....................................................................
|
62
|
Custom tag sets the HTML response.
|
63
|
*/
|
64
|
|
65
|
define_tag(
|
66
|
'sendresults',
|
67
|
-namespace='fck_',
|
68
|
-priority='replace',
|
69
|
-required='errorNumber',
|
70
|
-type='integer',
|
71
|
-optional='fileUrl',
|
72
|
-type='string',
|
73
|
-optional='fileName',
|
74
|
-type='string',
|
75
|
-optional='customMsg',
|
76
|
-type='string',
|
77
|
-description='Sets the HTML response for the FCKEditor Quick Upload feature.'
|
78
|
);
|
79
|
|
80
|
$__html_reply__ = '<script type="text/javascript">';
|
81
|
|
82
|
// Minified version of the document.domain automatic fix script (#1919).
|
83
|
// The original script can be found at _dev/domain_fix_template.js
|
84
|
// Note: in Lasso replace \ with \\
|
85
|
$__html_reply__ = $__html_reply__ + "(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;}}})();";
|
86
|
|
87
|
$__html_reply__ = $__html_reply__ + '\
|
88
|
window.parent.OnUploadCompleted(' + #errorNumber + ',"'
|
89
|
+ string_replace((Encode_HTML: #fileUrl), -find='"', -replace='\\"') + '","'
|
90
|
+ string_replace((Encode_HTML: #fileUrl->split('/')->last), -find='"', -replace='\\"') + '","'
|
91
|
+ string_replace((Encode_HTML: #customMsg), -find='"', -replace='\\"') + '");
|
92
|
</script>
|
93
|
';
|
94
|
/define_tag;
|
95
|
|
96
|
if($CurrentFolder->(Find: '..') || (String_FindRegExp: $CurrentFolder, -Find='(/\\.)|(//)|[\\\\:\\*\\?\\""\\<\\>\\|]|\\000|[\u007F]|[\u0001-\u001F]'));
|
97
|
$errorNumber = 102;
|
98
|
/if;
|
99
|
|
100
|
if($config->find('Enabled'));
|
101
|
/*.................................................................
|
102
|
Process an uploaded file.
|
103
|
*/
|
104
|
inline($connection);
|
105
|
/*.............................................................
|
106
|
Was a file actually uploaded?
|
107
|
*/
|
108
|
if($errorNumber != '102');
|
109
|
file_uploads->size ? $NewFile = file_uploads->get(1) | $errorNumber = 202;
|
110
|
/if;
|
111
|
|
112
|
if($errorNumber == 0);
|
113
|
/*.........................................................
|
114
|
Split the file's extension from the filename in order
|
115
|
to follow the API's naming convention for duplicate
|
116
|
files. (Test.txt, Test(1).txt, Test(2).txt, etc.)
|
117
|
*/
|
118
|
$NewFileName = $NewFile->find('OrigName');
|
119
|
$NewFileName = (String_ReplaceRegExp: $NewFileName, -find='\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|\\000|[\u007F]|[\u0001-\u001F]', -replace='_');
|
120
|
$NewFileName = (String_ReplaceRegExp: $NewFileName, -find='\\.(?![^.]*$)', -replace='_');
|
121
|
$OrigFilePath = $currentFolderURL + $NewFileName;
|
122
|
$NewFilePath = $OrigFilePath;
|
123
|
local('fileExtension') = '.' + $NewFile->find('OrigExtension');
|
124
|
local('shortFileName') = $NewFileName->removetrailing(#fileExtension)&;
|
125
|
|
126
|
|
127
|
/*.........................................................
|
128
|
Make sure the file extension is allowed.
|
129
|
*/
|
130
|
|
131
|
local('allowedExt') = $config->find('AllowedExtensions')->find($Type);
|
132
|
local('deniedExt') = $config->find('DeniedExtensions')->find($Type);
|
133
|
if($allowedExt->Size > 0 && $allowedExt !>> $NewFile->find('OrigExtension'));
|
134
|
$errorNumber = 202;
|
135
|
else($deniedExt->Size > 0 && $deniedExt >> $NewFile->find('OrigExtension'));
|
136
|
$errorNumber = 202;
|
137
|
else;
|
138
|
/*.....................................................
|
139
|
Rename the target path until it is unique.
|
140
|
*/
|
141
|
while(file_exists($NewFilePath));
|
142
|
$NewFileName = #shortFileName + '(' + loop_count + ')' + #fileExtension;
|
143
|
$NewFilePath = $currentFolderURL + $NewFileName;
|
144
|
/while;
|
145
|
|
146
|
|
147
|
/*.....................................................
|
148
|
Copy the uploaded file to its final location.
|
149
|
*/
|
150
|
file_copy($NewFile->find('path'), $NewFilePath);
|
151
|
|
152
|
|
153
|
/*.....................................................
|
154
|
Set the error code for the response.
|
155
|
*/
|
156
|
select(file_currenterror( -errorcode));
|
157
|
case(0);
|
158
|
$OrigFilePath != $NewFilePath ? $errorNumber = 201;
|
159
|
case;
|
160
|
$errorNumber = 202;
|
161
|
/select;
|
162
|
/if;
|
163
|
/if;
|
164
|
if ($errorNumber != 0 && $errorNumber != 201);
|
165
|
$NewFilePath = "";
|
166
|
/if;
|
167
|
/inline;
|
168
|
else;
|
169
|
$errorNumber = 1;
|
170
|
$customMsg = 'This file uploader is disabled. Please check the "editor/filemanager/upload/lasso/config.lasso" file.';
|
171
|
/if;
|
172
|
|
173
|
fck_sendresults(
|
174
|
-errorNumber=$errorNumber,
|
175
|
-fileUrl=$NewFilePath,
|
176
|
-customMsg=$customMsg
|
177
|
);
|
178
|
]
|