1 /*
2  * Copyright (C) 2017-2018 Matthias Fehring <kontakt@buschmann23.de>
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
17  */
18 
19 #include "validatorboolean_p.h"
20 #include <QStringList>
21 
22 using namespace Cutelyst;
23 
ValidatorBoolean(const QString & field,const ValidatorMessages & messages,const QString & defValKey)24 ValidatorBoolean::ValidatorBoolean(const QString &field, const ValidatorMessages &messages, const QString &defValKey) :
25     ValidatorRule(*new ValidatorBooleanPrivate(field, messages, defValKey))
26 {
27 }
28 
~ValidatorBoolean()29 ValidatorBoolean::~ValidatorBoolean()
30 {
31 }
32 
validate(Context * c,const ParamsMultiMap & params) const33 ValidatorReturnType ValidatorBoolean::validate(Context *c, const ParamsMultiMap &params) const
34 {
35     ValidatorReturnType result;
36 
37     const QString v = value(params);
38 
39     if (!v.isEmpty()) {
40         static const QStringList lt({QStringLiteral("1"), QStringLiteral("true"), QStringLiteral("on")});
41         static const QStringList lf({QStringLiteral("0"), QStringLiteral("false"), QStringLiteral("off")});
42         if (lt.contains(v, Qt::CaseInsensitive)) {
43             result.value.setValue<bool>(true);
44         } else if (lf.contains(v, Qt::CaseInsensitive)) {
45             result.value.setValue<bool>(false);
46         } else {
47             result.errorMessage = validationError(c);
48             qCDebug(C_VALIDATOR, "ValidatorBoolean: The value %s of field %s in %s::%s can not be interpreted as boolean.", qPrintable(v), qPrintable(field()), qPrintable(c->controllerName()), qPrintable(c->actionName()));
49         }
50     } else {
51         defaultValue(c, &result, "ValidatorBoolean");
52     }
53 
54     return result;
55 }
56 
genericValidationError(Cutelyst::Context * c,const QVariant & errorData) const57 QString ValidatorBoolean::genericValidationError(Cutelyst::Context *c, const QVariant &errorData) const
58 {
59     QString error;
60     Q_UNUSED(errorData)
61     const QString _label = label(c);
62     if (_label.isEmpty()) {
63         error = c->translate("Cutelyst::ValidatorBoolean", "Can not be interpreted as boolean value.");
64     } else {
65         //: %1 will be replaced by the field label
66         error = c->translate("Cutelyst::ValidatorBoolean", "The value in the “%1” field can not be interpreted as a boolean value.").arg(_label);
67     }
68     return error;
69 }
70 
71