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{
42 protected $props = [];
43 protected $propsMaxLength = [];
44 protected $prefix = '';
45 protected $labelAddress1;
46 protected $labelAddress2;
47 protected $labelCity;
48 protected $labelState;
49 protected $labelZip;
50 protected $labelCountry;
51
60 public function __construct(string $name, array $parameters, object $form)
61 {
62 parent::__construct($name, $parameters, $form);
63
64 $this->props = [
65 'Address1',
66 'Address2',
67 'Zip',
68 'City',
69 'Country',
70 'State',
71 ];
72 $this->propsMaxLength = [
73 'Address1' => 255,
74 'Address2' => 255,
75 'Zip' => 45,
76 'City' => 255,
77 'VatId' => 60,
78 ];
79
80
81 if (isset($parameters['props'])) {
82 $this->props = $parameters['props'];
83 }
84 foreach ($this->props as $prop) {
85 if (isset($parameters["default$prop"])) {
86 $this->defaults["default$prop"] = $parameters["default$prop"];
87 }
88 }
89
90 $this->defaults['priorityCountries'] = isset($parameters['priorityCountries'])
91 ? $parameters['priorityCountries']
92 : [];
93
94 $this->prefix = isset($parameters['prefix'])
95 ? rtrim($parameters['prefix'], '_') . '_'
96 : '';
97 }
98
108 protected function setDefaults(): void
109 {
110 parent::setDefaults();
111
112 $this->defaults['required'] = false;
113 $this->defaults['labelAddress1'] = _("Address 1");
114 $this->defaults['labelAddress2'] = _("Address 2");
115 $this->defaults['labelCity'] = _("City");
116 $this->defaults['labelState'] = _("State");
117 $this->defaults['labelZip'] = _("Zip");
118 $this->defaults['labelCountry'] = _("Country");
119 }
120
126 public function addChildElements(): void
127 {
128 parent::addChildElements();
129
130 foreach ($this->props as $prop) {
131 if (isset($this->defaults["default$prop"])) {
132 $labelVar = "label$prop";
133
134 if ($prop == "State") {
135 $this->addState($this->prefix . "state", [
136 'label' => $this->labelState,
137 'defaultValue' => $this->defaults['defaultState'],
138 //'required' => $this->required,
139 ]);
140 } elseif ($prop == "Country") {
141 $this->addCountry($this->prefix . "country", [
142 'label' => $this->labelCountry,
143 'priorityCountries' => $this->defaults['priorityCountries'],
144 'defaultValue' => $this->defaults['defaultCountry'],
145 'required' => $this->required,
146 ]);
147 } else {
148 $this->addText($this->prefix . strtolower($prop), [
149 'label' => $this->$labelVar,
150 'maxlength' => $this->propsMaxLength[$prop],
151 'defaultValue' => $this->defaults["default$prop"],
152 'required' => $prop != "Address2" && $this->required,
153 ]);
154 }
155 }
156 }
157 }
158
164 public function validate(): bool
165 {
166 if (parent::validate() && isset($this->defaultCountry) && isset($this->defaultState)) {
167 // check selected state matches the country
168 $country_states = state::getStates();
169 $country = $this->getElement("{$this->prefix}country");
170 $state = $this->getElement("{$this->prefix}state");
171 $this->valid = isset($country_states[$country->getValue()][$state->getValue()]);
172 if (!$this->valid) {
173 $state->errorMessage = _("State and Country do not match");
174 $state->valid = false;
175 }
176
177 // TODO validate zip code
178 }
179
180 return $this->valid;
181 }
182}
183
184/* 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:126
validate()
Validate the address data.
Definition Address.php:164
__construct(string $name, array $parameters, object $form)
multiple class constructor
Definition Address.php:60
setDefaults()
collects initial values across subclasses.
Definition Address.php:108
The fieldset class holds HTML-fieldset specific attributes and methods.
Definition Fieldset.php:52
Classes for HTML input-elements.
Definition Address.php:10