From 5c6efd369e25aa10f61b8ff4061907fed0e09011 Mon Sep 17 00:00:00 2001 From: Dominique Fournier Date: Tue, 12 May 2015 09:28:45 +0000 Subject: [PATCH] form : fields are now extendable by the user git-svn-id: https://svn.fournier38.fr/svn/ProgSVN/trunk@2167 bf3deb0d-5f1a-0410-827f-c0cc1f45334c --- form.php | 912 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 476 insertions(+), 436 deletions(-) diff --git a/form.php b/form.php index bed3583..224628e 100644 --- a/form.php +++ b/form.php @@ -141,6 +141,7 @@ class form $group = ""; foreach ($this->fields as $field) { + $field->formName = $this->formName; if (isset ($field->group) && $field->group !== $group && $group !== "" || !isset ($field->group) && $group !== "") { @@ -155,440 +156,7 @@ class form } $res .=" "; - switch ($field->type) - { - case "checkbox": - // No $field->multiple, $field->rows $field->cols - // values ! - $res .= "
\n"; - $res .= " \n"; - $res .= "
\n"; - if (is_string ($field->defaults)) - $field->defaults = array ($field->defaults); - foreach ($field->titles as $key=>$val) - { - $res .= " prefix)) - $res .= implode ("][", explode ("/", $field->prefix))."]["; - $res .= htmlspecialchars ($field->name, ENT_QUOTES)."][$key]'"; - $res .= " value='unset'"; - $res .= "/>"; - $res .= "prefix)) - $res .= implode ("][", explode ("/", $field->prefix))."]["; - $res .= htmlspecialchars ($field->name, ENT_QUOTES)."][$key]'"; - $res .= " id='$this->formName"."_"; - if (isset ($field->prefix)) - $res .= preg_replace ("#[/ ]#", "_", $field->prefix)."_"; - $res .= htmlspecialchars ($field->name, ENT_QUOTES)."_$key'"; - if (isset ($field->readonly) && $field->readonly !== FALSE) - $res .= " disabled='disabled'"; - if (isset ($values[$field->name][$key]) && - $values[$field->name][$key] !== "unset") - $res .= " checked='checked'"; - elseif (isset ($field->defaults[$key]) && - $field->defaults[$key] !== "") - $res .= " checked='checked'"; - $res .= " class='form-control'"; - if (isset ($field->hidden) && $field->hidden !== FALSE) - $res .= " style='display:none'"; - $res .= "/>"; - $res .= "$val\n"; - } - - if (isset ($errors[$field->name])) - $res .= " ".$errors[$field->name][1]. - "\n"; - $res .= "
\n"; // End controls - $res .= "
\n"; // End form-group - break; - - case "hidden": - // No $field->label, $field->multiple, $field->readonly, $field->hidden, - // $field->rows $field->cols - $res .= "prefix)) - $res .= implode ("][", explode ("/", $field->prefix))."]["; - $res .= htmlspecialchars ($field->name, ENT_QUOTES)."]'"; - $res .= " id='$this->formName"."_"; - if (isset ($field->prefix)) - $res .= preg_replace ("#[/ ]#", "_", $field->prefix)."_"; - $res .= htmlspecialchars ($field->name, ENT_QUOTES)."'"; - if (isset ($values[$field->name])) - $res .= " value='".htmlspecialchars ($values[$field->name])."'"; - else - $res .= " value='".htmlspecialchars ($field->defaults)."'"; - $res .= "/>\n"; - break; - - case "password": - // No $field->multiple, $field->rows $field->cols - $res .= "
\n"; - $res .= " \n"; - $res .= "
\n"; - $res .= " prefix)) - $res .= implode ("][", explode ("/", $field->prefix))."]["; - $res .= htmlspecialchars ($field->name, ENT_QUOTES)."]'"; - $res .= " id='$this->formName"."_"; - if (isset ($field->prefix)) - $res .= preg_replace ("#[/ ]#", "_", $field->prefix)."_"; - $res .= htmlspecialchars ($field->name, ENT_QUOTES)."'"; - if (isset ($values[$field->name])) - $res .= " value='".htmlspecialchars ($values[$field->name], - ENT_QUOTES)."'"; - else - $res .= " value='".htmlspecialchars ($field->defaults, ENT_QUOTES). - "'"; - if (isset ($field->readonly) && $field->readonly !== FALSE) - $res .= " readonly='readonly'"; - $res .= " class='form-control'"; - if (isset ($field->hidden) && $field->hidden !== FALSE) - $res .= " style='display:none'"; - $res .= "/>\n"; - if (isset ($errors[$field->name])) - $res .= " ".$errors[$field->name][1]. - "\n"; - $res .= "
\n"; // End controls - $res .= "
\n"; // End form-group - break; - - case "radio": - // No $field->multiple, $field->rows $field->cols - $res .= "
\n"; - $res .= " \n"; - $res .= "
\n"; - if (is_string ($field->defaults)) - $field->defaults = array ($field->defaults); - $res .= " prefix)) - $res .= implode ("][", explode ("/", $field->prefix))."]["; - $res .= htmlspecialchars ($field->name, ENT_QUOTES)."]'"; - $res .= " value='unset'"; - $res .= "/>\n"; - foreach ($field->titles as $key=>$val) - { - $res .= " \n"; // End label radio - } - - if (isset ($errors[$field->name])) - $res .= " ".$errors[$field->name][1]. - "\n"; - $res .= "
\n"; // End controls - $res .= "
\n"; // End form-group - break; - - case "select": - // $values->$field, $field->cols - $res .= "
\n"; - $res .= " \n"; - $res .= "
\n"; - if (isset ($field->defaults) && is_array ($field->defaults)) - { - if (isset ($field->readonly) && $field->readonly !== FALSE) - { - foreach ($field->defaults as $key=>$val) - { - $res .= " multiple) && $field->multiple !== FALSE) - { - $res .= " name='$this->formName"."["; - if (isset ($field->prefix)) - $res .= implode ("][", explode ("/", $field->prefix))."]["; - $res .= htmlspecialchars ($field->name, ENT_QUOTES)."][". - htmlspecialchars ($key, ENT_QUOTES)."]'"; - } - else - { - $res .= " name='$this->formName"."["; - if (isset ($field->prefix)) - $res .= implode ("][", explode ("/", $field->prefix))."]["; - $res .= htmlspecialchars ($field->name, ENT_QUOTES)."]'"; - } - $res .= " value='"; - $res .= htmlspecialchars ($key, ENT_QUOTES)."'"; - $res .= "/>\n"; - } - } - - $res .= " prefix)) - $res .= implode ("][", explode ("/", $field->prefix))."]["; - $res .= htmlspecialchars ($field->name, ENT_QUOTES)."]"; - if (isset ($field->multiple) && $field->multiple !== FALSE) - $res .= "[]"; - $res .= "'"; - $res .= " id='$this->formName"."_"; - if (isset ($field->prefix)) - $res .= preg_replace ("#[/ ]#", "_", $field->prefix)."_"; - $res .= htmlspecialchars ($field->name, ENT_QUOTES)."'"; - if (isset ($field->multiple) && $field->multiple !== FALSE) - $res .= " multiple='multiple'"; - if (isset ($field->readonly) && $field->readonly !== FALSE) - $res .= " disabled='disabled'"; - if (isset ($field->hidden) && $field->hidden !== FALSE) - $res .= " style='display:none'"; - $res .= " class='form-control'"; - if (isset ($field->rows)) - $res .= " size='".$field->rows."'"; - $res .= ">\n"; - foreach ($field->defaults as $key=>$val) - { - $res .= " \n"; - } - - $res .= " \n"; - if (isset ($errors[$field->name])) - $res .= " ".$errors[$field->name][1]. - "\n"; - } - else - { - $res .= dgettext("domframework", "No value provided"); - } - - $res .= "
\n"; // End controls - $res .= "
\n"; // End form-group - break; - - case "submit": - // No $field->label, $field->multiple, $field->error, $field->rows, - // $field->cols - $res .= "
\n"; - $res .= "
\n"; - $res .= " prefix)) - $res .= implode ("][", explode ("/", $field->prefix))."]["; - $res .= htmlspecialchars ($field->name, ENT_QUOTES)."]'"; - $res .= " id='$this->formName"."_"; - if (isset ($field->prefix)) - $res .= preg_replace ("#[/ ]#", "_", $field->prefix)."_"; - $res .= htmlspecialchars ($field->name, ENT_QUOTES)."'"; - if (isset ($field->readonly) && $field->readonly !== FALSE) - $res .= " disabled='disabled'"; - if (isset ($field->defaults)) - $res .= " value='".htmlspecialchars ($field->defaults, ENT_QUOTES). - "'"; - elseif (isset ($field->label)) - $res .= " value='".htmlspecialchars ($field->label, ENT_QUOTES)."'"; - $res .= " class='form-control btn-primary'"; - if (isset ($field->hidden) && $field->hidden !== FALSE) - $res .= " style='display:none'"; - $res .= "/>\n"; - $res .= "
\n"; - $res .= "
\n"; - break; - - case "textarea": - // No $field->multiple, $field->titles - $res .= "
\n"; - $res .= " \n"; - $res .= "
\n"; - $res .= " prefix)) - $res .= implode ("][", explode ("/", $field->prefix))."]["; - $res .= htmlspecialchars ($field->name, ENT_QUOTES)."]'"; - $res .= " id='$this->formName"."_"; - if (isset ($field->prefix)) - $res .= preg_replace ("#[/ ]#", "_", $field->prefix)."_"; - $res .= htmlspecialchars ($field->name, ENT_QUOTES)."'"; - if (isset ($field->readonly) && $field->readonly !== FALSE) - $res .= " readonly='readonly'"; - $res .= " class='form-control'"; - if (isset ($field->hidden) && $field->hidden !== FALSE) - $res .= " style='display:none'"; - if (!isset ($field->cols)) - $field->cols = 20; - $res .= " cols='".$field->cols."'"; - if (!isset ($field->rows)) - $field->rows = 4; - $res .= " rows='".$field->rows."'"; - $res .= ">"; - if (isset ($values[$field->name])) - $res .= htmlspecialchars ($values[$field->name], ENT_QUOTES); - else - $res .= htmlspecialchars ($field->defaults, ENT_QUOTES); - $res .= "\n"; - if (isset ($errors[$field->name])) - $res .= " ".$errors[$field->name][1]. - "\n"; - $res .= "
\n"; // End controls - $res .= "
\n"; // End form-group - break; - - default: - // No $field->multiple, $field->titles, $field->rows, $field->cols - $res .= "
\n"; - $res .= " \n"; - $res .= "
\n"; - $res .= " prefix)) - $res .= implode ("][", explode ("/", $field->prefix))."]["; - $res .= htmlspecialchars ($field->name, ENT_QUOTES)."]'"; - $res .= " id='$this->formName"."_"; - if (isset ($field->prefix)) - $res .= preg_replace ("#[/ ]#", "_", $field->prefix)."_"; - $res .= htmlspecialchars ($field->name, ENT_QUOTES)."'"; - if (isset ($values[$field->name])) - $res .= " value='".htmlspecialchars ($values[$field->name], - ENT_QUOTES)."'"; - else - $res .= " value='".htmlspecialchars ($field->defaults, ENT_QUOTES). - "'"; - if (isset ($field->readonly) && $field->readonly !== FALSE) - $res .= " readonly='readonly'"; - $res .= " class='form-control'"; - if (isset ($field->hidden) && $field->hidden !== FALSE) - $res .= " style='display:none'"; - $res .= "/>\n"; - if (isset ($errors[$field->name])) - $res .= " ".$errors[$field->name][1]. - "\n"; - $res .= "
\n"; // End controls - $res .= "
\n"; // End form-group - break; - } + $res .= $field->display (); } if ($group !== "") @@ -621,6 +189,8 @@ class form /** the definition of a formfield */ class formfield { + /** The form name */ + public $formName; /** The name of the field */ public $name; /** The label of the field */ @@ -630,7 +200,7 @@ class formfield /** The defaults values of the field */ public $defaults; /** The type of the field (text, password, checkbox, select)*/ - public $type; + public $type="text"; /** The multiplicity of selection of the field (available in select only)*/ public $multiple; /** The name of group for the fields */ @@ -651,11 +221,481 @@ class formfield /** When adding a field, the name and the label are the minimum mandatory @param string $name Name of the field @param string $label Label of the field */ - function __construct ($name, $label) + public function __construct ($name, $label) { $this->name = $name; $this->label = $label; } + + /** Display really the form */ + public function display () + { + $func = "field".$this->type; + return $this->$func (); + } + + /** Return the checkbox defined */ + public function fieldcheckbox () + { + // No $this->multiple, $this->rows $this->cols + $res = ""; + $res .= "
\n"; + $res .= " \n"; + $res .= "
\n"; + if (is_string ($this->defaults)) + $this->defaults = array ($this->defaults); + foreach ($this->titles as $key=>$val) + { + $res .= " prefix)) + $res .= implode ("][", explode ("/", $this->prefix))."]["; + $res .= htmlspecialchars ($this->name, ENT_QUOTES)."][$key]'"; + $res .= " value='unset'"; + $res .= "/>"; + $res .= "prefix)) + $res .= implode ("][", explode ("/", $this->prefix))."]["; + $res .= htmlspecialchars ($this->name, ENT_QUOTES)."][$key]'"; + $res .= " id='$this->formName"."_"; + if (isset ($this->prefix)) + $res .= preg_replace ("#[/ ]#", "_", $this->prefix)."_"; + $res .= htmlspecialchars ($this->name, ENT_QUOTES)."_$key'"; + if (isset ($this->readonly) && $this->readonly !== FALSE) + $res .= " disabled='disabled'"; + if (isset ($values[$this->name][$key]) && + $values[$this->name][$key] !== "unset") + $res .= " checked='checked'"; + elseif (isset ($this->defaults[$key]) && + $this->defaults[$key] !== "") + $res .= " checked='checked'"; + $res .= " class='form-control'"; + if (isset ($this->hidden) && $this->hidden !== FALSE) + $res .= " style='display:none'"; + $res .= "/>"; + $res .= "$val\n"; + } + + if (isset ($errors[$this->name])) + $res .= " ".$errors[$this->name][1]. + "\n"; + $res .= "
\n"; // End controls + $res .= "
\n"; // End form-group + return $res; + } + + /** Return the hidden field defined */ + public function fieldhidden () + { + $res = ""; + // No $this->label, $this->multiple, $this->readonly, $this->hidden, + // $this->rows $this->cols + $res .= "prefix)) + $res .= implode ("][", explode ("/", $this->prefix))."]["; + $res .= htmlspecialchars ($this->name, ENT_QUOTES)."]'"; + $res .= " id='$this->formName"."_"; + if (isset ($this->prefix)) + $res .= preg_replace ("#[/ ]#", "_", $this->prefix)."_"; + $res .= htmlspecialchars ($this->name, ENT_QUOTES)."'"; + if (isset ($values[$this->name])) + $res .= " value='".htmlspecialchars ($values[$this->name])."'"; + else + $res .= " value='".htmlspecialchars ($this->defaults)."'"; + $res .= "/>\n"; + return $res; + } + + /** Return the password field defined */ + public function fieldpassword () + { + $res = ""; + // No $this->multiple, $this->rows $this->cols + $res .= "
\n"; + $res .= " \n"; + $res .= "
\n"; + $res .= " prefix)) + $res .= implode ("][", explode ("/", $this->prefix))."]["; + $res .= htmlspecialchars ($this->name, ENT_QUOTES)."]'"; + $res .= " id='$this->formName"."_"; + if (isset ($this->prefix)) + $res .= preg_replace ("#[/ ]#", "_", $this->prefix)."_"; + $res .= htmlspecialchars ($this->name, ENT_QUOTES)."'"; + if (isset ($values[$this->name])) + $res .= " value='".htmlspecialchars ($values[$this->name], + ENT_QUOTES)."'"; + else + $res .= " value='".htmlspecialchars ($this->defaults, ENT_QUOTES). + "'"; + if (isset ($this->readonly) && $this->readonly !== FALSE) + $res .= " readonly='readonly'"; + $res .= " class='form-control'"; + if (isset ($this->hidden) && $this->hidden !== FALSE) + $res .= " style='display:none'"; + $res .= "/>\n"; + if (isset ($errors[$this->name])) + $res .= " ".$errors[$this->name][1]. + "\n"; + $res .= "
\n"; // End controls + $res .= "
\n"; // End form-group + return $res; + } + + /** Return the radio field defined */ + public function fieldradio () + { + $res = ""; + // No $this->multiple, $this->rows $this->cols + $res .= "
\n"; + $res .= " \n"; + $res .= "
\n"; + if (is_string ($this->defaults)) + $this->defaults = array ($this->defaults); + $res .= " prefix)) + $res .= implode ("][", explode ("/", $this->prefix))."]["; + $res .= htmlspecialchars ($this->name, ENT_QUOTES)."]'"; + $res .= " value='unset'"; + $res .= "/>\n"; + foreach ($this->titles as $key=>$val) + { + $res .= " \n"; // End label radio + } + + if (isset ($errors[$this->name])) + $res .= " ".$errors[$this->name][1]. + "\n"; + $res .= "
\n"; // End controls + $res .= "
\n"; // End form-group + return $res; + } + + /** Return the checkbox defined */ + public function fieldselect () + { + $res = ""; + // $values->$this, $this->cols + $res .= "
\n"; + $res .= " \n"; + $res .= "
\n"; + if (isset ($this->defaults) && is_array ($this->defaults)) + { + if (isset ($this->readonly) && $this->readonly !== FALSE) + { + foreach ($this->defaults as $key=>$val) + { + $res .= " multiple) && $this->multiple !== FALSE) + { + $res .= " name='$this->formName"."["; + if (isset ($this->prefix)) + $res .= implode ("][", explode ("/", $this->prefix))."]["; + $res .= htmlspecialchars ($this->name, ENT_QUOTES)."][". + htmlspecialchars ($key, ENT_QUOTES)."]'"; + } + else + { + $res .= " name='$this->formName"."["; + if (isset ($this->prefix)) + $res .= implode ("][", explode ("/", $this->prefix))."]["; + $res .= htmlspecialchars ($this->name, ENT_QUOTES)."]'"; + } + $res .= " value='"; + $res .= htmlspecialchars ($key, ENT_QUOTES)."'"; + $res .= "/>\n"; + } + } + + $res .= " prefix)) + $res .= implode ("][", explode ("/", $this->prefix))."]["; + $res .= htmlspecialchars ($this->name, ENT_QUOTES)."]"; + if (isset ($this->multiple) && $this->multiple !== FALSE) + $res .= "[]"; + $res .= "'"; + $res .= " id='$this->formName"."_"; + if (isset ($this->prefix)) + $res .= preg_replace ("#[/ ]#", "_", $this->prefix)."_"; + $res .= htmlspecialchars ($this->name, ENT_QUOTES)."'"; + if (isset ($this->multiple) && $this->multiple !== FALSE) + $res .= " multiple='multiple'"; + if (isset ($this->readonly) && $this->readonly !== FALSE) + $res .= " disabled='disabled'"; + if (isset ($this->hidden) && $this->hidden !== FALSE) + $res .= " style='display:none'"; + $res .= " class='form-control'"; + if (isset ($this->rows)) + $res .= " size='".$this->rows."'"; + $res .= ">\n"; + foreach ($this->defaults as $key=>$val) + { + $res .= " \n"; + } + + $res .= " \n"; + if (isset ($errors[$this->name])) + $res .= " ".$errors[$this->name][1]. + "\n"; + } + else + { + $res .= dgettext("domframework", "No value provided"); + } + + $res .= "
\n"; // End controls + $res .= "
\n"; // End form-group + return $res; + } + + /** Return the submit defined */ + public function fieldsubmit () + { + $res = ""; + // No $this->label, $this->multiple, $this->error, $this->rows, + // $this->cols + $res .= "
\n"; + $res .= "
\n"; + $res .= " prefix)) + $res .= implode ("][", explode ("/", $this->prefix))."]["; + $res .= htmlspecialchars ($this->name, ENT_QUOTES)."]'"; + $res .= " id='$this->formName"."_"; + if (isset ($this->prefix)) + $res .= preg_replace ("#[/ ]#", "_", $this->prefix)."_"; + $res .= htmlspecialchars ($this->name, ENT_QUOTES)."'"; + if (isset ($this->readonly) && $this->readonly !== FALSE) + $res .= " disabled='disabled'"; + if (isset ($this->defaults)) + $res .= " value='".htmlspecialchars ($this->defaults, ENT_QUOTES). + "'"; + elseif (isset ($this->label)) + $res .= " value='".htmlspecialchars ($this->label, ENT_QUOTES)."'"; + $res .= " class='form-control btn-primary'"; + if (isset ($this->hidden) && $this->hidden !== FALSE) + $res .= " style='display:none'"; + $res .= "/>\n"; + $res .= "
\n"; + $res .= "
\n"; + return $res; + } + + /** Return the textarea defined */ + public function fieldtextarea () + { + $res = ""; + // No $this->multiple, $this->titles + $res .= "
\n"; + $res .= " \n"; + $res .= "
\n"; + $res .= " prefix)) + $res .= implode ("][", explode ("/", $this->prefix))."]["; + $res .= htmlspecialchars ($this->name, ENT_QUOTES)."]'"; + $res .= " id='$this->formName"."_"; + if (isset ($this->prefix)) + $res .= preg_replace ("#[/ ]#", "_", $this->prefix)."_"; + $res .= htmlspecialchars ($this->name, ENT_QUOTES)."'"; + if (isset ($this->readonly) && $this->readonly !== FALSE) + $res .= " readonly='readonly'"; + $res .= " class='form-control'"; + if (isset ($this->hidden) && $this->hidden !== FALSE) + $res .= " style='display:none'"; + if (!isset ($this->cols)) + $this->cols = 20; + $res .= " cols='".$this->cols."'"; + if (!isset ($this->rows)) + $this->rows = 4; + $res .= " rows='".$this->rows."'"; + $res .= ">"; + if (isset ($values[$this->name])) + $res .= htmlspecialchars ($values[$this->name], ENT_QUOTES); + else + $res .= htmlspecialchars ($this->defaults, ENT_QUOTES); + $res .= "\n"; + if (isset ($errors[$this->name])) + $res .= " ".$errors[$this->name][1]. + "\n"; + $res .= "
\n"; // End controls + $res .= "
\n"; // End form-group + return $res; + } + + /** Return the text defined */ + public function fieldtext () + { + $res = ""; + // No $this->multiple, $this->titles, $this->rows, $this->cols + $res .= "
\n"; + $res .= " \n"; + $res .= "
\n"; + $res .= " prefix)) + $res .= implode ("][", explode ("/", $this->prefix))."]["; + $res .= htmlspecialchars ($this->name, ENT_QUOTES)."]'"; + $res .= " id='$this->formName"."_"; + if (isset ($this->prefix)) + $res .= preg_replace ("#[/ ]#", "_", $this->prefix)."_"; + $res .= htmlspecialchars ($this->name, ENT_QUOTES)."'"; + if (isset ($values[$this->name])) + $res .= " value='".htmlspecialchars ($values[$this->name], + ENT_QUOTES)."'"; + else + $res .= " value='".htmlspecialchars ($this->defaults, ENT_QUOTES). + "'"; + if (isset ($this->readonly) && $this->readonly !== FALSE) + $res .= " readonly='readonly'"; + $res .= " class='form-control'"; + if (isset ($this->hidden) && $this->hidden !== FALSE) + $res .= " style='display:none'"; + $res .= "/>\n"; + if (isset ($errors[$this->name])) + $res .= " ".$errors[$this->name][1]. + "\n"; + $res .= "
\n"; // End controls + $res .= "
\n"; // End form-group + return $res; + } } /** CSRF protection