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