Sorcerer's IsleCode QueryParam Scanner / files

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