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