source: sandbox/filemanager/tp/fckeditor/editor/filemanager/connectors/perl/commands.pl @ 1575

Revision 1575, 5.6 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#####
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;
Note: See TracBrowser for help on using the repository browser.