00001 <?php
00009 class TimeField extends AbstractField
00010 {
00014 protected $mode = '12';
00015
00024 public function __construct($name, Form &$parentForm, array $attribs = array())
00025 {
00026 parent::__construct($name, $parentForm, $attribs);
00027
00028 if(isset($this->extras['mode']))
00029 {
00030 if($this->extras['mode'] == 12 || $this->extras['mode'] == 24)
00031 $this->mode = $this->extras['mode'];
00032 else
00033 throw new Exception("Invalid time field mode: $this->extras[mode]");
00034
00035 unset($this->extras['mode']);
00036 }
00037 else
00038 $this->mode = 12;
00039
00040 $this->value = 'now';
00041 }
00042
00043
00047 public function drawInput()
00048 {
00049 $time = getdate(strtotime($this->value));
00050
00051 # Hour
00052 $displayHour = $this->mode == 12 ? ($time['hours'] > 12 ? $time['hours'] - 12 : $time['hours'])
00053 : $time['hours'];
00054
00055 echo "<select name='{$this->name}_hour'>";
00056 for($i = 1; $i <= $this->mode; $i++)
00057 echo "\t<option value='$i'", $displayHour == $i ? ' selected="selected">' : '>',
00058 $i, "</option>\n";
00059 echo "</select>:";
00060
00061 # Minute
00062 echo "<select name='{$this->name}_minute'>";
00063 for($i = 0; $i <= 60; $i++)
00064 echo "<option value='$i'", $time['minutes'] == $i ? ' selected="selected">' : '>',
00065 str_pad($i, 2, 0, STR_PAD_LEFT), "</option>\n";
00066
00067 echo "</select>";
00068
00069 # Meridiem
00070 if($this->mode == 12)
00071 {
00072 echo "\n<select name='{$this->name}_meridiem'>";
00073 echo '<option value="am"' . ($time['hours'] <= 12 ? ' selected="selected">' : '>') . 'AM</option>';
00074 echo '<option value="pm"' . ($time['hours'] > 12 ? ' selected="selected">' : '>') . 'PM</option>';
00075 echo "</select>\n";
00076 }
00077 }
00078
00082 public function setDataFromRequest()
00083 {
00084 if(isset($_REQUEST["{$this->name}_meridiem"]))
00085 $hour = $_REQUEST["{$this->name}_meridiem"] == 'pm' ? $_REQUEST["{$this->name}_hour"] + 12 :
00086 (int)$_REQUEST["{$this->name}_hour"];
00087 else
00088 $hour = (int)$_REQUEST["{$this->name}_hour"];
00089
00090 $this->value = "$hour:" . str_pad($_REQUEST["{$this->name}_minute"], 2, 0);
00091 }
00092 }
00093 ?>