cutelyst  3.9.1
A C++ Web Framework built on top of Qt, using the simple approach of Catalyst (Perl) framework.
validatortime.cpp
1 /*
2  * SPDX-FileCopyrightText: (C) 2017-2022 Matthias Fehring <mf@huessenbergnetz.de>
3  * SPDX-License-Identifier: BSD-3-Clause
4  */
5 
6 #include "validatortime_p.h"
7 
8 #include <QTime>
9 
10 using namespace Cutelyst;
11 
13  const char *format,
14  const Cutelyst::ValidatorMessages &messages,
15  const QString &defValKey)
16  : ValidatorRule(*new ValidatorTimePrivate(field, format, messages, defValKey))
17 {
18 }
19 
21 {
22 }
23 
25 {
26  ValidatorReturnType result;
27 
28  Q_D(const ValidatorTime);
29 
30  const QString v = value(params);
31 
32  if (!v.isEmpty()) {
33  const QTime time = d->extractTime(c, v, d->format);
34 
35  if (!time.isValid()) {
36  result.errorMessage = validationError(c);
37  qCDebug(C_VALIDATOR,
38  "ValidatorTime: Validation failed for value \"%s\" in field %s at %s::%s: not "
39  "a valid time",
40  qPrintable(v),
41  qPrintable(field()),
42  qPrintable(c->controllerName()),
43  qPrintable(c->actionName()));
44  } else {
45  result.value.setValue(time);
46  }
47 
48  } else {
49  defaultValue(c, &result, "ValidatorTime");
50  }
51 
52  return result;
53 }
54 
56 {
57  QString error;
58 
59  Q_D(const ValidatorTime);
60 
61  Q_UNUSED(errorData)
62 
63  const QString _label = label(c);
64 
65  if (_label.isEmpty()) {
66 
67  if (d->format) {
68  //: %1 will be replaced by the erquired time format
69  error = c->translate("Cutelyst::ValidatorTime",
70  "Not a valid time according to the following date format: %1")
71  .arg(c->translate(d->translationContext.data(), d->format));
72  } else {
73  error = c->translate("Cutelyst::ValidatorTime", "Not a valid time.");
74  }
75 
76  } else {
77 
78  if (d->format) {
79  //: %1 will be replaced by the field label, %2 will be replaced by the required time
80  //: format
81  error = c->translate("Cutelyst::ValidatorTime",
82  "The value in the “%1” field can not be parsed as time according "
83  "to the following scheme: %2")
84  .arg(_label, c->translate(d->translationContext.data(), d->format));
85  } else {
86  //: %1 will be replaced by the field label
87  error = c->translate("Cutelyst::ValidatorTime",
88  "The value in the “%1” field can not be parsed as time.")
89  .arg(_label);
90  }
91  }
92 
93  return error;
94 }
ValidatorTime(const QString &field, const char *format=nullptr, const ValidatorMessages &messages=ValidatorMessages(), const QString &defValKey=QString())
Constructs a new time validator.
QString validationError(Context *c, const QVariant &errorData=QVariant()) const
Returns a descriptive error message if validation failed.
Stores custom error messages and the input field label.
bool isValid() const const
QString genericValidationError(Context *c, const QVariant &errorData=QVariant()) const override
Returns a generic error if validation failed.
The Cutelyst Context.
Definition: context.h:38
bool isEmpty() const const
QString translate(const char *context, const char *sourceText, const char *disambiguation=nullptr, int n=-1) const
Definition: context.cpp:490
The Cutelyst namespace holds all public Cutelyst API.
Definition: Mainpage.dox:7
Base class for all validator rules.
QString label(Context *c) const
Returns the human readable field label used for generic error messages.
ValidatorReturnType validate(Context *c, const ParamsMultiMap &params) const override
Performs the validation and returns the result.
void setValue(const T &value)
QString value(const ParamsMultiMap &params) const
Returns the value of the field from the input params.
~ValidatorTime() override
Deconstructs time the validator.
QString arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const const
QString field() const
Returns the name of the field to validate.
Contains the result of a single input parameter validation.
Definition: validatorrule.h:49
Checks if the input data is a valid time.
Definition: validatortime.h:40
void defaultValue(Context *c, ValidatorReturnType *result, const char *validatorName) const
I a defValKey has been set in the constructor, this will try to get the default value from the stash ...