'setParam', 'desc' => 'set config param $name to $value.', 'params' => array('name' => 'string', 'value' => 'mixed'), ); $result[] = array( 'name' => 'getParam', 'desc' => 'returns the current value for config param $value', 'params' => array('name' => 'string'), 'return' => array('value' => 'mixed'), ); $result[] = array( 'name' => 'isParam', 'desc' => 'Is $name a known config param?', 'params' => array('name' => 'string'), 'return' => array('isParam' => 'bool'), ); $result[] = array( 'name' => 'isRefreshable', 'desc' => 'Is $name a refreshable config param?', 'params' => array('name' => 'string'), 'return' => array('isRefreshable' => 'bool'), ); $result[] = array( 'name' => 'hasDWGlobalSetting', 'desc' => 'Does param $name have a corresponding global DW param to inherit from?', 'params' => array('name' => 'string'), 'return' => array('hasDWGlobalSetting' => 'bool'), ); $result[] = array( 'name' => 'isGlobalSetting', 'desc' => 'Does param $name have a global config setting?', 'params' => array('name' => 'string'), 'return' => array('isGlobalSetting' => 'bool'), ); $result[] = array( 'name' => 'isURLSetting', 'desc' => 'Does param $name have a URL setting?', 'params' => array('name' => 'string'), 'return' => array('isURLSetting' => 'bool'), ); $result[] = array( 'name' => 'isMetaSetting', 'desc' => 'Does param $name have a Metadata setting?', 'params' => array('name' => 'string'), 'return' => array('isMetaSetting' => 'bool'), ); $result[] = array( 'name' => 'addingToMetaIsAllowed', 'desc' => 'Is it allowed to add $name (at position $pos) to the meta data?', 'params' => array('name' => 'string', 'pos' => 'integer'), 'return' => array('addingAllowed' => 'bool'), ); $result[] = array( 'name' => 'load', 'desc' => 'Load the corrent settings from the global config, URL params or syntax tags/meta data', 'params' => array('warnings' => 'string'), 'return' => array('mode' => 'string'), ); $result[] = array( 'name' => 'refresh', 'desc' => 'Refresh the corrent settings from the global config, URL params or syntax tags/meta data', ); $result[] = array( 'name' => 'hash', 'desc' => 'Get MD5 hash of currently stored settings.', 'return' => array('hash' => 'string'), ); return $result; } /** * Constructor. Loads helper plugins. */ public function __construct() { // Set up empty array with known config parameters // Option 'dformat', taken from global value. $this->config ['dformat'] = array('value' => NULL, 'DWGlobalName' => 'dformat', 'hasGlobal' => false, 'hasURL' => false, 'hasMeta' => false, 'addMetaAtStartOnly' => false, 'refresh' => false); // Option 'useheading', taken from global value. $this->config ['useheading'] = array('value' => NULL, 'DWGlobalName' => 'useheading', 'hasGlobal' => false, 'hasURL' => false, 'hasMeta' => false, 'addMetaAtStartOnly' => false, 'refresh' => false); // Temp directory, taken from global value. $this->config ['tmpdir'] = array('value' => NULL, 'DWGlobalName' => 'tmpdir', 'hasGlobal' => false, 'hasURL' => false, 'hasMeta' => false, 'addMetaAtStartOnly' => false, 'refresh' => false); // Media directory, taken from global value. $this->config ['mediadir'] = array('value' => NULL, 'DWGlobalName' => 'mediadir', 'hasGlobal' => false, 'hasURL' => false, 'hasMeta' => false, 'addMetaAtStartOnly' => false, 'refresh' => false); // Data directory, taken from global value. $this->config ['datadir'] = array('value' => NULL, 'DWGlobalName' => 'datadir', 'hasGlobal' => false, 'hasURL' => false, 'hasMeta' => false, 'addMetaAtStartOnly' => false, 'refresh' => false); // Save directory, taken from global value. $this->config ['savedir'] = array('value' => NULL, 'DWGlobalName' => 'savedir', 'hasGlobal' => false, 'hasURL' => false, 'hasMeta' => false, 'addMetaAtStartOnly' => false, 'refresh' => false); // Option 'showexportbutton' $this->config ['showexportbutton'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => false, 'hasMeta' => false, 'addMetaAtStartOnly' => false, 'refresh' => false); // Option 'showpdfexportbutton' $this->config ['showpdfexportbutton'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => false, 'hasMeta' => false, 'addMetaAtStartOnly' => false, 'refresh' => false); // Template directory. $this->config ['tpl_dir'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => false, 'hasMeta' => false, 'addMetaAtStartOnly' => false, 'refresh' => false); // ODT template. $this->config ['odt_template'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => false, 'refresh' => false); // Template =ODT template, old parameter, // included for backwards compatibility. $this->config ['template'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => false, 'refresh' => false); // CSS usage. $this->config ['css_usage'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => false, 'refresh' => false); // CSS template. $this->config ['css_template'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => false, 'refresh' => false); // CSS media selector (screen or print) $this->config ['media_sel'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => false, 'refresh' => false); // Standard font size for CSS import = value for 1em/100% $this->config ['css_font_size'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => false, 'refresh' => false); // Apply CSS font size to ODT template styles/scratch styles $this->config ['apply_fs_to_non_css'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => false, 'refresh' => false); // Twips per pixel x and y $this->config ['twips_per_pixel_x'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => false, 'refresh' => false); $this->config ['twips_per_pixel_y'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => false, 'refresh' => false); // Page format, orientation and margins // // This settings also have a syntax tag changing the page format // and introducing a pagebreak. The meta setting changes the start // page format and may only be set if at the start of the document. // Otherwise changing the page fomat in the document would also // change the format of the first page! $this->config ['format'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => true, 'refresh' => false); $this->config ['orientation'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => true, 'refresh' => false); $this->config ['margin_top'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => true, 'refresh' => false); $this->config ['margin_right'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => true, 'refresh' => false); $this->config ['margin_bottom'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => true, 'refresh' => false); $this->config ['margin_left'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => true, 'refresh' => false); $this->config ['page'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => false, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => true, 'refresh' => false); // Disable links $this->config ['disable_links'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => false, 'refresh' => true); // TOC: maxlevel $this->config ['toc_maxlevel'] = array('value' => NULL, 'DWGlobalName' => 'maxtoclevel', 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => false, 'refresh' => false); // TOC: toc_leader_sign $this->config ['toc_leader_sign'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => false, 'refresh' => false); // TOC: toc_indents $this->config ['toc_indents'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => false, 'refresh' => false); // TOC: toc_pagebreak $this->config ['toc_pagebreak'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => false, 'refresh' => false); // TOC-Style (default, assigned to each level) $this->config ['toc_style'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => false, 'refresh' => false); // Index display in browser $this->config ['index_in_browser'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => false, 'refresh' => false); // Index display in browser $this->config ['outline_list_style'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => false, 'refresh' => false); // Command line template for pdf conversion $this->config ['convert_to_pdf'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => false, 'addMetaAtStartOnly' => false, 'refresh' => false); // List-Label-Alignment (ordered lists) $this->config ['olist_label_align'] = array('value' => NULL, 'DWGlobalName' => NULL, 'hasGlobal' => true, 'hasURL' => true, 'hasMeta' => true, 'addMetaAtStartOnly' => false, 'refresh' => false); } /** * Set a config parameter. * @param string $name Name of the config param * @param string $value Value to be set */ public function setParam($name, $value) { if (!empty($name)) { $this->config [$name]['value'] = $value; } } /** * Get a config parameter. * * @param string $name Name of the config param * @return mixed Current value of param $name */ public function getParam($name) { return $this->config [$name]['value']; } /** * Is the $name specified the name of a ODT plugin config parameter? * * @param string $name Name of the config param * @return bool Is it a config parameter? */ public function isParam($name) { if (!empty($name)) { return array_key_exists($name, $this->config); } return false; } /** * Does the config parameter need a refresh? * * @param string $name Name of the config param * @return bool is refreshable */ public function isRefreshable($name) { if (!empty($name)) { return $this->config [$name]['refresh']; } return false; } /** * Does the config parameter have a DokuWiki global config setting? * * @param string $name Name of the config param * @return string Name of global DokuWiki option or NULL */ public function hasDWGlobalSetting($name) { if (!empty($name)) { return $this->config [$name]['DWGlobalName']; } return false; } /** * Does the config parameter have a global config setting? * * @param string $name Name of the config param * @return bool is global setting */ public function isGlobalSetting($name) { if (!empty($name)) { return $this->config [$name]['hasGlobal']; } return false; } /** * Does the config parameter have a URL config setting? * * @param string $name Name of the config param * @return bool is URL Setting */ public function isURLSetting($name) { if (!empty($name)) { return $this->config [$name]['hasURL']; } return false; } /** * Does the config parameter have a Meta-Data config setting? * * @param string $name Name of the config param * @return bool is Meta Setting */ public function isMetaSetting($name) { if (!empty($name)) { return $this->config [$name]['hasMeta']; } return false; } /** * May the parameter be added to the Meta data? * * @param string $name Name of the config param * @param string $pos Poistion in wiki page * @return bool */ public function addingToMetaIsAllowed($name, $pos) { if (!empty($name) and $this->isMetaSetting($name)) { if ($pos != 0 and $this->config [$name]['addMetaAtStartOnly']) { return false; } return true; } return false; } /** * Load all config parameters: global config options, URL and syntax tag. * Check export mode: scratch, ODT template or CSS template? * * @param string $warning (reference) warning message * @return string Export mode to be used */ protected function loadIntern(&$warning, $refresh) { global $conf, $ID, $INPUT; if ( !isset($this->mode) ) { $this->mode = 'scratch'; } // Get all known config parameters, see __construct(). $odt_meta = p_get_metadata($ID, 'relation odt'); foreach ($this->config as $name => $value) { if ( !$refresh || $this->isRefreshable($name) ) { $value = $this->getParam ($name); // Check DokuWiki global configuration. $dw_name = $this->hasDWGlobalSetting ($name); if (!$value && isset($conf[$dw_name])) { $this->setParam ($name, $conf[$dw_name]); } // Check plugin configuration. if (!$value && $this->isGlobalSetting($name) && $this->getConf($name)) { $this->setParam ($name, $this->getConf($name)); } // Check if parameter is provided in the URL. $url_param = $INPUT->get->str($name, $value, true); if ($this->isURLSetting($name) && isset($url_param)) { $this->setParam ($name, $url_param); } // Check meta data in case syntax tags have written // the config parameters to it. unset($value); if (isset($odt_meta[$name])) $value = $odt_meta[$name]; if($this->isMetaSetting($name) && !empty($value)) { $this->setParam ($name, $value); } // ODT-Template based export required? // (old parameter) $template = $this->getParam ('template'); if ( $name == 'template' && !empty($template) ) { // ODT-Template chosen if (file_exists($this->getParam('mediadir').'/'.$this->getParam('tpl_dir')."/".$this->getParam ('template'))) { //template found $this->mode = 'ODT template'; } else { // template chosen but not found : warn the user and use the default template $warning = sprintf($this->getLang('tpl_not_found'),$this->getParam ('template'),$this->getParam ('tpl_dir')); $this->messages .= $warning; } } // ODT-Template based export required? $odt_template = $this->getParam ('odt_template'); if ( $name == 'odt_template' && !empty($odt_template) ) { // ODT-Template chosen if (file_exists($this->getParam('mediadir').'/'.$this->getParam('tpl_dir')."/".$this->getParam ('odt_template'))) { // Template found: ODT or CSS? if ( strpos ($odt_template, '.css') === false ) { $this->mode = 'ODT template'; } else { $this->mode = 'CSS template'; } } else { // template chosen but not found : warn the user and use the default template $warning = sprintf($this->getLang('tpl_not_found'),$this->getParam ('odt_template'),$this->getParam ('tpl_dir')); } } // Convert Yes/No-String in 'disable_links' to boolean. if ( $name == 'disable_links' ) { $temp = $this->getParam ('disable_links'); if ( strcasecmp($temp, 'Yes') != 0 && $temp !== true ) { $this->setParam ('disable_links', false); } else { $this->setParam ('disable_links', true); } } // Convert Yes/No-String in 'toc_pagebreak' to boolean. if ( $name == 'toc_pagebreak' ) { $temp = $this->getParam ('toc_pagebreak'); if ( strcasecmp($temp, 'Yes') == 0 || $temp === true ) { $this->setParam ('toc_pagebreak', true); } else { $this->setParam ('toc_pagebreak', false); } } } } $template = $this->getParam ('template'); $odt_template = $this->getParam ('odt_template'); if (!empty($template) && empty($odt_template)) { $this->setParam ('odt_template', $this->getParam ('template')); } return $this->mode; } /** * Load config parameters. See loadIntern(). * * @param string $warning (reference) warning message * @return string Export mode to be used */ public function load(&$warning) { return $this->loadIntern($warning, false); } /** * Refresh config parameters. See loadIntern(). */ public function refresh() { $this->loadIntern($warning, true); } /** * Get hash for current config content. * * @return string The calculated hash */ public function hash() { $content = ''; // Get all known config parameters in one string foreach ($this->config as $name => $value) { $content .= $name.'='.$this->getParam ($name).';'; } // Return the md5 hash for it. return hash('md5', $content); } /** * Get warning messages from loading the config which * can be presented to the user. * * @return string Collected messages. */ public function getMessages() { return $this->messages; } /** * Set conversion option. * * @param string $format Conversion format (e.g. 'pdf') */ public function setConvertTo($format) { $this->convert_to = $format; } /** * Set conversion option. * * @return string Currently set conversion option * or NULL (output ODT format) */ public function getConvertTo() { return ($this->convert_to); } }