cutelyst  4.9.0
A C++ Web Framework built on top of Qt, using the simple approach of Catalyst (Perl) framework.
validatorrequiredunless.cpp
1 /*
2  * SPDX-FileCopyrightText: (C) 2017-2023 Matthias Fehring <mf@huessenbergnetz.de>
3  * SPDX-License-Identifier: BSD-3-Clause
4  */
5 
6 #include "validatorrequiredunless_p.h"
7 
8 using namespace Cutelyst;
9 
11  const QString &otherField,
12  const QStringList &otherValues,
13  const Cutelyst::ValidatorMessages &messages)
14  : ValidatorRule(*new ValidatorRequiredUnlessPrivate(field, otherField, otherValues, messages))
15 {
16 }
17 
19 
21  const ParamsMultiMap &params) const
22 {
23  ValidatorReturnType result;
24 
25  Q_D(const ValidatorRequiredUnless);
26 
27  if (d->otherField.isEmpty() || d->otherValues.empty()) {
29  qCWarning(C_VALIDATOR).noquote() << "Invalid validation data";
30  } else {
31  const QString v = value(params);
32  const QString ov =
33  trimBefore() ? params.value(d->otherField).trimmed() : params.value(d->otherField);
34  if (!d->otherValues.contains(ov)) {
35  if (!v.isEmpty()) {
36  result.value.setValue(v);
37  } else {
38  result.errorMessage = validationError(c);
39  qCDebug(C_VALIDATOR).noquote().nospace()
40  << debugString(c) << " The field is not present or empty but \""
41  << d->otherField << "\" not contains " << ov;
42  }
43  } else {
44  if (!v.isEmpty()) {
45  result.value.setValue(v);
46  }
47  }
48  }
49 
50  return result;
51 }
52 
54 {
55  // translation strings are defined in ValidatorRequired
56  Q_UNUSED(errorData)
57  const QString _label = label(c);
58  if (_label.isEmpty()) {
59  return c->qtTrId("cutelyst-validator-genvalerr-req");
60  } else {
61  return c->qtTrId("cutelyst-validator-genvalerr-req-label").arg(_label);
62  }
63 }
ValidatorRequiredUnless(const QString &field, const QString &otherField, const QStringList &otherValues, const ValidatorMessages &messages=ValidatorMessages())
Stores custom error messages and the input field label.
The field under validation must be present and not empty unless the other field is equal to any value...
bool trimBefore() const noexcept
The Cutelyst Context.
Definition: context.h:42
bool isEmpty() const const
The Cutelyst namespace holds all public Cutelyst API.
Base class for all validator rules.
QString label(Context *c) const
QString value(const ParamsMultiMap &params) const
QString genericValidationError(Context *c, const QVariant &errorData=QVariant()) const override
QString validationError(Context *c, const QVariant &errorData={}) const
QString validationDataError(Context *c, const QVariant &errorData={}) const
QString qtTrId(const char *id, int n=-1) const
Definition: context.h:657
Contains the result of a single input parameter validation.
Definition: validatorrule.h:49
QString arg(Args &&... args) const const
ValidatorReturnType validate(Context *c, const ParamsMultiMap &params) const override
QString debugString(Context *c) const
T value(const Key &key, const T &defaultValue) const const
void setValue(QVariant &&value)