1<?php 2/** 3 * ODTMasterPageStyle: class for ODT text list styles. 4 * 5 * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 6 * @author LarsDW223 7 */ 8 9require_once DOKU_INC.'lib/plugins/odt/ODT/XMLUtil.php'; 10require_once DOKU_INC.'lib/plugins/odt/ODT/styles/ODTStyle.php'; 11 12/** 13 * The ODTMasterPageStyle class 14 */ 15class ODTMasterPageStyle extends ODTStyle 16{ 17 static $master_fields = array( 18 // Fields belonging to "style:master-page" 19 'style-name' => array ('style:name', 'style', false), 20 'style-display-name' => array ('style:display-name', 'style', false), 21 'style-page-layout-name' => array ('style:page-layout-name', 'style', false), 22 'draw-style-name' => array ('draw:style-name', 'style', false), 23 'style-next' => array ('style:next-style-name', 'style', true), 24 ); 25 26 static $header_footer_fields = array( 27 // Fields belonging to "style:header", "style:footer", 28 // "style:header-left" and "style:footer-left" 29 // The content/child-elements of "style:header" are saved as is 30 'style-display' => array ('style:display', 'header', true), 31 ); 32 33 protected $master_style = array(); 34 protected $style_header = array(); 35 protected $style_footer = array(); 36 protected $style_header_left = array(); 37 protected $style_footer_left = array(); 38 protected $content_header = NULL; 39 protected $content_footer = NULL; 40 protected $content_header_left = NULL; 41 protected $content_footer_left = NULL; 42 43 /** 44 * Get the element name for the ODT XML encoding of the style. 45 */ 46 public function getElementName() { 47 return 'style:master-page'; 48 } 49 50 /** 51 * Set style properties by importing values from a properties array. 52 * Properties might be disabled by setting them in $disabled. 53 * The style must have been previously created. 54 * 55 * @param $properties Properties to be imported 56 * @param $disabled Properties to be ignored 57 */ 58 public function importProperties($properties, $disabled=array()) { 59 $this->importPropertiesInternal(self::$master_fields, $properties, $disabled, $this->master_style); 60 } 61 62 /** 63 * Check if a style is a common style. 64 * 65 * @return bool Is common style 66 */ 67 public function mustBeCommonStyle() { 68 return false; 69 } 70 71 /** 72 * Set a property. 73 * 74 * @param $property The name of the property to set 75 * @param $value New value to set 76 */ 77 public function setProperty($property, $value) { 78 if (array_key_exists ($property, self::$master_fields)) { 79 $this->setPropertyInternal 80 ($property, self::$master_fields [$property][0], $value, self::$master_fields [$property][1], $this->master_style); 81 return; 82 } 83 } 84 85 /** 86 * Get the value of a property. 87 * 88 * @param $property The property name 89 * @return string The current value of the property 90 */ 91 public function getProperty($property) { 92 if (array_key_exists ($property, self::$master_fields)) { 93 return $this->master_style [$property]['value']; 94 } 95 return NULL; 96 } 97 98 /** 99 * Create new style by importing ODT style definition. 100 * 101 * @param $xmlCode Style definition in ODT XML format 102 * @return ODTStyle New specific style 103 */ 104 static public function importODTStyle($xmlCode) { 105 $style = new ODTMasterPageStyle(); 106 107 // Get attributes for element 'style:master-page' 108 $open = XMLUtil::getElementOpenTag('style:master-page', $xmlCode); 109 if (!empty($open)) { 110 $style->importODTStyleInternal(self::$master_fields, $open, $style->master_style); 111 } 112 113 // Get attributes for element 'style:header' 114 $open = XMLUtil::getElementOpenTag('style:header', $xmlCode); 115 if (!empty($open)) { 116 $style->importODTStyleInternal(self::$header_footer_fields, $open, $style->style_header); 117 $content_header = XMLUtil::getElementContent ('style:header', $xmlCode); 118 } 119 120 // Get attributes for element 'style:footer' 121 $open = XMLUtil::getElementOpenTag('style:footer', $xmlCode); 122 if (!empty($open)) { 123 $style->importODTStyleInternal(self::$header_footer_fields, $open, $style->style_footer); 124 $content_footer = XMLUtil::getElementContent ('style:footer', $xmlCode); 125 } 126 127 // Get attributes for element 'style:header-left' 128 $open = XMLUtil::getElementOpenTag('style:header-left', $xmlCode); 129 if (!empty($open)) { 130 $style->importODTStyleInternal(self::$header_footer_fields, $open, $style->style_header_left); 131 $content_header_left = XMLUtil::getElementContent ('style:header-left', $xmlCode); 132 } 133 134 // Get attributes for element 'style:footer-left' 135 $open = XMLUtil::getElementOpenTag('style:footer-left', $xmlCode); 136 if (!empty($open)) { 137 $style->importODTStyleInternal(self::$header_footer_fields, $open, $style->style_footer_left); 138 $content_footer_left = XMLUtil::getElementContent ('style:footer-left', $xmlCode); 139 } 140 141 return $style; 142 } 143 144 /** 145 * Encode current style values in a string and return it. 146 * 147 * @return string ODT XML encoded style 148 */ 149 public function toString() { 150 $style = ''; 151 $master = ''; 152 $header = ''; 153 $footer = ''; 154 $header_left = ''; 155 $footer_left = ''; 156 157 // Get master style ODT properties 158 foreach ($this->master_style as $property => $items) { 159 $master .= $items ['odt_property'].'="'.$items ['value'].'" '; 160 } 161 162 // Get header ODT properties 163 foreach ($this->style_header as $property => $items) { 164 $header .= $items ['odt_property'].'="'.$items ['value'].'" '; 165 } 166 167 // Get footer ODT properties 168 foreach ($this->style_footer as $property => $items) { 169 $footer .= $items ['odt_property'].'="'.$items ['value'].'" '; 170 } 171 172 // Get header-left ODT properties 173 foreach ($this->style_header_left as $property => $items) { 174 $header_left .= $items ['odt_property'].'="'.$items ['value'].'" '; 175 } 176 177 // Get footer-left ODT properties 178 foreach ($this->style_footer_left as $property => $items) { 179 $footer_left .= $items ['odt_property'].'="'.$items ['value'].'" '; 180 } 181 182 // Build style. 183 $style = '<style:master-page '.$master.">\n"; 184 if ( !empty($header) || !empty($content_header) ) { 185 $style .= '<style:header '.$header.">\n"; 186 $style .= $content_header; 187 $style .= '</style:header>'."\n"; 188 } 189 if ( !empty($footer) || !empty($content_footer) ) { 190 $style .= '<style:footer '.$footer.">\n"; 191 $style .= $content_footer; 192 $style .= '</style:footer>'."\n"; 193 } 194 if ( !empty($header_left) || !empty($content_header_left) ) { 195 $style .= '<style:header-left '.$header_left.">\n"; 196 $style .= $content_header_left; 197 $style .= '</style:header-left>'."\n"; 198 } 199 if ( !empty($footer_left) || !empty($content_footer_left) ) { 200 $style .= '<style:footer-left '.$footer_left.">\n"; 201 $style .= $content_footer_left; 202 $style .= '</style:footer-left>'."\n"; 203 } 204 $style .= '</style:master-page'.">\n"; 205 return $style; 206 } 207} 208 209