source: sandbox/filemanager/tp/fckeditor/editor/filemanager/connectors/lasso/connector.lasso @ 1575

Revision 1575, 11.4 KB checked in by amuller, 14 years ago (diff)

Ticket #597 - Implentação, melhorias do modulo gerenciador de arquivos

  • Property svn:executable set to *
Line 
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 Manager Connector for Lasso.
23 */
24
25    /*.....................................................................
26    Include global configuration. See config.lasso for details.
27    */
28        include('config.lasso');
29
30
31    /*.....................................................................
32    Translate current date/time to GMT for custom header.
33    */
34        var('headerDate') = date_localtogmt(date)->format('%a, %d %b %Y %T GMT');
35
36
37    /*.....................................................................
38    Convert query string parameters to variables and initialize output.
39    */
40        var(
41                'Command'               =       (Encode_HTML: action_param('Command')),
42                'Type'                  =       (Encode_HTML: action_param('Type')),
43                'CurrentFolder' =       action_param('CurrentFolder'),
44                'ServerPath'    =       action_param('ServerPath'),
45                'NewFolderName' =       action_param('NewFolderName'),
46                'NewFile'               =       null,
47                'NewFileName'   =       string,
48                'OrigFilePath'  =       string,
49                'NewFilePath'   =       string,
50                'commandData'   =       string,
51                'folders'               =       '\t<Folders>\n',
52                'files'                 =       '\t<Files>\n',
53                'errorNumber'   =       integer,
54                'responseType'  =       'xml',
55                'uploadResult'  =       '0'
56        );
57
58        /*.....................................................................
59        Custom tag sets the HTML response.
60        */
61
62        define_tag(
63                'htmlreply',
64                -namespace='fck_',
65                -priority='replace',
66                -required='uploadResult',
67                -optional='NewFilePath',
68                -type='string',
69                -description='Sets the HTML response for the FCKEditor File Upload feature.'
70        );
71                $__html_reply__ = '\
72<script type="text/javascript">
73(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;}}})();
74';
75                        if($uploadResult == '0' || $uploadResult == '201');
76                        $__html_reply__ = $__html_reply__ + '\
77        window.parent.OnUploadCompleted(' + $uploadResult + ',"' + $NewFilePath + '","' + $NewFilePath->split('/')->last + '");
78</script>
79                        ';
80                        else;
81                        $__html_reply__ = $__html_reply__ + '\
82        window.parent.OnUploadCompleted(' + $uploadResult + ',"","");
83</script>
84                        ';
85                        /if;
86        /define_tag;
87
88
89    /*.....................................................................
90    Calculate the path to the current folder.
91    */
92        $ServerPath == '' ? $ServerPath = $config->find('UserFilesPath');
93
94        var('currentFolderURL' = $ServerPath
95                + $config->find('Subdirectories')->find(action_param('Type'))
96                + $CurrentFolder
97        );
98
99        $currentFolderURL = string_replace($currentFolderURL, -find='//', -replace='/');
100
101        if (!$config->find('Subdirectories')->find(action_param('Type')));
102                if($Command == 'FileUpload');
103                        $responseType = 'html';
104                        $uploadResult = '1';
105                        fck_htmlreply(
106                                -uploadResult=$uploadResult
107                        );
108                else;
109                        $errorNumber = 1;
110                        $commandData += '<Error number="' + $errorNumber + '" text="Invalid type specified" />\n';
111                /if;
112        else if($CurrentFolder->(Find: '..') || (String_FindRegExp: $CurrentFolder, -Find='(/\\.)|(//)|[\\\\:\\*\\?\\""\\<\\>\\|]|\\000|[\u007F]|[\u0001-\u001F]'));
113                if($Command == 'FileUpload');
114                        $responseType = 'html';
115                        $uploadResult = '102';
116                        fck_htmlreply(
117                                -uploadResult=$uploadResult
118                        );
119                else;
120                        $errorNumber = 102;
121                        $commandData += '<Error number="' + $errorNumber + '" />\n';
122                /if;
123        else;
124
125    /*.....................................................................
126    Build the appropriate response per the 'Command' parameter. Wrap the
127    entire process in an inline for file tag permissions.
128    */
129                if($config->find('Enabled'));
130                inline($connection);
131                select($Command);
132            /*.............................................................
133            List all subdirectories in the 'Current Folder' directory.
134            */
135                        case('GetFolders');
136                                $commandData += '\t<Folders>\n';
137
138                                iterate(file_listdirectory($currentFolderURL), local('this'));
139                                        #this->endswith('/') ? $commandData += '\t\t<Folder name="' + #this->removetrailing('/')& + '" />\n';
140                                /iterate;
141
142                                $commandData += '\t</Folders>\n';
143
144
145            /*.............................................................
146            List both files and folders in the 'Current Folder' directory.
147            Include the file sizes in kilobytes.
148            */
149                        case('GetFoldersAndFiles');
150                                iterate(file_listdirectory($currentFolderURL), local('this'));
151                                        if(#this->endswith('/'));
152                                                $folders += '\t\t<Folder name="' + #this->removetrailing('/')& + '" />\n';
153                                        else;
154                                                local('size') = file_getsize($currentFolderURL + #this);
155                                                if($size>0);
156                                                        $size = $size/1024;
157                                                        if ($size==0);
158                                                                $size = 1;
159                                                        /if;
160                                                /if;
161                                                $files += '\t\t<File name="' + #this + '" size="' + #size + '" />\n';
162                                        /if;
163                                /iterate;
164
165                                $folders += '\t</Folders>\n';
166                                $files += '\t</Files>\n';
167
168                                $commandData += $folders + $files;
169
170
171            /*.............................................................
172            Create a directory 'NewFolderName' within the 'Current Folder.'
173            */
174                        case('CreateFolder');
175                                $NewFolderName = (String_ReplaceRegExp: $NewFolderName, -find='\\.|\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|\\000|[\u007F]|[\u0001-\u001F]', -replace='_');
176                                var('newFolder' = $currentFolderURL + $NewFolderName + '/');
177                                file_create($newFolder);
178
179
180                /*.........................................................
181                Map Lasso's file error codes to FCKEditor's error codes.
182                */
183                                select(file_currenterror( -errorcode));
184                                        case(0);
185                                                $errorNumber = 0;
186                                        case( -9983);
187                                                $errorNumber = 101;
188                                        case( -9976);
189                                                $errorNumber = 102;
190                                        case( -9977);
191                                                $errorNumber = 102;
192                                        case( -9961);
193                                                $errorNumber = 103;
194                                        case;
195                                                $errorNumber = 110;
196                                /select;
197
198                                $commandData += '<Error number="' + $errorNumber + '" />\n';
199
200
201            /*.............................................................
202            Process an uploaded file.
203            */
204                        case('FileUpload');
205                /*.........................................................
206                This is the only command that returns an HTML response.
207                */
208                                $responseType = 'html';
209
210
211                /*.........................................................
212                Was a file actually uploaded?
213                */
214                if(file_uploads->size);
215                        $NewFile = file_uploads->get(1);
216                else;
217                        $uploadResult = '202';
218                /if;
219
220                                if($uploadResult == '0');
221                    /*.....................................................
222                    Split the file's extension from the filename in order
223                    to follow the API's naming convention for duplicate
224                    files. (Test.txt, Test(1).txt, Test(2).txt, etc.)
225                    */
226                                        $NewFileName = $NewFile->find('OrigName');
227                                        $NewFileName = (String_ReplaceRegExp: $NewFileName, -find='\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|\\000|[\u007F]|[\u0001-\u001F]', -replace='_');
228                                        $NewFileName = (String_ReplaceRegExp: $NewFileName, -find='\\.(?![^.]*$)', -replace='_');
229                                        $OrigFilePath = $currentFolderURL + $NewFileName;
230                                        $NewFilePath = $OrigFilePath;
231                                        local('fileExtension') = '.' + $NewFile->find('OrigExtension');
232                                        #fileExtension = (String_ReplaceRegExp: #fileExtension, -find='\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|\\000|[\u007F]|[\u0001-\u001F]', -replace='_');
233                                        local('shortFileName') = $NewFileName->removetrailing(#fileExtension)&;
234
235
236                    /*.....................................................
237                    Make sure the file extension is allowed.
238                    */
239                                        local('allowedExt') = $config->find('AllowedExtensions')->find($Type);
240                                        local('deniedExt') = $config->find('DeniedExtensions')->find($Type);
241                                        if($allowedExt->Size > 0 && $allowedExt !>> $NewFile->find('OrigExtension'));
242                                                $uploadResult = '202';
243                                        else($deniedExt->Size > 0 && $deniedExt >> $NewFile->find('OrigExtension'));
244                                                $uploadResult = '202';
245                                        else;
246                        /*.................................................
247                        Rename the target path until it is unique.
248                        */
249                                                while(file_exists($NewFilePath));
250                                                        $NewFilePath = $currentFolderURL + #shortFileName + '(' + loop_count + ')' + #fileExtension;
251                                                /while;
252
253
254                        /*.................................................
255                        Copy the uploaded file to its final location.
256                        */
257                                                file_copy($NewFile->find('path'), $NewFilePath);
258
259
260                        /*.................................................
261                        Set the error code for the response. Note whether
262                        the file had to be renamed.
263                        */
264                                                select(file_currenterror( -errorcode));
265                                                        case(0);
266                                                                $OrigFilePath != $NewFilePath ? $uploadResult = 201;
267                                                        case;
268                                                                $uploadResult = file_currenterror( -errorcode);
269                                                /select;
270                                        /if;
271                                /if;
272                                fck_htmlreply(
273                                        -uploadResult=$uploadResult,
274                                        -NewFilePath=$NewFilePath
275                                );
276                        case;
277                                $errorNumber = 1;
278                                $commandData += '<Error number="' + $errorNumber + '" text="Command isn\'t allowed" />\n';
279                /select;
280                /inline;
281                else;
282                        $errorNumber = 1;
283                        $commandData += '<Error number="' + $errorNumber + '" text="This file uploader is disabled. Please check the editor/filemanager/upload/lasso/config.lasso file." />\n';
284                /if;
285        /if;
286
287    /*.....................................................................
288    Send a custom header for xml responses.
289    */
290        if($responseType == 'xml');
291                header;
292]
293HTTP/1.0 200 OK
294Date: [$headerDate]
295Server: Lasso Professional [lasso_version( -lassoversion)]
296Expires: Mon, 26 Jul 1997 05:00:00 GMT
297Last-Modified: [$headerDate]
298Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
299Pragma: no-cache
300Keep-Alive: timeout=15, max=98
301Connection: Keep-Alive
302Content-Type: text/xml; charset=utf-8
303[//lasso
304/header;
305
306                /*
307                        Set the content type encoding for Lasso.
308                */
309                content_type('text/xml; charset=utf-8');
310
311                /*
312                        Wrap the response as XML and output.
313                */
314                $__html_reply__ = '\
315<?xml version="1.0" encoding="utf-8" ?>';
316
317                if($errorNumber != '102');
318                        $__html_reply__ += '<Connector command="' + (Encode_HTML: $Command) + '" resourceType="' + (Encode_HTML: $Type) + '">';
319                else;
320                        $__html_reply__ += '<Connector>';
321                /if;
322
323                if($errorNumber != '102');
324                        $__html_reply__ += '<CurrentFolder path="' + (Encode_HTML: $CurrentFolder) + '" url="' + (Encode_HTML: $currentFolderURL) + '" />';
325                /if;
326
327                $__html_reply__ += $commandData + '
328</Connector>';
329        /if;
330]
Note: See TracBrowser for help on using the repository browser.