Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PRESIDECMS-885 : Added filter functionalities for form builder submis… #450

Merged
merged 2 commits into from Apr 12, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -1168,6 +1168,8 @@ component extends="testbox.system.BaseSpec"{
variables.mockValidationEngine = CreateEmptyMock( "preside.system.services.validation.ValidationEngine" );
variables.mockFormBuilderValidationService = CreateEmptyMock( "preside.system.services.formbuilder.FormBuilderValidationService" );
variables.mockRecaptchaService = CreateEmptyMock( "preside.system.services.formbuilder.RecaptchaService" );
variables.mockPresideObjectService = CreateEmptyMock( "preside.system.services.presideObjects.presideObjectService" );
variables.mockRulesEngineFilterService = CreateEmptyMock( "preside.system.services.rulesEngine.rulesEngineFilterService" );

var service = CreateMock( object=new preside.system.services.formbuilder.FormBuilderService(
itemTypesService = mockItemTypesService
Expand All @@ -1178,6 +1180,8 @@ component extends="testbox.system.BaseSpec"{
, validationEngine = mockValidationEngine
, spreadsheetLib = mockSpreadsheetLib
, recaptchaService = mockRecaptchaService
, presideObjectService = mockPresideObjectService
, rulesEngineFilterService = mockRulesEngineFilterService
) );

service.$( "$getPresideObject" ).$args( "formbuilder_form" ).$results( mockFormDao );
Expand Down
14 changes: 8 additions & 6 deletions system/handlers/admin/FormBuilder.cfc
Expand Up @@ -532,7 +532,8 @@ component extends="preside.system.base.AdminHandler" {
}

public void function listSubmissionsForAjaxDataTable( event, rc, prc ) {
var formId = ( rc.formId ?: "" );
var formId = ( rc.formId ?: "" );
var savedFilterExpIdLists = ( structKeyExists( rc, 'sSavedFilterExpressions' ) && Len( Trim( rc.sSavedFilterExpressions ) ) ) ? rc.sSavedFilterExpressions : "";

if ( !Len( Trim( formId ) ) ) {
event.adminNotFound();
Expand All @@ -544,11 +545,12 @@ component extends="preside.system.base.AdminHandler" {
var gridFields = [ "submitted_by", "datecreated", "form_instance", "submitted_data" ];
var dtHelper = getMyPlugin( "JQueryDatatablesHelpers" );
var results = formbuilderService.getSubmissionsForGridListing(
formId = formId
, startRow = dtHelper.getStartRow()
, maxRows = dtHelper.getMaxRows()
, orderBy = dtHelper.getSortOrder()
, searchQuery = dtHelper.getSearchQuery()
formId = formId
, startRow = dtHelper.getStartRow()
, maxRows = dtHelper.getMaxRows()
, orderBy = dtHelper.getSortOrder()
, searchQuery = dtHelper.getSearchQuery()
, savedFilterExpIdLists = savedFilterExpIdLists
);
var records = Duplicate( results.records );
var viewSubmissionTitle = translateResource( "formbuilder:view.submission.modal.title" );
Expand Down
44 changes: 40 additions & 4 deletions system/services/formbuilder/FormBuilderService.cfc
Expand Up @@ -17,6 +17,8 @@ component {
* @validationEngine.inject validationEngine
* @recaptchaService.inject recaptchaService
* @spreadsheetLib.inject spreadsheetLib
* @presideObjectService.inject presideObjectService
* @rulesEngineFilterService.inject rulesEngineFilterService
*
*/
public any function init(
Expand All @@ -28,6 +30,8 @@ component {
, required any validationEngine
, required any recaptchaService
, required any spreadsheetLib
, required any presideObjectService
, required any rulesEngineFilterService
) {
_setItemTypesService( arguments.itemTypesService );
_setActionsService( arguments.actionsService );
Expand All @@ -37,6 +41,8 @@ component {
_setValidationEngine( arguments.validationEngine );
_setRecaptchaService( arguments.recaptchaService );
_setSpreadsheetLib( arguments.spreadsheetLib );
_setPresideObjectService( arguments.presideObjectService );
_setRulesEngineFilterService( arguments.rulesEngineFilterService );

return this;
}
Expand Down Expand Up @@ -733,10 +739,11 @@ component {
*/
public struct function getSubmissionsForGridListing(
required string formId
, numeric startRow = 1
, numeric maxRows = 10
, string orderBy = ""
, string searchQuery = ""
, numeric startRow = 1
, numeric maxRows = 10
, string orderBy = ""
, string searchQuery = ""
, string savedFilterExpIdLists = ""
) {
var submissionsDao = $getPresideObject( "formbuilder_formsubmission" );
var result = { totalRecords=0, records="" };
Expand Down Expand Up @@ -771,6 +778,21 @@ component {
});
}

if ( Len( Trim( arguments.savedFilterExpIdLists ?: "" ) ) ) {
var savedFilters = _getPresideObjectService().selectData(
objectName = "rules_engine_condition"
, selectFields = [ "expressions" ]
, filter = { id=ListToArray( arguments.savedFilterExpIdLists ?: "" ) }
);

for( var filter in savedFilters ) {
extraFilters.append( _getRulesEngineFilterService().prepareFilter(
objectName = 'formbuilder_formsubmission'
, expressionArray = DeSerializeJson( filter.expressions )
) );
}
}

result.records = submissionsDao.selectData(
filter = { form = arguments.formId }
, extraFilters = extraFilters
Expand Down Expand Up @@ -1071,4 +1093,18 @@ component {
private void function _setSpreadsheetLib( required any spreadsheetLib ) {
_spreadsheetLib = arguments.spreadsheetLib;
}

private any function _getPresideObjectService() {
return _presideObjectService;
}
private void function _setPresideObjectService( required any presideObjectService ) {
_presideObjectService = arguments.presideObjectService;
}

private any function _getRulesEngineFilterService() {
return _rulesEngineFilterService;
}
private void function _setRulesEngineFilterService( required any rulesEngineFilterService ) {
_rulesEngineFilterService = arguments.rulesEngineFilterService;
}
}