GIF89a;
Direktori : /home/serb/public_html/fckeditor/editor/filemanager/browser/default/connectors/cfm/ |
Current File : /home/serb/public_html/fckeditor/editor/filemanager/browser/default/connectors/cfm/connector.cfm |
<cfsetting enablecfoutputonly="true" showdebugoutput="false"> <!--- * FCKeditor - The text editor for internet * Copyright (C) 2003-2004 Frederico Caldeira Knabben * * Licensed under the terms of the GNU Lesser General Public License: * http://www.opensource.org/licenses/lgpl-license.php * * For further information visit: * http://www.fckeditor.net/ * * File Name: connector.cfm * This is the File Browser Connector for ColdFusion. * * Notice: * FCKEditor needs an UTF-8 encoded XML packet. * Only CFMX can encode in UTF-8. If this browser doesn't work in CF 4.0/4.5/5, * please send me a notice. We then can use an more object oriented approach (CFC) * to clean up this code :) * * Please declare the base path (e.g. /UserFiles/) as an Application or Server variable * Directory structure (with optional subdirectories built by the user). * The "Type" subdirectory is automatically submitted by FCKEditor: * /UserFiles/Image/ * /UserFiles/Flash/ * /UserFiles/File/ * /UserFiles/Media/ * * Version: 2.0 RC3 * Modified: 2004-12-07 12:01:46 * * File Authors: * Hendrik Kramer (hk@lwd.de) ---> <cfparam name="URL.Command" type="string"> <cfparam name="URL.Type" type="string"> <cfparam name="URL.CurrentFolder" type="string"> <!--- :: * Get base url path to the userfiles directory (may be set in Application.cfm or anywhere else) :: ---> <cfif isDefined('APPLICATION.userFilesPath')> <cflock scope="Application" type="readonly" timeout="3"> <cfset sUserFilesURL = APPLICATION.userFilesPath> </cflock> <cfelseif isDefined('SERVER.userFilesPath')> <cflock scope="SERVER" type="readonly" timeout="3"> <cfset sUserFilesURL = SERVER.userFilesPath> </cflock> <cfelse> <!--- :: then use default :: ---> <cfset sUserFilesURL = "/UserFiles/"> </cfif> <cfif not len( sUserFilesURL )> <cfthrow type="fckeditor.connector" message="You must supply a full path to the userFiles base URL in APPLICATION or SERVER Scope."> </cfif> <cfscript> /** * We must extract the physical server directory for the webroot of this project to append the base url path * e.g. * PATH=c:\inetpub\wwwroot\project1\fckeditor\editor\filemanager\browser\default\connectors\cfm\connector.cfm * URL =/fckeditor/editor/filemanager/browser/default/connectors/cfm/connector.cfm * ROOT=c:\inetpub\wwwroot\project1\ * * This may fail if you use an symbolic link inside your webroot */ sRootDir = replace( getBaseTemplatePath(), "\", "/", "ALL"); iLen = listLen( cgi.script_name, '/' ); for( i=iLen; i GTE 1; i=i-1 ) { iPos = listFindNoCase( sRootDir, listGetAt( cgi.script_name, i, '/' ), '/' ); if( iPos GT 0 ) sRootDir = listDeleteAt( sRootDir, iPos, '/' ); } // replace backslashes in URL with normal slashes sUserFilesURL = replace( sUserFilesURL, "\", "/", "ALL"); // Check the base folder syntax (must end with a slash). if( compare( right( sUserFilesURL, 1), "/" ) ) sUserFilesURL = sUserFilesURL & "/"; // Create the physical path to the media root directory sUserFilesPath = sRootDir & sUserFilesURL; sUserFilesPath = replace( sUserFilesPath, '//', '/', 'ALL' ); // Check the current folder syntax (must begin and start with a slash). if( compare( left( URL.CurrentFolder, 1), "/" ) ) URL.CurrentFolder = "/" & URL.CurrentFolder; if( compare( right( URL.CurrentFolder, 1), "/" ) ) URL.CurrentFolder = URL.CurrentFolder & "/"; /** * Prepare the XML Header and Footer */ sXMLHeader = '<?xml version="1.0" encoding="utf-8" ?><Connector command="#URL.Command#" resourceType="#URL.Type#">'; sXMLHeader = sXMLHeader & '<CurrentFolder path="#URL.CurrentFolder#" url="#sUserFilesURL##URL.Type##URL.CurrentFolder#" />'; sXMLFooter = '</Connector>'; sXMLContent = ''; </cfscript> <!--- :: Make sure that current base path exists as a directory :: ---> <cfif not directoryExists( sUserFilesPath & URL.Type & URL.CurrentFolder )> <cfdirectory action="create" directory="#sUserFilesPath##URL.Type##URL.CurrentFolder#" > </cfif> <!--- :: Switch command arguments :: ---> <cfswitch expression="#URL.Command#"> <cfcase value="FileUpload"> <cfset sFileName = ""> <cfset sFileExt = ""> <cftry> <!--- :: first upload the file with an unique filename :: ---> <cffile action="UPLOAD" fileField="NewFile" destination="#sUserFilesPath##URL.Type##URL.CurrentFolder#" nameConflict="MAKEUNIQUE" > <cfscript> sErrorNumber = 0; sFileName = CFFILE.ClientFileName; sFileExt = CFFILE.ServerFileExt; /** * Validate filename for html download. Only a-z, 0-9, _, - and . are allowed. */ if( reFind("[^A-Za-z0-9_\-\.]", sFileName) ) { sFilename = reReplace(sFilename, "[^A-Za-z0-9\-\.]", "_", "ALL"); sFilename = reReplace(sFilename, "_{2,}", "_", "ALL"); sFilename = reReplace(sFilename, "([^_]+)_+$", "\1", "ALL"); sFilename = reReplace(sFilename, "$_([^_]+)$", "\1", "ALL"); } // When the original filename already exists, add numbers (0), (1), (2), ... at the end of the filename. if( compare( CFFILE.ServerFileName, sFileName ) ) { iCounter = 0; sTmpFileName = sFileName; while( fileExists('#sUserFilesPath##URL.Type##URL.CurrentFolder##sFilename#.#sFileExt#') ) { iCounter=iCounter+1; sFileName = sTmpFileName & '(#iCounter#)'; } } </cfscript> <!--- :: Rename the uploaded file, if neccessary ---> <cfif compare( CFFILE.ServerFileName, sFileName )> <cfset sErrorNumber = "201"> <cffile action="RENAME" source="#sUserFilesPath##URL.Type##URL.CurrentFolder##CFFILE.ServerFileName#.#CFFILE.ServerFileExt#" destination="#sUserFilesPath##URL.Type##URL.CurrentFolder##sFileName#.#sFileExt#" mode="644" attributes="normal" > </cfif> <cfcatch type="Any"> <cfset sErrorNumber = "202"> </cfcatch> </cftry> <cfif sErrorNumber eq 201> <!--- :: file was changed (201), submit the new filename :: ---> <cfoutput> <script type="text/javascript"> window.parent.frames['frmUpload'].OnUploadCompleted(#sErrorNumber#,'#replace( sFileName & "." & sFileExt, "'", "\'", "ALL")#'); </script> </cfoutput> <cfelse> <!--- :: file was uploaded succesfully(0) or an error occured(202). Submit only the error code. :: ---> <cfoutput> <script type="text/javascript"> window.parent.frames['frmUpload'].OnUploadCompleted(#sErrorNumber#); </script> </cfoutput> </cfif> <cfabort> </cfcase> <cfcase value="GetFolders"> <!--- :: Sort directories first, name ascending :: ---> <cfdirectory action="LIST" directory="#sUserFilesPath##URL.Type##URL.CurrentFolder#" name="qDir" sort="type,name" > <cfscript> iLen = qDir.recordCount; i=1; sFolders = ''; while( i LTE iLen ) { if( not compareNoCase( qDir.type[i], "FILE" )) break; if( not listFind(".,..", qDir.name[i]) ) sFolders = sFolders & '<Folder name="#qDir.name[i]#" />'; i=i+1; } sXMLContent = sXMLContent & '<Folders>' & sFolders & '</Folders>'; </cfscript> </cfcase> <cfcase value="GetFoldersAndFiles"> <!--- :: Sort directories first, name ascending :: ---> <cfdirectory action="LIST" directory="#sUserFilesPath##URL.Type##URL.CurrentFolder#" name="qDir" sort="type,name" > <cfscript> iLen = qDir.recordCount; i=1; sFolders = ''; sFiles = ''; while( i LTE iLen ) { if( not compareNoCase( qDir.type[i], "DIR" ) and not listFind(".,..", qDir.name[i]) ) { sFolders = sFolders & '<Folder name="#qDir.name[i]#" />'; } else if( not compareNoCase( qDir.type[i], "FILE" ) ) { iFileSize = int( qDir.size[i] / 1024 ); sFiles = sFiles & '<File name="#qDir.name[i]#" size="#IIf( iFileSize GT 0, DE( iFileSize ), 1)#" />'; } i=i+1; } sXMLContent = sXMLContent & '<Folders>' & sFolders & '</Folders>'; sXMLContent = sXMLContent & '<Files>' & sFiles & '</Files>'; </cfscript> </cfcase> <cfcase value="CreateFolder"> <cfparam name="URL.NewFolderName" default=""> <cfif not len( URL.NewFolderName ) or len( URL.NewFolderName ) GT 255> <cfset iErrorNumber = 102> <cfelseif directoryExists( sUserFilesPath & URL.Type & URL.CurrentFolder & URL.NewFolderName )> <cfset iErrorNumber = 101> <cfelseif reFind( "^\.\.", URL.NewFolderName )> <cfset iErrorNumber = 103> <cfelse> <cfset iErrorNumber = 0> <cftry> <cfdirectory action="CREATE" directory="#sUserFilesPath##URL.Type##URL.CurrentFolder##URL.NewFolderName#" > <cfcatch> <!--- :: * Not resolvable ERROR-Numbers in ColdFusion: * 102 : Invalid folder name. * 103 : You have no permissions to create the folder. :: ---> <cfset iErrorNumber = 110> </cfcatch> </cftry> </cfif> <cfset sXMLContent = sXMLContent & '<Error number="#iErrorNumber#" />'> </cfcase> <cfdefaultcase> <cfthrow type="fckeditor.connector" message="Illegal command: #URL.Command#"> </cfdefaultcase> </cfswitch> <!--- :: * output XML (no content caching) :: ---> <cfheader name="Pragma" value="no-cache"> <cfheader name="Cache-Control" value="no-cache, no-store, must-revalidate"> <cfcontent reset="true" type="text/xml; charset=UTF-8"> <cfoutput>#sXMLHeader##sXMLContent##sXMLFooter#</cfoutput> <cfsetting enablecfoutputonly="false">