Skip to content

Commit

Permalink
Merge branch 'hotfix-10.8.11' into stable
Browse files Browse the repository at this point in the history
  • Loading branch information
DominicWatson committed Jun 16, 2017
2 parents 9bc843d + a2d3950 commit 8e3d94d
Show file tree
Hide file tree
Showing 12 changed files with 177 additions and 74 deletions.
4 changes: 2 additions & 2 deletions support/docs/docs/02.devguides/32.rulesengine/apis/page.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,10 +85,10 @@ component {
var extraFilters = [];
if ( arguments.filter.len() ) {
extraFilters = rulesEngineFilterService.prepareFilter(
extraFilters.append( rulesEngineFilterService.prepareFilter(
objectName = "news"
, filterId = arguments.filter
);
) );
}
return newsDao.selectData(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
---
id: rulesengineautogeneration
title: Auto-generated filters
---

As of 10.8.0, Preside will auto generate basic filters for your preside objects. The system will iterate over your objects and generate multiple filter expressions for each of the object's properties.

## Bypassing filter expression generation

You can tell the system to NOT auto generate filter expressions for a property by adding the `autofilter=false` attribute to the property:

```luceescript
property name="description" ... autofilter=false;
```

## Auto-adding filters for related objects

The system can also add automatically generated filter expressions for `many-to-one` related objects. This means, for example, you can use filters for various `contact` object properties on a `user` object when the `user` object has a `many-to-one` relationship with `contact`.

The system will do this _automatically_ for any `many-to-one` relationships that also have a unique index (effectively a `one-to-one` relationship). However, you can also add the `autoGenerateFilterExpressions=true` attribute to the property to force this behaviour:

```luceescript
poperty name="category" relationship="many-to-one" autoGenerateFilterExpressions=true ...;
```

## Customizing language for many-to-many and one-to-many filters

Auto-generated filter expressions for relationship fields look something like this (in English):

```
Attendee has any sessions
Attendee has (x) sessions
Attendee has sessions
```

This may be _ok_ in many scenarios, but we can customize this language slightly to make it more accurate by changing the `has` to something different. To do so, edit the `.properties` file for your preside object and add the following keys: `field.{relationshipPropertyName}.possesses.truthy` and `field.{relationshipPropertyName}.possesses.falsey`. e.g.

```properties
field.sessions.possesses.truthy=is signed up to
field.sessions.possesses.falsey=is not signed up to
```

This will then result in filter expressions that appear more naturally:

```
Attendee is signed up to any sessions
Attendee is signed up to (x) sessions
Attendee is signed up to sessions
```
1 change: 1 addition & 0 deletions support/docs/docs/02.devguides/32.rulesengine/page.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,4 +68,5 @@ See [[rulesenginefieldtypes]] for a full guide.
* [[rulesenginefieldtypes]]
* [[rulesenginecontexts]]
* [[rulesengineapis]]
* [[rulesengineautogeneration]]

Original file line number Diff line number Diff line change
Expand Up @@ -114,13 +114,17 @@ component {
var relatedToBaseUri = presideObjectService.getResourceBundleUriRoot( relatedTo );
var objectNameTranslated = translateResource( objectBaseUri & "title.singular", objectName );
var relatedToTranslated = translateResource( relatedToBaseUri & "title", relatedTo );
var possesses = translateResource(
uri = objectBaseUri & "field.#propertyName#.possesses.truthy"
, defaultValue = translateResource( "rules.dynamicExpressions:boolean.possesses" )
);

if ( Len( Trim( parentPropertyName ) ) ) {
var parentPropNameTranslated = translateObjectProperty( parentObjectName, parentPropertyName, translateObjectName( objectName ) );
return translateResource( uri="rules.dynamicExpressions:related.manyToManyCount.label", data=[ objectNameTranslated, relatedToTranslated, parentPropNameTranslated ] );
return translateResource( uri="rules.dynamicExpressions:related.manyToManyCount.label", data=[ objectNameTranslated, relatedToTranslated, parentPropNameTranslated, possesses ] );
}

return translateResource( uri="rules.dynamicExpressions:manyToManyCount.label", data=[ objectNameTranslated, relatedToTranslated ] );
return translateResource( uri="rules.dynamicExpressions:manyToManyCount.label", data=[ objectNameTranslated, relatedToTranslated, possesses ] );
}

private string function getText(
Expand All @@ -134,13 +138,17 @@ component {
var relatedToBaseUri = presideObjectService.getResourceBundleUriRoot( relatedTo );
var objectNameTranslated = translateResource( objectBaseUri & "title.singular", objectName );
var relatedToTranslated = translateResource( relatedToBaseUri & "title", relatedTo );
var possesses = translateResource(
uri = objectBaseUri & "field.#propertyName#.possesses.truthy"
, defaultValue = translateResource( "rules.dynamicExpressions:boolean.possesses" )
);

if ( Len( Trim( parentPropertyName ) ) ) {
var parentPropNameTranslated = translateObjectProperty( parentObjectName, parentPropertyName, translateObjectName( objectName ) );
return translateResource( uri="rules.dynamicExpressions:related.manyToManyCount.text", data=[ objectNameTranslated, relatedToTranslated, parentPropNameTranslated ] );
return translateResource( uri="rules.dynamicExpressions:related.manyToManyCount.text", data=[ objectNameTranslated, relatedToTranslated, parentPropNameTranslated, possesses ] );
}

return translateResource( uri="rules.dynamicExpressions:manyToManyCount.text", data=[ objectNameTranslated, relatedToTranslated ] );
return translateResource( uri="rules.dynamicExpressions:manyToManyCount.text", data=[ objectNameTranslated, relatedToTranslated, possesses ] );
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -97,13 +97,17 @@ component {
var relatedToBaseUri = presideObjectService.getResourceBundleUriRoot( relatedTo );
var objectNameTranslated = translateResource( objectBaseUri & "title.singular", objectName );
var relatedToTranslated = translateResource( relatedToBaseUri & "title", relatedTo );
var possesses = translateResource(
uri = objectBaseUri & "field.#propertyName#.possesses.truthy"
, defaultValue = translateResource( "rules.dynamicExpressions:boolean.possesses" )
);

if ( Len( Trim( parentPropertyName ) ) ) {
var parentPropNameTranslated = translateObjectProperty( parentObjectName, parentPropertyName, translateObjectName( objectName ) );
return translateResource( uri="rules.dynamicExpressions:related.manyToManyHas.label", data=[ objectNameTranslated, relatedToTranslated, parentPropNameTranslated ] );
return translateResource( uri="rules.dynamicExpressions:related.manyToManyHas.label", data=[ objectNameTranslated, relatedToTranslated, parentPropNameTranslated, possesses ] );
}

return translateResource( uri="rules.dynamicExpressions:manyToManyHas.label", data=[ objectNameTranslated, relatedToTranslated ] );
return translateResource( uri="rules.dynamicExpressions:manyToManyHas.label", data=[ objectNameTranslated, relatedToTranslated, possesses ] );
}

private string function getText(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,13 +91,17 @@ component {
var relatedToBaseUri = presideObjectService.getResourceBundleUriRoot( relatedTo );
var objectNameTranslated = translateResource( objectBaseUri & "title.singular", objectName );
var relatedToTranslated = translateResource( relatedToBaseUri & "title", relatedTo );
var possesses = translateResource(
uri = objectBaseUri & "field.#propertyName#.possesses.truthy"
, defaultValue = translateResource( "rules.dynamicExpressions:boolean.possesses" )
);

if ( Len( Trim( parentPropertyName ) ) ) {
var parentPropNameTranslated = translateObjectProperty( parentObjectName, parentPropertyName, translateObjectName( objectName ) );
return translateResource( uri="rules.dynamicExpressions:related.manyToManyMatch.label", data=[ objectNameTranslated, relatedToTranslated, parentPropNameTranslated ] );
return translateResource( uri="rules.dynamicExpressions:related.manyToManyMatch.label", data=[ objectNameTranslated, relatedToTranslated, parentPropNameTranslated, possesses ] );
}

return translateResource( uri="rules.dynamicExpressions:manyToManyMatch.label", data=[ objectNameTranslated, relatedToTranslated ] );
return translateResource( uri="rules.dynamicExpressions:manyToManyMatch.label", data=[ objectNameTranslated, relatedToTranslated, possesses ] );
}

private string function getText(
Expand All @@ -112,6 +116,7 @@ component {
var objectNameTranslated = translateResource( objectBaseUri & "title.singular", objectName );
var relatedToTranslated = translateResource( relatedToBaseUri & "title", relatedTo );


if ( Len( Trim( parentPropertyName ) ) ) {
var parentPropNameTranslated = translateObjectProperty( parentObjectName, parentPropertyName, translateObjectName( objectName ) );
return translateResource( uri="rules.dynamicExpressions:related.manyToManyMatch.text", data=[ objectNameTranslated, relatedToTranslated, parentPropNameTranslated ] );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,16 +109,20 @@ component {
, string parentObjectName = ""
, string parentPropertyName = ""
) {
var relatedToBaseUri = presideObjectService.getResourceBundleUriRoot( relatedTo );
var relatedToTranslated = translateResource( relatedToBaseUri & "title", relatedTo );
var relatedPropertyTranslated = translateObjectProperty( relatedTo, relationshipKey );
var objectBaseUri = presideObjectService.getResourceBundleUriRoot( objectName );
var relatedToBaseUri = presideObjectService.getResourceBundleUriRoot( relatedTo );
var relatedToTranslated = translateResource( relatedToBaseUri & "title", relatedTo );
var possesses = translateResource(
uri = objectBaseUri & "field.#propertyName#.possesses.truthy"
, defaultValue = translateResource( "rules.dynamicExpressions:boolean.possesses" )
);

if ( Len( Trim( parentPropertyName ) ) ) {
var parentPropNameTranslated = translateObjectProperty( parentObjectName, parentPropertyName, translateObjectName( objectName ) );
return translateResource( uri="rules.dynamicExpressions:related.oneToManyCount.label", data=[ relatedToTranslated, relatedPropertyTranslated, parentPropNameTranslated ] );
return translateResource( uri="rules.dynamicExpressions:related.oneToManyCount.label", data=[ relatedToTranslated, possesses, parentPropNameTranslated ] );
}

return translateResource( uri="rules.dynamicExpressions:oneToManyCount.label", data=[ relatedToTranslated, relatedPropertyTranslated ] );
return translateResource( uri="rules.dynamicExpressions:oneToManyCount.label", data=[ relatedToTranslated, possesses ] );
}

private string function getText(
Expand All @@ -129,16 +133,20 @@ component {
, string parentObjectName = ""
, string parentPropertyName = ""
){
var relatedToBaseUri = presideObjectService.getResourceBundleUriRoot( relatedTo );
var relatedToTranslated = translateResource( relatedToBaseUri & "title", relatedTo );
var relatedPropertyTranslated = translateObjectProperty( relatedTo, relationshipKey );
var objectBaseUri = presideObjectService.getResourceBundleUriRoot( objectName );
var relatedToBaseUri = presideObjectService.getResourceBundleUriRoot( relatedTo );
var relatedToTranslated = translateResource( relatedToBaseUri & "title", relatedTo );
var possesses = translateResource(
uri = objectBaseUri & "field.#propertyName#.possesses.truthy"
, defaultValue = translateResource( "rules.dynamicExpressions:boolean.possesses" )
);

if ( Len( Trim( parentPropertyName ) ) ) {
var parentPropNameTranslated = translateObjectProperty( parentObjectName, parentPropertyName, translateObjectName( objectName ) );
return translateResource( uri="rules.dynamicExpressions:related.oneToManyCount.text", data=[ relatedToTranslated, relatedPropertyTranslated, parentPropNameTranslated ] );
return translateResource( uri="rules.dynamicExpressions:related.oneToManyCount.text", data=[ relatedToTranslated, possesses, parentPropNameTranslated ] );
}

return translateResource( uri="rules.dynamicExpressions:oneToManyCount.text", data=[ relatedToTranslated, relatedPropertyTranslated ] );
return translateResource( uri="rules.dynamicExpressions:oneToManyCount.text", data=[ relatedToTranslated, possesses ] );
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -94,16 +94,20 @@ component {
, string parentObjectName = ""
, string parentPropertyName = ""
) {
var relatedToBaseUri = presideObjectService.getResourceBundleUriRoot( relatedTo );
var relatedToTranslated = translateResource( relatedToBaseUri & "title", relatedTo );
var relatedPropertyTranslated = translateObjectProperty( relatedTo, relationshipKey );
var objectBaseUri = presideObjectService.getResourceBundleUriRoot( objectName );
var relatedToBaseUri = presideObjectService.getResourceBundleUriRoot( relatedTo );
var relatedToTranslated = translateResource( relatedToBaseUri & "title", relatedTo );
var possesses = translateResource(
uri = objectBaseUri & "field.#propertyName#.possesses.truthy"
, defaultValue = translateResource( "rules.dynamicExpressions:boolean.possesses" )
);

if ( Len( Trim( parentPropertyName ) ) ) {
var parentPropNameTranslated = translateObjectProperty( parentObjectName, parentPropertyName, translateObjectName( objectName ) );
return translateResource( uri="rules.dynamicExpressions:related.oneToManyHas.label", data=[ relatedToTranslated, relatedPropertyTranslated, parentPropNameTranslated ] );
return translateResource( uri="rules.dynamicExpressions:related.oneToManyHas.label", data=[ relatedToTranslated, possesses, parentPropNameTranslated ] );
}

return translateResource( uri="rules.dynamicExpressions:oneToManyHas.label", data=[ relatedToTranslated, relatedPropertyTranslated ] );
return translateResource( uri="rules.dynamicExpressions:oneToManyHas.label", data=[ relatedToTranslated, possesses ] );
}

private string function getText(
Expand All @@ -114,16 +118,15 @@ component {
, string parentObjectName = ""
, string parentPropertyName = ""
){
var relatedToBaseUri = presideObjectService.getResourceBundleUriRoot( relatedTo );
var relatedToTranslated = translateResource( relatedToBaseUri & "title", relatedTo );
var relatedPropertyTranslated = translateObjectProperty( relatedTo, relationshipKey );
var relatedToBaseUri = presideObjectService.getResourceBundleUriRoot( relatedTo );
var relatedToTranslated = translateResource( relatedToBaseUri & "title", relatedTo );

if ( Len( Trim( parentPropertyName ) ) ) {
var parentPropNameTranslated = translateObjectProperty( parentObjectName, parentPropertyName, translateObjectName( objectName ) );
return translateResource( uri="rules.dynamicExpressions:related.oneToManyHas.text", data=[ relatedToTranslated, relatedPropertyTranslated, parentPropNameTranslated ] );
return translateResource( uri="rules.dynamicExpressions:related.oneToManyHas.text", data=[ relatedToTranslated, parentPropNameTranslated ] );
}

return translateResource( uri="rules.dynamicExpressions:oneToManyHas.text", data=[ relatedToTranslated, relatedPropertyTranslated ] );
return translateResource( uri="rules.dynamicExpressions:oneToManyHas.text", data=[ relatedToTranslated ] );
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -89,16 +89,20 @@ component {
, string parentObjectName = ""
, string parentPropertyName = ""
) {
var relatedToBaseUri = presideObjectService.getResourceBundleUriRoot( relatedTo );
var relatedToTranslated = translateResource( relatedToBaseUri & "title", relatedTo );
var relatedPropertyTranslated = translateObjectProperty( relatedTo, relationshipKey );
var objectBaseUri = presideObjectService.getResourceBundleUriRoot( objectName );
var relatedToBaseUri = presideObjectService.getResourceBundleUriRoot( relatedTo );
var relatedToTranslated = translateResource( relatedToBaseUri & "title", relatedTo );
var possesses = translateResource(
uri = objectBaseUri & "field.#propertyName#.possesses.truthy"
, defaultValue = translateResource( "rules.dynamicExpressions:boolean.possesses" )
);

if ( Len( Trim( parentPropertyName ) ) ) {
var parentPropNameTranslated = translateObjectProperty( parentObjectName, parentPropertyName, translateObjectName( objectName ) );
return translateResource( uri="rules.dynamicExpressions:related.oneToManyMatch.label", data=[ relatedToTranslated, relatedPropertyTranslated, parentPropNameTranslated ] );
return translateResource( uri="rules.dynamicExpressions:related.oneToManyMatch.label", data=[ relatedToTranslated, possesses, parentPropNameTranslated ] );
}

return translateResource( uri="rules.dynamicExpressions:oneToManyMatch.label", data=[ relatedToTranslated, relatedPropertyTranslated ] );
return translateResource( uri="rules.dynamicExpressions:oneToManyMatch.label", data=[ relatedToTranslated, possesses ] );
}

private string function getText(
Expand All @@ -111,14 +115,13 @@ component {
){
var relatedToBaseUri = presideObjectService.getResourceBundleUriRoot( relatedTo );
var relatedToTranslated = translateResource( relatedToBaseUri & "title", relatedTo );
var relatedPropertyTranslated = translateObjectProperty( relatedTo, relationshipKey );

if ( Len( Trim( parentPropertyName ) ) ) {
var parentPropNameTranslated = translateObjectProperty( parentObjectName, parentPropertyName, translateObjectName( objectName ) );
return translateResource( uri="rules.dynamicExpressions:related.oneToManyMatch.text", data=[ relatedToTranslated, relatedPropertyTranslated, parentPropNameTranslated ] );
return translateResource( uri="rules.dynamicExpressions:related.oneToManyMatch.text", data=[ relatedToTranslated, parentPropNameTranslated ] );
}

return translateResource( uri="rules.dynamicExpressions:oneToManyMatch.text", data=[ relatedToTranslated, relatedPropertyTranslated ] );
return translateResource( uri="rules.dynamicExpressions:oneToManyMatch.text", data=[ relatedToTranslated ] );
}

}
5 changes: 5 additions & 0 deletions system/handlers/rules/fieldtypes/Boolean.cfc
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ component {

if ( _booleanVarietyMappings.keyExists( config.variety ?: "" ) ) {
variety = config.variety;
} else if ( Len( Trim( config.variety ?: "" ) ) ) {
var translated = translateResource( uri=config.variety & "." & varietyKey, defaultValue="" );
if ( translated.len() ) {
return translated;
}
}

return translateResource( uri=_booleanVarietyMappings[ variety ][ varietyKey ] );
Expand Down

0 comments on commit 8e3d94d

Please sign in to comment.