1
<cfsetting enablecfoutputonly="Yes">
3
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
4
* Copyright (C) 2003-2010 Frederico Caldeira Knabben
8
* Licensed under the terms of any of the following licenses at your
11
* - GNU General Public License Version 2 or later (the "GPL")
12
* http://www.gnu.org/licenses/gpl.html
14
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
15
* http://www.gnu.org/licenses/lgpl.html
17
* - Mozilla Public License Version 1.1 or later (the "MPL")
18
* http://www.mozilla.org/MPL/MPL-1.1.html
22
* This file include the functions that handle the Command requests
23
* in the ColdFusion Connector (MX 6.0 and above).
26
<cffunction name="FCKeditorFileUpload" 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="">
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 = "">
43
<cfif isDefined( "REQUEST.Config.TempDirectory" )>
44
<cfset sTempDir = REQUEST.Config.TempDirectory>
46
<cfset sTempDir = GetTempDirectory()>
48
<cfif NOT DirectoryExists (sTempDir)>
49
<cfthrow message="Invalid temporary directory: #sTempDir#">
52
<cffile action="UPLOAD" filefield="NewFile" destination="#sTempDir#" nameconflict="makeunique" mode="0755" />
53
<cfset sTempFilePath = CFFILE.ServerDirectory & REQUEST.fs & CFFILE.ServerFile>
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 >
61
<cfif isDefined( "REQUEST.Config.SecureImageUploads" ) and REQUEST.Config.SecureImageUploads>
62
<cfif not IsImageValid( sTempFilePath, CFFILE.ClientFileExt )>
64
<cffile action="delete" file="#sTempFilePath#">
68
<cfthrow errorcode="202" type="fckeditor">
72
<cfif isDefined( "REQUEST.Config.HtmlExtensions" ) and not listFindNoCase( REQUEST.Config.HtmlExtensions, CFFILE.ClientFileExt )>
73
<cfif DetectHtml( sTempFilePath )>
75
<cffile action="delete" file="#sTempFilePath#">
79
<cfthrow errorcode="202" type="fckeditor">
83
<cfif not IsAllowedExt( CFFILE.ClientFileExt, ARGUMENTS.resourceType )>
85
<cffile action="delete" file="#sTempFilePath#">
89
<cfthrow errorcode="202" type="fckeditor">
92
<!--- When the original filename already exists, add numbers (0), (1), (2), ... at the end of the filename. --->
94
sFileExt = GetExtension( sFileName ) ;
95
sFilePart = RemoveExtension( sFileName );
96
while( fileExists( sServerDir & sFileName ) )
98
counter = counter + 1;
99
sFileName = sFilePart & '(#counter#).' & CFFILE.ClientFileExt;
104
<cfset destination = sServerDir & sFileName>
106
<cflock name="#destination#" timeout="30" type="Exclusive">
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 --->
112
<cffile action="copy" source="#sTempFilePath#" destination="#destination#" mode="755">
114
<cfset errorNumber = 102>
118
<cffile action="delete" file="#sTempFilePath#">
126
<cfset sFileUrl = CombinePaths( GetResourceTypePath( ARGUMENTS.resourceType, sCommand ) , ARGUMENTS.currentFolder ) >
127
<cfset sFileUrl = CombinePaths( sFileUrl , sFileName ) >
129
<cfcatch type="fckeditor">
130
<cfset errorNumber = CFCATCH.ErrorCode>
134
<cfset errorNumber = "1">
135
<cfset customMsg = CFCATCH.Message >
140
<cfset SendUploadResults( errorNumber, sFileUrl, sFileName, customMsg ) >
143
<cffunction name="GetFolders" returntype="void" output="true">
144
<cfargument name="resourceType" type="String" required="true">
145
<cfargument name="currentFolder" type="String" required="true">
148
<cfset var folders = "">
149
<!--- Map the virtual path to the local server path --->
150
<cfset var sServerDir = ServerMapFolder( ARGUMENTS.resourceType, ARGUMENTS.currentFolder, "GetFolders" ) >
152
<!--- Sort directories first, name ascending --->
153
<cfdirectory action="list" directory="#sServerDir#" name="qDir" sort="type,name">
155
while( i lte qDir.recordCount )
157
if( compareNoCase( qDir.type[i], "FILE" ) and not listFind( ".,..", qDir.name[i] ) )
159
folders = folders & '<Folder name="#HTMLEditFormat( qDir.name[i] )#" />' ;
164
<cfoutput><Folders>#folders#</Folders></cfoutput>
167
<cffunction name="GetFoldersAndfiles" returntype="void" output="true">
168
<cfargument name="resourceType" type="String" required="true">
169
<cfargument name="currentFolder" type="String" required="true">
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" ) >
177
<!--- Sort directories first, name ascending --->
178
<cfdirectory action="list" directory="#sServerDir#" name="qDir" sort="type,name">
180
while( i lte qDir.recordCount )
182
if( not compareNoCase( qDir.type[i], "DIR" ) and not listFind( ".,..", qDir.name[i] ) )
184
folders = folders & '<Folder name="#HTMLEditFormat(qDir.name[i])#" />' ;
186
else if( not compareNoCase( qDir.type[i], "FILE" ) )
188
fileSizeKB = round(qDir.size[i] / 1024) ;
189
files = files & '<File name="#HTMLEditFormat(qDir.name[i])#" size="#IIf( fileSizeKB GT 0, DE( fileSizeKB ), 1)#" />' ;
194
<cfoutput><Folders>#folders#</Folders></cfoutput>
195
<cfoutput><Files>#files#</Files></cfoutput>
198
<cffunction name="CreateFolder" returntype="void" output="true">
199
<cfargument name="resourceType" required="true" type="string">
200
<cfargument name="currentFolder" required="true" type="string">
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' )>
208
<cfparam name="url.newFolderName" default="">
211
sNewFolderName = SanitizeFolderName( sNewFolderName ) ;
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>
221
<cfset errorNumber = 0>
223
<!--- Map the virtual path to the local server path of the current folder. --->
224
<cfset sServerDir = currentFolderPath & sNewFolderName >
227
<cfdirectory action="create" directory="#currentFolderPath##sNewFolderName#" mode="755">
230
un-resolvable error numbers in ColdFusion:
231
* 102 : Invalid folder name.
232
* 103 : You have no permissions to create the folder.
234
<cfset errorNumber = 110>
239
<cfoutput><Error number="#errorNumber#" /></cfoutput>