1<?php 2/** 3 * Handles a color attribute. 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 a color attribute. 16 * 17 * Copyright 2011-2016 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 * @category Kolab 24 * @package Kolab_Format 25 * @author Gunnar Wrobel <wrobel@pardus.de> 26 * @license http://www.horde.org/licenses/lgpl21 LGPL 27 * @link http://www.horde.org/libraries/Horde_Kolab_Format 28 */ 29class Horde_Kolab_Format_Xml_Type_Color 30extends Horde_Kolab_Format_Xml_Type_String 31{ 32 /** 33 * Load the value of a node. 34 * 35 * @param DOMNode $node Retrieve value for this node. 36 * @param Horde_Kolab_Format_Xml_Helper $helper A XML helper instance. 37 * @param array $params Additiona parameters for 38 * this parse operation. 39 * 40 * @return mixed|null The value or null if no value was found. 41 */ 42 public function loadNodeValue( 43 $node, 44 Horde_Kolab_Format_Xml_Helper $helper, 45 $params = array() 46 ) 47 { 48 $result = $helper->fetchNodeValue($node);; 49 if ($result !== null) { 50 $this->_checkColor($result, $params); 51 } 52 return $result; 53 } 54 55 /** 56 * Update the specified attribute. 57 * 58 * @param string $name The name of the attribute 59 * to be updated. 60 * @param mixed $value The value to store. 61 * @param DOMNode $parent_node The parent node of the 62 * node that should be 63 * updated. 64 * @param Horde_Kolab_Format_Xml_Helper $helper A XML helper instance. 65 * @param array $params The parameters for this 66 * write operation. 67 * @param DOMNode|NULL $old_node The previous value (or 68 * null if there is none). 69 * 70 * @return DOMNode|boolean The new/updated child node or false if this 71 * failed. 72 * 73 * @throws Horde_Kolab_Format_Exception If converting the data to XML failed. 74 */ 75 public function saveNodeValue( 76 $name, 77 $value, 78 $parent_node, 79 Horde_Kolab_Format_Xml_Helper $helper, 80 $params = array(), 81 $old_node = false 82 ) 83 { 84 if (isset($value)) { 85 $this->_checkColor($value, $params); 86 } 87 return parent::saveNodeValue( 88 $name, $value, $parent_node, $helper, $params, $old_node 89 ); 90 } 91 92 /** 93 * Test if the input seems to be a real color. 94 * 95 * @param string $color The string to check. 96 * @param array $params The parameters for this operation. 97 * 98 * @return NULL 99 * 100 * @throws Horde_Kolab_Format_Exception If the input is no color. 101 */ 102 private function _checkColor($color, $params) 103 { 104 if (!preg_match('/^#[0-9a-fA-F]{6}$/', $color) 105 && !$this->isRelaxed($params)) { 106 throw new Horde_Kolab_Format_Exception( 107 sprintf('Invalid color input "%s"!', $color) 108 ); 109 } 110 } 111 112} 113