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