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
Feature presidecms 1132 #443
Changes from 7 commits
4d2d32f
a670184
33108c4
7a55335
a995960
494fa9b
7b9c864
056156c
dc56216
2f63307
b09ba0c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -1035,6 +1035,53 @@ 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(); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This should be avoided. This will grow the version table unnecessarily. Instead of this (and the query of queries below), we should add a method to the sysConfig service that calculates the max version for a category. This should be achievable with a single regular selectData query I should think. Rough pseudocode:
|
||
|
||
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 ?: ""; | ||
|
@@ -2745,7 +2792,6 @@ component extends="preside.system.base.AdminHandler" { | |
|
||
} | ||
|
||
|
||
try { | ||
prc.recordLabel = renderLabel( prc.objectName, prc.recordId ); | ||
} catch ( "PresideObjectService.no.label.field" e ) { | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,6 +3,7 @@ component extends="preside.system.base.AdminHandler" { | |
property name="systemConfigurationService" inject="systemConfigurationService"; | ||
property name="siteService" inject="siteService"; | ||
property name="messageBox" inject="messagebox@cbmessagebox"; | ||
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,42 @@ 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(); | ||
} | ||
} | ||
|
||
public void function getConfigHistoryForAjaxDataTables( event, rc, prc ) { | ||
prc.setting = structKeyList( event.getCollectionForForm( "system-config.#rc.id#" ) ); | ||
|
||
var nextVersionNumber = presideObjectService.getNextVersionNumber(); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. See other review comment about avoiding this. This method call inserts a new version number in the version number table. Instead, we shoud calculate the real max version number for the settings category. |
||
var allFieldsData = presideObjectService.selectData( | ||
objectName = "system_config", | ||
filter = "category = :category AND setting IN ( :setting )", | ||
filterParams = { "category"=rc.id, "setting"={ value=prc.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(); | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -177,6 +177,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 = [] | ||
|
@@ -1260,6 +1261,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 ){ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can we remove this? This is an unrelated change. You can achieve the same thing with:
This could be a useful approach, but I'd rather make that a separate change and rather use an array than a string list to avoid ambiguity. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @DominicWatson |
||
args.filter = "#idField# IN ( :#idField# )"; | ||
args.filterParams = { "#idField#" = { value = arguments.id, list="yes"} }; | ||
args.delete( "id" ); | ||
} | ||
|
||
return selectData( argumentCollection = args ); | ||
|
@@ -2381,6 +2386,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 | ||
|
@@ -2417,6 +2423,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#"; | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
<cfparam name="args.id" type="string" /> | ||
|
||
<cfoutput> | ||
<div class="action-buttons btn-group"> | ||
<a href="#event.buildAdminLink( linkTo='SysConfig.category', queryString='id=#rc.id#&version=#args._version_number#' )#" data-context-key="e" title="#HtmlEditFormat( translateResource( uri="cms:datatable.contextmenu.edit" ) )#"> | ||
<i class="fa fa-pencil"></i> | ||
</a> | ||
</div> | ||
</cfoutput> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
<cfscript> | ||
prc.pageIcon = "history"; | ||
prc.pageTitle = translateResource( uri="cms:sysconfig.history.title", data=[ rc.id ] ); | ||
prc.pageSubTitle = translateResource( uri="cms:sysconfig.history.subTitle" ); | ||
|
||
id = rc.id ?: ""; | ||
</cfscript> | ||
|
||
<cfoutput> | ||
#renderView( view="/admin/datamanager/_objectVersionHistoryTable", args={ | ||
objectName = "system_config" | ||
, datasourceUrl = event.buildAdminLink( linkTo="ajaxProxy", queryString="action=SysConfig.getConfigHistoryForAjaxDataTables&id=#id#" ) | ||
} )# | ||
</cfoutput> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I do not think that this belongs in DataManager.cfc. It seems completely specific to system config so should go int he sysConfig admin handler I think.