public function configureFilterRules()
{
return [
(new FilterModifierCallbackModifier(
'startEndNotifyUsers',
'hoursPerDayNotifyUsers',
'hoursPerPeriodNotifyUsers',
'shiftTimeNotifyUsers',
'editWorktimeNotifyUsers',
'shiftCheckNotifyUsers'
))
->configureSkipOnArray(false)
->configureCallback(function ($values) {
if (!is_array($values))
{
return [];
}
$result = [];
foreach ($values as $code)
{
if (!is_string($code))
{
continue;
}
if ($code === ViolationRulesTable::USERS_TO_NOTIFY_USER_MANAGER
|| EntityCodesHelper::isUser($code)
)
{
$result[] = $code;
}
}
return $result;
})
->configureSkipOnError(true)
,
(new FilterValidatorRangeValidator(
'useRelativeStartEndDay', 'useExactStartEndDay', 'useOffsetStartEndDay',
'saveHoursForPeriodViolations', 'saveHoursPerDayViolations',
'saveStartEndViolations', 'saveShiftDelayViolations',
'saveEditWorktimeViolations', 'missedShiftStart')
)
->configureRange(['on', 1, 0, ''])
->configureStrict(true)
->configureSkipOnEmpty(true)
,
(new FilterModifierCallbackModifier('missedShiftStart'))
->configureCallback(function ($value) {
return $value === 'on' || $value === 1 ? ViolationRulesTable::MISSED_SHIFT_IS_TRACKED : ViolationRulesTable::MISSED_SHIFT_IS_NOT_TRACKED;
})
->configureSkipOnError(true)
,
(new FilterValidatorNumberValidator('maxWorkTimeLackForPeriod'))
->configureDefaultErrorMessage('TM_VIOLATION_FORM_ERROR_PERIOD_TIME_LACK_ERROR')
->configureIntegerOnly(true)
->configureMin(-1)
,
(new FilterModifierCallbackModifier('maxWorkTimeLackForPeriod'))
->configureSkipOnError(true)
->configureSkipOnEmpty(true)
->configureCallback(function ($value) {
return $value * TimeDictionary::SECONDS_PER_HOUR;
})
,
(new FilterValidatorNumberValidator('scheduleId', 'id'))
->configureIntegerOnly(true)
->configureMin(1)
,
(new FilterValidatorRegularExpressionValidator('entityCode'))
->configurePattern("#[UD]{1}[R]{0,1}[1-9]+#")
,
(new FilterValidatorStringValidator(
'maxExactStartFormatted',
'minExactEndFormatted',
'relativeStartFromFormatted',
'relativeStartToFormatted',
'relativeEndFromFormatted',
'relativeEndToFormatted',
'minDayDurationFormatted',
'minOffsetEndFormatted',
'maxOffsetStartFormatted',
'maxAllowedToEditWorkTimeFormatted',
'maxShiftStartDelayFormatted'
))
,
(new FilterValidatorNumberValidator(
'maxExactStart',
'minExactEnd',
'relativeStartFrom',
'relativeStartTo',
'relativeEndFrom',
'relativeEndTo',
'minOffsetEnd',
'maxOffsetStart',
'minDayDuration',
'maxAllowedToEditWorkTime',
'maxShiftStartDelay'
))
->configureIntegerOnly(true)
->configureMin(-1)
,
(new FilterValidatorRegularExpressionValidator(
'maxExactStartFormatted',
'minExactEndFormatted',
'relativeStartFromFormatted',
'relativeStartToFormatted',
'relativeEndFromFormatted',
'relativeEndToFormatted',
'minDayDurationFormatted',
'minOffsetEndFormatted',
'maxOffsetStartFormatted',
'maxAllowedToEditWorkTimeFormatted',
'maxShiftStartDelayFormatted'
))
->configurePattern('#^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]|--:--$#')
,
(new FilterModifierCallbackModifier('maxWorkTimeLackForPeriod'))
->configureDefaultErrorMessage('TM_VIOLATION_FORM_ERROR_PERIOD_TIME_LACK_ERROR')
->configureCallback(function ($value) {
return $value === '' || $value === null ? -1 : $value;
})
->configureSkipOnEmpty(false)
->configureSkipOnError(true)
,
];
}