diff --git a/core/html/form_validator.cpp b/core/html/form_validator.cpp
index a4de6d2..920375f 100644
--- a/core/html/form_validator.cpp
+++ b/core/html/form_validator.cpp
@@ -1 +1,75 @@
-#include "form_validator.h"
\ No newline at end of file
+#include "form_validator.h"
+
+#include "core/http/request.h"
+
+//FormFieldEntry
+
+bool FormFieldEntry::validate(Request *request, const std::string &data, std::vector *errors) {
+ return true;
+}
+
+FormFieldEntry::FormFieldEntry() {
+}
+
+FormFieldEntry::~FormFieldEntry() {
+}
+
+//FormField
+
+void FormField::add_entry(FormFieldEntry *field) {
+ fields.push_back(field);
+}
+
+bool FormField::validate(Request *request, std::vector *errors) {
+ std::string param = request->get_parameter(name);
+
+ bool valid = true;
+
+ for (int i = 0; i < fields.size(); ++i) {
+ if (!fields[i]->validate(request, param, errors)) {
+ valid = false;
+ }
+ }
+
+ return valid;
+}
+
+FormField::FormField() {
+}
+FormField::~FormField() {
+ for (int i = 0; i < fields.size(); ++i) {
+ delete fields[i];
+ }
+
+ fields.clear();
+}
+
+//FormValidator
+
+bool FormValidator::validate(Request *request, std::vector *errors) {
+ bool valid = true;
+
+ for (int i = 0; i < fields.size(); ++i) {
+
+ if (!fields[i]->validate(request, errors)) {
+ valid = false;
+ }
+ }
+
+ return valid;
+}
+
+void FormValidator::add_field(FormField *field) {
+ fields.push_back(field);
+}
+
+FormValidator::FormValidator() {
+}
+
+FormValidator::~FormValidator() {
+ for (int i = 0; i < fields.size(); ++i) {
+ delete fields[i];
+ }
+
+ fields.clear();
+}
diff --git a/core/html/form_validator.h b/core/html/form_validator.h
index 4a7f32e..840c295 100644
--- a/core/html/form_validator.h
+++ b/core/html/form_validator.h
@@ -7,45 +7,38 @@
class Request;
-//This might be converted to a form validator
+class FormFieldEntry {
+public:
+ virtual bool validate(Request *request, const std::string &data, std::vector *errors);
+
+ FormFieldEntry();
+ virtual ~FormFieldEntry();
+};
class FormField {
-public:
- std::string name;
- std::string label;
- std::map attribues;
-
- virtual std::string render();
-
- virtual bool validate(Request *request, std::vector *errors);
-
- FormField();
- virtual ~FormField();
-};
-
-class InputFormField : public FormField {
- std::string render();
-};
-
-class InputTextFormField : public InputFormField {
- std::string render();
-};
-
-class InputPasswordFormField : public InputFormField {
- std::string render();
-};
-
-class Form {
public:
std::string name;
- std::map attribues;
+
+ void add_entry(FormFieldEntry *field);
+
+ bool validate(Request *request, std::vector *errors);
+
+ FormField();
+ virtual ~FormField();
+
+ std::vector fields;
+};
+
+class FormValidator {
+public:
+ bool validate(Request *request, std::vector *errors = nullptr);
+
+ void add_field(FormField *field);
+
+ FormValidator();
+ virtual ~FormValidator();
+
std::vector fields;
-
- //call Theme->render(); in it, and that will go though all attribs and call their renders
- virtual std::string render();
-
- Form();
- virtual ~Form();
};
#endif
\ No newline at end of file