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 "validatorrequiredwith_p.h"
20
21 using namespace Cutelyst;
22
ValidatorRequiredWith(const QString & field,const QStringList & otherFields,const Cutelyst::ValidatorMessages & messages)23 ValidatorRequiredWith::ValidatorRequiredWith(const QString &field, const QStringList &otherFields, const Cutelyst::ValidatorMessages &messages) :
24 ValidatorRule(*new ValidatorRequiredWithPrivate(field, otherFields, messages))
25 {
26 }
27
~ValidatorRequiredWith()28 ValidatorRequiredWith::~ValidatorRequiredWith()
29 {
30 }
31
validate(Context * c,const ParamsMultiMap & params) const32 ValidatorReturnType ValidatorRequiredWith::validate(Context *c, const ParamsMultiMap ¶ms) const
33 {
34 ValidatorReturnType result;
35
36 Q_D(const ValidatorRequiredWith);
37
38 if (d->otherFields.empty()) {
39 result.errorMessage = validationDataError(c);
40 qCWarning(C_VALIDATOR, "ValidatorRequiredWith: invalid validation data for field %s at %s::%s", qPrintable(field()), qPrintable(c->controllerName()), qPrintable(c->actionName()));
41 } else {
42 bool containsOther = false;
43 const QString v = value(params);
44
45 const QStringList ofc = d->otherFields;
46
47 for (const QString &other : ofc) {
48 if (params.contains(other)) {
49 containsOther = true;
50 break;
51 }
52 }
53
54 if (containsOther) {
55 if (!v.isEmpty()) {
56 result.value.setValue(v);
57 } else {
58 result.errorMessage = validationError(c);
59 qCDebug(C_VALIDATOR, "ValidatorRequiredWith: Validation failed for field %s at %s::%s", qPrintable(field()), qPrintable(c->controllerName()), qPrintable(c->actionName()));
60 }
61 } else {
62 if (!v.isEmpty()) {
63 result.value.setValue(v);
64 }
65 }
66 }
67
68 return result;
69 }
70
genericValidationError(Context * c,const QVariant & errorData) const71 QString ValidatorRequiredWith::genericValidationError(Context *c, const QVariant &errorData) const
72 {
73 QString error;
74 Q_UNUSED(errorData)
75 const QString _label = label(c);
76 if (_label.isEmpty()) {
77 error = c->translate("Cutelyst::ValidatorRequiredWith", "This is required.");
78 } else {
79 //: %1 will be replaced by the field label
80 error = c->translate("Cutelyst::ValidatorRequiredWith", "The “%1” field is required.").arg(_label);
81 }
82 return error;
83 }
84