cutelyst  5.0.1
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-2025 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  const bool containsAll = std::ranges::all_of(
31  d->otherFields, [params](const QString &other) { return params.contains(other); });
32 
33  const QString v = value(params);
34 
35  if (containsAll) {
36  if (!v.isEmpty()) {
37  result.value.setValue(v);
38  } else {
39  result.errorMessage = validationError(c);
40  qCDebug(C_VALIDATOR).noquote() << debugString(c)
41  << "The field is not present or empty but all other "
42  "required fields are present";
43  }
44  } else {
45  if (!v.isEmpty()) {
46  result.value.setValue(v);
47  }
48  }
49  }
50 
51  return result;
52 }
53 
55  const ParamsMultiMap &params,
56  ValidatorRtFn cb) const
57 {
58  cb(validate(c, params));
59 }
60 
62  const QVariant &errorData) const
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 }
void validateCb(Context *c, const ParamsMultiMap &params, ValidatorRtFn cb) const override
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.
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 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
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:52
QString arg(Args &&... args) const const
void setValue(QVariant &&value)