19 #include "validatorbetween_p.h"
24 ValidatorRule(*new ValidatorBetweenPrivate(field, type, min, max, messages, defValKey))
36 const QString v =
value(params);
46 case QMetaType::Short:
49 case QMetaType::LongLong:
51 const qlonglong val = c->
locale().toLongLong(v, &ok);
52 if (Q_UNLIKELY(!ok)) {
54 qCWarning(C_VALIDATOR,
"ValidatorBetween: Failed to parse value of field %s into number at %s::%s.", qPrintable(
field()), qPrintable(c->controllerName()), qPrintable(c->actionName()));
56 const qlonglong min = d->extractLongLong(c, params, d->min, &ok);
57 if (Q_UNLIKELY(!ok)) {
59 qCWarning(C_VALIDATOR,
"ValidatorBetween: Invalid minimum comparison value for field %s in %s::%s.", qPrintable(
field()), qPrintable(c->controllerName()), qPrintable(c->actionName()));
61 const qlonglong max = d->extractLongLong(c, params, d->max, &ok);
62 if (Q_UNLIKELY(!ok)) {
64 qCWarning(C_VALIDATOR,
"ValidatorBetween: Invalid maximum comparison value for field %s in %s::%s.", qPrintable(
field()), qPrintable(c->controllerName()), qPrintable(c->actionName()));
66 if ((val < min) || (val > max)) {
68 {QStringLiteral(
"val"), val},
69 {QStringLiteral(
"min"), min},
70 {QStringLiteral(
"max"), max}
72 qCDebug(C_VALIDATOR,
"ValidatorBetween: Validation failed for field %s in %s::%s: %lli is not between %lli and %lli.", qPrintable(
field()), qPrintable(c->controllerName()), qPrintable(c->actionName()), val, min, max);
81 case QMetaType::UChar:
82 case QMetaType::UShort:
84 case QMetaType::ULong:
85 case QMetaType::ULongLong:
87 const qulonglong val = v.toULongLong(&ok);
88 if (Q_UNLIKELY(!ok)) {
90 qCWarning(C_VALIDATOR,
"ValidatorBetween: Failed to parse value of field %s into number at %s::%s.", qPrintable(
field()), qPrintable(c->controllerName()), qPrintable(c->actionName()));
92 const qulonglong min = d->extractULongLong(c, params, d->min, &ok);
93 if (Q_UNLIKELY(!ok)) {
95 qCWarning(C_VALIDATOR,
"ValidatorBetween: Invalid minimum comparison value for field %s in %s::%s.", qPrintable(
field()), qPrintable(c->controllerName()), qPrintable(c->actionName()));
97 const qulonglong max = d->extractULongLong(c, params, d->max, &ok);
98 if (Q_UNLIKELY(!ok)) {
100 qCWarning(C_VALIDATOR,
"ValidatorBetween: Invalid maximum comparison value for field %s in %s::%s.", qPrintable(
field()), qPrintable(c->controllerName()), qPrintable(c->actionName()));
102 if ((val < min) || (val > max)) {
104 {QStringLiteral(
"val"), val},
105 {QStringLiteral(
"min"), min},
106 {QStringLiteral(
"max"), max}
108 qCDebug(C_VALIDATOR,
"ValidatorBetween: Validation failed for field %s in %s::%s: %llu is not between %llu and %llu.", qPrintable(
field()), qPrintable(c->controllerName()), qPrintable(c->actionName()), val, min, max);
117 case QMetaType::Float:
118 case QMetaType::Double:
120 const double val = v.toDouble(&ok);
121 if (Q_UNLIKELY(!ok)) {
123 qCWarning(C_VALIDATOR,
"ValidatorBetween: Failed to parse value of field %s into number at %s::%s.", qPrintable(
field()), qPrintable(c->controllerName()), qPrintable(c->actionName()));
125 const double min = d->extractDouble(c, params, d->min, &ok);
126 if (Q_UNLIKELY(!ok)) {
128 qCWarning(C_VALIDATOR,
"ValidatorBetween: Invalid minimum comparison value for field %s in %s::%s.", qPrintable(
field()), qPrintable(c->controllerName()), qPrintable(c->actionName()));
130 const double max = d->extractDouble(c, params, d->max, &ok);
131 if (Q_UNLIKELY(!ok)) {
133 qCWarning(C_VALIDATOR,
"ValidatorBetween: Invalid maximum comparison value for field %s in %s::%s.", qPrintable(
field()), qPrintable(c->controllerName()), qPrintable(c->actionName()));
135 if ((val < min) || (val > max)) {
137 {QStringLiteral(
"val"), val},
138 {QStringLiteral(
"min"), min},
139 {QStringLiteral(
"max"), max}
141 qCDebug(C_VALIDATOR,
"ValidatorBetween: Validation failed for field %s in %s::%s: %f is not between %f and %f.", qPrintable(
field()), qPrintable(c->controllerName()), qPrintable(c->actionName()), val, min, max);
150 case QMetaType::QString:
152 const qlonglong val =
static_cast<qlonglong
>(v.length());
153 const qlonglong min = d->extractLongLong(c, params, d->min, &ok);
154 if (Q_UNLIKELY(!ok)) {
156 qCWarning(C_VALIDATOR,
"ValidatorBetween: Invalid minimum comparison value for field %s in %s::%s.", qPrintable(
field()), qPrintable(c->controllerName()), qPrintable(c->actionName()));
158 const qlonglong max = d->extractLongLong(c, params, d->max, &ok);
159 if (Q_UNLIKELY(!ok)) {
161 qCWarning(C_VALIDATOR,
"ValidatorBetween: Invalid maximum comparison value for field %s in %s::%s.", qPrintable(
field()), qPrintable(c->controllerName()), qPrintable(c->actionName()));
163 if ((val < min) || (val > max)) {
165 {QStringLiteral(
"val"), val},
166 {QStringLiteral(
"min"), min},
167 {QStringLiteral(
"max"), max}
169 qCDebug(C_VALIDATOR,
"ValidatorBetween: Validation failed for field %s in %s::%s: string length %lli is not between %lli and %lli.", qPrintable(
field()), qPrintable(c->controllerName()), qPrintable(c->actionName()), val, min, max);
178 qCWarning(C_VALIDATOR,
"ValidatorBetween: The comparison type with ID %i for field %s at %s::%s is not supported.",
static_cast<int>(d->type), qPrintable(
field()), qPrintable(c->controllerName()), qPrintable(c->actionName()));
184 if (d->type != QMetaType::QString) {
185 const QVariant _v = d->valueToNumber(c, v, d->type);
192 result.
value.setValue<QString>(v);
208 const QVariantMap map = errorData.toMap();
211 case QMetaType::Char:
212 case QMetaType::Short:
214 case QMetaType::Long:
215 case QMetaType::LongLong:
216 case QMetaType::QString:
217 min = c->
locale().toString(map.value(QStringLiteral(
"min")).toLongLong());
218 max = c->
locale().toString(map.value(QStringLiteral(
"max")).toLongLong());
220 case QMetaType::UChar:
221 case QMetaType::UShort:
222 case QMetaType::UInt:
223 case QMetaType::ULong:
224 case QMetaType::ULongLong:
225 min = c->
locale().toString(map.value(QStringLiteral(
"min")).toULongLong());
226 max = c->
locale().toString(map.value(QStringLiteral(
"max")).toULongLong());
228 case QMetaType::Float:
229 case QMetaType::Double:
230 min = c->
locale().toString(map.value(QStringLiteral(
"min")).toDouble());
231 max = c->
locale().toString(map.value(QStringLiteral(
"max")).toDouble());
238 const QString _label =
label(c);
240 if (_label.isEmpty()) {
241 if (d->type == QMetaType::QString) {
242 error = c->
translate(
"Cutelyst::ValidatorBetween",
"The text must be between %1 and %2 characters long.").arg(min, max);
244 error = c->
translate(
"Cutelyst::ValidatorBetween",
"The value must be between %1 and %2.").arg(min, max);
247 if (d->type == QMetaType::QString) {
248 error = c->
translate(
"Cutelyst::ValidatorBetween",
"The text in the “%1“ field must be between %2 and %3 characters long.").arg(_label, min, max);
250 error = c->
translate(
"Cutelyst::ValidatorBetween",
"The value in the “%1” field must be between %2 and %3.").arg(_label, min, max);
261 int field = errorData.toInt();
262 const QString _label =
label(c);
265 if (_label.isEmpty()) {
266 error = c->
translate(
"Cutelyst::ValidatorBetween",
"The minimum comparison value is not valid.");
269 error = c->
translate(
"Cutelyst::ValidatorBetween",
"The minimum comparison value for the “%1” field is not valid.").arg(_label);
271 }
else if (
field == 0) {
273 if (_label.isEmpty()) {
274 error = c->
translate(
"Cutelyst::ValidatorBetween",
"The comparison type with ID %1 is not supported.").arg(
static_cast<int>(d->type));
277 error = c->
translate(
"Cutelyst::ValidatorBetween",
"The comparison type with ID %1 for the “%2” field is not supported.").arg(QString::number(
static_cast<int>(d->type)), _label);
279 }
else if (
field == 1) {
280 if (_label.isEmpty()) {
281 error = c->
translate(
"Cutelyst::ValidatorBetween",
"The maximum comparison value is not valid.");
284 error = c->
translate(
"Cutelyst::ValidatorBetween",
"The maximum comparison value for the “%1” field is not valid.").arg(_label);
297 const QString _label =
label(c);
298 if ((d->type == QMetaType::Float) || (d->type == QMetaType::Double)) {
299 if (_label.isEmpty()) {
300 error = c->
translate(
"Cutelyst::ValidatorBetween",
"Failed to parse the input value into a floating point number.");
303 error = c->
translate(
"Cutelyst::ValidatorBetween",
"Failed to parse the input value for the “%1” field into a floating point number.").arg(_label);
306 if (_label.isEmpty()) {
307 error = c->
translate(
"Cutelyst::ValidatorBetween",
"Failed to parse the input value into an integer number.");
310 error = c->
translate(
"Cutelyst::ValidatorBetween",
"Failed to parse the input value for the “%1” field into an integer number.").arg(_label);