Changeset 6946
- Timestamp:
- 01/05/08 16:55:02 (1 year ago)
- Files:
-
- branches/1.1/lib/widget/sfWidgetFormDate.class.php (modified) (2 diffs)
- branches/1.1/lib/widget/sfWidgetFormTime.class.php (modified) (3 diffs)
- branches/1.1/test/unit/widget/sfWidgetFormDateTest.php (modified) (2 diffs)
- branches/1.1/test/unit/widget/sfWidgetFormTimeTest.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/1.1/lib/widget/sfWidgetFormDate.class.php
r6327 r6946 50 50 public function render($name, $value = null, $attributes = array(), $errors = array()) 51 51 { 52 // convert value to a timestamp52 // convert value to an array 53 53 if (is_array($value)) 54 54 { 55 $value = $this->convertDateArrayToTimestamp($value);55 $value = array_merge(array('year' => null, 'month' => null, 'day' => null), $value); 56 56 } 57 57 else 58 58 { 59 59 $value = ctype_digit($value) ? (integer) $value : strtotime($value); 60 $value = array('year' => date('Y', $value), 'month' => date('n', $value), 'day' => date('j', $value)); 60 61 } 61 62 … … 65 66 // days 66 67 $widget = new sfWidgetFormSelect(array('choices' => $this->getOption('can_be_empty') ? array('' => $emptyValues['day']) + $this->getOption('days') : $this->getOption('days'))); 67 $date['%day%'] = $widget->render($name.'[day]', $value ? date('j', $value) : '');68 $date['%day%'] = $widget->render($name.'[day]', $value['day']); 68 69 69 70 // months 70 71 $widget = new sfWidgetFormSelect(array('choices' => $this->getOption('can_be_empty') ? array('' => $emptyValues['month']) + $this->getOption('months') : $this->getOption('months'))); 71 $date['%month%'] = $widget->render($name.'[month]', $value ? date('n', $value) : '');72 $date['%month%'] = $widget->render($name.'[month]', $value['month']); 72 73 73 74 // years 74 75 $widget = new sfWidgetFormSelect(array('choices' => $this->getOption('can_be_empty') ? array('' => $emptyValues['year']) + $this->getOption('years') : $this->getOption('years'))); 75 $date['%year%'] = $widget->render($name.'[year]', $value ? date('Y', $value) : '');76 $date['%year%'] = $widget->render($name.'[year]', $value['year']); 76 77 77 78 return strtr($this->getOption('format'), $date); 78 79 } 79 80 /**81 * Converts an array representing a date to a timestamp.82 *83 * The array can contains the following keys: year, month, day, hour, minute, second84 *85 * @param array An array of date elements86 *87 * @return integer A timestamp88 */89 protected function convertDateArrayToTimestamp($value)90 {91 $clean = mktime(isset($value['hour']) ? $value['hour'] : 0, isset($value['minute']) ? $value['minute'] : 0, isset($value['second']) ? $value['second'] : 0, $value['month'], $value['day'], $value['year']);92 93 return false === $clean ? null : $clean;94 }95 80 } branches/1.1/lib/widget/sfWidgetFormTime.class.php
r6327 r6946 53 53 public function render($name, $value = null, $attributes = array(), $errors = array()) 54 54 { 55 // convert value to a timestamp55 // convert value to an array 56 56 if (is_array($value)) 57 57 { 58 $value = $this->convertDateArrayToTimestamp($value);58 $value = array_merge(array('hour' => null, 'minute' => null, 'second' => null), $value); 59 59 } 60 60 else 61 61 { 62 62 $value = ctype_digit($value) ? (integer) $value : strtotime($value); 63 $value = array('hour' => date('G', $value), 'minute' => date('i', $value), 'second' => date('s', $value)); 63 64 } 64 65 … … 68 69 // hours 69 70 $widget = new sfWidgetFormSelect(array('choices' => $this->getOption('can_be_empty') ? array('' => $emptyValues['hour']) + $this->getOption('hours') : $this->getOption('hours'))); 70 $time['%hour%'] = $widget->render($name.'[hour]', $value ? date('G', $value) : '');71 $time['%hour%'] = $widget->render($name.'[hour]', $value['hour']); 71 72 72 73 // minutes 73 74 $widget = new sfWidgetFormSelect(array('choices' => $this->getOption('can_be_empty') ? array('' => $emptyValues['minute']) + $this->getOption('minutes') : $this->getOption('minutes'))); 74 $time['%minute%'] = $widget->render($name.'[minute]', $value ? date('i', $value) : '');75 $time['%minute%'] = $widget->render($name.'[minute]', $value['minute']); 75 76 76 77 if ($this->getOption('with_seconds')) … … 78 79 // seconds 79 80 $widget = new sfWidgetFormSelect(array('choices' => $this->getOption('can_be_empty') ? array('' => $emptyValues['second']) + $this->getOption('seconds') : $this->getOption('seconds'))); 80 $time['%second%'] = $widget->render($name.'[second]', $value ? date('s', $value) : '');81 $time['%second%'] = $widget->render($name.'[second]', $value['second']); 81 82 } 82 83 83 84 return strtr($this->getOption('with_seconds') ? $this->getOption('format') : $this->getOption('format_without_seconds'), $time); 84 85 } 85 86 /**87 * Converts an array representing a date to a timestamp.88 *89 * The array can contains the following keys: hour, minute, second90 *91 * @param array An array of date elements92 *93 * @return integer A timestamp94 */95 protected function convertDateArrayToTimestamp($value)96 {97 $clean = mktime(isset($value['hour']) ? $value['hour'] : 0, isset($value['minute']) ? $value['minute'] : 0, isset($value['second']) ? $value['second'] : 0);98 99 return false === $clean ? null : $clean;100 }101 86 } branches/1.1/test/unit/widget/sfWidgetFormDateTest.php
r6340 r6946 11 11 require_once(dirname(__FILE__).'/../../bootstrap/unit.php'); 12 12 13 $t = new lime_test( 29, new lime_output_color());13 $t = new lime_test(32, new lime_output_color()); 14 14 15 15 $w = new sfWidgetFormDate(); … … 36 36 } 37 37 38 // date as an array 39 $t->diag('date as an array'); 38 40 $values = array('year' => 2005, 'month' => 10, 'day' => 15); 39 41 $dom->loadHTML($w->render('foo', $values)); 40 42 $css = new sfDomCssSelector($dom); 41 42 // selected date43 43 $t->is($css->matchSingle('#foo_year option[value="'.$values['year'].'"][selected="selected"]')->getValue(), $values['year'], '->render() renders a select tag for the year'); 44 44 $t->is($css->matchSingle('#foo_month option[value="'.$values['month'].'"][selected="selected"]')->getValue(), $values['month'], '->render() renders a select tag for the month'); 45 45 $t->is($css->matchSingle('#foo_day option[value="'.$values['day'].'"][selected="selected"]')->getValue(), $values['day'], '->render() renders a select tag for the day'); 46 46 47 // invalid date 48 $t->diag('invalid date'); 49 $dom->loadHTML($w->render('foo', array('year' => null, 'month' => 10))); 50 $css = new sfDomCssSelector($dom); 51 $t->is($css->matchAll('#foo_year option[value="'.$values['year'].'"][selected="selected"]')->getNodes(), array(), '->render() renders a select tag for the year'); 52 $t->is($css->matchSingle('#foo_month option[value="'.$values['month'].'"][selected="selected"]')->getValue(), 10, '->render() renders a select tag for the month'); 53 $t->is($css->matchAll('#foo_day option[value="'.$values['day'].'"][selected="selected"]')->getNodes(), array(), '->render() renders a select tag for the day'); 54 55 // number of options in each select 56 $t->diag('number of options in each select'); 47 57 $dom->loadHTML($w->render('foo', '2005-10-15')); 48 58 $css = new sfDomCssSelector($dom); 49 50 // number of options in each select51 59 $t->is(count($css->matchAll('#foo_year option')->getNodes()), 12, '->render() renders a select tag for the 10 years around the current one'); 52 60 $t->is(count($css->matchAll('#foo_month option')->getNodes()), 13, '->render() renders a select tag for the 12 months in a year'); branches/1.1/test/unit/widget/sfWidgetFormTimeTest.php
r6340 r6946 11 11 require_once(dirname(__FILE__).'/../../bootstrap/unit.php'); 12 12 13 $t = new lime_test( 29, new lime_output_color());13 $t = new lime_test(32, new lime_output_color()); 14 14 15 15 $w = new sfWidgetFormTime(array('with_seconds' => true)); … … 35 35 } 36 36 37 // time as an array 38 $t->diag('time as an array'); 37 39 $values = array('hour' => 12, 'minute' => '30', 'second' => 35); 38 40 $dom->loadHTML($w->render('foo', $values)); 39 41 $css = new sfDomCssSelector($dom); 40 41 // selected date42 42 $t->is($css->matchSingle('#foo_hour option[value="12"][selected="selected"]')->getValue(), 12, '->render() renders a select tag for the hour'); 43 43 $t->is($css->matchSingle('#foo_minute option[value="30"][selected="selected"]')->getValue(), 30, '->render() renders a select tag for the minute'); 44 44 $t->is($css->matchSingle('#foo_second option[value="35"][selected="selected"]')->getValue(), 35, '->render() renders a select tag for the second'); 45 45 46 // invalid time 47 $t->diag('time as an array'); 48 $values = array('hour' => null, 'minute' => 30); 49 $dom->loadHTML($w->render('foo', $values)); 50 $css = new sfDomCssSelector($dom); 51 $t->is($css->matchAll('#foo_hour option[value="12"][selected="selected"]')->getNodes(), array(), '->render() renders a select tag for the hour'); 52 $t->is($css->matchSingle('#foo_minute option[value="30"][selected="selected"]')->getValue(), 30, '->render() renders a select tag for the minute'); 53 $t->is($css->matchAll('#foo_second option[value="35"][selected="selected"]')->getNodes(), array(), '->render() renders a select tag for the second'); 54 55 // number of options in each select 56 $t->diag('number of options in each select'); 46 57 $dom->loadHTML($w->render('foo', '12:30:35')); 47 58 $css = new sfDomCssSelector($dom); 48 49 // number of options in each select50 59 $t->is(count($css->matchAll('#foo_hour option')->getNodes()), 25, '->render() renders a select tag for the 24 hours in a day'); 51 60 $t->is(count($css->matchAll('#foo_minute option')->getNodes()), 61, '->render() renders a select tag for the 60 minutes in an hour');

