*/ // must be run within Dokuwiki if(!defined('DOKU_INC')) die(); class admin_plugin_styling extends DokuWiki_Admin_Plugin { public $ispopup = false; /** * @return int sort number in admin menu */ public function getMenuSort() { return 1000; } /** * @return bool true if only access for superuser, false is for superusers and moderators */ public function forAdminOnly() { return true; } /** * handle the different actions (also called from ajax) */ public function handle() { global $INPUT; $run = $INPUT->extract('run')->str('run'); if(!$run) return; $run = "run_$run"; $this->$run(); } /** * Render HTML output, e.g. helpful text and a form */ public function html() { $class = 'nopopup'; if($this->ispopup) $class = 'ispopup page'; echo '
'.$this->getLang('error').'
'; } else { echo $this->locale_xhtml('intro'); echo ''; echo tpl_locale_xhtml('style'); } } /** * set the color class attribute */ protected function colorClass($key) { static $colors = array( 'text', 'background', 'text_alt', 'background_alt', 'text_neu', 'background_neu', 'border', 'highlight', 'background_site', 'link', 'existing', 'missing', ); if(preg_match('/colou?r/', $key) || in_array(trim($key,'_'), $colors)) { return 'class="color"'; } else { return ''; } } /** * saves the preview.ini (alos called from ajax directly) */ public function run_preview() { global $conf; $ini = $conf['cachedir'].'/preview.ini'; io_saveFile($ini, $this->makeini()); } /** * deletes the preview.ini */ protected function run_reset() { global $conf; $ini = $conf['cachedir'].'/preview.ini'; io_saveFile($ini, ''); } /** * deletes the local style.ini replacements */ protected function run_revert() { $this->replaceini(''); $this->run_reset(); } /** * save the local style.ini replacements */ protected function run_save() { $this->replaceini($this->makeini()); $this->run_reset(); } /** * create the replacement part of a style.ini from submitted data * * @return string */ protected function makeini() { global $INPUT; $ini = "[replacements]\n"; $ini .= ";These overwrites have been generated from the Template styling Admin interface\n"; $ini .= ";Any values in this section will be overwritten by that tool again\n"; foreach($INPUT->arr('tpl') as $key => $val) { $ini .= $key.' = "'.addslashes($val).'"'."\n"; } return $ini; } /** * replaces the replacement parts in the local ini * * @param string $new the new ini contents */ protected function replaceini($new) { global $conf; $ini = DOKU_CONF."tpl/".$conf['template']."/style.ini"; if(file_exists($ini)) { $old = io_readFile($ini); $old = preg_replace('/\[replacements\]\n.*?(\n\[.*]|$)/s', '\\1', $old); $old = trim($old); } else { $old = ''; } io_makeFileDir($ini); io_saveFile($ini, "$old\n\n$new"); } } // vim:ts=4:sw=4:et: