1da0ae2c0SAndreas Gohr<?php 21da41c8bSAndreas Gohr 31da41c8bSAndreas Gohruse dokuwiki\Extension\AdminPlugin; 41da41c8bSAndreas Gohruse dokuwiki\Form\Form; 51da41c8bSAndreas Gohr 6da0ae2c0SAndreas Gohr/** 7da0ae2c0SAndreas Gohr * DokuWiki Plugin farmer (Admin Component) 8da0ae2c0SAndreas Gohr * 91da41c8bSAndreas Gohr * Configuration Interface for farm.ini 101da41c8bSAndreas Gohr * 11da0ae2c0SAndreas Gohr * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 12da0ae2c0SAndreas Gohr * @author Michael Große <grosse@cosmocode.de> 130a5d2da2SAndreas Gohr * @author Andreas Gohr <gohr@cosmocode.de> 14da0ae2c0SAndreas Gohr */ 151da41c8bSAndreas Gohrclass admin_plugin_farmer_config extends AdminPlugin 161da41c8bSAndreas Gohr{ 17b96c66ccSAndreas Gohr /** @var helper_plugin_farmer */ 18b96c66ccSAndreas Gohr protected $helper; 19b96c66ccSAndreas Gohr 20341a2d35SAndreas Gohr /** @inheritdoc */ 21341a2d35SAndreas Gohr public function showInMenu() 221da41c8bSAndreas Gohr { 23da0ae2c0SAndreas Gohr return false; 24da0ae2c0SAndreas Gohr } 25da0ae2c0SAndreas Gohr 26da0ae2c0SAndreas Gohr /** 27b96c66ccSAndreas Gohr * admin_plugin_farmer_config constructor. 28b96c66ccSAndreas Gohr */ 291da41c8bSAndreas Gohr public function __construct() 301da41c8bSAndreas Gohr { 31b96c66ccSAndreas Gohr $this->helper = plugin_load('helper', 'farmer'); 32b96c66ccSAndreas Gohr } 33b96c66ccSAndreas Gohr 34341a2d35SAndreas Gohr /** @inheritdoc */ 351da41c8bSAndreas Gohr public function handle() 361da41c8bSAndreas Gohr { 37da0ae2c0SAndreas Gohr global $INPUT; 38da0ae2c0SAndreas Gohr global $ID; 39da0ae2c0SAndreas Gohr if (!$INPUT->has('farmconf')) return; 40da0ae2c0SAndreas Gohr if (!checkSecurityToken()) return; 41da0ae2c0SAndreas Gohr 42b96c66ccSAndreas Gohr $farmconf = $this->helper->getConfig(); 43c4c8e953SAndreas Gohr $farmdir = $farmconf['base']['farmdir']; 44a646d519SAndreas Gohr $farmconf = array_merge($farmconf, $INPUT->arr('farmconf')); 45c4c8e953SAndreas Gohr $farmconf['base']['farmdir'] = $farmdir; 46c4c8e953SAndreas Gohr 47c4c8e953SAndreas Gohr $farmconf['base']['basedomain'] = trim(trim($farmconf['base']['basedomain'], '.')); 48a646d519SAndreas Gohr 49da0ae2c0SAndreas Gohr $ini = DOKU_INC . 'conf/farm.ini'; 50da0ae2c0SAndreas Gohr $data = "; Farm config created by the farmer plugin\n"; 51a646d519SAndreas Gohr $data .= $this->createIni($farmconf); 52da0ae2c0SAndreas Gohr io_saveFile($ini, $data); 53da0ae2c0SAndreas Gohr 541da41c8bSAndreas Gohr $self = wl($ID, ['do' => 'admin', 'page' => 'farmer', 'sub' => 'config'], true, '&'); 55da0ae2c0SAndreas Gohr send_redirect($self); 56da0ae2c0SAndreas Gohr } 57da0ae2c0SAndreas Gohr 58341a2d35SAndreas Gohr /** @inheritdoc */ 591da41c8bSAndreas Gohr public function html() 601da41c8bSAndreas Gohr { 61b96c66ccSAndreas Gohr $farmconf = $this->helper->getConfig(); 62da0ae2c0SAndreas Gohr 631da41c8bSAndreas Gohr $form = new Form(['method' => 'post']); 64c4c8e953SAndreas Gohr 65c4c8e953SAndreas Gohr $form->addFieldsetOpen($this->getLang('base')); 66c4c8e953SAndreas Gohr $form->addHTML('<label><span>' . $this->getLang('farm dir') . '</span>' . DOKU_FARMDIR); 671da41c8bSAndreas Gohr $form->addTextInput('farmconf[base][farmhost]', $this->getLang('farm host')) 681da41c8bSAndreas Gohr ->val($farmconf['base']['farmhost']); 691da41c8bSAndreas Gohr $form->addTextInput('farmconf[base][basedomain]', $this->getLang('base domain')) 701da41c8bSAndreas Gohr ->val($farmconf['base']['basedomain']); 71c4c8e953SAndreas Gohr $form->addFieldsetClose(); 72c4c8e953SAndreas Gohr 73da0ae2c0SAndreas Gohr $form->addFieldsetOpen($this->getLang('conf_inherit')); 74da0ae2c0SAndreas Gohr foreach ($farmconf['inherit'] as $key => $val) { 75da0ae2c0SAndreas Gohr $form->setHiddenField("farmconf[inherit][$key]", 0); 761da41c8bSAndreas Gohr $chk = $form->addCheckbox("farmconf[inherit][$key]", $this->getLang('conf_inherit_' . $key)) 771da41c8bSAndreas Gohr ->useInput(false); 78da0ae2c0SAndreas Gohr if ($val) $chk->attr('checked', 'checked'); 79da0ae2c0SAndreas Gohr } 80da0ae2c0SAndreas Gohr $form->addFieldsetClose(); 81da0ae2c0SAndreas Gohr 821da41c8bSAndreas Gohr $options = [ 8355aab17cSAndreas Gohr 'farmer' => $this->getLang('conf_notfound_farmer'), 84*0ab101c1SAnna Dabrowska 'error404' => $this->getLang('conf_notfound_404'), 8555aab17cSAndreas Gohr 'list' => $this->getLang('conf_notfound_list'), 8655aab17cSAndreas Gohr 'redirect' => $this->getLang('conf_notfound_redirect') 871da41c8bSAndreas Gohr ]; 8855aab17cSAndreas Gohr 8955aab17cSAndreas Gohr $form->addFieldsetOpen($this->getLang('conf_notfound')); 901da41c8bSAndreas Gohr $form->addDropdown('farmconf[notfound][show]', $options, $this->getLang('conf_notfound')) 911da41c8bSAndreas Gohr ->val($farmconf['notfound']['show']); 921da41c8bSAndreas Gohr $form->addTextInput('farmconf[notfound][url]', $this->getLang('conf_notfound_url')) 931da41c8bSAndreas Gohr ->val($farmconf['notfound']['url']); 94da0ae2c0SAndreas Gohr $form->addFieldsetClose(); 95da0ae2c0SAndreas Gohr 96da0ae2c0SAndreas Gohr $form->addButton('save', $this->getLang('save')); 97da0ae2c0SAndreas Gohr echo $form->toHTML(); 98da0ae2c0SAndreas Gohr } 99da0ae2c0SAndreas Gohr 100da0ae2c0SAndreas Gohr /** 101da0ae2c0SAndreas Gohr * Simple function to create an ini file 102da0ae2c0SAndreas Gohr * 103da0ae2c0SAndreas Gohr * Does no escaping, but should suffice for our use case 104da0ae2c0SAndreas Gohr * 105da0ae2c0SAndreas Gohr * @link http://stackoverflow.com/a/5695202/172068 106da0ae2c0SAndreas Gohr * @param array $data The data to transform 107da0ae2c0SAndreas Gohr * @return string 108da0ae2c0SAndreas Gohr */ 1091da41c8bSAndreas Gohr public function createIni($data) 1101da41c8bSAndreas Gohr { 1111da41c8bSAndreas Gohr $res = []; 112da0ae2c0SAndreas Gohr foreach ($data as $key => $val) { 113da0ae2c0SAndreas Gohr if (is_array($val)) { 114da0ae2c0SAndreas Gohr $res[] = ''; 115da0ae2c0SAndreas Gohr $res[] = "[$key]"; 116da0ae2c0SAndreas Gohr foreach ($val as $skey => $sval) { 117da0ae2c0SAndreas Gohr $res[] = "$skey = " . (is_numeric($sval) ? $sval : '"' . $sval . '"'); 118da0ae2c0SAndreas Gohr } 119da0ae2c0SAndreas Gohr } else { 120da0ae2c0SAndreas Gohr $res[] = "$key = " . (is_numeric($val) ? $val : '"' . $val . '"'); 121da0ae2c0SAndreas Gohr } 122da0ae2c0SAndreas Gohr } 123da0ae2c0SAndreas Gohr $res[] = ''; 1241da41c8bSAndreas Gohr return implode("\n", $res); 125da0ae2c0SAndreas Gohr } 126da0ae2c0SAndreas Gohr} 127