*/ // 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 '
'; ptln('

'.$this->getLang('menu').'

'); $this->form(); echo '
'; } /** * Create the actual editing form */ public function form() { global $conf; global $ID; $styleUtil = new \dokuwiki\StyleUtils(); $styleini = $styleUtil->cssStyleini($conf['template'], true); $replacements = $styleini['replacements']; if($this->ispopup) { $target = DOKU_BASE.'lib/plugins/styling/popup.php'; } else { $target = wl($ID, array('do' => 'admin', 'page' => 'styling')); } if(empty($replacements)) { echo '

'.$this->getLang('error').'

'; } else { echo $this->locale_xhtml('intro'); echo '
'; echo ''; foreach($replacements as $key => $value) { $name = tpl_getLang($key); if(empty($name)) $name = $this->getLang($key); if(empty($name)) $name = $key; echo ''; echo ''; echo ''; echo ''; } echo '
colorClass($key).' dir="ltr" />
'; echo '

'; echo ' '; echo ''; #FIXME only if preview.ini exists echo '

'; echo '

'; echo ''; echo '

'; echo '

'; echo ''; #FIXME only if local.ini exists echo '

'; 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: