Concrete Virtual Services

Last updated
Was this helpful?

Last updated
Was this helpful?
Was this helpful?
component extends="cborm.models.VirtualEntityService" singleton{
// DI
property name="settingService" inject="id:settingService@cb";
property name="CBHelper" inject="id:CBHelper@cb";
property name="log" inject="logbox:logger:{this}";
/**
* Constructor
*/
CommentService function init(){
super.init( entityName="cbComment", useQueryCaching="true");
return this;
}
/**
* Get the total number of approved comments in the system
*/
numeric function getApprovedCommentCount(){
return countWhere( { "isApproved" = true } );
}
/**
* Get the total number of unapproved comments in the system
*/
numeric function getUnApprovedCommentCount(){
return countWhere( { "isApproved" = false } );
}
/**
* Comment listing for UI of approved comments, returns struct of results=[comments,count]
* @contentID.hint The content ID to filter on
* @contentType.hint The content type discriminator to filter on
* @max.hint The maximum number of records to return, 0 means all
* @offset.hint The offset in the paging, 0 means 0
* @sortOrder.hint Sort the comments asc or desc, by default it is desc
*/
function findApprovedComments(
contentID,
contentType,
max=0,
offset=0,
sortOrder="desc"
){
var results = {};
var c = newCriteria();
// only approved comments
c.isTrue("isApproved");
// By Content?
if( structKeyExists( arguments,"contentID" ) AND len( arguments.contentID ) ){
c.eq( "relatedContent.contentID", idCast( arguments.contentID ) );
}
// By Content Type Discriminator: class is a special hibernate deal
if( structKeyExists( arguments,"contentType" ) AND len( arguments.contentType ) ){
c.createCriteria("relatedContent")
.isEq( "class", arguments.contentType );
}
// run criteria query and projections count
results.count = c.count();
results.comments = c.list(
offset = arguments.offset,
max = arguments.max,
sortOrder = "createdDate #arguments.sortOrder#",
asQuery = false
);
return results;
}
}