Sorcerer's IsleCode QueryParam Scanner / files

 1<cfcomponent output="false">
 2
 3
 4	<cffunction name="init" returntype="any" output="false" access="public">
 5		<cfargument name="ConfigDirectory" type="String"/>
 6
 7		<cfset This.ConfigDirectory = Arguments.ConfigDirectory/>
 8
 9		<cfreturn This/>
10	</cffunction>
11
12
13	<cffunction name="read" returntype="any" output="false" access="public">
14		<cfargument name="ConfigId" type="String"/>
15		<cfargument name="Format"   type="String" default="default" />
16		<cfset var Setting = QueryNew("id,label,type,options,value,hint")/>
17		<cfset var Sections = -1/>
18		<cfset var SectionList = -1/>
19		<cfset var CurSection = -1/>
20		<cfset var CurSetting = -1/>
21		<cfset var X = -1/>
22		<cfset var Result = -1/>
23		<cfset var RootConfigFile = This.ConfigDirectory&'/../config.ini' />
24		<cfset var ThisConfigFile = lcase( REreplace( Arguments.ConfigId , '\W+' , '' , 'all' ) ) />
25		<cfset ThisConfigFile = This.ConfigDirectory & '/#Arguments.ConfigId#.ini'/>
26
27		<cfif FileExists( ThisConfigFile )>
28
29			<cfset Sections = getProfileSections( RootConfigFile )/>
30			<cfset SectionList = getProfileString( RootConfigFile ,'Config' , 'keys' )/>
31
32			<cfloop index="CurSection" list="#SectionList#">
33				<cfset X = QueryAddRow(Setting)/>
34				<cfset Setting['Id'][X] = CurSection />
35				<cfloop index="CurSetting" list="#Sections[CurSection]#">
36					<cfset Setting[CurSetting][X] = getProfileString( RootConfigFile , CurSection , CurSetting )/>
37				</cfloop>
38			</cfloop>
39
40			<cfloop query="Setting">
41				<cfset Setting['Value'][CurrentRow] = getProfileString( ThisConfigFile , 'Settings' , Id )/>
42			</cfloop>
43
44
45			<cfswitch expression="#Arguments.Format#">
46				<cfcase value="Struct">
47					<cfset Result = StructNew()/>
48					<cfloop query="Setting">
49						<cfset Result[Id] = Value />
50					</cfloop>
51					<cfreturn Result/>
52				</cfcase>
53				<cfdefaultcase>
54					<cfreturn Setting/>
55				</cfdefaultcase>
56			</cfswitch>
57		<cfelse>
58			<cfthrow
59				message="Invalid Value '#Arguments.ConfigId#' for Argument ConfigId."
60				detail="Cannot find configuration file at '#ConfigFile#'."
61				type="qpscanner.Settings.Read.InvalidArgument.ConfigId"
62			/>
63		</cfif>
64	</cffunction>
65
66
67
68	<cffunction name="findHomeDirectory" returntype="String" output="false">
69		<cfset var Result = ""/>
70		<cfset var CurDir = -1/>
71		<cfset var DirList = "{home-directory},/,."/>
72
73		<cfloop index="CurDir" list="#DirList#">
74			<cfif DirectoryExists( expandPath(CurDir) )>
75				<cfset Result = expandPath( CurDir )/>
76				<cfbreak/>
77			</cfif>
78		</cfloop>
79
80		<cfreturn Result.replaceAll('[\\/]+','/').replaceAll('(<!(:))/$','')  />
81	</cffunction>
82
83
84</cfcomponent>