Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,19 @@
.time-period-picker-wrapper {

.time-period-measure-unit-group {
display : flex;
gap : 7px;
display : flex;
gap : 7px;
align-items : center;

.time-period-unit {
.time-period-unit,
.time-period-unit2 {
margin-top : 1px;
margin-bottom : 1em;
}

.time-period-relative-endpoint-label {
min-width : 3em;
}
}

.time-period-type.chosen-container, .input-icon.block {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,24 @@
( function( $ ){
$.fn.timePeriodPicker = function(){
return this.each( function(){
var $formControl = $( this )
, $form = $formControl.closest( "form" )
, $builderContainer = $formControl.next( "div.time-period-picker-wrapper" )
, $typeControl = $builderContainer.find( ".time-period-type" )
, $measureControl = $builderContainer.find( ".time-period-measure" )
, $unitControl = $builderContainer.find( "select.time-period-unit" )
, $date1Control = $builderContainer.find( ".time-period-date1" )
, $date2Control = $builderContainer.find( ".time-period-date2" )
, $unitControlContainer = $builderContainer.find( ".chosen-container.time-period-unit" )
, $date1ControlContainer = $builderContainer.find( ".time-period-date1" ).parent()
, $date2ControlContainer = $builderContainer.find( ".time-period-date2" ).parent()
, $hiddenControl, initializePicker, showAndHideFieldsBasedOnPeriodType, getSelectedType, saveToHiddenField;
var $formControl = $( this )
, $form = $formControl.closest( "form" )
, $builderContainer = $formControl.next( "div.time-period-picker-wrapper" )
, $typeControl = $builderContainer.find( ".time-period-type" )
, $measureControl = $builderContainer.find( ".time-period-measure" )
, $measure2Control = $builderContainer.find( ".time-period-measure2" )
, $unitControl = $builderContainer.find( "select.time-period-unit" )
, $unit2Control = $builderContainer.find( "select.time-period-unit2" )
, $date1Control = $builderContainer.find( ".time-period-date1" )
, $date2Control = $builderContainer.find( ".time-period-date2" )
, $unitControlContainer = $builderContainer.find( ".chosen-container.time-period-unit" )
, $date1ControlContainer = $builderContainer.find( ".time-period-date1" ).parent()
, $date2ControlContainer = $builderContainer.find( ".time-period-date2" ).parent()
, $secondaryMeasureGroup = $builderContainer.find( ".time-period-measure-secondary" )
, $relativeEndpointLabels = $builderContainer.find( ".time-period-relative-endpoint-label" )
, $relativeSuffixPast = $builderContainer.find( ".time-period-relative-suffix-past" )
, $relativeSuffixFuture = $builderContainer.find( ".time-period-relative-suffix-future" )
, $hiddenControl, initializePicker, showAndHideFieldsBasedOnPeriodType, getSelectedType, saveToHiddenField, hideRelativeBetweenFields;

initializePicker = function() {
var id = $formControl.attr( "id" )
Expand All @@ -37,14 +43,25 @@
$form.on( "click", updateTimePeriodValue );
$typeControl.on( "change", updateTimePeriodValue );
$measureControl.on( "change", updateTimePeriodValue );
$measure2Control.on( "change", updateTimePeriodValue );
$unitControl.on( "change", updateTimePeriodValue );
$unit2Control.on( "change", updateTimePeriodValue );
$date1Control.on( "change dp.change", updateTimePeriodValue );
$date2Control.on( "change dp.change", updateTimePeriodValue );
};

hideRelativeBetweenFields = function(){
$relativeEndpointLabels.addClass( "hide" );
$relativeSuffixPast.addClass( "hide" );
$relativeSuffixFuture.addClass( "hide" );
$secondaryMeasureGroup.addClass( "hide" );
};

showAndHideFieldsBasedOnPeriodType = function(){
var type = getSelectedType();

hideRelativeBetweenFields();

switch( type ) {
case "between":
$measureControl.addClass( "hide" );
Expand All @@ -71,6 +88,20 @@
$date1ControlContainer.addClass( "hide" ).removeClass( "block" );
$date2ControlContainer.addClass( "hide" ).removeClass( "block" );
break;
case "betweenago":
case "betweenupcoming":
$measureControl.removeClass( "hide" );
$unitControlContainer.removeClass( "hide" );
$date1ControlContainer.addClass( "hide" ).removeClass( "block" );
$date2ControlContainer.addClass( "hide" ).removeClass( "block" );
$relativeEndpointLabels.removeClass( "hide" );
$secondaryMeasureGroup.removeClass( "hide" );
if ( type == "betweenago" ) {
$relativeSuffixPast.removeClass( "hide" );
} else {
$relativeSuffixFuture.removeClass( "hide" );
}
break;
case "futureequal":
case "pastequal":
$measureControl.removeClass( "hide" );
Expand Down Expand Up @@ -119,7 +150,14 @@
case "futureplus":
case "pastminus":
val.measure = $measureControl.val();
val.unit = getSelectedUnit();
val.unit = getSelectedUnit( $unitControl );
break;
case "betweenago":
case "betweenupcoming":
val.measure = $measureControl.val();
val.unit = getSelectedUnit( $unitControl );
val.measure2 = $measure2Control.val();
val.unit2 = getSelectedUnit( $unit2Control );
break;
case "futureequal":
case "pastequal":
Expand Down Expand Up @@ -154,14 +192,14 @@
return selected.length ? selected[0].value : $typeControl.val();
};

getSelectedUnit = function(){
var selected = $unitControl.data( "uberSelect" ).getSelected();
return selected.length ? selected[0].value : $unitControl.val();
getSelectedUnit = function( $control ){
var selected = $control.data( "uberSelect" ).getSelected();
return selected.length ? selected[0].value : $control.val();
};

initializePicker();
} );
};

$( ".time-period-picker-input" ).timePeriodPicker();
} )( presideJQuery );
} )( presideJQuery );
4 changes: 2 additions & 2 deletions system/handlers/formcontrols/TimePeriodTypePicker.cfc
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@ component {
args.labels = [];

if ( !futureOnly ) {
ArrayAppend( args.values, [ "recent", "since", "before", "past", "pastminus", "pastequal", "yesterday", "lastweek", "lastmonth", "lastyear" ], true );
ArrayAppend( args.values, [ "recent", "betweenago", "since", "before", "past", "pastminus", "pastequal", "yesterday", "lastweek", "lastmonth", "lastyear" ], true );
}

ArrayAppend( args.values, [ "today", "thisweek", "thismonth", "thisyear" ], true );

if ( !pastOnly ) {
ArrayAppend( args.values, [ "upcoming", "until", "after", "future", "futureplus", "futureequal", "tomorrow", "nextweek", "nextmonth", "nextyear" ], true );
ArrayAppend( args.values, [ "upcoming", "betweenupcoming", "until", "after", "future", "futureplus", "futureequal", "tomorrow", "nextweek", "nextmonth", "nextyear" ], true );
}

for( var value in args.values ){
Expand Down
10 changes: 10 additions & 0 deletions system/handlers/rules/fieldtypes/TimePeriod.cfc
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,16 @@ component {
, translateResource( "cms:time.period.unit.#( timePeriod.unit ?: 'd' )#" )
];
break;
case "betweenago":
case "betweenupcoming":
type = timePeriod.type;
data = [
NumberFormat( Val( timePeriod.measure ?: "" ) )
, translateResource( "cms:time.period.unit.#( timePeriod.unit ?: 'd' )#" )
, NumberFormat( Val( timePeriod.measure2 ?: "" ) )
, translateResource( "cms:time.period.unit.#( timePeriod.unit2 ?: ( timePeriod.unit ?: 'd' ) )#" )
];
break;
case "pastequal":
case "futureequal":
type = timePeriod.type;
Expand Down
9 changes: 9 additions & 0 deletions system/i18n/cms.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1586,11 +1586,13 @@ rulesengine.ungrouped.filter=Ungrouped

time.period.type.alltime.label=at any point in time
time.period.type.between.label=between (dates)
time.period.type.betweenago.label=between (relative past), e.g. 48 hours ago to 24 hours ago
time.period.type.equal.label=exactly on date
time.period.type.recent.label=recently (e.g. in the last 10 days)
time.period.type.since.label=since (date)
time.period.type.before.label=before (date)
time.period.type.upcoming.label=upcoming (e.g. in the next 2 years)
time.period.type.betweenupcoming.label=between (relative future), e.g. 24 hours from now to 48 hours from now
time.period.type.until.label=until (date)
time.period.type.after.label=after (date)
time.period.type.past.label=in the past
Expand All @@ -1612,6 +1614,11 @@ time.period.type.future.label=in the future
time.period.type.futureplus.label=at least (e.g. at least 2 days from now)
time.period.type.futureequal.label=exactly X days in the future

time.period.relative.from.label=From
time.period.relative.to.label=To
time.period.relative.ago.suffix=ago
time.period.relative.fromnow.suffix=from now

time.period.unit.yyyy=years
time.period.unit.ww=weeks
time.period.unit.m=months
Expand All @@ -1626,6 +1633,7 @@ time.period.duration.sec_min_hour_day={4}d {3}h {2}m {1}s

rulesEngine.time.period.type.alltime.configured=at any point in time
rulesEngine.time.period.type.between.configured=between {1} and {2}
rulesEngine.time.period.type.betweenago.configured=between {1} {2} ago and {3} {4} ago
rulesEngine.time.period.type.equal.configured=exactly on {1}
rulesEngine.time.period.type.recent.configured=within the last {1} {2}
rulesEngine.time.period.type.since.configured=since {1}
Expand All @@ -1645,6 +1653,7 @@ rulesEngine.time.period.type.nextyear.configured=next calendar year

rulesEngine.time.period.type.before.configured=before {1}
rulesEngine.time.period.type.upcoming.configured=within the next {1} {2}
rulesEngine.time.period.type.betweenupcoming.configured=between {1} {2} from now and {3} {4} from now
rulesEngine.time.period.type.until.configured=until {1}
rulesEngine.time.period.type.after.configured=after {1}
rulesEngine.time.period.type.past.configured=in the past
Expand Down
8 changes: 8 additions & 0 deletions system/i18n/cms_de.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1288,10 +1288,12 @@ rulesengine.filters.individualFilters=Ihre pers\u00F6nlichen Filter\:
rulesengine.ungrouped.filter=Ungruppiert
time.period.type.alltime.label=zu irgendeinem Zeitpunkt
time.period.type.between.label=zwischen (Daten)
time.period.type.betweenago.label=zwischen (relativ, Vergangenheit), z.B. vor 48 Stunden bis vor 24 Stunden
time.period.type.recent.label=k\u00FCrzlich (z.B. in den letzten 10 Tagen)
time.period.type.since.label=seit (Datum)
time.period.type.before.label=vor (Datum)
time.period.type.upcoming.label=in n\u00E4chster Zeit (z.B. in den n\u00E4chsten 2 Jahren)
time.period.type.betweenupcoming.label=zwischen (relativ, Zukunft), z.B. in 24 Stunden bis in 48 Stunden
time.period.type.until.label=bis (Datum)
time.period.type.after.label=nach (Datum)
time.period.type.past.label=in der Vergangenheit
Expand All @@ -1307,6 +1309,10 @@ time.period.type.thismonth.label=Dieser Monat
time.period.type.nextmonth.label=N\u00E4chster Monat
time.period.type.future.label=zuk\u00FCnftig
time.period.type.futureplus.label=mindestens (z.B. mindestens 2 Tage von heute an)
time.period.relative.from.label=Von
time.period.relative.to.label=Bis
time.period.relative.ago.suffix=her
time.period.relative.fromnow.suffix=ab jetzt
time.period.unit.yyyy=Jahre
time.period.unit.ww=Wochen
time.period.unit.m=Monate
Expand All @@ -1315,6 +1321,7 @@ time.period.unit.h=Stunden
time.period.unit.n=Minuten
rulesEngine.time.period.type.alltime.configured=zu irgendeinem Zeitpunkt
rulesEngine.time.period.type.between.configured=zwischen {1} und {2}
rulesEngine.time.period.type.betweenago.configured=zwischen vor {1} {2} und vor {3} {4}
rulesEngine.time.period.type.recent.configured=innerhalb der letzten {1} {2}
rulesEngine.time.period.type.since.configured=seit {1}
rulesEngine.time.period.type.yesterday.configured=gestern
Expand All @@ -1328,6 +1335,7 @@ rulesEngine.time.period.type.thismonth.configured=diesen Monat
rulesEngine.time.period.type.nextmonth.configured=n\u00E4chsten Monat
rulesEngine.time.period.type.before.configured=vor {1}
rulesEngine.time.period.type.upcoming.configured=innerhalb der n\u00E4chsten {1} {2}
rulesEngine.time.period.type.betweenupcoming.configured=zwischen in {1} {2} und in {3} {4}
rulesEngine.time.period.type.until.configured=bis {1}
rulesEngine.time.period.type.after.configured=nach {1}
rulesEngine.time.period.type.past.configured=in der Vergangenheit
Expand Down
8 changes: 8 additions & 0 deletions system/i18n/cms_nl.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1213,10 +1213,12 @@ rulesEngine.months.12=December
rulesEngine.invalid.expression=Deze uitdrukking is niet langer geldig en zal altijd onwaar (false) zijn. Verwijder deze uitdrukking.
time.period.type.alltime.label=op elk moment
time.period.type.between.label=tussen (datums)
time.period.type.betweenago.label=tussen (relatief verleden), bijv. 48 uur geleden tot 24 uur geleden
time.period.type.recent.label=recent (bijv. in de afgelopen 10 dagen)
time.period.type.since.label=sinds (datum)
time.period.type.before.label=voor (datum)
time.period.type.upcoming.label=komende (bijv. in de komende 2 jaar)
time.period.type.betweenupcoming.label=tussen (relatieve toekomst), bijv. over 24 uur tot over 48 uur
time.period.type.until.label=tot (datum)
time.period.type.after.label=na (datum)
time.period.type.past.label=vroeger
Expand All @@ -1232,6 +1234,10 @@ time.period.type.thismonth.label=deze kalendermaand
time.period.type.nextmonth.label=volgende kalendermaand
time.period.type.future.label=in de toekomst
time.period.type.futureplus.label=tenminste (bijv. minimaal 2 dagen vanaf nu)
time.period.relative.from.label=Van
time.period.relative.to.label=Tot
time.period.relative.ago.suffix=geleden
time.period.relative.fromnow.suffix=vanaf nu
time.period.unit.yyyy=jaren
time.period.unit.ww=weken
time.period.unit.m=maanden
Expand All @@ -1240,6 +1246,7 @@ time.period.unit.h=uren
time.period.unit.n=minuten
rulesEngine.time.period.type.alltime.configured=op elk moment
rulesEngine.time.period.type.between.configured=tussen {1} en {2}
rulesEngine.time.period.type.betweenago.configured=tussen {1} {2} geleden en {3} {4} geleden
rulesEngine.time.period.type.recent.configured=binnen de laatste {1} {2}
rulesEngine.time.period.type.since.configured=sinds {1}
rulesEngine.time.period.type.yesterday.configured=gisteren
Expand All @@ -1253,6 +1260,7 @@ rulesEngine.time.period.type.thismonth.configured=deze kalendermaand
rulesEngine.time.period.type.nextmonth.configured=volgende kalendermaand
rulesEngine.time.period.type.before.configured=voor {1}
rulesEngine.time.period.type.upcoming.configured=binnen de volgende {1} {2}
rulesEngine.time.period.type.betweenupcoming.configured=tussen {1} {2} vanaf nu en {3} {4} vanaf nu
rulesEngine.time.period.type.until.configured=tot {1}
rulesEngine.time.period.type.after.configured=na {1}
rulesEngine.time.period.type.past.configured=vroeger
Expand Down
53 changes: 53 additions & 0 deletions system/services/rulesEngine/RulesEngineTimePeriodService.cfc
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,28 @@ component displayName="RulesEngine Time Period Service" {
};
break;

case "betweenago":
return _convertRelativeBetweenToDateRange(
currentDateTime = currentDateTime
, measure = timePeriod.measure ?: ""
, unit = timePeriod.unit ?: ""
, measure2 = timePeriod.measure2 ?: ""
, unit2 = timePeriod.unit2 ?: ""
, direction = -1
);
break;

case "betweenupcoming":
return _convertRelativeBetweenToDateRange(
currentDateTime = currentDateTime
, measure = timePeriod.measure ?: ""
, unit = timePeriod.unit ?: ""
, measure2 = timePeriod.measure2 ?: ""
, unit2 = timePeriod.unit2 ?: ""
, direction = 1
);
break;

case "future":
return { from=currentDateTime };
break;
Expand Down Expand Up @@ -289,4 +311,35 @@ component displayName="RulesEngine Time Period Service" {
return Now();
}

private struct function _convertRelativeBetweenToDateRange(
required date currentDateTime
, string measure = ""
, string unit = ""
, string measure2 = ""
, string unit2 = ""
, numeric direction = -1
) {
var fromDate = "";
var toDate = "";
var unitTo = Len( Trim( arguments.unit2 ) ) ? arguments.unit2 : arguments.unit;

try {
fromDate = DateAdd( arguments.unit, arguments.direction * Val( arguments.measure ), arguments.currentDateTime );
toDate = DateAdd( unitTo , arguments.direction * Val( arguments.measure2 ), arguments.currentDateTime );
} catch( any e ) {
return {};
}

if ( fromDate > toDate ) {
var swapDate = fromDate;
fromDate = toDate;
toDate = swapDate;
}

return {
from = fromDate
, to = toDate
};
}

}
Loading
Loading