-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathArrayCollection.cfc
More file actions
85 lines (77 loc) · 2.76 KB
/
ArrayCollection.cfc
File metadata and controls
85 lines (77 loc) · 2.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<cfcomponent accessors="true">
<!---
Author: Adrian J. Moreno
Site: http://iknowkungfoo.com
Twitter: @iknowkungfoo
Description: A custom JSON render object for ColdFusion queries.
Repo: https://github.com/iknowkungfoo/ArrayCollection
Blog post: http://cfml.us/Ce
--->
<cfproperty name="data" type="query" required="true" />
<cfproperty name="contentType" type="string" required="true" />
<cfproperty name="dataHandle" type="boolean" required="true" />
<cfproperty name="dataKeys" type="boolean" required="true" />
<cfproperty name="dataHandleName" type="string" required="true" />
<cfproperty name="dataKeyCase" type="string" required="false" default="lower" />
<cffunction name="init" access="public" output="false" returntype="ArrayCollection">
<cfset setContentType("json") />
<cfset setDataKeys(true) />
<cfset setDataKeyCase("lower") />
<cfset setDataHandle(true) />
<cfset setDataHandleName("data") />
<cfreturn this />
</cffunction>
<cffunction name="$renderdata" access="public" output="false" returntype="string" hint="">
<cfset aData = [] />
<cfset stData = {} />
<cfif getDataKeys()>
<cfset aData = queryToArrayOfStructs() />
<cfelse>
<cfset aData = queryToArrayOfArrays() />
</cfif>
<cfif getDataHandle()>
<cfset stData[getDataHandleName()] = aData />
<cfreturn serializeJSON(stData) />
<cfelse>
<cfreturn serializeJSON(aData) />
</cfif>
</cffunction>
<cffunction name="queryToArrayOfStructs" access="private" output="false" returntype="array" hint="convert a query to an array of structs">
<cfset var q = getData() />
<cfset var columnList = getColumnList() />
<cfset var results = [] />
<cfset var temp = {} />
<cfset var col = "" />
<cfloop query="q">
<cfset temp = {} />
<cfloop list="#columnList#" index="col">
<cfset temp[col] = q[col][q.currentrow] />
</cfloop>
<cfset arrayAppend( results, temp ) />
</cfloop>
<cfreturn results />
</cffunction>
<cffunction name="queryToArrayOfArrays" access="private" output="false" returntype="array" hint="convert a query to an array of arrays">
<cfset var q = getData() />
<cfset var columnList = getColumnList() />
<cfset var results = [] />
<cfset var temp = [] />
<cfset var col = "" />
<cfloop query="q">
<cfset temp = [] />
<cfloop list="#columnList#" index="col">
<cfset arrayAppend( temp, q[col][q.currentrow] ) />
</cfloop>
<cfset arrayAppend( results, temp ) />
</cfloop>
<cfreturn results />
</cffunction>
<cffunction name="getColumnList" access="private" output="false" returntype="string">
<cfset var columns = listSort( getData().columnlist, "textnocase" ) />
<cfif getDataKeyCase() IS "lower">
<cfreturn lcase( columns ) />
<cfelse>
<cfreturn ucase( columns ) />
</cfif>
</cffunction>
</cfcomponent>