1: <?php
2: /**
3: * Handles date attributes.
4: *
5: * PHP version 5
6: *
7: * @category Kolab
8: * @package Kolab_Format
9: * @author Gunnar Wrobel <wrobel@pardus.de>
10: * @license http://www.horde.org/licenses/lgpl21 LGPL
11: * @link http://www.horde.org/libraries/Horde_Kolab_Format
12: */
13:
14: /**
15: * Handles date attributes.
16: *
17: * Copyright 2011-2012 Horde LLC (http://www.horde.org/)
18: *
19: * See the enclosed file COPYING for license information (LGPL). If you did not
20: * receive this file, see
21: * http://www.horde.org/licenses/lgpl21.
22: *
23: * @since Horde_Kolab_Format 1.1.0
24: *
25: * @category Kolab
26: * @package Kolab_Format
27: * @author Gunnar Wrobel <wrobel@pardus.de>
28: * @license http://www.horde.org/licenses/lgpl21 LGPL
29: * @link http://www.horde.org/libraries/Horde_Kolab_Format
30: */
31: class Horde_Kolab_Format_Xml_Type_Date
32: extends Horde_Kolab_Format_Xml_Type_String
33: {
34: /**
35: * Load the value of a node.
36: *
37: * @param DOMNode $node Retrieve value for this node.
38: * @param Horde_Kolab_Format_Xml_Helper $helper A XML helper instance.
39: * @param array $params Additiona parameters for
40: * this parse operation.
41: *
42: * @return mixed|null The value or null if no value was found.
43: */
44: public function loadNodeValue(
45: $node,
46: Horde_Kolab_Format_Xml_Helper $helper,
47: $params = array()
48: )
49: {
50: $result = $helper->fetchNodeValue($node);
51: $tz = $node->getAttribute('tz');
52: if (empty($tz)) {
53: /**
54: * @todo Be more strict once KEP2 has been completely adopted
55: * if (!$this->isRelaxed()) throw new Horde_Kolab_Format_Exception();
56: */
57: $tz = 'UTC';
58: }
59: $date = Horde_Kolab_Format_Date::readDate($result, $tz);
60: if ($date === false && !$this->isRelaxed($params)) {
61: throw new Horde_Kolab_Format_Exception(
62: sprintf('Invalid date input "%s"!', $result)
63: );
64: }
65: return $date;
66: }
67:
68: /**
69: * Update the specified attribute.
70: *
71: * @param string $name The name of the attribute
72: * to be updated.
73: * @param mixed $value The value to store.
74: * @param DOMNode $parent_node The parent node of the
75: * node that should be
76: * updated.
77: * @param Horde_Kolab_Format_Xml_Helper $helper A XML helper instance.
78: * @param array $params The parameters for this
79: * write operation.
80: * @param DOMNode|NULL $old_node The previous value (or
81: * null if there is none).
82: *
83: * @return DOMNode|boolean The new/updated child node or false if this
84: * failed.
85: *
86: * @throws Horde_Kolab_Format_Exception If converting the data to XML failed.
87: */
88: public function saveNodeValue(
89: $name,
90: $value,
91: $parent_node,
92: Horde_Kolab_Format_Xml_Helper $helper,
93: $params = array(),
94: $old_node = false
95: )
96: {
97: if (!isset($value) || !$value instanceOf DateTime) {
98: throw new Horde_Kolab_Format_Exception(
99: sprintf(
100: 'Missing or invalid date for the "%s" entry!',
101: $name
102: )
103: );
104: }
105: $date = Horde_Kolab_Format_Date::writeDate($value);
106: $node = parent::saveNodeValue(
107: $name, $date, $parent_node, $helper, $params, $old_node
108: );
109: $node->setAttribute('tz', $value->getTimezone()->getName());
110: return $node;
111: }
112: }
113: