depage-forms v1.4.1
html forms made easy
Loading...
Searching...
No Matches
Address.php
Go to the documentation of this file.
1<?php
2
9
11
40class Address extends Fieldset
41{
50 public function __construct(string $name, array $parameters, object $form)
51 {
52 parent::__construct($name, $parameters, $form);
53
54 $this->props = [
55 'Address1',
56 'Address2',
57 'Zip',
58 'City',
59 'Country',
60 'State',
61 ];
62 $this->propsMaxLength = [
63 'Address1' => 255,
64 'Address2' => 255,
65 'Zip' => 45,
66 'City' => 255,
67 'VatId' => 60,
68 ];
69
70
71 if (isset($parameters['props'])) {
72 $this->props = $parameters['props'];
73 }
74 foreach ($this->props as $prop) {
75 if (isset($parameters["default$prop"])) {
76 $this->defaults["default$prop"] = $parameters["default$prop"];
77 }
78 }
79
80 $this->defaults['priorityCountries'] = isset($parameters['priorityCountries'])
81 ? $parameters['priorityCountries']
82 : [];
83
84 $this->prefix = isset($parameters['prefix'])
85 ? rtrim($parameters['prefix'], '_') . '_'
86 : '';
87 }
88
98 protected function setDefaults(): void
99 {
100 parent::setDefaults();
101
102 $this->defaults['required'] = false;
103 $this->defaults['labelAddress1'] = _("Address 1");
104 $this->defaults['labelAddress2'] = _("Address 2");
105 $this->defaults['labelCity'] = _("City");
106 $this->defaults['labelState'] = _("State");
107 $this->defaults['labelZip'] = _("Zip");
108 $this->defaults['labelCountry'] = _("Country");
109 }
110
116 public function addChildElements(): void
117 {
118 parent::addChildElements();
119
120 foreach ($this->props as $prop) {
121 if (isset($this->defaults["default$prop"])) {
122 $labelVar = "label$prop";
123
124 if ($prop == "State") {
125 $this->addState($this->prefix . "state", [
126 'label' => $this->labelState,
127 'defaultValue' => $this->defaults['defaultState'],
128 //'required' => $this->required,
129 ]);
130 } elseif ($prop == "Country") {
131 $this->addCountry($this->prefix . "country", [
132 'label' => $this->labelCountry,
133 'priorityCountries' => $this->defaults['priorityCountries'],
134 'defaultValue' => $this->defaults['defaultCountry'],
135 'required' => $this->required,
136 ]);
137 } else {
138 $this->addText($this->prefix . strtolower($prop), [
139 'label' => $this->$labelVar,
140 'maxlength' => $this->propsMaxLength[$prop],
141 'defaultValue' => $this->defaults["default$prop"],
142 'required' => $prop != "Address2" && $this->required,
143 ]);
144 }
145 }
146 }
147 }
148
154 public function validate(): bool
155 {
156 if (parent::validate() && isset($this->defaultCountry) && isset($this->defaultState)) {
157 // check selected state matches the country
158 $country_states = state::getStates();
159 $country = $this->getElement("{$this->prefix}country");
160 $state = $this->getElement("{$this->prefix}state");
161 $this->valid = isset($country_states[$country->getValue()][$state->getValue()]);
162 if (!$this->valid) {
163 $state->errorMessage = _("State and Country do not match");
164 $state->valid = false;
165 }
166
167 // TODO validate zip code
168 }
169
170 return $this->valid;
171 }
172}
173
174/* vim:set ft=php sw=4 sts=4 fdm=marker et : */
getElement(string $name, bool $includeFieldsets=false)
Gets subelement by name.
$valid
Contains element validation status/result.
Definition Element.php:39
Default address fieldset.
Definition Address.php:41
addChildElements()
adds address-inputs to fieldset
Definition Address.php:116
validate()
Validate the address data.
Definition Address.php:154
__construct(string $name, array $parameters, object $form)
multiple class constructor
Definition Address.php:50
setDefaults()
collects initial values across subclasses.
Definition Address.php:98
The fieldset class holds HTML-fieldset specific attributes and methods.
Definition Fieldset.php:52
Classes for HTML input-elements.
Definition Address.php:10