summaryrefslogtreecommitdiff
path: root/tests/examplefiles/exampleScript.cfc
blob: 002acbcdc026ed95b5ac69f3cc1a811a22a3d3de (plain)
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
<cfscript>
/**
********************************************************************************
ContentBox - A Modular Content Platform
Copyright 2012 by Luis Majano and Ortus Solutions, Corp
www.gocontentbox.org | www.luismajano.com | www.ortussolutions.com
********************************************************************************
Apache License, Version 2.0

Copyright Since [2012] [Luis Majano and Ortus Solutions,Corp]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
********************************************************************************
* A generic content service for content objects
*/
component extends="coldbox.system.orm.hibernate.VirtualEntityService" singleton{

	// DI
	property name="settingService"			inject="id:settingService@cb";
	property name="cacheBox"				inject="cachebox";
	property name="log"						inject="logbox:logger:{this}";
	property name="customFieldService" 	 	inject="customFieldService@cb";
	property name="categoryService" 	 	inject="categoryService@cb";
	property name="commentService" 	 		inject="commentService@cb";
	property name="contentVersionService"	inject="contentVersionService@cb";
	property name="authorService"			inject="authorService@cb";
	property name="populator"				inject="wirebox:populator";
	property name="systemUtil"				inject="SystemUtil@cb";
	
	/*
	* Constructor
	* @entityName.hint The content entity name to bind this service to.
	*/
	ContentService function init(entityName="cbContent"){
		// init it
		super.init(entityName=arguments.entityName, useQueryCaching=true);

		// Test scope coloring in pygments
		this.colorTestVar = "Just for testing pygments!";
		cookie.colorTestVar = "";
		client.colorTestVar = ""
		session.colorTestVar = "";
		application.colorTestVar = "";

		return this;
	}

	/**
	* Clear all content caches
	* @async.hint Run it asynchronously or not, defaults to false
	*/
	function clearAllCaches(boolean async=false){
		var settings = settingService.getAllSettings(asStruct=true);
		// Get appropriate cache provider
		var cache = cacheBox.getCache( settings.cb_content_cacheName );
		cache.clearByKeySnippet(keySnippet="cb-content",async=arguments.async);
		return this;
	}

	/**
	* Clear all page wrapper caches
	* @async.hint Run it asynchronously or not, defaults to false
	*/
	function clearAllPageWrapperCaches(boolean async=false){
		var settings = settingService.getAllSettings(asStruct=true);
		// Get appropriate cache provider
		var cache = cacheBox.getCache( settings.cb_content_cacheName );
		cache.clearByKeySnippet(keySnippet="cb-content-pagewrapper",async=arguments.async);
		return this;
	}

	/**
	* Clear all page wrapper caches
	* @slug.hint The slug partial to clean on
	* @async.hint Run it asynchronously or not, defaults to false
	*/
	function clearPageWrapperCaches(required any slug, boolean async=false){
		var settings = settingService.getAllSettings(asStruct=true);
		// Get appropriate cache provider
		var cache = cacheBox.getCache( settings.cb_content_cacheName );
		cache.clearByKeySnippet(keySnippet="cb-content-pagewrapper-#arguments.slug#",async=arguments.async);
		return this;
	}

	/**
	* Clear a page wrapper cache
	* @slug.hint The slug to clean
	* @async.hint Run it asynchronously or not, defaults to false
	*/
	function clearPageWrapper(required any slug, boolean async=false){
		var settings = settingService.getAllSettings(asStruct=true);
		// Get appropriate cache provider
		var cache = cacheBox.getCache( settings.cb_content_cacheName );
		cache.clear("cb-content-pagewrapper-#arguments.slug#/");
		return this;
	}

	/**
	* Searches published content with cool paramters, remember published content only
	* @searchTerm.hint The search term to search
	* @max.hint The maximum number of records to paginate
	* @offset.hint The offset in the pagination
	* @asQuery.hint Return as query or array of objects, defaults to array of objects
	* @sortOrder.hint The sorting of the search results, defaults to publishedDate DESC
	* @isPublished.hint Search for published, non-published or both content objects [true, false, 'all']
	* @searchActiveContent.hint Search only content titles or both title and active content. Defaults to both.
	*/
	function searchContent(
		any searchTerm="", 
		numeric max=0, 
		numeric offset=0, 
		boolean asQuery=false, 
		any sortOrder="publishedDate DESC", 
		any isPublished=true, 
		boolean searchActiveContent=true){

		var results = {};
		var c = newCriteria();

		// only published content
		if( isBoolean( arguments.isPublished ) ){
			// Published bit
			c.isEq( "isPublished", javaCast( "Boolean", arguments.isPublished ) );
			// Published eq true evaluate other params
			if( arguments.isPublished ){
				c.isLt("publishedDate", now() )
				.$or( c.restrictions.isNull("expireDate"), c.restrictions.isGT("expireDate", now() ) )
				.isEq("passwordProtection","");
			}
		}

		// Search Criteria
		if( len( arguments.searchTerm ) ){
			// like disjunctions
			c.createAlias("activeContent","ac");
			// Do we search title and active content or just title?
			if( arguments.searchActiveContent ){
				c.$or( c.restrictions.like("title","%#arguments.searchTerm#%"),
				  	  c.restrictions.like("ac.content", "%#arguments.searchTerm#%") );
			}
			else{
				c.like( "title", "%#arguments.searchTerm#%" ); 
			}
		}

		// run criteria query and projections count
		results.count = c.count( "contentID" );
		results.content = c.resultTransformer( c.DISTINCT_ROOT_ENTITY )
							.list(offset=arguments.offset, max=arguments.max, sortOrder=arguments.sortOrder, asQuery=arguments.asQuery);
	
		return results;
	}

/********************************************* PRIVATE *********************************************/
	

	/**
	* Update the content hits
	* @contentID.hint The content id to update
	*/
	private function syncUpdateHits(required contentID){
		var q = new Query(sql="UPDATE cb_content SET hits = hits + 1 WHERE contentID = #arguments.contentID#").execute();
		return this;
	}
	
	
	private function closureTest(){
		methodCall(
			param1,
			function( arg1, required arg2 ){
				var settings = settingService.getAllSettings(asStruct=true);
				// Get appropriate cache provider
				var cache = cacheBox.getCache( settings.cb_content_cacheName );
				cache.clear("cb-content-pagewrapper-#arguments.slug#/");
				return this;
			},
			param1
		);
	}
	
	private function StructliteralTest(){
		return {
			foo = bar,
			brad = 'Wood',
			func = function( arg1, required arg2 ){
				var settings = settingService.getAllSettings(asStruct=true);
				// Get appropriate cache provider
				var cache = cacheBox.getCache( settings.cb_content_cacheName );
				cache.clear("cb-content-pagewrapper-#arguments.slug#/");
				return this;
			},
			array = [
				1,
				2,
				3,
				4,
				5,
				'test',
				'testing',
				'testerton',
				{
					foo = true,
					brad = false,
					wood = null
				}
			],
			last = "final"
		};
	}
	
	private function arrayliteralTest(){
		return [
			1,
			2,
			3,
			4,
			5,
			'test',
			'testing',
			'testerton',
			{
				foo = true,
				brad = false,
				wood = null
			},
			'testy-von-testavich'
		];
	}
	
}
</cfscript>