cutelyst  4.9.0
A C++ Web Framework built on top of Qt, using the simple approach of Catalyst (Perl) framework.
validatorrequiredwithall.cpp
1 /*
2  * SPDX-FileCopyrightText: (C) 2017-2023 Matthias Fehring <mf@huessenbergnetz.de>
3  * SPDX-License-Identifier: BSD-3-Clause
4  */
5 
6 #include "validatorrequiredwithall_p.h"
7 
8 using namespace Cutelyst;
9 
11  const QStringList &otherFields,
12  const ValidatorMessages &messages)
13  : ValidatorRule(*new ValidatorRequiredWithAllPrivate(field, otherFields, messages))
14 {
15 }
16 
18 
20  const ParamsMultiMap &params) const
21 {
22  ValidatorReturnType result;
23 
24  Q_D(const ValidatorRequiredWithAll);
25 
26  if (d->otherFields.empty()) {
28  qCWarning(C_VALIDATOR).noquote() << debugString(c) << "Invalid validation data";
29  } else {
30 
31  bool containsAll = true;
32 
33  const QStringList ofc = d->otherFields;
34 
35  for (const QString &other : ofc) {
36  if (!params.contains(other)) {
37  containsAll = false;
38  break;
39  }
40  }
41 
42  const QString v = value(params);
43 
44  if (containsAll) {
45  if (!v.isEmpty()) {
46  result.value.setValue(v);
47  } else {
48  result.errorMessage = validationError(c);
49  qCDebug(C_VALIDATOR).noquote() << debugString(c)
50  << "The field is not present or empty but all other "
51  "required fields are present";
52  }
53  } else {
54  if (!v.isEmpty()) {
55  result.value.setValue(v);
56  }
57  }
58  }
59 
60  return result;
61 }
62 
64  const QVariant &errorData) const
65 {
66  // translation strings are defined in ValidatorRequired
67  Q_UNUSED(errorData)
68  const QString _label = label(c);
69  if (_label.isEmpty()) {
70  return c->qtTrId("cutelyst-validator-genvalerr-req");
71  } else {
72  return c->qtTrId("cutelyst-validator-genvalerr-req-label").arg(_label);
73  }
74 }
Stores custom error messages and the input field label.
The field under validation must be present and not empty only if all of the other specified fields ar...
The Cutelyst Context.
Definition: context.h:42
ValidatorRequiredWithAll(const QString &field, const QStringList &otherFields, const ValidatorMessages &messages=ValidatorMessages())
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
bool contains(const Key &key) const const
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
QString genericValidationError(Context *c, const QVariant &errorData=QVariant()) const override
ValidatorReturnType validate(Context *c, const ParamsMultiMap &params) const override
Contains the result of a single input parameter validation.
Definition: validatorrule.h:49
QString arg(Args &&... args) const const
QString debugString(Context *c) const
void setValue(QVariant &&value)