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