address.php
Go to the documentation of this file.
1 <?php
9 namespace depage\htmlform\elements;
10 
39 class address extends fieldset
40 {
49  public function __construct($name, $parameters, $form)
50  {
51  parent::__construct($name, $parameters, $form);
52 
53  if (isset($parameters['defaultAddress1'])) {
54  $this->defaults['defaultAddress1'] = $parameters['defaultAddress1'];
55  }
56 
57  if (isset($parameters['defaultAddress2'])) {
58  $this->defaults['defaultAddress2'] = $parameters['defaultAddress2'];
59  }
60 
61  if (isset($parameters['defaultCity'])) {
62  $this->defaults['defaultCity'] = $parameters['defaultCity'];
63  }
64 
65  if (isset($parameters['defaultState'])) {
66  $this->defaults['defaultState'] = $parameters['defaultState'];
67  }
68 
69  if (isset($parameters['defaultCountry'])) {
70  $this->defaults['defaultCountry'] = $parameters['defaultCountry'];
71  }
72 
73  if (isset($parameters['defaultZip'])) {
74  $this->defaults['defaultZip'] = $parameters['defaultZip'];
75  }
76 
77  $this->defaults['priorityCountries'] = isset($parameters['priorityCountries'])
78  ? $parameters['priorityCountries']
79  : array();
80 
81  $this->prefix = isset($parameters['prefix'])
82  ? rtrim($parameters['prefix'], '_') . '_'
83  : '';
84  }
85 
95  protected function setDefaults()
96  {
97  parent::setDefaults();
98 
99  $this->defaults['required'] = false;
100  $this->defaults['labelAddress1'] = _("Address 1");
101  $this->defaults['labelAddress2'] = _("Address 2");
102  $this->defaults['labelCity'] = _("City");
103  $this->defaults['labelState'] = _("State");
104  $this->defaults['labelZip'] = _("Zip");
105  $this->defaults['labelCountry'] = _("Country");
106  }
107 
113  public function addChildElements()
114  {
115  parent::addChildElements();
116 
117  if (isset($this->defaults['defaultAddress1'])) {
118  $this->addText($this->prefix . "line_1", array(
119  'label' => $this->labelAddress1,
120  'defaultValue' => $this->defaults['defaultAddress1'],
121  'required' => $this->required,
122  ));
123  }
124 
125  if (isset($this->defaults['defaultAddress2'])) {
126  $this->addText($this->prefix . "line_2", array(
127  'label' => $this->labelAddress2,
128  'defaultValue' => $this->defaults['defaultAddress2'],
129  'required' => $this->required,
130  ));
131  }
132 
133  if (isset($this->defaults['defaultCountry'])) {
134  $this->addCountry($this->prefix . "country", array(
135  'label' => $this->labelCountry,
136  'priorityCountries' => $this->defaults['priorityCountries'],
137  'defaultValue' => $this->defaults['defaultCountry'],
138  'required' => $this->required,
139  ));
140  }
141 
142  if (isset($this->defaults['defaultState'])) {
143  $this->addState($this->prefix . "state", array(
144  'label' => $this->labelState,
145  'defaultValue' => $this->defaults['defaultState'],
146  'required' => $this->required,
147  ));
148  }
149 
150  if (isset($this->defaults['defaultCity'])) {
151  $this->addText($this->prefix . "city", array(
152  'label' => $this->labelCity,
153  'defaultValue' => $this->defaults['defaultCity'],
154  'required' => $this->required,
155  ));
156  }
157 
158  if (isset($this->defaults['defaultZip'])) {
159  $this->addText($this->prefix . "zip", array(
160  'label' => $this->labelZip,
161  'defaultValue' => $this->defaults['defaultZip'],
162  'required' => $this->required,
163  ));
164  }
165  }
166 
172  public function validate()
173  {
174  if (parent::validate() && isset($this->defaultCountry) && isset($this->defaultState)) {
175  // check selected state matches the country
176  $country_states = state::getStates();
177  $country = $this->getElement("{$this->name}_country");
178  $state = $this->getElement("{$this->name}_state");
179  $this->valid = isset($country_states[$country->getValue()][$state->getValue()]);
180  if (!$this->valid) {
181  $state->errorMessage = _("State and Country do not match");
182  $state->valid = false;
183  }
184 
185  // TODO validate zip code
186  }
187 
188  return $this->valid;
189  }
190 }
191 
192 /* vim:set ft=php sw=4 sts=4 fdm=marker et : */
__construct($name, $parameters, $form)
multiple class constructor
Definition: address.php:49
validate()
Validate the address data.
Definition: address.php:172
setDefaults()
collects initial values across subclasses.
Definition: address.php:95
static getStates($iso=null)
Gets the Default States list.
Definition: state.php:47
Default address fieldset.
Definition: address.php:39
The fieldset class holds HTML-fieldset specific attributes and methods.
Definition: fieldset.php:50
$valid
Contains element validation status/result.
Definition: element.php:29
addChildElements()
adds address-inputs to fieldset
Definition: address.php:113
getElement($name)
Gets subelement by name.
Definition: container.php:248