19 #include "validatorafter_p.h"
27 ValidatorRule(*new ValidatorAfterPrivate(field, comparison, timeZone, inputFormat, messages, defValKey))
42 const QString v =
value(params);
46 const QTimeZone tz = d->extractTimeZone(c, params, d->timeZone);
48 const QVariant _comp = (d->comparison.type() == QVariant::String)
49 ? d->extractOtherDateTime(c, params, d->comparison.toString(), tz, d->inputFormat)
52 if (_comp.type() == QVariant::Date) {
54 const QDate odate = _comp.toDate();
55 if (Q_UNLIKELY(!odate.isValid())) {
56 qCWarning(C_VALIDATOR,
"ValidatorAfter: Invalid comparison date and time for field %s at %s::%s.", qPrintable(
field()), qPrintable(c->controllerName()), qPrintable(c->actionName()));
59 const QDate date = d->extractDate(c, v, d->inputFormat);
60 if (Q_UNLIKELY(!date.isValid())) {
61 qCWarning(C_VALIDATOR,
"ValidatorAfter: Can not parse input date \"%s\" for field %s at %s::%s.", qPrintable(v), qPrintable(
field()), qPrintable(c->controllerName()), qPrintable(c->actionName()));
64 if (Q_UNLIKELY(date <= odate)) {
65 qCDebug(C_VALIDATOR,
"ValidatorAfter: Validation failed at %s::%s for field %s: Input date \"%s\" is not after \"%s\".", qPrintable(c->controllerName()), qPrintable(c->actionName()), qPrintable(
field()), qPrintable(date.toString()), qPrintable(odate.toString()));
68 result.
value.setValue<QDate>(date);
73 }
else if (_comp.type() == QVariant::DateTime) {
75 const QDateTime odatetime = _comp.toDateTime();
76 if (Q_UNLIKELY(!odatetime.isValid())) {
77 qCWarning(C_VALIDATOR,
"ValidatorAfter: Invalid comparison date and time for field %s at %s::%s.", qPrintable(
field()), qPrintable(c->controllerName()), qPrintable(c->actionName()));
80 const QDateTime datetime = d->extractDateTime(c, v, d->inputFormat, tz);
81 if (Q_UNLIKELY(!datetime.isValid())) {
82 qCWarning(C_VALIDATOR,
"ValidatorAfter: Can not parse input date and time \"%s\" for field %s at %s::%s.", qPrintable(v), qPrintable(
field()), qPrintable(c->controllerName()), qPrintable(c->actionName()));
85 if (Q_UNLIKELY(datetime <= odatetime)) {
86 qCDebug(C_VALIDATOR,
"ValidatorAfter: Validation failed at %s::%s for field %s: Input date and time \"%s\" is not after \"%s\".", qPrintable(c->controllerName()), qPrintable(c->actionName()), qPrintable(
field()), qPrintable(datetime.toString()), qPrintable(odatetime.toString()));
89 result.
value.setValue<QDateTime>(datetime);
94 }
else if (_comp.type() == QVariant::Time) {
96 const QTime otime = _comp.toTime();
97 if (Q_UNLIKELY(!otime.isValid())) {
98 qCWarning(C_VALIDATOR,
"ValidatorAfter: Invalid comparison time for field %s at %s::%s.", qPrintable(
field()), qPrintable(c->controllerName()), qPrintable(c->actionName()));
101 const QTime time = d->extractTime(c, v, d->inputFormat);
102 if (Q_UNLIKELY(!time.isValid())) {
103 qCWarning(C_VALIDATOR,
"ValidatorAfter: Can not parse input time \"%s\" for field %s at %s::%s.", qPrintable(v), qPrintable(
field()), qPrintable(c->controllerName()), qPrintable(c->actionName()));
106 if (Q_UNLIKELY(time <= otime)) {
107 qCDebug(C_VALIDATOR,
"ValidatorAfter: Validation failed at %s::%s for field %s: Input time \"%s\" is not after \"%s\".", qPrintable(c->controllerName()), qPrintable(c->actionName()), qPrintable(
field()), qPrintable(time.toString()), qPrintable(otime.toString()));
110 result.
value.setValue<QTime>(time);
116 qCWarning(C_VALIDATOR) <<
"ValidatorAfter: Invalid validation data for field" <<
field() <<
"at" << c->controllerName() <<
"::" << c->actionName() <<
":" << d->comparison;
130 const QString _label =
label(c);
131 if (_label.isEmpty()) {
133 switch (errorData.type()) {
135 error = QStringLiteral(
"Has to be after %1.").arg(errorData.toDate().toString(c->
locale().dateFormat(QLocale::ShortFormat)));
137 case QVariant::DateTime:
138 error = QStringLiteral(
"Has to be after %1.").arg(errorData.toDateTime().toString(c->
locale().dateTimeFormat(QLocale::ShortFormat)));
141 error = QStringLiteral(
"Has to be after %1.").arg(errorData.toTime().toString(c->
locale().timeFormat(QLocale::ShortFormat)));
150 switch(errorData.type()) {
152 error = c->
translate(
"Cutelyst::ValidatorAfter",
"The date in the “%1” field must be after %2.").arg(_label, errorData.toDate().toString(c->
locale().dateFormat(QLocale::ShortFormat)));
154 case QVariant::DateTime:
155 error = c->
translate(
"Cutelyst::ValidatorAfter",
"The date and time in the “%1” field must be after %2.").arg(_label, errorData.toDateTime().toString(c->
locale().dateTimeFormat(QLocale::ShortFormat)));
158 error = c->
translate(
"Cutelyst::ValidatorAfter",
"The time in the “%1” field must be after %2.").arg(_label, errorData.toTime().toString(c->
locale().timeFormat(QLocale::ShortFormat)));
175 error = c->
translate(
"Cutelyst::ValidatorAfter",
"The comparison value is not a valid date and/or time, or cannot be found.");
186 const QString _label =
label(c);
187 if (d->inputFormat) {
188 if (_label.isEmpty()) {
189 error = c->
translate(
"Cutelyst::ValidatorAfter",
"Could not be parsed according to the follwing date and/or time format: %1").arg(c->
translate(d->translationContext.data(), d->inputFormat));
191 error = c->
translate(
"Cutelyst::ValidatorAfter",
"The value of the “%1” field could not be parsed according to the follwing date and/or time format: %2").arg(_label, c->
translate(d->translationContext.data(), d->inputFormat));
195 if (_label.isEmpty()) {
196 switch (errorData.type()) {
197 case QMetaType::QDateTime:
198 error = c->
translate(
"Cutelyst::ValidatorAfter",
"Could not be parsed as date and time.");
200 case QMetaType::QTime:
201 error = c->
translate(
"Cutelyst::ValidatorAfter",
"Could not be parsed as time.");
203 case QMetaType::QDate:
204 error = c->
translate(
"Cutelyst::ValidatorAfter",
"Could not be parsed as date.");
211 switch (errorData.type()) {
212 case QMetaType::QDateTime:
214 error = c->
translate(
"Cutelyst::ValidatorAfter",
"The value in the “%1” field could not be parsed as date and time.").arg(_label);
216 case QMetaType::QTime:
218 error = c->
translate(
"Cutelyst::ValidatorAfter",
"The value in the “%1” field could not be parsed as time.").arg(_label);
220 case QMetaType::QDate:
222 error = c->
translate(
"Cutelyst::ValidatorAfter",
"The value in the “%1” field could not be parsed as date.").arg(_label);