1*da0ae2c0SAndreas Gohr<?php 2*da0ae2c0SAndreas Gohr/** 3*da0ae2c0SAndreas Gohr * DokuWiki Plugin farmer (Admin Component) 4*da0ae2c0SAndreas Gohr * 5*da0ae2c0SAndreas Gohr * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 6*da0ae2c0SAndreas Gohr * @author Michael Große <grosse@cosmocode.de> 7*da0ae2c0SAndreas Gohr */ 8*da0ae2c0SAndreas Gohr 9*da0ae2c0SAndreas Gohr// must be run within Dokuwiki 10*da0ae2c0SAndreas Gohruse dokuwiki\Form\Form; 11*da0ae2c0SAndreas Gohr 12*da0ae2c0SAndreas Gohrif(!defined('DOKU_INC')) die(); 13*da0ae2c0SAndreas Gohr 14*da0ae2c0SAndreas Gohrclass admin_plugin_farmer_config extends DokuWiki_Admin_Plugin { 15*da0ae2c0SAndreas Gohr 16*da0ae2c0SAndreas Gohr /** 17*da0ae2c0SAndreas Gohr * @return bool admin only! 18*da0ae2c0SAndreas Gohr */ 19*da0ae2c0SAndreas Gohr public function forAdminOnly() { 20*da0ae2c0SAndreas Gohr return false; 21*da0ae2c0SAndreas Gohr } 22*da0ae2c0SAndreas Gohr 23*da0ae2c0SAndreas Gohr /** 24*da0ae2c0SAndreas Gohr * Should carry out any processing required by the plugin. 25*da0ae2c0SAndreas Gohr */ 26*da0ae2c0SAndreas Gohr public function handle() { 27*da0ae2c0SAndreas Gohr global $INPUT; 28*da0ae2c0SAndreas Gohr global $ID; 29*da0ae2c0SAndreas Gohr if(!$INPUT->has('farmconf')) return; 30*da0ae2c0SAndreas Gohr if(!checkSecurityToken()) return; 31*da0ae2c0SAndreas Gohr 32*da0ae2c0SAndreas Gohr $ini = DOKU_INC . 'conf/farm.ini'; 33*da0ae2c0SAndreas Gohr $data = "; Farm config created by the farmer plugin\n"; 34*da0ae2c0SAndreas Gohr $data .= $this->createIni($INPUT->arr('farmconf')); 35*da0ae2c0SAndreas Gohr io_saveFile($ini, $data); 36*da0ae2c0SAndreas Gohr 37*da0ae2c0SAndreas Gohr $self = wl($ID, array('do' => 'admin', 'page' => 'farmer', 'sub' => 'config'), true, '&'); 38*da0ae2c0SAndreas Gohr send_redirect($self); 39*da0ae2c0SAndreas Gohr } 40*da0ae2c0SAndreas Gohr 41*da0ae2c0SAndreas Gohr /** 42*da0ae2c0SAndreas Gohr * Render HTML output, e.g. helpful text and a form 43*da0ae2c0SAndreas Gohr */ 44*da0ae2c0SAndreas Gohr public function html() { 45*da0ae2c0SAndreas Gohr global $FARMCORE; 46*da0ae2c0SAndreas Gohr $farmconf = $FARMCORE->getConfig(); 47*da0ae2c0SAndreas Gohr 48*da0ae2c0SAndreas Gohr $form = new Form(array('method' => 'post')); 49*da0ae2c0SAndreas Gohr 50*da0ae2c0SAndreas Gohr $form->addFieldsetOpen($this->getLang('conf_inherit')); 51*da0ae2c0SAndreas Gohr foreach($farmconf['inherit'] as $key => $val) { 52*da0ae2c0SAndreas Gohr $form->setHiddenField("farmconf[inherit][$key]", 0); 53*da0ae2c0SAndreas Gohr $chk = $form->addCheckbox("farmconf[inherit][$key]", $this->getLang('conf_inherit_' . $key))->useInput(false); 54*da0ae2c0SAndreas Gohr if($val) $chk->attr('checked', 'checked'); 55*da0ae2c0SAndreas Gohr } 56*da0ae2c0SAndreas Gohr $form->addFieldsetClose(); 57*da0ae2c0SAndreas Gohr 58*da0ae2c0SAndreas Gohr $form->addFieldsetOpen($this->getLang('conf_notfound')); 59*da0ae2c0SAndreas Gohr $form->addTagOpen('select')->attr('name', 'farmconf[notfound][show]'); 60*da0ae2c0SAndreas Gohr foreach(array('farmer', '404', 'list', 'redirect') as $key) { 61*da0ae2c0SAndreas Gohr $opt = $form->addTagOpen('option')->attr('value', $key); 62*da0ae2c0SAndreas Gohr if($farmconf['notfound']['show'] == $key) $opt->attr('selected', 'selected'); 63*da0ae2c0SAndreas Gohr $form->addHTML($this->getLang('conf_notfound_' . $key)); 64*da0ae2c0SAndreas Gohr $form->addTagClose('option'); 65*da0ae2c0SAndreas Gohr } 66*da0ae2c0SAndreas Gohr $form->addTagClose('select'); 67*da0ae2c0SAndreas Gohr $form->addTextInput('farmconf[notfound][url]', $this->getLang('conf_notfound_url'))->val($farmconf['notfound']['url']); 68*da0ae2c0SAndreas Gohr $form->addFieldsetClose(); 69*da0ae2c0SAndreas Gohr 70*da0ae2c0SAndreas Gohr $form->addButton('save', $this->getLang('save')); 71*da0ae2c0SAndreas Gohr echo $form->toHTML(); 72*da0ae2c0SAndreas Gohr } 73*da0ae2c0SAndreas Gohr 74*da0ae2c0SAndreas Gohr /** 75*da0ae2c0SAndreas Gohr * Simple function to create an ini file 76*da0ae2c0SAndreas Gohr * 77*da0ae2c0SAndreas Gohr * Does no escaping, but should suffice for our use case 78*da0ae2c0SAndreas Gohr * 79*da0ae2c0SAndreas Gohr * @link http://stackoverflow.com/a/5695202/172068 80*da0ae2c0SAndreas Gohr * @param array $data The data to transform 81*da0ae2c0SAndreas Gohr * @return string 82*da0ae2c0SAndreas Gohr */ 83*da0ae2c0SAndreas Gohr public function createIni($data) { 84*da0ae2c0SAndreas Gohr $res = array(); 85*da0ae2c0SAndreas Gohr foreach($data as $key => $val) { 86*da0ae2c0SAndreas Gohr if(is_array($val)) { 87*da0ae2c0SAndreas Gohr $res[] = ''; 88*da0ae2c0SAndreas Gohr $res[] = "[$key]"; 89*da0ae2c0SAndreas Gohr foreach($val as $skey => $sval) { 90*da0ae2c0SAndreas Gohr $res[] = "$skey = " . (is_numeric($sval) ? $sval : '"' . $sval . '"'); 91*da0ae2c0SAndreas Gohr } 92*da0ae2c0SAndreas Gohr } else { 93*da0ae2c0SAndreas Gohr $res[] = "$key = " . (is_numeric($val) ? $val : '"' . $val . '"'); 94*da0ae2c0SAndreas Gohr } 95*da0ae2c0SAndreas Gohr } 96*da0ae2c0SAndreas Gohr $res[] = ''; 97*da0ae2c0SAndreas Gohr return join("\n", $res); 98*da0ae2c0SAndreas Gohr } 99*da0ae2c0SAndreas Gohr} 100*da0ae2c0SAndreas Gohr 101*da0ae2c0SAndreas Gohr// vim:ts=4:sw=4:et: 102