Skip to content

Commit

Permalink
Add time() to FormHelper.
Browse files Browse the repository at this point in the history
Add concrete time input methods to FormHelper. This will let input()
also generate time type inputs.
  • Loading branch information
markstory committed Mar 10, 2014
1 parent eee474b commit 2eb552f
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 0 deletions.
39 changes: 39 additions & 0 deletions src/View/Helper/FormHelper.php
Expand Up @@ -1972,6 +1972,45 @@ protected function _datetimeOptions($options) {
return $options;
}

/**
* Generate time inputs.
*
* ### Options:
*
* - `interval` The interval for the minutes select. Defaults to 1
* - `empty` - If true, the empty select option is shown. If a string,
* that string is displayed as the empty element.
* - `round` - Set to `up` or `down` if you want to force rounding in either direction. Defaults to null.
* - `value` | `default` The default value to be used by the input. A value in `$this->data`
* matching the field name will override this value. If no default is provided `time()` will be used.
* - `timeFormat` The time format to use, either 12 or 24.
* - `second` Set to true to enable seconds drop down.
*
* To control the order of inputs, and any elements/content between the inputs you
* can override the `dateWidget` template. By default the `dateWidget` template is:
*
* `{{month}}{{day}}{{year}}{{hour}}{{minute}}{{second}}{{meridian}}`
*
* @param string $fieldName Prefix name for the SELECT element
* @param array $options Array of Options
* @return string Generated set of select boxes for time formats chosen.
*/
public function time($fieldName, $options = []) {
$options += [
'empty' => true,
'value' => null,
'interval' => 1,
'round' => null,
'timeFormat' => 12,
'second' => false,
];
$options['year'] = $options['month'] = $options['day'] = false;
$options = $this->_initInputField($fieldName, $options);
$options = $this->_datetimeOptions($options);

return $this->widget('datetime', $options);
}

/**
* Sets field defaults and adds field to form security input hash.
* Will also add the error class if the field contains validation errors.
Expand Down
31 changes: 31 additions & 0 deletions tests/TestCase/View/Helper/FormHelperTest.php
Expand Up @@ -3789,6 +3789,37 @@ public function testCheckboxHiddenField() {
$this->assertTags($result, $expected);
}

/**
* Test the time type.
*
* @return void
*/
public function testTime() {
$result = $this->Form->time('start_time', array(
'timeFormat' => 12,
'interval' => 5,
'value' => array('hour' => '4', 'minute' => '30', 'meridian' => 'pm')
));
$this->assertContains('<option value="04" selected="selected">4</option>', $result);
$this->assertContains('<option value="30" selected="selected">30</option>', $result);
$this->assertContains('<option value="pm" selected="selected">pm</option>', $result);
$this->assertNotContains('year', $result);
$this->assertNotContains('month', $result);
$this->assertNotContains('day', $result);

$result = $this->Form->time('start_time', array(
'timeFormat' => 12,
'interval' => 5,
'value' => '2014-03-08 16:30:00'
));
$this->assertContains('<option value="04" selected="selected">4</option>', $result);
$this->assertContains('<option value="30" selected="selected">30</option>', $result);
$this->assertContains('<option value="pm" selected="selected">pm</option>', $result);
$this->assertNotContains('year', $result);
$this->assertNotContains('month', $result);
$this->assertNotContains('day', $result);
}

/**
* testDateTime method
*
Expand Down

0 comments on commit 2eb552f

Please sign in to comment.