source: sandbox/filemanager/tp/fckeditor/editor/filemanager/connectors/cfm/cf_commands.cfm @ 1575

Revision 1575, 8.2 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<cfsetting enablecfoutputonly="Yes">
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 file include the functions that handle the Command requests
23 * in the ColdFusion Connector (MX 6.0 and above).
24--->
25
26<cffunction name="FileUpload" returntype="void" output="true">
27        <cfargument name="resourceType" type="string" required="yes" default="">
28        <cfargument name="currentFolder" type="string" required="yes" default="">
29        <cfargument name="sCommand" type="string" required="yes" default="">
30
31        <cfset var sFileName = "">
32        <cfset var sFilePart = "">
33        <cfset var sFileExt = "">
34        <cfset var sFileUrl = "">
35        <cfset var sTempDir = "">
36        <cfset var sTempFilePath = "">
37        <cfset var errorNumber = 0>
38        <cfset var customMsg = "">
39        <cfset var counter = 0>
40        <cfset var destination = "">
41
42        <cftry>
43                <cfif isDefined( "REQUEST.Config.TempDirectory" )>
44                        <cfset sTempDir = REQUEST.Config.TempDirectory>
45                <cfelse>
46                        <cfset sTempDir = GetTempDirectory()>
47                </cfif>
48                <cfif NOT DirectoryExists (sTempDir)>
49                        <cfthrow message="Invalid temporary directory: #sTempDir#">
50                </cfif>
51
52                <cffile action="UPLOAD" filefield="NewFile" destination="#sTempDir#" nameconflict="makeunique" mode="0755" />
53                <cfset sTempFilePath = CFFILE.ServerDirectory & REQUEST.fs & CFFILE.ServerFile>
54
55                <!--- Map the virtual path to the local server path. --->
56                <cfset sServerDir = ServerMapFolder( ARGUMENTS.resourceType, ARGUMENTS.currentFolder, ARGUMENTS.sCommand) >
57                <!--- Get the uploaded file name. --->
58                <cfset sFileName = SanitizeFileName( CFFILE.ClientFile ) >
59                <cfset sOriginalFileName = sFileName >
60
61                <cfif isDefined( "REQUEST.Config.SecureImageUploads" ) and REQUEST.Config.SecureImageUploads>
62                        <cfif not IsImageValid( sTempFilePath, CFFILE.ClientFileExt )>
63                                <cftry>
64                                <cffile action="delete" file="#sTempFilePath#">
65                                <cfcatch type="any">
66                                </cfcatch>
67                                </cftry>
68                                <cfthrow errorcode="202" type="fckeditor">
69                        </cfif>
70                </cfif>
71
72                <cfif isDefined( "REQUEST.Config.HtmlExtensions" ) and not listFindNoCase( REQUEST.Config.HtmlExtensions, CFFILE.ClientFileExt )>
73                        <cfif DetectHtml( sTempFilePath )>
74                                <cftry>
75                                <cffile action="delete" file="#sTempFilePath#">
76                                <cfcatch type="any">
77                                </cfcatch>
78                                </cftry>
79                                <cfthrow errorcode="202" type="fckeditor">
80                        </cfif>
81                </cfif>
82
83                <cfif not IsAllowedExt( CFFILE.ClientFileExt, ARGUMENTS.resourceType )>
84                        <cftry>
85                        <cffile action="delete" file="#sTempFilePath#">
86                        <cfcatch type="any">
87                        </cfcatch>
88                        </cftry>
89                        <cfthrow errorcode="202" type="fckeditor">
90                </cfif>
91
92                <!--- When the original filename already exists, add numbers (0), (1), (2), ... at the end of the filename. --->
93                <cfscript>
94                        sFileExt = GetExtension( sFileName ) ;
95                        sFilePart = RemoveExtension( sFileName );
96                        while( fileExists( sServerDir & sFileName ) )
97                        {
98                                counter = counter + 1;
99                                sFileName = sFilePart & '(#counter#).' & CFFILE.ClientFileExt;
100                                errorNumber = 201;
101                        }
102                </cfscript>
103
104                <cfset destination = sServerDir & sFileName>
105
106                <cflock name="#destination#" timeout="30" type="Exclusive">
107                <cftry>
108                        <cffile action="move" source="#sTempFilePath#" destination="#destination#" mode="755">
109                        <!--- omit CF 6.1 error during moving uploaded file, just copy that file instead of moving --->
110                        <cfcatch type="any">
111                                <cftry>
112                                        <cffile action="copy" source="#sTempFilePath#" destination="#destination#" mode="755">
113                                        <cfcatch type="any">
114                                                <cfset errorNumber = 102>
115                                        </cfcatch>
116                                </cftry>
117                                <cftry>
118                                        <cffile action="delete" file="#sTempFilePath#">
119                                        <cfcatch type="any">
120                                        </cfcatch>
121                                </cftry>
122                        </cfcatch>
123                </cftry>
124                </cflock>
125
126                <cfset sFileUrl = CombinePaths( GetResourceTypePath( ARGUMENTS.resourceType, sCommand ) , ARGUMENTS.currentFolder ) >
127                <cfset sFileUrl = CombinePaths( sFileUrl , sFileName ) >
128
129                <cfcatch type="fckeditor">
130                        <cfset errorNumber = CFCATCH.ErrorCode>
131                </cfcatch>
132
133                <cfcatch type="any">
134                        <cfset errorNumber = "1">
135                        <cfset customMsg = CFCATCH.Message >
136                </cfcatch>
137
138        </cftry>
139
140        <cfset SendUploadResults( errorNumber, sFileUrl, sFileName, customMsg ) >
141</cffunction>
142
143<cffunction name="GetFolders" returntype="void" output="true">
144        <cfargument name="resourceType" type="String" required="true">
145        <cfargument name="currentFolder" type="String" required="true">
146
147        <cfset var i = 1>
148        <cfset var folders = "">
149        <!--- Map the virtual path to the local server path --->
150        <cfset var sServerDir = ServerMapFolder( ARGUMENTS.resourceType, ARGUMENTS.currentFolder, "GetFolders" ) >
151
152        <!--- Sort directories first, name ascending --->
153        <cfdirectory action="list" directory="#sServerDir#" name="qDir" sort="type,name">
154        <cfscript>
155                while( i lte qDir.recordCount )
156                {
157                        if( compareNoCase( qDir.type[i], "FILE" ) and not listFind( ".,..", qDir.name[i] ) )
158                        {
159                                folders = folders & '<Folder name="#HTMLEditFormat( qDir.name[i] )#" />' ;
160                        }
161                        i = i + 1;
162                }
163        </cfscript>
164        <cfoutput><Folders>#folders#</Folders></cfoutput>
165</cffunction>
166
167<cffunction name="GetFoldersAndfiles" returntype="void" output="true">
168        <cfargument name="resourceType" type="String" required="true">
169        <cfargument name="currentFolder" type="String" required="true">
170
171        <cfset var i = 1>
172        <cfset var folders = "">
173        <cfset var files = "">
174        <!--- Map the virtual path to the local server path --->
175        <cfset var sServerDir = ServerMapFolder( ARGUMENTS.resourceType, ARGUMENTS.currentFolder, "GetFolders" ) >
176
177        <!--- Sort directories first, name ascending --->
178        <cfdirectory action="list" directory="#sServerDir#" name="qDir" sort="type,name">
179        <cfscript>
180                while( i lte qDir.recordCount )
181                {
182                        if( not compareNoCase( qDir.type[i], "DIR" ) and not listFind( ".,..", qDir.name[i] ) )
183                        {
184                                folders = folders & '<Folder name="#HTMLEditFormat(qDir.name[i])#" />' ;
185                        }
186                        else if( not compareNoCase( qDir.type[i], "FILE" ) )
187                        {
188                                fileSizeKB = round(qDir.size[i] / 1024) ;
189                                files = files & '<File name="#HTMLEditFormat(qDir.name[i])#" size="#IIf( fileSizeKB GT 0, DE( fileSizeKB ), 1)#" />' ;
190                        }
191                        i = i + 1 ;
192                }
193        </cfscript>
194        <cfoutput><Folders>#folders#</Folders></cfoutput>
195        <cfoutput><Files>#files#</Files></cfoutput>
196</cffunction>
197
198<cffunction name="CreateFolder" returntype="void" output="true">
199        <cfargument name="resourceType" required="true" type="string">
200        <cfargument name="currentFolder" required="true" type="string">
201
202        <cfset var sNewFolderName = url.newFolderName >
203        <cfset var sServerDir = "" >
204        <cfset var errorNumber = 0>
205        <cfset var sErrorMsg = "">
206        <cfset var currentFolderPath = ServerMapFolder( ARGUMENTS.resourceType, ARGUMENTS.currentFolder, 'CreateFolder' )>
207
208        <cfparam name="url.newFolderName" default="">
209
210        <cfscript>
211                sNewFolderName = SanitizeFolderName( sNewFolderName ) ;
212        </cfscript>
213
214        <cfif not len( sNewFolderName ) or len( sNewFolderName ) gt 255>
215                <cfset errorNumber = 102>
216        <cfelseif directoryExists( currentFolderPath & sNewFolderName )>
217                <cfset errorNumber = 101>
218        <cfelseif find( "..", sNewFolderName )>
219                <cfset errorNumber = 103>
220        <cfelse>
221                <cfset errorNumber = 0>
222
223                <!--- Map the virtual path to the local server path of the current folder. --->
224                <cfset sServerDir = currentFolderPath & sNewFolderName >
225
226                <cftry>
227                        <cfdirectory action="create" directory="#currentFolderPath##sNewFolderName#" mode="755">
228                        <cfcatch type="any">
229                        <!---
230                                un-resolvable error numbers in ColdFusion:
231                                * 102 : Invalid folder name.
232                                * 103 : You have no permissions to create the folder.
233                        --->
234                        <cfset errorNumber = 110>
235                        </cfcatch>
236                </cftry>
237        </cfif>
238
239        <cfoutput><Error number="#errorNumber#" /></cfoutput>
240</cffunction>
Note: See TracBrowser for help on using the repository browser.