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>
|
---|