Added the zend framework 2 library, the path is specified in line no.26 in zend_modul...
[openemr.git] / interface / modules / zend_modules / library / Zend / Form / View / Helper / FormDateSelect.php
blob44600e39600048aef7a906af0c015918d6620c87
1 <?php
2 /**
3 * Zend Framework (http://framework.zend.com/)
5 * @link http://github.com/zendframework/zf2 for the canonical source repository
6 * @copyright Copyright (c) 2005-2013 Zend Technologies USA Inc. (http://www.zend.com)
7 * @license http://framework.zend.com/license/new-bsd New BSD License
8 */
10 namespace Zend\Form\View\Helper;
12 use DateTime;
13 use IntlDateFormatter;
14 use Zend\Form\ElementInterface;
15 use Zend\Form\Element\DateSelect as DateSelectElement;
16 use Zend\Form\Exception;
17 use Zend\Form\View\Helper\FormMonthSelect as FormMonthSelectHelper;
19 class FormDateSelect extends FormMonthSelectHelper
21 /**
22 * Render a date element that is composed of three selects
24 * @param ElementInterface $element
25 * @throws \Zend\Form\Exception\InvalidArgumentException
26 * @throws \Zend\Form\Exception\DomainException
27 * @return string
29 public function render(ElementInterface $element)
31 if (!$element instanceof DateSelectElement) {
32 throw new Exception\InvalidArgumentException(sprintf(
33 '%s requires that the element is of type Zend\Form\Element\DateSelect',
34 __METHOD__
35 ));
38 $name = $element->getName();
39 if ($name === null || $name === '') {
40 throw new Exception\DomainException(sprintf(
41 '%s requires that the element has an assigned name; none discovered',
42 __METHOD__
43 ));
46 $selectHelper = $this->getSelectElementHelper();
47 $pattern = $this->parsePattern($element->shouldRenderDelimiters());
49 $daysOptions = $this->getDaysOptions($pattern['day']);
50 $monthsOptions = $this->getMonthsOptions($pattern['month']);
51 $yearOptions = $this->getYearsOptions($element->getMinYear(), $element->getMaxYear());
53 $dayElement = $element->getDayElement()->setValueOptions($daysOptions);
54 $monthElement = $element->getMonthElement()->setValueOptions($monthsOptions);
55 $yearElement = $element->getYearElement()->setValueOptions($yearOptions);
57 if ($element->shouldCreateEmptyOption()) {
58 $dayElement->setEmptyOption('');
59 $yearElement->setEmptyOption('');
60 $monthElement->setEmptyOption('');
63 $data = array();
64 $data[$pattern['day']] = $selectHelper->render($dayElement);
65 $data[$pattern['month']] = $selectHelper->render($monthElement);
66 $data[$pattern['year']] = $selectHelper->render($yearElement);
68 $markup = '';
69 foreach ($pattern as $key => $value) {
70 // Delimiter
71 if (is_numeric($key)) {
72 $markup .= $value;
73 } else {
74 $markup .= $data[$value];
78 return $markup;
81 /**
82 * Create a key => value options for days
84 * @param string $pattern Pattern to use for days
85 * @return array
87 protected function getDaysOptions($pattern)
89 $keyFormatter = new IntlDateFormatter($this->getLocale(), null, null, null, null, 'dd');
90 $valueFormatter = new IntlDateFormatter($this->getLocale(), null, null, null, null, $pattern);
91 $date = new DateTime('1970-01-01');
93 $result = array();
94 for ($day = 1; $day <= 31; $day++) {
95 $key = $keyFormatter->format($date->getTimestamp());
96 $value = $valueFormatter->format($date->getTimestamp());
97 $result[$key] = $value;
99 $date->modify('+1 day');
102 return $result;