Cutelyst  2.13.0
Public Member Functions | Protected Member Functions | List of all members
Cutelyst::ValidatorBefore Class Reference

Checks if a date, time or datetime is before a comparison value. More...

#include <Cutelyst/Plugins/Utils/validatorbefore.h>

Inheritance diagram for Cutelyst::ValidatorBefore:
Inheritance graph
[legend]

Public Member Functions

 ValidatorBefore (const QString &field, const QVariant &comparison, const QString &timeZone=QString(), const char *inputFormat=nullptr, const ValidatorMessages &messages=ValidatorMessages(), const QString &defValKey=QString())
 Constructs a new before validator. More...
 
 ~ValidatorBefore () override
 Deconstructs the before validator.
 
- Public Member Functions inherited from Cutelyst::ValidatorRule
 ValidatorRule (const QString &field, const ValidatorMessages &messages=ValidatorMessages(), const QString &defValKey=QString())
 Constructs a new ValidatorRule with the given parameters. More...
 
virtual ~ValidatorRule ()
 Deconstructs the ValidatorRule.
 

Protected Member Functions

QString genericParsingError (Context *c, const QVariant &errorData=QVariant()) const override
 Returns a generic error if the input value could not be parsed.
 
QString genericValidationDataError (Context *c, const QVariant &errorData=QVariant()) const override
 Returns a generic error if comparison data was invalid.
 
QString genericValidationError (Context *c, const QVariant &errorData=QVariant()) const override
 Returns a generic error if validation failed.
 
ValidatorReturnType validate (Context *c, const ParamsMultiMap &params) const override
 Performs the validation and returns the result. More...
 
- Protected Member Functions inherited from Cutelyst::ValidatorRule
 ValidatorRule (ValidatorRulePrivate &dd)
 Constructs a new ValidatorRule object with the given private class. More...
 
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 and put it into the result. More...
 
QString field () const
 Returns the name of the field to validate. More...
 
QString label (Context *c) const
 Returns the human readable field label used for generic error messages. More...
 
QString parsingError (Context *c, const QVariant &errorData=QVariant()) const
 Returns an error message if an error occured while parsing input. More...
 
bool trimBefore () const
 Returns true if the field value should be trimmed before validation. More...
 
QString validationDataError (Context *c, const QVariant &errorData=QVariant()) const
 Returns an error message if any validation data is missing or invalid. More...
 
QString validationError (Context *c, const QVariant &errorData=QVariant()) const
 Returns a descriptive error message if validation failed. More...
 
QString value (const ParamsMultiMap &params) const
 Returns the value of the field from the input params.
 

Detailed Description

This will check if the date, time or datetime in the input field is later than the comparison value set in the constructor or via setComparison(). It depends on the comparison value how the input data is handled. If the comparative value is a QDateTime, the input data will be converted into a QDateTime to compare the both values. The same happens for QTime and QDate. It is also possible to use a QString as comparison value. Using a QString makes it possible to compare the input field against a value from the stash.

To specify a time zone that should be used for the input field - and the comparison input field if one is used, give either the IANA time zone ID name to the timeZone argument of the constructor or the name of an input field or stash key that contains the ID name. It will then be first tried to create a valid QTimeZone from the timeZone, if that fails it will first tryp to get the time zone from the input parameters and if there is no key with the name trying it with the stash. Stash or input parameter can either contain a valid IANA time zone ID or the offset from UTC in seconds.

If the input data can not be parsed into a comparable format, the validation fails and ValidatorRule::parsingError() will return the error string. It will also fail if the comparative value is not of type QDate, QTime, QDateTime or QString. Use inputFormat parameter of the constructor to set a custom input format. If that fails or if there is no custom inputFormat set, it will try to parse the date based on standard formats in the following order: Context locale's toDate() with QLocale::ShortFormat and QLocale::LongFormat, Qt::ISODate, Qt::RFC2822Date and Qt::TextDate

Note
Unless validation is started with NoTrimming, whitespaces will be removed from the beginning and the end of the input value before validation. If the field's value is empty or if the field is missing in the input data, the validation will succeed without performing the validation itself. Use one of the required validators to require the field to be present and not empty.
Examples
void MyController::form_do(Context *c)
{
Validator v({
// compare against a specific date
new ValidatorBefore(QStringLiteral("datefield"), QDate(2018, 1, 1)),
// compare against a specific date and time that might have a format different for every language
new ValidatorBefore(QStringLiteral("datefield2"),
QDateTime::fromString(QStringLiteral("2018-01-01T18:18:18"), Qt::ISODate),
QString(),
QT_TRANSLATE_NOOP("MyController", "yyyy-MM-ddTHH:mm:ss")),
// compare against a datetime in the stash
new ValidatorBefore(QStringLiteral("datetime"), QStringLiteral("stashkey"))
// compare against a datetime and set the input fields time zone
new ValidatorBefore(QStringLiteral("datetime2"),
QDateTime(QDate(2018, 1, 15), QTime(12,0), QTimeZone(QByteArrayLiteral("Europe/Berlin")),
QStringLiteral("America/Rio_Branco")),
// compare against a datetime and read input fields time zone from another input field
new ValidatorBefore(QStringLiteral("datetime3"),
QDateTime(QDate(2018, 1, 15), QTime(12,0), QTimeZone(QByteArrayLiteral("Europe/Berlin")),
QStringLiteral("tz_field"))
}, QLatin1String("MyController"));
}
See also
Validator for general usage of validators.
ValidatorAfter

Definition at line 91 of file validatorbefore.h.

Constructor & Destructor Documentation

◆ ValidatorBefore()

ValidatorBefore::ValidatorBefore ( const QString &  field,
const QVariant &  comparison,
const QString &  timeZone = QString(),
const char *  inputFormat = nullptr,
const ValidatorMessages messages = ValidatorMessages(),
const QString &  defValKey = QString() 
)
Parameters
fieldName of the input field to validate.
comparisonThe value or stash key to compare against.
timeZoneIANA time zone ID, name of a input field containing the ID or stash key containing the ID
inputFormatOptional input format for input data parsing, can be translatable.
messagesCustom error message if validation fails.
defValKeyStash key containing a default value if input field is empty. This value will NOT be validated.

Definition at line 27 of file validatorbefore.cpp.

Member Function Documentation

◆ validate()

ValidatorReturnType ValidatorBefore::validate ( Context c,
const ParamsMultiMap params 
) const
overrideprotectedvirtual
Cutelyst::ValidatorBefore::ValidatorBefore
ValidatorBefore(const QString &field, const QVariant &comparison, const QString &timeZone=QString(), const char *inputFormat=nullptr, const ValidatorMessages &messages=ValidatorMessages(), const QString &defValKey=QString())
Constructs a new before validator.
Definition: validatorbefore.cpp:27