Source of file CustomCountryDropdownField.php
Size: 2,588 Bytes - Last Modified: 2021-12-24T06:39:20+00:00
/var/www/docs.ssmods.com/process/src/code/CustomCountryDropdownField.php
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 | <?php /** * A simple extension to dropdown field, pre-configured to list countries. * It will default to the country of the current visitor. * * @package forms * @subpackage fields-relational */ class CustomCountryDropdownField extends DropdownField { /** * Should we default the dropdown to the region determined from the user's locale? * @var bool */ private static $default_to_locale = true; /** * The region code to default to if default_to_locale is set to false, or we can't determine a region from a locale * @var string */ private static $default_country = 'NZ'; protected $extraClasses = array('dropdown','form-control'); /** * Get the locale of the Member, or if we're not logged in or don't have a locale, use the default one * @return string */ protected function locale() { if (($member = Member::currentUser()) && $member->Locale) return $member->Locale; return i18n::get_locale(); } public function __construct($name, $title = null, $source = null, $value = "", $form = null) { if (!is_array($source)) { // Get a list of countries from Zend $source = Zend_Locale::getTranslationList('territory', $this->locale(), 2); // We don't want "unknown country" as an option unset($source['ZZ']); $source = array_combine(array_values($source), array_values($source)); // We want them ordered by display name, not country code // PHP 5.3 has an extension that sorts UTF-8 strings correctly if (class_exists('Collator') && ($collator = Collator::create($this->locale()))) { $collator->asort($source); } // Otherwise just put up with them being weirdly ordered for now else { asort($source); } } parent::__construct($name, ($title === null) ? $name : $title, $source, $value, $form); } public function Field($properties = array()) { $source = $this->getSource(); if (!$this->value || !isset($source[$this->value])) { if ($this->config()->default_to_locale && $this->locale()) { $locale = new Zend_Locale(); $locale->setLocale($this->locale()); $this->value = $locale->getRegion(); } } if (!$this->value || !isset($source[$this->value])) { $this->value = $this->config()->default_country; } return parent::Field(); } } |