From 4d2d32fa78c34db9f22602bb24e8b7daefd339d9 Mon Sep 17 00:00:00 2001 From: CF Mitrah Date: Fri, 23 Mar 2018 17:08:42 +0530 Subject: [PATCH 1/9] Added the functionality to list & edit the versions of editable system configurations --- system/handlers/admin/SysConfig.cfc | 59 +++++++++++++++++-- .../SystemConfigurationService.cfc | 19 ++++-- .../presideObjects/PresideObjectService.cfc | 14 +++++ 3 files changed, 82 insertions(+), 10 deletions(-) diff --git a/system/handlers/admin/SysConfig.cfc b/system/handlers/admin/SysConfig.cfc index 8c7ed7c6bb..481e4c72d9 100644 --- a/system/handlers/admin/SysConfig.cfc +++ b/system/handlers/admin/SysConfig.cfc @@ -3,6 +3,7 @@ component extends="preside.system.base.AdminHandler" { property name="systemConfigurationService" inject="systemConfigurationService"; property name="siteService" inject="siteService"; property name="messageBox" inject="coldbox:plugin:messageBox"; + property name="presideObjectService" inject="presideObjectService"; // LIFECYCLE EVENTS @@ -33,8 +34,10 @@ component extends="preside.system.base.AdminHandler" { } public any function category( event, rc, prc ) { - var categoryId = Trim( rc.id ?: "" ); - var siteId = Trim( rc.site ?: "" ); + var categoryId = Trim( rc.id ?: "" ); + var siteId = Trim( rc.site ?: "" ); + var versionId = Val( rc.version ?: "" ); + var fromVersionTable = Val( versionId ) ? true : false try { prc.category = systemConfigurationService.getConfigCategory( id = categoryId ); @@ -46,14 +49,22 @@ component extends="preside.system.base.AdminHandler" { var isSiteConfig = prc.sites.recordCount > 1 && siteId.len(); if ( isSiteConfig ) { prc.savedData = systemConfigurationService.getCategorySettings( - category = categoryId - , includeDefaults = false - , siteId = siteId + category = categoryId + , includeDefaults = false + , siteId = siteId + , fromVersionTable = fromVersionTable + , maxVersionNumber = versionId + , maxRows = 2 + , orderBy = "dateCreated DESC" ); } else { prc.savedData = systemConfigurationService.getCategorySettings( category = categoryId , globalDefaultsOnly = true + , fromVersionTable = fromVersionTable + , maxVersionNumber = versionId + , maxRows = 2 + , orderBy = "dateCreated DESC" ); } @@ -149,6 +160,44 @@ component extends="preside.system.base.AdminHandler" { setNextEvent( url=event.buildAdminLink( linkTo="sysconfig.category", queryString="id=#categoryId#" ) ); } + public void function configHistory( event, rc, prc ) { + var categoryId = Trim( rc.id ?: "" ); + var siteId = Trim( rc.site ?: "" ); + + try { + prc.category = systemConfigurationService.getConfigCategory( id = categoryId ); + } catch( "SystemConfigurationService.category.notFound" e ) { + event.notFound(); + } + // prc.sites = siteService.listSites(); + } + + public void function getConfigHistoryForAjaxDataTables( event, rc, prc ) { + rc.id="recaptcha"; + rc.setting = "site_key,secret_key"; + + var nextVersionNumber = presideObjectService.getNextVersionNumber(); + var allFieldsData = presideObjectService.selectData( + objectName = "system_config", + filter = "category = :category AND setting IN ( :setting )", + filterParams = { "category"=rc.id, "setting"={ value=rc.setting, list="yes" } }, + fromVersionTable = true, + maxVersionNumber = nextVersionNumber + ); + var configIds = listRemoveDuplicates(valueList(allFieldsData.id)); + + runEvent( + event = "admin.DataManager._getRecordHistoryForAjaxDataTables" + , prePostExempt = true + , private = true + , eventArguments = { + object = "system_config" + , recordId = configIds + , actionsView = "admin/SysConfig/_historyActions" + } + ); + } + // VIEWLETS private string function categoryMenu( event, rc, prc, args ) { args.categories = systemConfigurationService.listConfigCategories(); diff --git a/system/services/configuration/SystemConfigurationService.cfc b/system/services/configuration/SystemConfigurationService.cfc index b012348bf0..96fa11d824 100644 --- a/system/services/configuration/SystemConfigurationService.cfc +++ b/system/services/configuration/SystemConfigurationService.cfc @@ -84,6 +84,9 @@ component displayName="System configuration service" { required string category , boolean includeDefaults = true , boolean globalDefaultsOnly = false + , boolean fromVersionTable = false + , numeric maxVersionNumber = 0 + , string orderBy = "" , string siteId = _getSiteService().getActiveSiteId() ) { _reloadCheck(); @@ -92,8 +95,11 @@ component displayName="System configuration service" { if ( !arguments.globalDefaultsOnly ) { var rawSiteResult = _getDao().selectData( - selectFields = [ "setting", "value" ] - , filter = { category = arguments.category, site=arguments.siteId } + selectFields = [ "setting", "value" ] + , filter = { category = arguments.category, site=arguments.siteId } + , fromVersionTable = arguments.fromVersionTable + , maxVersionNumber = arguments.maxVersionNumber + , orderBy = arguments.orderBy ); for( var record in rawSiteResult ){ @@ -104,9 +110,12 @@ component displayName="System configuration service" { if ( arguments.includeDefaults ) { var injectedStartsWith = "#arguments.category#."; var rawGlobalResult = _getDao().selectData( - selectFields = [ "setting", "value" ] - , filter = "category = :category and site is null" - , filterParams = { category = arguments.category } + selectFields = [ "setting", "value" ] + , filter = "category = :category and site is null" + , filterParams = { category = arguments.category } + , fromVersionTable = arguments.fromVersionTable + , maxVersionNumber = arguments.maxVersionNumber + , orderBy = arguments.orderBy ); for( var record in rawGlobalResult ){ diff --git a/system/services/presideObjects/PresideObjectService.cfc b/system/services/presideObjects/PresideObjectService.cfc index 0ef546bb71..7879185c9c 100644 --- a/system/services/presideObjects/PresideObjectService.cfc +++ b/system/services/presideObjects/PresideObjectService.cfc @@ -172,6 +172,7 @@ component displayName="Preside Object Service" { , boolean useCache = _getUseCacheDefault() , boolean fromVersionTable = false , numeric specificVersion = 0 + , numeric maxVersionNumber = 0 , boolean allowDraftVersions = $getRequestContext().showNonLiveContent() , string forceJoins = "" , array extraJoins = [] @@ -1249,6 +1250,10 @@ component displayName="Preside Object Service" { args.filterParams = { "#idField#" = arguments.id, _version_changed_fields = "%,#args.fieldName#,%" }; args.delete( "fieldName" ); args.delete( "id" ); + } else if ( listLen( arguments.id ) GT 1 ){ + args.filter = "#idField# IN ( :#idField# )"; + args.filterParams = { "#idField#" = { value = arguments.id, list="yes"} }; + args.delete( "id" ); } return selectData( argumentCollection = args ); @@ -2253,6 +2258,7 @@ component displayName="Preside Object Service" { , required array joins , required array selectFields , required numeric specificVersion + , required numeric maxVersionNumber , required boolean allowDraftVersions , required any filter , required array params @@ -2289,6 +2295,14 @@ component displayName="Preside Object Service" { params.append( { name="#arguments.objectName#___version_is_draft", value=false, type="cf_sql_bit" } ); } + } else if ( arguments.maxVersionNumber ) { + versionFilter = "#arguments.objectName#._version_number <= :#arguments.objectName#._max_version_number"; + params.append( { name="#arguments.objectName#___max_version_number", value=arguments.maxVersionNumber, type="cf_sql_int" } ); + + if ( !arguments.allowDraftVersions ) { + versionFilter &= " and ( #arguments.objectName#._version_is_draft is null or #arguments.objectName#._version_is_draft = :#arguments.objectName#._version_is_draft )"; + params.append( { name="#arguments.objectName#___version_is_draft", value=false, type="cf_sql_bit" } ); + } } else { var latestVersionField = arguments.allowDraftVersions ? "_version_is_latest_draft" : "_version_is_latest"; versionFilter = "#arguments.objectName#.#latestVersionField# = :#arguments.objectName#.#latestVersionField#"; From a670184653036d5fb369b005e6d56caf327af2ed Mon Sep 17 00:00:00 2001 From: CF Mitrah Date: Fri, 23 Mar 2018 17:11:49 +0530 Subject: [PATCH 2/9] Added the functionality to list & edit the versions of editable system configurations --- system/views/admin/sysconfig/configHistory.cfm | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 system/views/admin/sysconfig/configHistory.cfm diff --git a/system/views/admin/sysconfig/configHistory.cfm b/system/views/admin/sysconfig/configHistory.cfm new file mode 100644 index 0000000000..6883ef7aad --- /dev/null +++ b/system/views/admin/sysconfig/configHistory.cfm @@ -0,0 +1,15 @@ + + prc.pageIcon = "history"; + prc.pageTitle = "Config history"; + prc.pageSubTitle = "Config history"; + // prc.pageSubTitle = translateResource( uri="cms:sitetree.configHistory.subtitle", data=[ prc.page.title ] ); + + id = rc.id ?: ""; + + + + #renderView( view="/admin/datamanager/_objectVersionHistoryTable", args={ + objectName = "system_config" + , datasourceUrl = event.buildAdminLink( linkTo="ajaxProxy", queryString="action=SysConfig.getConfigHistoryForAjaxDataTables&id=#id#" ) + } )# + \ No newline at end of file From 33108c4d79e4d02ca53142d4656d9afcbe67a405 Mon Sep 17 00:00:00 2001 From: CF Mitrah Date: Fri, 23 Mar 2018 17:19:07 +0530 Subject: [PATCH 3/9] Added the functionality to list & edit the versions of editable system configurations --- system/views/admin/sysconfig/_historyActions.cfm | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 system/views/admin/sysconfig/_historyActions.cfm diff --git a/system/views/admin/sysconfig/_historyActions.cfm b/system/views/admin/sysconfig/_historyActions.cfm new file mode 100644 index 0000000000..cb2ce289a6 --- /dev/null +++ b/system/views/admin/sysconfig/_historyActions.cfm @@ -0,0 +1,9 @@ + + + +
+ + + +
+
\ No newline at end of file From 7a5533595fe369a51d7f392375f3c2ba6a9ba93d Mon Sep 17 00:00:00 2001 From: CF Mitrah Date: Wed, 28 Mar 2018 13:06:00 +0530 Subject: [PATCH 4/9] Made the functionality completed. --- system/handlers/admin/DataManager.cfc | 53 +++++++++++++++++++ system/handlers/admin/SysConfig.cfc | 6 +-- .../presideObjects/PresideObjectService.cfc | 2 +- .../views/admin/sysconfig/_historyActions.cfm | 2 +- system/views/admin/sysconfig/category.cfm | 11 ++++ system/views/admin/sysconfig/index.cfm | 5 ++ 6 files changed, 73 insertions(+), 6 deletions(-) diff --git a/system/handlers/admin/DataManager.cfc b/system/handlers/admin/DataManager.cfc index 67633e0033..b1fd741e87 100644 --- a/system/handlers/admin/DataManager.cfc +++ b/system/handlers/admin/DataManager.cfc @@ -1286,6 +1286,59 @@ + + + + + + + + var selectedVersion = Val( args.version ?: "" ); + var objectName = args.object ?: ""; + var id = args.id ?: ""; + var setting = structKeyList( event.getCollectionForForm( "system-config.#args.id#" ) ); + var maxVersion = presideObjectService.getNextVersionNumber(); + + args.versions = presideObjectService.selectData( + objectName = "system_config", + selectFields = ["system_config.id", "system_config.site", "system_config.category", "system_config.setting", "system_config.value", "system_config.datecreated", "system_config.datemodified", "system_config._version_is_draft", "system_config._version_has_drafts", "system_config._version_number"], + filter = "category = :category AND setting IN ( :setting )", + filterParams = { "category"=id, "setting"={ value=setting, list="yes" } }, + fromVersionTable = true, + maxVersionNumber = maxVersion, + orderBy = "system_config._version_number DESC" + ); + + args.latestVersion = queryExecute( + sql = "select top 1 _version_number as latestVersion from args.versions order by _version_number DESC" + , options = { dbtype="query" } + ).latestVersion[1]; + if(args.latestVersion EQ "") args.latestVersion = maxVersion; + + args.latestPublishedVersion = queryExecute( + sql = "select top 1 _version_number as latestVersion from args.versions where _version_is_draft = 0 order by _version_number DESC" + , options = { dbtype="query" } + ).latestVersion[1]; + if(args.latestPublishedVersion EQ "") args.latestPublishedVersion = maxVersion; + + if ( !selectedVersion ) { + selectedVersion = args.latestVersion; + } + args.isLatest = args.latestVersion == selectedVersion; + args.nextVersion = 0; + args.prevVersion = args.versions.recordCount < 2 ? 0 : args.versions._version_number[ args.versions.recordCount-1 ]; + + for( var i=1; i <= args.versions.recordCount; i++ ){ + if ( args.versions._version_number[i] == selectedVersion ) { + args.nextVersion = i > 1 ? args.versions._version_number[i-1] : 0; + args.prevVersion = i < args.versions.recordCount ? args.versions._version_number[i+1] : 0; + } + } + + return renderView( view="admin/datamanager/groupVersionNavigator", args=args ); + + + diff --git a/system/handlers/admin/SysConfig.cfc b/system/handlers/admin/SysConfig.cfc index 481e4c72d9..42a3094b21 100644 --- a/system/handlers/admin/SysConfig.cfc +++ b/system/handlers/admin/SysConfig.cfc @@ -169,18 +169,16 @@ component extends="preside.system.base.AdminHandler" { } catch( "SystemConfigurationService.category.notFound" e ) { event.notFound(); } - // prc.sites = siteService.listSites(); } public void function getConfigHistoryForAjaxDataTables( event, rc, prc ) { - rc.id="recaptcha"; - rc.setting = "site_key,secret_key"; + prc.setting = structKeyList( event.getCollectionForForm( "system-config.#rc.id#" ) ); var nextVersionNumber = presideObjectService.getNextVersionNumber(); var allFieldsData = presideObjectService.selectData( objectName = "system_config", filter = "category = :category AND setting IN ( :setting )", - filterParams = { "category"=rc.id, "setting"={ value=rc.setting, list="yes" } }, + filterParams = { "category"=rc.id, "setting"={ value=prc.setting, list="yes" } }, fromVersionTable = true, maxVersionNumber = nextVersionNumber ); diff --git a/system/services/presideObjects/PresideObjectService.cfc b/system/services/presideObjects/PresideObjectService.cfc index 7879185c9c..4de003bf45 100644 --- a/system/services/presideObjects/PresideObjectService.cfc +++ b/system/services/presideObjects/PresideObjectService.cfc @@ -1230,7 +1230,7 @@ component displayName="Preside Object Service" { * @fieldName.hint Optional name of one of the object's property which which to filter the history. Doing so will show only versions in which this field changed. * */ - public query function getRecordVersions( required string objectName, required string id, string fieldName ) autodoc=true { + public any function getRecordVersions( required string objectName, required string id, string fieldName ) autodoc=true { var args = {}; var idField = getIdField( arguments.objectName ); diff --git a/system/views/admin/sysconfig/_historyActions.cfm b/system/views/admin/sysconfig/_historyActions.cfm index cb2ce289a6..fbe1490839 100644 --- a/system/views/admin/sysconfig/_historyActions.cfm +++ b/system/views/admin/sysconfig/_historyActions.cfm @@ -2,7 +2,7 @@ diff --git a/system/views/admin/sysconfig/category.cfm b/system/views/admin/sysconfig/category.cfm index 8fa00af612..c659b63cb0 100644 --- a/system/views/admin/sysconfig/category.cfm +++ b/system/views/admin/sysconfig/category.cfm @@ -7,11 +7,22 @@ sites = prc.sites ?: QueryNew(''); categoryId = Trim( rc.id ?: "" ); site = Trim( rc.site ?: "" ); + version = Trim( rc.version ?: "" ); + canSaveDraft = false; isSiteConfig = sites.recordCount > 1 && site.len(); + #renderViewlet( event='admin.datamanager.groupVersionNavigator', args={ + object = "system_config" + , id = categoryId + , version = version + , isDraft = IsTrue( page._version_is_draft ?: "" ) + , baseUrl = event.buildAdminLink( linkTo="sysconfig.category", queryString="id=#categoryId#&version=" ) + , allVersionsUrl = event.buildAdminLink( linkTo="sysconfig.configHistory", queryString="id=#categoryId#" ) + , discardDraftsUrl = ( canSaveDraft ? event.buildAdminlink( linkTo="sysconfig.discardDraftsAction", queryString="id=#categoryId#" ) : "" ) + } )#
- #translateResource( "cms:sitetree.page.history.dropdown" )# + #translateResource( "cms:sysconfig.viewHistory.label" )#   From 7b9c864a830e9fddf2a13a74606e5e23f95323f5 Mon Sep 17 00:00:00 2001 From: CF Mitrah Date: Wed, 28 Mar 2018 16:02:41 +0530 Subject: [PATCH 6/9] Modified the testcases as per the changes of arguments in getCategorySettings function. --- .../SystemConfigurationServiceTest.cfc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/support/tests/integration/api/configuration/SystemConfigurationServiceTest.cfc b/support/tests/integration/api/configuration/SystemConfigurationServiceTest.cfc index 8e87f49c7c..08e7ed8ddc 100644 --- a/support/tests/integration/api/configuration/SystemConfigurationServiceTest.cfc +++ b/support/tests/integration/api/configuration/SystemConfigurationServiceTest.cfc @@ -190,11 +190,11 @@ component extends="tests.resources.HelperObjects.PresideBddTestCase"{ var configService = _getConfigSvc(); mockDao.$( "selectData" ) - .$args( selectFields=[ "setting", "value" ], filter={ category="mycategory", site=activeSite } ) + .$args( selectFields=[ "setting", "value" ], filter={ category="mycategory", site=activeSite }, fromVersionTable=false, maxVersionNumber=0, orderBy="" ) .$results( QueryNew( 'setting,value', 'varchar,varchar', [ [ "setting1", "value1" ], [ "setting2", "value2" ] ] ) ); mockDao.$( "selectData" ) - .$args( selectFields=[ "setting", "value" ], filter="category = :category and site is null", filterParams={ category="mycategory" } ) + .$args( selectFields=[ "setting", "value" ], filter="category = :category and site is null", filterParams={ category="mycategory" }, fromVersionTable=false, maxVersionNumber=0, orderBy="" ) .$results( QueryNew( 'setting,value', 'varchar,varchar', [ [ "setting1", "value1global" ], [ "setting2", "value2global" ], [ "setting3", "value3global" ] ] ) ); expect( configService.getCategorySettings( category="mycategory" ) ).toBe( { @@ -212,11 +212,11 @@ component extends="tests.resources.HelperObjects.PresideBddTestCase"{ } ); mockDao.$( "selectData" ) - .$args( selectFields=[ "setting", "value" ], filter={ category="mycategory", site=activeSite } ) + .$args( selectFields=[ "setting", "value" ], filter={ category="mycategory", site=activeSite }, fromVersionTable=false, maxVersionNumber=0, orderBy="" ) .$results( QueryNew( 'setting,value', 'varchar,varchar', [ [ "setting1", "value1" ], [ "setting3", "value3" ] ] ) ); mockDao.$( "selectData" ) - .$args( selectFields=[ "setting", "value" ], filter="category = :category and site is null", filterParams={ category="mycategory" } ) + .$args( selectFields=[ "setting", "value" ], filter="category = :category and site is null", filterParams={ category="mycategory" }, fromVersionTable=false, maxVersionNumber=0, orderBy="" ) .$results( QueryNew( 'setting,value', 'varchar,varchar', [ [ "setting1", "value1global" ], [ "setting2", "value2global" ], [ "setting3", "value3global" ] ] ) ); @@ -236,11 +236,11 @@ component extends="tests.resources.HelperObjects.PresideBddTestCase"{ } ); mockDao.$( "selectData" ) - .$args( selectFields=[ "setting", "value" ], filter={ category="mycategory", site=activeSite } ) + .$args( selectFields=[ "setting", "value" ], filter={ category="mycategory", site=activeSite }, fromVersionTable=false, maxVersionNumber=0, orderBy="" ) .$results( QueryNew( 'setting,value', 'varchar,varchar', [ [ "setting1", "value1" ], [ "setting3", "value3" ] ] ) ); mockDao.$( "selectData" ) - .$args( selectFields=[ "setting", "value" ], filter="category = :category and site is null", filterParams={ category="mycategory" } ) + .$args( selectFields=[ "setting", "value" ], filter="category = :category and site is null", filterParams={ category="mycategory" }, fromVersionTable=false, maxVersionNumber=0, orderBy="" ) .$results( QueryNew( 'setting,value', 'varchar,varchar', [ [ "setting1", "value1global" ], [ "setting2", "value2global" ], [ "setting3", "value3global" ] ] ) ); @@ -258,11 +258,11 @@ component extends="tests.resources.HelperObjects.PresideBddTestCase"{ } ); mockDao.$( "selectData" ) - .$args( selectFields=[ "setting", "value" ], filter={ category="mycategory", site=activeSite } ) + .$args( selectFields=[ "setting", "value" ], filter={ category="mycategory", site=activeSite }, fromVersionTable=false, maxVersionNumber=0, orderBy="" ) .$results( QueryNew( 'setting,value', 'varchar,varchar', [ [ "setting1", "value1" ], [ "setting3", "value3" ], [ "setting5", "value5" ] ] ) ); mockDao.$( "selectData" ) - .$args( selectFields=[ "setting", "value" ], filter="category = :category and site is null", filterParams={ category="mycategory" } ) + .$args( selectFields=[ "setting", "value" ], filter="category = :category and site is null", filterParams={ category="mycategory" }, fromVersionTable=false, maxVersionNumber=0, orderBy="" ) .$results( QueryNew( 'setting,value', 'varchar,varchar', [ [ "setting1", "value1global" ], [ "setting2", "value2global" ], [ "setting3", "value3global" ] ] ) ); From 056156c303e75a9be4c04975a427494d000ceae7 Mon Sep 17 00:00:00 2001 From: CF Mitrah Date: Thu, 19 Apr 2018 19:29:46 +0530 Subject: [PATCH 7/9] PRESIDECMS 1132 : Commit the missing file --- .../datamanager/groupVersionNavigator.cfm | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 system/views/admin/datamanager/groupVersionNavigator.cfm diff --git a/system/views/admin/datamanager/groupVersionNavigator.cfm b/system/views/admin/datamanager/groupVersionNavigator.cfm new file mode 100644 index 0000000000..e12d8e13c0 --- /dev/null +++ b/system/views/admin/datamanager/groupVersionNavigator.cfm @@ -0,0 +1,62 @@ + + param name="args.prevVersion" type="numeric"; + param name="args.nextVersion" type="numeric"; + param name="args.latestPublishedVersion" type="numeric"; + param name="args.object" type="string"; + param name="args.id" type="string"; + param name="args.version" type="string"; + param name="args.isDraft" type="boolean" default=false; + param name="args.isLatest" type="boolean"; + param name="args.versions" type="query"; + param name="args.baseUrl" type="string" default="#event.buildAdminLink( linkTo='datamanager.editRecord' , queryString='object=#args.object#&id=#args.id#&version=' )#"; + param name="args.allVersionsUrl" type="string" default="#event.buildAdminLink( linkTo='datamanager.recordHistory', queryString='object=#args.object#&id=#args.id#' )#"; + param name="args.discardDraftsUrl" type="string" default=""; +// writeDump(args);abort; + objectTitleSingular = translateResource( uri="preside-objects.#args.object#:title.singular", defaultValue="record" ); + + if ( args.isDraft ) { + alertClass = "warning"; + alertMessage = translateResource( uri="cms:version.navigator.#( args.isLatest ? 'latest.draft.version.message' : 'old.draft.version.message' )#", data=[ objectTitleSingular ] ); + } else { + isLatestPublished = args.version == args.latestPublishedVersion; + alertClass = args.isLatest || isLatestPublished ? "success" : "warning"; + + if ( !args.isLatest && isLatestPublished ) { + alertMessage = translateResource( uri="cms:version.navigator.current.published.version.message", data=[ objectTitleSingular ] ); + } else { + alertMessage = translateResource( uri="cms:version.navigator.#( args.isLatest ? 'current.version.message' : 'old.version.message' )#", data=[ objectTitleSingular ] ); + } + } + + + + +
+

+ #alertMessage# + + +

+ + #translateResource( "cms:discard.drafts.btn" )# +
+

+ +
+ + + + + + + + + + + + + +
+
+
+
\ No newline at end of file From dc5621673c44712fa9d1e8bbffdb14611f3dc49d Mon Sep 17 00:00:00 2001 From: CF Mitrah Date: Sat, 12 May 2018 11:49:42 +0530 Subject: [PATCH 8/9] Made some changes as per Dom's comments in github --- system/handlers/admin/DataManager.cfc | 47 -------------- system/handlers/admin/SysConfig.cfc | 47 ++++++++++++++ .../presideObjects/PresideObjectService.cfc | 2 +- system/views/admin/sysconfig/category.cfm | 2 +- .../admin/sysconfig/groupVersionNavigator.cfm | 62 +++++++++++++++++++ 5 files changed, 111 insertions(+), 49 deletions(-) create mode 100644 system/views/admin/sysconfig/groupVersionNavigator.cfm diff --git a/system/handlers/admin/DataManager.cfc b/system/handlers/admin/DataManager.cfc index ecc98b966f..c601d8cbc8 100644 --- a/system/handlers/admin/DataManager.cfc +++ b/system/handlers/admin/DataManager.cfc @@ -1035,53 +1035,6 @@ component extends="preside.system.base.AdminHandler" { return renderView( view="admin/datamanager/versionNavigator", args=args ); } - private string function groupVersionNavigator( event, rc, prc, args={} ) { - var selectedVersion = Val( args.version ?: "" ); - var objectName = args.object ?: ""; - var id = args.id ?: ""; - var setting = structKeyList( event.getCollectionForForm( "system-config.#args.id#" ) ); - var maxVersion = presideObjectService.getNextVersionNumber(); - - args.versions = presideObjectService.selectData( - objectName = "system_config", - selectFields = ["system_config.id", "system_config.site", "system_config.category", "system_config.setting", "system_config.value", "system_config.datecreated", "system_config.datemodified", "system_config._version_is_draft", "system_config._version_has_drafts", "system_config._version_number"], - filter = "category = :category AND setting IN ( :setting )", - filterParams = { "category"=id, "setting"={ value=setting, list="yes" } }, - fromVersionTable = true, - maxVersionNumber = maxVersion, - orderBy = "system_config._version_number DESC" - ); - - args.latestVersion = queryExecute( - sql = "select top 1 _version_number as latestVersion from args.versions order by _version_number DESC" - , options = { dbtype="query" } - ).latestVersion[1]; - if(args.latestVersion EQ "") args.latestVersion = maxVersion; - - args.latestPublishedVersion = queryExecute( - sql = "select top 1 _version_number as latestVersion from args.versions where _version_is_draft = 0 order by _version_number DESC" - , options = { dbtype="query" } - ).latestVersion[1]; - if(args.latestPublishedVersion EQ "") args.latestPublishedVersion = maxVersion; - - if ( !selectedVersion ) { - selectedVersion = args.latestVersion; - } - - args.isLatest = args.latestVersion == selectedVersion; - args.nextVersion = 0; - args.prevVersion = args.versions.recordCount < 2 ? 0 : args.versions._version_number[ args.versions.recordCount-1 ]; - - for( var i=1; i <= args.versions.recordCount; i++ ){ - if ( args.versions._version_number[i] == selectedVersion ) { - args.nextVersion = i > 1 ? args.versions._version_number[i-1] : 0; - args.prevVersion = i < args.versions.recordCount ? args.versions._version_number[i+1] : 0; - } - } - - return renderView( view="admin/datamanager/groupVersionNavigator", args=args ); - } - private string function translationVersionNavigator( event, rc, prc, args={} ) { var recordId = args.id ?: ""; var language = args.language ?: ""; diff --git a/system/handlers/admin/SysConfig.cfc b/system/handlers/admin/SysConfig.cfc index e60c252292..8045773c5d 100644 --- a/system/handlers/admin/SysConfig.cfc +++ b/system/handlers/admin/SysConfig.cfc @@ -203,4 +203,51 @@ component extends="preside.system.base.AdminHandler" { return renderView( view="admin/sysconfig/categoryMenu", args=args ); } + private string function groupVersionNavigator( event, rc, prc, args={} ) { + var selectedVersion = Val( args.version ?: "" ); + var objectName = args.object ?: ""; + var id = args.id ?: ""; + var setting = structKeyList( event.getCollectionForForm( "system-config.#args.id#" ) ); + var maxVersion = presideObjectService.getNextVersionNumber(); + + args.versions = presideObjectService.selectData( + objectName = "system_config", + selectFields = ["system_config.id", "system_config.site", "system_config.category", "system_config.setting", "system_config.value", "system_config.datecreated", "system_config.datemodified", "system_config._version_is_draft", "system_config._version_has_drafts", "system_config._version_number"], + filter = "category = :category AND setting IN ( :setting )", + filterParams = { "category"=id, "setting"={ value=setting, list="yes" } }, + fromVersionTable = true, + maxVersionNumber = maxVersion, + orderBy = "system_config._version_number DESC" + ); + + args.latestVersion = queryExecute( + sql = "select top 1 _version_number as latestVersion from args.versions order by _version_number DESC" + , options = { dbtype="query" } + ).latestVersion[1]; + if(args.latestVersion EQ "") args.latestVersion = maxVersion; + + args.latestPublishedVersion = queryExecute( + sql = "select top 1 _version_number as latestVersion from args.versions where _version_is_draft = 0 order by _version_number DESC" + , options = { dbtype="query" } + ).latestVersion[1]; + if(args.latestPublishedVersion EQ "") args.latestPublishedVersion = maxVersion; + + if ( !selectedVersion ) { + selectedVersion = args.latestVersion; + } + + args.isLatest = args.latestVersion == selectedVersion; + args.nextVersion = 0; + args.prevVersion = args.versions.recordCount < 2 ? 0 : args.versions._version_number[ args.versions.recordCount-1 ]; + + for( var i=1; i <= args.versions.recordCount; i++ ){ + if ( args.versions._version_number[i] == selectedVersion ) { + args.nextVersion = i > 1 ? args.versions._version_number[i-1] : 0; + args.prevVersion = i < args.versions.recordCount ? args.versions._version_number[i+1] : 0; + } + } + + return renderView( view="admin/datamanager/groupVersionNavigator", args=args ); + } + } \ No newline at end of file diff --git a/system/services/presideObjects/PresideObjectService.cfc b/system/services/presideObjects/PresideObjectService.cfc index e15b997f1b..d060e7c981 100644 --- a/system/services/presideObjects/PresideObjectService.cfc +++ b/system/services/presideObjects/PresideObjectService.cfc @@ -1261,7 +1261,7 @@ component displayName="Preside Object Service" { args.filterParams = { "#idField#" = arguments.id, _version_changed_fields = "%,#args.fieldName#,%" }; args.delete( "fieldName" ); args.delete( "id" ); - } else if ( listLen( arguments.id ) GT 1 ){ + } else if ( listLen( arguments.id ) > 1 ){ args.filter = "#idField# IN ( :#idField# )"; args.filterParams = { "#idField#" = { value = arguments.id, list="yes"} }; args.delete( "id" ); diff --git a/system/views/admin/sysconfig/category.cfm b/system/views/admin/sysconfig/category.cfm index dfb2e21bff..3ac27e1237 100644 --- a/system/views/admin/sysconfig/category.cfm +++ b/system/views/admin/sysconfig/category.cfm @@ -14,7 +14,7 @@ - #renderViewlet( event='admin.datamanager.groupVersionNavigator', args={ + #renderViewlet( event='admin.sysconfig.groupVersionNavigator', args={ object = "system_config" , id = categoryId , version = version diff --git a/system/views/admin/sysconfig/groupVersionNavigator.cfm b/system/views/admin/sysconfig/groupVersionNavigator.cfm new file mode 100644 index 0000000000..6aeaaf8837 --- /dev/null +++ b/system/views/admin/sysconfig/groupVersionNavigator.cfm @@ -0,0 +1,62 @@ + + param name="args.prevVersion" type="numeric"; + param name="args.nextVersion" type="numeric"; + param name="args.latestPublishedVersion" type="numeric"; + param name="args.object" type="string"; + param name="args.id" type="string"; + param name="args.version" type="string"; + param name="args.isDraft" type="boolean" default=false; + param name="args.isLatest" type="boolean"; + param name="args.versions" type="query"; + param name="args.baseUrl" type="string" default="#event.buildAdminLink( linkTo='datamanager.editRecord' , queryString='object=#args.object#&id=#args.id#&version=' )#"; + param name="args.allVersionsUrl" type="string" default="#event.buildAdminLink( linkTo='datamanager.recordHistory', queryString='object=#args.object#&id=#args.id#' )#"; + param name="args.discardDraftsUrl" type="string" default=""; + + objectTitleSingular = translateResource( uri="preside-objects.#args.object#:title.singular", defaultValue="record" ); + + if ( args.isDraft ) { + alertClass = "warning"; + alertMessage = translateResource( uri="cms:version.navigator.#( args.isLatest ? 'latest.draft.version.message' : 'old.draft.version.message' )#", data=[ objectTitleSingular ] ); + } else { + isLatestPublished = args.version == args.latestPublishedVersion; + alertClass = args.isLatest || isLatestPublished ? "success" : "warning"; + + if ( !args.isLatest && isLatestPublished ) { + alertMessage = translateResource( uri="cms:version.navigator.current.published.version.message", data=[ objectTitleSingular ] ); + } else { + alertMessage = translateResource( uri="cms:version.navigator.#( args.isLatest ? 'current.version.message' : 'old.version.message' )#", data=[ objectTitleSingular ] ); + } + } + + + + +
+

+ #alertMessage# + + +

+ + #translateResource( "cms:discard.drafts.btn" )# +
+

+ +
+ + + + + + + + + + + + + +
+
+
+
\ No newline at end of file From b09ba0cb073ee7283c5f731891338d8da723a96c Mon Sep 17 00:00:00 2001 From: CF Mitrah Date: Sat, 12 May 2018 12:24:32 +0530 Subject: [PATCH 9/9] 1132 : Removed duplicate files and alter max version number changes --- system/handlers/admin/DataManager.cfc | 1 + system/handlers/admin/SysConfig.cfc | 20 ++++-- .../datamanager/groupVersionNavigator.cfm | 62 ------------------- 3 files changed, 16 insertions(+), 67 deletions(-) delete mode 100644 system/views/admin/datamanager/groupVersionNavigator.cfm diff --git a/system/handlers/admin/DataManager.cfc b/system/handlers/admin/DataManager.cfc index 6e186dea9b..9b87b25ccb 100644 --- a/system/handlers/admin/DataManager.cfc +++ b/system/handlers/admin/DataManager.cfc @@ -2978,6 +2978,7 @@ component extends="preside.system.base.AdminHandler" { } + try { prc.recordLabel = renderLabel( prc.objectName, prc.recordId ); } catch ( "PresideObjectService.no.label.field" e ) { diff --git a/system/handlers/admin/SysConfig.cfc b/system/handlers/admin/SysConfig.cfc index 8045773c5d..bfe75b58bd 100644 --- a/system/handlers/admin/SysConfig.cfc +++ b/system/handlers/admin/SysConfig.cfc @@ -174,7 +174,12 @@ component extends="preside.system.base.AdminHandler" { public void function getConfigHistoryForAjaxDataTables( event, rc, prc ) { prc.setting = structKeyList( event.getCollectionForForm( "system-config.#rc.id#" ) ); - var nextVersionNumber = presideObjectService.getNextVersionNumber(); + var nextVersionNumber = val(presideObjectService.selectData( + objectName = "system_config", + fromVersionTable = true, + selectFields = [ "Max( _version_number ) as max_version_number" ] + , filter = { category = id } + ).max_version_number); var allFieldsData = presideObjectService.selectData( objectName = "system_config", filter = "category = :category AND setting IN ( :setting )", @@ -208,7 +213,12 @@ component extends="preside.system.base.AdminHandler" { var objectName = args.object ?: ""; var id = args.id ?: ""; var setting = structKeyList( event.getCollectionForForm( "system-config.#args.id#" ) ); - var maxVersion = presideObjectService.getNextVersionNumber(); + var maxVersion = val(presideObjectService.selectData( + objectName = "system_config", + fromVersionTable = true, + selectFields = [ "Max( _version_number ) as max_version_number" ] + , filter = { category = id } + ).max_version_number); args.versions = presideObjectService.selectData( objectName = "system_config", @@ -224,13 +234,13 @@ component extends="preside.system.base.AdminHandler" { sql = "select top 1 _version_number as latestVersion from args.versions order by _version_number DESC" , options = { dbtype="query" } ).latestVersion[1]; - if(args.latestVersion EQ "") args.latestVersion = maxVersion; + if(args.latestVersion == "") args.latestVersion = maxVersion; args.latestPublishedVersion = queryExecute( sql = "select top 1 _version_number as latestVersion from args.versions where _version_is_draft = 0 order by _version_number DESC" , options = { dbtype="query" } ).latestVersion[1]; - if(args.latestPublishedVersion EQ "") args.latestPublishedVersion = maxVersion; + if(args.latestPublishedVersion == "") args.latestPublishedVersion = maxVersion; if ( !selectedVersion ) { selectedVersion = args.latestVersion; @@ -247,7 +257,7 @@ component extends="preside.system.base.AdminHandler" { } } - return renderView( view="admin/datamanager/groupVersionNavigator", args=args ); + return renderView( view="admin/sysconfig/groupVersionNavigator", args=args ); } } \ No newline at end of file diff --git a/system/views/admin/datamanager/groupVersionNavigator.cfm b/system/views/admin/datamanager/groupVersionNavigator.cfm deleted file mode 100644 index e12d8e13c0..0000000000 --- a/system/views/admin/datamanager/groupVersionNavigator.cfm +++ /dev/null @@ -1,62 +0,0 @@ - - param name="args.prevVersion" type="numeric"; - param name="args.nextVersion" type="numeric"; - param name="args.latestPublishedVersion" type="numeric"; - param name="args.object" type="string"; - param name="args.id" type="string"; - param name="args.version" type="string"; - param name="args.isDraft" type="boolean" default=false; - param name="args.isLatest" type="boolean"; - param name="args.versions" type="query"; - param name="args.baseUrl" type="string" default="#event.buildAdminLink( linkTo='datamanager.editRecord' , queryString='object=#args.object#&id=#args.id#&version=' )#"; - param name="args.allVersionsUrl" type="string" default="#event.buildAdminLink( linkTo='datamanager.recordHistory', queryString='object=#args.object#&id=#args.id#' )#"; - param name="args.discardDraftsUrl" type="string" default=""; -// writeDump(args);abort; - objectTitleSingular = translateResource( uri="preside-objects.#args.object#:title.singular", defaultValue="record" ); - - if ( args.isDraft ) { - alertClass = "warning"; - alertMessage = translateResource( uri="cms:version.navigator.#( args.isLatest ? 'latest.draft.version.message' : 'old.draft.version.message' )#", data=[ objectTitleSingular ] ); - } else { - isLatestPublished = args.version == args.latestPublishedVersion; - alertClass = args.isLatest || isLatestPublished ? "success" : "warning"; - - if ( !args.isLatest && isLatestPublished ) { - alertMessage = translateResource( uri="cms:version.navigator.current.published.version.message", data=[ objectTitleSingular ] ); - } else { - alertMessage = translateResource( uri="cms:version.navigator.#( args.isLatest ? 'current.version.message' : 'old.version.message' )#", data=[ objectTitleSingular ] ); - } - } - - - - -
-

- #alertMessage# - - -

- - #translateResource( "cms:discard.drafts.btn" )# -
-

- -
- - - - - - - - - - - - - -
-
-
-
\ No newline at end of file