cutelyst  5.0.1
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-2025 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  const ParamsMultiMap &params,
55  ValidatorRtFn cb) const
56 {
57  cb(validate(c, params));
58 }
59 
61 {
62  // translation strings are defined in ValidatorRequired
63  Q_UNUSED(errorData)
64  const QString _label = label(c);
65  if (_label.isEmpty()) {
66  return c->qtTrId("cutelyst-validator-genvalerr-req");
67  } else {
68  return c->qtTrId("cutelyst-validator-genvalerr-req-label").arg(_label);
69  }
70 }
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.
QString debugString(const Context *c) const
Base class for all validator rules.
QString value(const ParamsMultiMap &params) const
QString label(const Context *c) const
std::function< void(ValidatorReturnType &&result)> ValidatorRtFn
Void callback function for validator rules that processes the ValidatorReturnType.
Definition: validatorrule.h:82
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:658
Contains the result of a single input parameter validation.
Definition: validatorrule.h:52
void validateCb(Context *c, const ParamsMultiMap &params, ValidatorRtFn cb) const override
QString arg(Args &&... args) const const
ValidatorReturnType validate(Context *c, const ParamsMultiMap &params) const override
T value(const Key &key, const T &defaultValue) const const
void setValue(QVariant &&value)