mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	allows for using both ColdFusion Lexers provided by pigments and allows for proper syntax highlighting of cfscript based CFCs Signed-off-by: Sean Coyne <sean@n42designs.com>
		
			
				
	
	
		
			239 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			239 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
/**
 | 
						|
********************************************************************************
 | 
						|
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'
 | 
						|
		];
 | 
						|
	}
 | 
						|
	
 | 
						|
} |