* @license BSD */ namespace Domframework; /** * The definition of a formfield */ class Formfield { /** * The form name */ public $formName; /** * The name of the field */ public $name; /** * The label of the field */ public $label; /** * The titles of the field */ public $titles; /** * The defaults values of the field */ public $defaults; /** * The type of the field (text, password, checkbox, select) */ public $type = "text"; /** * The state of the field : hidden or show */ public $hidden = false; /** * Allow a help message to be displayed below the field. In case of error, * it is overrided by the error message */ public $help; /** * Display the placeholder if needed */ public $placeholder = false; /** * The multiplicity of selection of the field (available in select only) */ public $multiple; /** * The name of group for the fields */ public $group; /** * The read-only feature of the field */ public $readonly; /** * The field is mandatory */ public $mandatory; /** * The statut of error of the field */ public $error; /** * Number of rows */ public $rows; /** * Number of columns */ public $cols; /** * The Bootstrap width of the column of titles */ public $titlewidth = 2; /** * The Bootstrap width of the column of fields */ public $fieldwidth = 10; /** * When adding a field, the name and the label are the minimum mandatory * @param string $name Name of the field * @param string|null $label Label of the field */ public function __construct($name, $label = "") { $this->name = $name; $this->label = $label; } /** * Display really the form */ public function display() { $func = "field" . $this->formTemplate . $this->type; return $this->$func(); } // Setters for all the properties of the class /** * Set the type of the field * @param string $val The value of the type of the field */ public function type($val) { $this->type = $val; return $this; } /** * Set the hidden of the field * @param string $val The value of the hidden of the field */ public function hidden($val) { $this->hidden = !! $val; return $this; } /** * Set the help of the field * @param string $val The value of the help of the field */ public function help($val) { $this->help = $val; return $this; } /** * Set the placeholder * @param string $val The value of the placeholder */ public function placeholder($val) { $this->placeholder = $val; return $this; } /** * Set the multiple * @param string $val The value of the multiple */ public function multiple($val) { $this->multiple = $val; return $this; } /** * Set the group * @param string $val The value of the group */ public function group($val) { $this->group = $val; return $this; } /** * Set the readonly * @param string $val The value of the readonly */ public function readonly($val) { $this->readonly = !! $val; return $this; } /** * Set the mandatory * @param string $val The value of the mandatory */ public function mandatory($val) { $this->mandatory = !! $val; return $this; } /** * Set the rows * @param string $val The value of the rows */ public function rows($val) { $this->rows = $val; return $this; } /** * Set the cols * @param string $val The value of the cols */ public function cols($val) { $this->cols = $val; return $this; } ////////////////////////// //// BOOTSTRAP3 //// ////////////////////////// /** * Return the checkbox defined */ private function fieldBootstrap3checkbox() { // No $this->multiple, $this->rows $this->cols $this->placeholder, // $this->maxlength if (! is_array($this->titles) || count($this->titles) === 0) { $titles = [""]; } else { $titles = $this->titles; } $res = ""; $res .= "
\n"; if ($this->label !== "") { $res .= " \n"; } $res .= "
\n"; foreach ($titles as $key => $val) { $res .= "
\n"; $res .= " name, ENT_QUOTES) . "]"; if (count($titles) > 1) { $res .= "[$key]"; } $res .= "' value='unset'"; $res .= "/>"; $res .= "\n"; $res .= "
\n"; } if (isset($this->errors) || isset($this->help)) { $res .= " "; if (isset($this->help)) { $res .= "" . $this->help . ""; } if (isset($this->help) && isset($this->errors)) { $res .= "
"; } if (isset($this->errors)) { $res .= htmlspecialchars($this->errors[1]); } $res .= "
\n"; } $res .= "
\n"; // End controls $res .= "
\n"; // End form-group return $res; } /** * Return the hidden field defined */ private function fieldBootstrap3hidden() { $res = ""; // No $this->label, $this->multiple, $this->readonly, $this->hidden, // $this->rows $this->cols $this->placeholder $this->maxlength $res .= "name, ENT_QUOTES) . "]'"; $res .= " id='$this->formName" . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "'"; if (isset($this->values)) { $res .= " value='" . htmlspecialchars($this->values) . "'"; } else { $res .= " value='" . htmlspecialchars($this->defaults) . "'"; } $res .= "/>\n"; return $res; } /** * Return the password field defined */ private function fieldBootstrap3password() { $res = ""; // No $this->multiple, $this->rows $this->cols $res .= "
\n"; if ($this->label !== "") { $res .= " \n"; } $res .= "
\n"; $res .= " name, ENT_QUOTES) . "]'"; $res .= " id='$this->formName" . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "'"; if (isset($this->values)) { $res .= " value='" . htmlspecialchars( $this->values, 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'"; } if (isset($this->cols)) { $res .= " size='" . $this->cols . "'"; } if (isset($this->maxlength)) { $res .= " maxlength='" . $this->maxlength . "'"; } if (isset($this->errors) || isset($this->help)) { $res .= " aria-describedby='" . $this->formName . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "_help'"; } if (isset($this->placeholder) && $this->placeholder !== false) { $res .= " placeholder='" . htmlentities($this->placeholder, ENT_QUOTES) . "'"; } $res .= "/>\n"; if (isset($this->errors) || isset($this->help)) { $res .= " "; if (isset($this->help)) { $res .= "" . $this->help . ""; } if (isset($this->help) && isset($this->errors)) { $res .= "
"; } if (isset($this->errors)) { $res .= htmlspecialchars($this->errors[1]); } $res .= "
\n"; } $res .= "
\n"; // End controls $res .= "
\n"; // End form-group return $res; } /** * Return the radio field defined */ private function fieldBootstrap3radio() { $res = ""; // No $this->multiple, $this->rows $this->cols $this->placeholder // $this->maxlength $res .= "
\n"; if ($this->label !== "") { $res .= " \n"; } $res .= "
\n"; if (is_string($this->defaults)) { $this->defaults = [$this->defaults]; } $res .= " name, ENT_QUOTES) . "]'"; $res .= " value='unset'"; $res .= "/>\n"; foreach ($this->titles as $key => $val) { $res .= "
"; $res .= " \n"; // End label radio $res .= "
"; } if (isset($this->errors) || isset($this->help)) { $res .= " "; if (isset($this->help)) { $res .= "" . $this->help . ""; } if (isset($this->help) && isset($this->errors)) { $res .= "
"; } if (isset($this->errors)) { $res .= htmlspecialchars($this->errors[1]); } $res .= "
\n"; } $res .= "
\n"; // End controls $res .= "
\n"; // End form-group return $res; } /** * Return the checkbox defined */ private function fieldBootstrap3select() { // No $this->placeholder $this->maxlength $res = ""; // $values->$this, $this->cols $res .= "
\n"; if ($this->label !== "") { $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" . "["; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "][" . htmlspecialchars($key, ENT_QUOTES) . "]'"; } else { $res .= " name='$this->formName" . "["; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "]'"; } $res .= " value='"; $res .= htmlspecialchars($key, ENT_QUOTES) . "'"; $res .= "/>\n"; } } $res .= " name, ENT_QUOTES) . "]"; if (isset($this->multiple) && $this->multiple !== false) { $res .= "[]"; } $res .= "'"; $res .= " id='$this->formName" . "_"; $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 . "'"; } if (isset($this->errors) || isset($this->help)) { $res .= " aria-describedby='" . $this->formName . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "_help'"; } $res .= ">\n"; foreach ($this->defaults as $key => $val) { if (! is_string($val)) { throw new \Exception("Value as defaut for $this->name::$key is not " . "a string (" . gettype($val) . ")"); } $res .= " \n"; } $res .= " \n"; if (isset($this->errors) || isset($this->help)) { $res .= " "; if (isset($this->help)) { $res .= "" . $this->help . ""; } if (isset($this->help) && isset($this->errors)) { $res .= "
"; } if (isset($this->errors)) { $res .= htmlspecialchars($this->errors[1]); } $res .= "
\n"; } } else { $res .= dgettext("domframework", "No value provided"); } $res .= "
\n"; // End controls $res .= "
\n"; // End form-group return $res; } /** * Return the submit defined */ private function fieldBootstrap3submit() { $res = ""; // No $this->label, $this->multiple, $this->error, $this->rows, // $this->cols $this->placeholder $this->maxlength $res .= "
\n"; $res .= "
\n"; $res .= " name, ENT_QUOTES) . "]'"; $res .= " id='$this->formName" . "_"; $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'"; } // Block the submit button 10s. The user can not double click on it and // submit two times the POST to the server // Re-enable after 15s, if there is a problem with the server // This code is needed by Chrome and Edge which allow multiple submission of // a form $res .= " onclick='submit=this ; "; $res .= " setTimeout(function() {"; $res .= " submit.setAttribute(\"disabled\", \"disabled\");"; $res .= " }, 1);"; $res .= "'"; $res .= "/>\n"; $res .= "
\n"; $res .= "
\n"; return $res; } /** * Return the textarea defined */ private function fieldBootstrap3textarea() { $res = ""; // No $this->multiple, $this->titles $res .= "
\n"; if ($this->label !== "") { $res .= " \n"; } $res .= "
\n"; $res .= " name, ENT_QUOTES) . "]'"; $res .= " id='$this->formName" . "_"; $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 . "'"; if (isset($this->maxlength)) { $res .= " maxlength='" . $this->maxlength . "'"; } if (isset($this->errors) || isset($this->help)) { $res .= " aria-describedby='" . $this->formName . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "_help'"; } if (isset($this->placeholder) && $this->placeholder !== false) { $res .= " placeholder='" . htmlentities($this->placeholder, ENT_QUOTES) . "'"; } $res .= ">"; if (isset($this->values)) { $res .= htmlspecialchars($this->values, ENT_QUOTES); } else { $res .= htmlspecialchars($this->defaults, ENT_QUOTES); } $res .= "\n"; if (isset($this->errors) || isset($this->help)) { $res .= " "; if (isset($this->help)) { $res .= "" . $this->help . ""; } if (isset($this->help) && isset($this->errors)) { $res .= "
"; } if (isset($this->errors)) { $res .= htmlspecialchars($this->errors[1]); } $res .= "
\n"; } $res .= "
\n"; // End controls $res .= "
\n"; // End form-group return $res; } /** * Return the text defined */ private function fieldBootstrap3text() { $res = ""; // No $this->multiple, $this->titles, $this->rows, $this->cols $res .= "
\n"; if ($this->label !== "") { $res .= " \n"; } $res .= "
\n"; $res .= " name, ENT_QUOTES) . "]'"; $res .= " id='$this->formName" . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "'"; if (isset($this->values)) { $res .= " value='" . htmlspecialchars( $this->values, 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'"; } if (isset($this->cols)) { $res .= " size='" . $this->cols . "'"; } if (isset($this->maxlength)) { $res .= " maxlength='" . $this->maxlength . "'"; } if (isset($this->errors) || isset($this->help)) { $res .= " aria-describedby='" . $this->formName . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "_help'"; } if (isset($this->placeholder) && $this->placeholder !== false) { $res .= " placeholder='" . htmlentities($this->placeholder, ENT_QUOTES) . "'"; } $res .= "/>\n"; if (isset($this->errors) || isset($this->help)) { $res .= " "; if (isset($this->help)) { $res .= "" . $this->help . ""; } if (isset($this->help) && isset($this->errors)) { $res .= "
"; } if (isset($this->errors)) { $res .= htmlspecialchars($this->errors[1]); } $res .= "
\n"; } $res .= "
\n"; // End controls $res .= "
\n"; // End form-group return $res; } /** * Return the file defined */ private function fieldBootstrap3file() { $res = ""; // No $this->multiple, $this->titles, $this->rows, $this->cols $res .= "
\n"; if ($this->label !== "") { $res .= " \n"; } $res .= "
\n"; if (isset($this->defaults)) { $res .= " \n"; } // End labels if (isset($this->errors) || isset($this->help)) { $res .= " "; if (isset($this->help)) { $res .= "" . $this->help . ""; } if (isset($this->help) && isset($this->errors)) { $res .= "
"; } if (isset($this->errors)) { $res .= htmlspecialchars($this->errors[1]); } $res .= "
\n"; } $res .= "
\n"; // End controls $res .= "
\n"; // End form-group return $res; } ////////////////////////// //// BOOTSTRAP4 //// ////////////////////////// /** * Return the checkbox defined */ private function fieldBootstrap4checkbox() { // No $this->multiple, $this->rows $this->cols $this->placeholder, // $this->maxlength if (! is_array($this->titles) || count($this->titles) === 0) { $this->titles = [""]; } $res = ""; $res .= "
\n"; if ($this->label !== "") { $res .= " titlewidth > 0) { $res .= " class='col-sm-$this->titlewidth col-form-label'"; } if ( is_array($this->titles) && count($this->titles) == 1 && reset($this->titles) === "" ) { // If more than one title is set, the main label is unusable, so // do not link it to the checkbox // If there is no label on the checkbox, this label must be set $res .= " for='" . $this->formName . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES); $res .= "'"; } if (isset($this->hidden) && $this->hidden !== false) { $res .= " style='display:none'"; } $res .= ">"; $res .= htmlspecialchars($this->label); if (isset($this->mandatory) && $this->mandatory !== false) { $res .= " *"; } else { $res .= " "; } $res .= "\n"; } $res .= "
\n"; foreach ($this->titles as $key => $val) { $res .= "
\n"; $res .= " name, ENT_QUOTES) . "]"; if (count($this->titles) > 1) { $res .= "[$key]"; } $res .= "' value='unset'"; $res .= "/>\n"; $res .= " name, ENT_QUOTES) . "]"; if (count($this->titles) > 1) { $res .= "[$key]"; } $res .= "' id='$this->formName" . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES); if (count($this->titles) > 1) { $res .= "_$key"; } $res .= "'"; if (isset($this->readonly) && $this->readonly !== false) { $res .= " disabled='disabled'"; } // Do not check by default ! // Check is enable if not null and not false and not "unset" and not "" if (count($this->titles) === 1) { if ( isset($this->values) && $this->values !== null && $this->values !== false && $this->values !== "unset" && $this->values !== "" ) { $res .= " checked='checked'"; } elseif ( isset($this->defaults) && $this->defaults !== null && $this->defaults !== false && $this->defaults !== "unset" && $this->defaults !== "" ) { $res .= " checked='checked'"; } } else { if (isset($this->values[$key])) { if ( $this->values[$key] !== null && $this->values[$key] !== false && $this->values[$key] !== "unset" && $this->values[$key] !== "" ) { $res .= " checked='checked'"; } } elseif (isset($this->defaults[$key])) { if ( $this->defaults[$key] !== null && $this->defaults[$key] !== false && $this->defaults[$key] !== "unset" && $this->defaults[$key] !== "" ) { $res .= " checked='checked'"; } } } if (isset($this->hidden) && $this->hidden !== false) { $res .= " style='display:none'"; } $res .= " class='form-check-input"; if (isset($this->errors)) { $res .= " is-invalid"; } $res .= "'"; if (isset($this->help)) { $res .= " aria-describedby='" . $this->formName . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "_help'"; } $res .= "/>\n"; $res .= "
\n"; } if (isset($this->help)) { $res .= " name, ENT_QUOTES) . "_help'>"; $res .= $this->help; $res .= "\n"; } $res .= "
\n"; // End controls $res .= "
\n"; // End form-group return $res; } /** * Return the hidden field defined */ private function fieldBootstrap4hidden() { $res = ""; // No $this->label, $this->multiple, $this->readonly, $this->hidden, // $this->rows $this->cols $this->placeholder $this->maxlength $res .= "name, ENT_QUOTES) . "]'"; $res .= " id='$this->formName" . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "'"; if (isset($this->values)) { $res .= " value='" . htmlspecialchars($this->values) . "'"; } else { $res .= " value='" . htmlspecialchars($this->defaults) . "'"; } $res .= "/>\n"; return $res; } /** * Return the password field defined */ private function fieldBootstrap4password() { $res = ""; // No $this->multiple, $this->rows $this->cols $res .= "
\n"; if ($this->label !== "") { $res .= " titlewidth > 0) { $res .= " class='col-sm-$this->titlewidth col-form-label'"; } $res .= " for='" . $this->formName . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "'"; if (isset($this->hidden) && $this->hidden !== false) { $res .= " style='display:none'"; } $res .= ">"; $res .= htmlspecialchars($this->label); if (isset($this->mandatory) && $this->mandatory !== false) { $res .= " *"; } else { $res .= " "; } $res .= "\n"; } $res .= "
\n"; $res .= " name, ENT_QUOTES) . "]'"; $res .= " id='$this->formName" . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "'"; if (isset($this->values)) { $res .= " value='" . htmlspecialchars( $this->values, 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->errors)) { $res .= " is-invalid"; } $res .= "'"; if (isset($this->hidden) && $this->hidden !== false) { $res .= " style='display:none'"; } if (isset($this->cols)) { $res .= " size='" . $this->cols . "'"; } if (isset($this->maxlength)) { $res .= " maxlength='" . $this->maxlength . "'"; } if (isset($this->help)) { $res .= " aria-describedby='" . $this->formName . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "_help'"; } if (isset($this->placeholder) && $this->placeholder !== false) { $res .= " placeholder='" . htmlentities($this->placeholder, ENT_QUOTES) . "'"; } $res .= "/>\n"; if (isset($this->errors)) { $res .= "
"; $res .= htmlspecialchars($this->errors[1]); $res .= "
\n"; } if (isset($this->help)) { $res .= " name, ENT_QUOTES) . "_help'>"; $res .= $this->help; $res .= "\n"; } $res .= "
\n"; // End controls $res .= "
\n"; // End form-group return $res; } /** * Return the radio field defined */ private function fieldBootstrap4radio() { $res = ""; // No $this->multiple, $this->rows $this->cols $this->placeholder // $this->maxlength $res .= "
\n"; if ($this->label !== "") { $res .= " titlewidth > 0) { $res .= " class='col-sm-$this->titlewidth col-form-label'"; } if ( is_array($this->titles) && count($this->titles) == 1 && reset($this->titles) === "" ) { // If more than one title is set, the main label is unusable, so // do not link it to the radio // If there is no label on the checkbox, this label must be set $res .= " for='" . $this->formName . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES); $res .= "'"; } if (isset($this->hidden) && $this->hidden !== false) { $res .= " style='display:none'"; } $res .= ">"; $res .= htmlspecialchars($this->label); if (isset($this->mandatory) && $this->mandatory !== false) { $res .= " *"; } else { $res .= " "; } $res .= "\n"; } $res .= "
\n"; if (is_string($this->defaults)) { $this->defaults = [$this->defaults]; } $res .= " name, ENT_QUOTES) . "]'"; $res .= " value='unset'"; $res .= "/>\n"; foreach ($this->titles as $key => $val) { $res .= "
\n"; $res .= " name, ENT_QUOTES) . "]'"; $res .= " id='$this->formName" . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "_$key'"; $res .= " value='" . htmlspecialchars($val, ENT_QUOTES) . "'"; if (isset($this->readonly) && $this->readonly !== false) { $res .= " readonly='readonly'"; } if ( isset($this->values) && $this->values === $val ) { $res .= " checked='checked'"; } elseif ( isset($this->defaults[0]) && $this->defaults[0] === $val ) { $res .= " checked='checked'"; } if (isset($this->hidden) && $this->hidden !== false) { $res .= " style='display:none'"; } $res .= " class='form-check-input"; if (isset($this->errors)) { $res .= " is-invalid"; } $res .= "'"; if (isset($this->help)) { $res .= " aria-describedby='" . $this->formName . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "_help'"; } $res .= "/>\n"; $res .= " \n"; // End label radio if (isset($this->errors) && $key === count($this->titles) - 1) { $res .= "
"; $res .= htmlspecialchars($this->errors[1]); $res .= "
\n"; } $res .= "
\n"; } if (isset($this->help)) { $res .= " name, ENT_QUOTES) . "_help'>"; $res .= $this->help; $res .= "\n"; } $res .= "
\n"; // End controls $res .= "
\n"; // End form-group return $res; } /** * Return the checkbox defined */ private function fieldBootstrap4select() { // No $this->placeholder $this->maxlength $res = ""; // $values->$this, $this->cols $res .= "
\n"; if ($this->label !== "") { $res .= " titlewidth > 0) { $res .= " class='col-sm-$this->titlewidth col-form-label'"; } $res .= " for='" . $this->formName . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "'"; if (isset($this->hidden) && $this->hidden !== false) { $res .= " style='display:none'"; } $res .= ">"; $res .= htmlspecialchars($this->label); if (isset($this->mandatory) && $this->mandatory !== false) { $res .= " *"; } else { $res .= " "; } $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" . "["; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "][" . htmlspecialchars($key, ENT_QUOTES) . "]'"; } else { $res .= " name='$this->formName" . "["; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "]'"; } $res .= " value='"; $res .= htmlspecialchars($key, ENT_QUOTES) . "'"; $res .= "/>\n"; } } $res .= " name, ENT_QUOTES) . "]"; if (isset($this->multiple) && $this->multiple !== false) { $res .= "[]"; } $res .= "'"; $res .= " id='$this->formName" . "_"; $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->errors)) { $res .= " is-invalid"; } $res .= "'"; if (isset($this->rows)) { $res .= " size='" . $this->rows . "'"; } if (isset($this->help)) { $res .= " aria-describedby='" . $this->formName . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "_help'"; } $res .= ">\n"; foreach ($this->defaults as $key => $val) { if (! is_string($val)) { throw new \Exception("Value as defaut for $this->name::$key is not " . "a string (" . gettype($val) . ")"); } $res .= " \n"; } $res .= " \n"; if (isset($this->errors)) { $res .= "
"; $res .= htmlspecialchars($this->errors[1]); $res .= "
\n"; } if (isset($this->help)) { $res .= " name, ENT_QUOTES) . "_help'>"; $res .= $this->help; $res .= "\n"; } } else { $res .= dgettext("domframework", "No value provided"); } $res .= "
\n"; // End controls $res .= "
\n"; // End form-group return $res; } /** * Return the submit defined */ private function fieldBootstrap4submit() { $res = ""; // No $this->label, $this->multiple, $this->error, $this->rows, // $this->cols $this->placeholder $this->maxlength $res .= "
\n"; $res .= "
\n"; $res .= " name, ENT_QUOTES) . "]'"; $res .= " id='$this->formName" . "_"; $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'"; } // Block the submit button 10s. The user can not double click on it and // submit two times the POST to the server // Re-enable after 15s, if there is a problem with the server // This code is needed by Chrome and Edge which allow multiple submission of // a form $res .= " onclick='submit=this ; "; $res .= " setTimeout(function() {"; $res .= " submit.setAttribute(\"disabled\", \"disabled\");"; $res .= " }, 1);"; $res .= "'"; $res .= "/>\n"; $res .= "
\n"; $res .= "
\n"; return $res; } /** * Return the textarea defined */ private function fieldBootstrap4textarea() { $res = ""; // No $this->multiple, $this->titles $res .= "
\n"; if ($this->label !== "") { $res .= " titlewidth > 0) { $res .= " class='col-sm-$this->titlewidth col-form-label'"; } $res .= " for='" . $this->formName . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "'"; if (isset($this->hidden) && $this->hidden !== false) { $res .= " style='display:none'"; } $res .= ">"; $res .= htmlspecialchars($this->label); if (isset($this->mandatory) && $this->mandatory !== false) { $res .= " *"; } else { $res .= " "; } $res .= "\n"; } $res .= "
\n"; $res .= " name, ENT_QUOTES) . "]'"; $res .= " id='$this->formName" . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "'"; if (isset($this->readonly) && $this->readonly !== false) { $res .= " readonly='readonly'"; } $res .= " class='form-control"; if (isset($this->errors)) { $res .= " is-invalid"; } $res .= "'"; 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 . "'"; if (isset($this->maxlength)) { $res .= " maxlength='" . $this->maxlength . "'"; } if (isset($this->help)) { $res .= " aria-describedby='" . $this->formName . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "_help'"; } if (isset($this->placeholder) && $this->placeholder !== false) { $res .= " placeholder='" . htmlentities($this->placeholder, ENT_QUOTES) . "'"; } $res .= ">"; if (isset($this->values)) { $res .= htmlspecialchars($this->values, ENT_QUOTES); } else { $res .= htmlspecialchars($this->defaults, ENT_QUOTES); } $res .= "\n"; if (isset($this->errors)) { $res .= "
"; $res .= htmlspecialchars($this->errors[1]); $res .= "
\n"; } if (isset($this->help)) { $res .= " name, ENT_QUOTES) . "_help'>"; $res .= $this->help; $res .= "\n"; } $res .= "
\n"; // End controls $res .= "
\n"; // End form-group return $res; } /** * Return the text defined */ private function fieldBootstrap4text() { $res = ""; // No $this->multiple, $this->titles, $this->rows, $this->cols $res .= "
\n"; if ($this->label !== "") { $res .= " titlewidth > 0) { $res .= " class='col-sm-$this->titlewidth col-form-label'"; } $res .= " for='" . $this->formName . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "'"; if (isset($this->hidden) && $this->hidden !== false) { $res .= " style='display:none'"; } $res .= ">"; $res .= htmlspecialchars($this->label); if (isset($this->mandatory) && $this->mandatory !== false) { $res .= " *"; } else { $res .= " "; } $res .= "\n"; } $res .= "
\n"; $res .= " name, ENT_QUOTES) . "]'"; $res .= " id='$this->formName" . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "'"; if (isset($this->values)) { $res .= " value='" . htmlspecialchars( $this->values, 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->errors)) { $res .= " is-invalid"; } $res .= "'"; if (isset($this->hidden) && $this->hidden !== false) { $res .= " style='display:none'"; } if (isset($this->cols)) { $res .= " size='" . $this->cols . "'"; } if (isset($this->maxlength)) { $res .= " maxlength='" . $this->maxlength . "'"; } if (isset($this->help)) { $res .= " aria-describedby='" . $this->formName . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "_help'"; } if (isset($this->placeholder) && $this->placeholder !== false) { $res .= " placeholder='" . htmlentities($this->placeholder, ENT_QUOTES) . "'"; } $res .= "/>\n"; if (isset($this->errors)) { $res .= "
"; $res .= htmlspecialchars($this->errors[1]); $res .= "
\n"; } if (isset($this->help)) { $res .= " name, ENT_QUOTES) . "_help'>"; $res .= $this->help; $res .= "\n"; } $res .= "
\n"; // End controls $res .= "
\n"; // End form-group return $res; } /** * Return the file defined */ private function fieldBootstrap4file() { $res = ""; // No $this->multiple, $this->titles, $this->rows, $this->cols $res .= "
\n"; if ($this->label !== "") { $res .= " titlewidth > 0) { $res .= " class='col-sm-$this->titlewidth col-form-label'"; } $res .= " for='" . $this->formName . "_"; $res .= htmlspecialchars($this->name, ENT_QUOTES) . "'"; if (isset($this->hidden) && $this->hidden !== false) { $res .= " style='display:none'"; } $res .= ">"; $res .= htmlspecialchars($this->label); if (isset($this->mandatory) && $this->mandatory !== false) { $res .= " *"; } else { $res .= " "; } $res .= "\n"; } $res .= "
\n"; if (isset($this->defaults)) { $res .= " \n"; } // End labels if (isset($this->errors)) { $res .= "
"; $res .= htmlspecialchars($this->errors[1]); $res .= "
\n"; } if (isset($this->help)) { $res .= " name, ENT_QUOTES) . "_help'>"; $res .= $this->help; $res .= "\n"; } $res .= "
\n"; // End controls $res .= "
\n"; // End form-group return $res; } }