|
|
@@ -123,30 +123,10 @@ class DateTimeWidget implements WidgetInterface
|
|
|
*/
|
|
|
public function render(array $data, ContextInterface $context)
|
|
|
{
|
|
|
- $data += [
|
|
|
- 'name' => '',
|
|
|
- 'empty' => false,
|
|
|
- 'disabled' => null,
|
|
|
- 'val' => null,
|
|
|
- 'year' => [],
|
|
|
- 'month' => [],
|
|
|
- 'day' => [],
|
|
|
- 'hour' => [],
|
|
|
- 'minute' => [],
|
|
|
- 'second' => [],
|
|
|
- 'meridian' => null,
|
|
|
- ];
|
|
|
+ $data = $this->_normalizeData($data);
|
|
|
|
|
|
$selected = $this->_deconstructDate($data['val'], $data);
|
|
|
|
|
|
- $timeFormat = isset($data['hour']['format']) ? $data['hour']['format'] : null;
|
|
|
- if ($timeFormat === 12 && !isset($data['meridian'])) {
|
|
|
- $data['meridian'] = [];
|
|
|
- }
|
|
|
- if ($timeFormat === 24) {
|
|
|
- $data['meridian'] = false;
|
|
|
- }
|
|
|
-
|
|
|
$templateOptions = [];
|
|
|
foreach ($this->_selects as $select) {
|
|
|
if ($data[$select] === false || $data[$select] === null) {
|
|
|
@@ -179,6 +159,39 @@ class DateTimeWidget implements WidgetInterface
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * Normalize data.
|
|
|
+ *
|
|
|
+ * @param array $data Data to normalize.
|
|
|
+ * @return array Normalized data.
|
|
|
+ */
|
|
|
+ protected function _normalizeData($data)
|
|
|
+ {
|
|
|
+ $data += [
|
|
|
+ 'name' => '',
|
|
|
+ 'empty' => false,
|
|
|
+ 'disabled' => null,
|
|
|
+ 'val' => null,
|
|
|
+ 'year' => [],
|
|
|
+ 'month' => [],
|
|
|
+ 'day' => [],
|
|
|
+ 'hour' => [],
|
|
|
+ 'minute' => [],
|
|
|
+ 'second' => [],
|
|
|
+ 'meridian' => null,
|
|
|
+ ];
|
|
|
+
|
|
|
+ $timeFormat = isset($data['hour']['format']) ? $data['hour']['format'] : null;
|
|
|
+ if ($timeFormat === 12 && !isset($data['meridian'])) {
|
|
|
+ $data['meridian'] = [];
|
|
|
+ }
|
|
|
+ if ($timeFormat === 24) {
|
|
|
+ $data['meridian'] = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* Deconstructs the passed date value into all time units
|
|
|
*
|
|
|
* @param string|int|array|\DateTime|null $value Value to deconstruct.
|
|
|
@@ -569,15 +582,15 @@ class DateTimeWidget implements WidgetInterface
|
|
|
*/
|
|
|
public function secureFields(array $data)
|
|
|
{
|
|
|
+ $data = $this->_normalizeData($data);
|
|
|
+
|
|
|
$fields = [];
|
|
|
- $hourFormat = isset($data['hour']['format']) ? $data['hour']['format'] : null;
|
|
|
- foreach ($this->_selects as $type) {
|
|
|
- if ($type === 'meridian' && ($hourFormat === null || $hourFormat === 24)) {
|
|
|
+ foreach ($this->_selects as $select) {
|
|
|
+ if ($data[$select] === false || $data[$select] === null) {
|
|
|
continue;
|
|
|
}
|
|
|
- if (!isset($data[$type]) || $data[$type] !== false) {
|
|
|
- $fields[] = $data['name'] . '[' . $type . ']';
|
|
|
- }
|
|
|
+
|
|
|
+ $fields[] = $data['name'] . '[' . $select . ']';
|
|
|
}
|
|
|
return $fields;
|
|
|
}
|