114a1f0a4SSzymon Olewniczak<?php 214a1f0a4SSzymon Olewniczak 314a1f0a4SSzymon Olewniczakuse \dokuwiki\plugin\bez; 414a1f0a4SSzymon Olewniczak 514a1f0a4SSzymon Olewniczakclass action_plugin_bez_base extends DokuWiki_Action_Plugin { 614a1f0a4SSzymon Olewniczak 714a1f0a4SSzymon Olewniczak /** @var bez\mdl\Model */ 814a1f0a4SSzymon Olewniczak protected $model; 914a1f0a4SSzymon Olewniczak 1014a1f0a4SSzymon Olewniczak /** @var bez\meta\Tpl */ 1114a1f0a4SSzymon Olewniczak protected $tpl; 1214a1f0a4SSzymon Olewniczak 13*f9ff7301SSzymon Olewniczak /** 14*f9ff7301SSzymon Olewniczak * See init.php:getBaseURL 15*f9ff7301SSzymon Olewniczak * 16*f9ff7301SSzymon Olewniczak * @return string 17*f9ff7301SSzymon Olewniczak */ 18*f9ff7301SSzymon Olewniczak protected function basedir() { 19*f9ff7301SSzymon Olewniczak if(!empty($conf['basedir'])){ 20*f9ff7301SSzymon Olewniczak $dir = $conf['basedir']; 21*f9ff7301SSzymon Olewniczak }elseif(substr($_SERVER['SCRIPT_NAME'],-4) == '.php'){ 22*f9ff7301SSzymon Olewniczak $dir = dirname($_SERVER['SCRIPT_NAME']); 23*f9ff7301SSzymon Olewniczak }elseif(substr($_SERVER['PHP_SELF'],-4) == '.php'){ 24*f9ff7301SSzymon Olewniczak $dir = dirname($_SERVER['PHP_SELF']); 25*f9ff7301SSzymon Olewniczak }elseif($_SERVER['DOCUMENT_ROOT'] && $_SERVER['SCRIPT_FILENAME']){ 26*f9ff7301SSzymon Olewniczak $dir = preg_replace ('/^'.preg_quote($_SERVER['DOCUMENT_ROOT'],'/').'/','', 27*f9ff7301SSzymon Olewniczak $_SERVER['SCRIPT_FILENAME']); 28*f9ff7301SSzymon Olewniczak $dir = dirname('/'.$dir); 29*f9ff7301SSzymon Olewniczak }else{ 30*f9ff7301SSzymon Olewniczak $dir = '.'; //probably wrong 31*f9ff7301SSzymon Olewniczak } 32*f9ff7301SSzymon Olewniczak 33*f9ff7301SSzymon Olewniczak $dir = str_replace('\\','/',$dir); // bugfix for weird WIN behaviour 34*f9ff7301SSzymon Olewniczak $dir = preg_replace('#//+#','/',"/$dir/"); // ensure leading and trailing slashes 35*f9ff7301SSzymon Olewniczak 36*f9ff7301SSzymon Olewniczak //handle script in lib/exe dir 37*f9ff7301SSzymon Olewniczak $dir = preg_replace('!lib/exe/$!','',$dir); 38*f9ff7301SSzymon Olewniczak 39*f9ff7301SSzymon Olewniczak //handle script in lib/plugins dir 40*f9ff7301SSzymon Olewniczak $dir = preg_replace('!lib/plugins/.*$!','',$dir); 41*f9ff7301SSzymon Olewniczak 42*f9ff7301SSzymon Olewniczak return $dir; 43*f9ff7301SSzymon Olewniczak } 44*f9ff7301SSzymon Olewniczak 45*f9ff7301SSzymon Olewniczak /** 46*f9ff7301SSzymon Olewniczak * See init.php:getBaseURL 47*f9ff7301SSzymon Olewniczak * 48*f9ff7301SSzymon Olewniczak * @return string 49*f9ff7301SSzymon Olewniczak */ 50*f9ff7301SSzymon Olewniczak protected function baseurl() { 51*f9ff7301SSzymon Olewniczak //split hostheader into host and port 52*f9ff7301SSzymon Olewniczak if(isset($_SERVER['HTTP_HOST'])){ 53*f9ff7301SSzymon Olewniczak $parsed_host = parse_url('http://'.$_SERVER['HTTP_HOST']); 54*f9ff7301SSzymon Olewniczak $host = isset($parsed_host['host']) ? $parsed_host['host'] : null; 55*f9ff7301SSzymon Olewniczak $port = isset($parsed_host['port']) ? $parsed_host['port'] : null; 56*f9ff7301SSzymon Olewniczak }elseif(isset($_SERVER['SERVER_NAME'])){ 57*f9ff7301SSzymon Olewniczak $parsed_host = parse_url('http://'.$_SERVER['SERVER_NAME']); 58*f9ff7301SSzymon Olewniczak $host = isset($parsed_host['host']) ? $parsed_host['host'] : null; 59*f9ff7301SSzymon Olewniczak $port = isset($parsed_host['port']) ? $parsed_host['port'] : null; 60*f9ff7301SSzymon Olewniczak }else{ 61*f9ff7301SSzymon Olewniczak $host = php_uname('n'); 62*f9ff7301SSzymon Olewniczak $port = ''; 63*f9ff7301SSzymon Olewniczak } 64*f9ff7301SSzymon Olewniczak 65*f9ff7301SSzymon Olewniczak if(is_null($port)){ 66*f9ff7301SSzymon Olewniczak $port = ''; 67*f9ff7301SSzymon Olewniczak } 68*f9ff7301SSzymon Olewniczak 69*f9ff7301SSzymon Olewniczak if(!is_ssl()){ 70*f9ff7301SSzymon Olewniczak $proto = 'http://'; 71*f9ff7301SSzymon Olewniczak if ($port == '80') { 72*f9ff7301SSzymon Olewniczak $port = ''; 73*f9ff7301SSzymon Olewniczak } 74*f9ff7301SSzymon Olewniczak }else{ 75*f9ff7301SSzymon Olewniczak $proto = 'https://'; 76*f9ff7301SSzymon Olewniczak if ($port == '443') { 77*f9ff7301SSzymon Olewniczak $port = ''; 78*f9ff7301SSzymon Olewniczak } 79*f9ff7301SSzymon Olewniczak } 80*f9ff7301SSzymon Olewniczak 81*f9ff7301SSzymon Olewniczak if($port !== '') $port = ':'.$port; 82*f9ff7301SSzymon Olewniczak 83*f9ff7301SSzymon Olewniczak return $proto.$host.$port; 84*f9ff7301SSzymon Olewniczak } 85*f9ff7301SSzymon Olewniczak 86522c019cSSzymon Olewniczak public function loadConfig() { 87522c019cSSzymon Olewniczak global $conf; 88522c019cSSzymon Olewniczak 89*f9ff7301SSzymon Olewniczak $update_config = false; 90*f9ff7301SSzymon Olewniczak if (empty($conf['basedir']) || empty($conf['baseurl'])) { 91*f9ff7301SSzymon Olewniczak $update_config = true; 92*f9ff7301SSzymon Olewniczak 93522c019cSSzymon Olewniczak include DOKU_PLUGIN . 'config/settings/config.class.php'; 94522c019cSSzymon Olewniczak $datafile = DOKU_PLUGIN . 'config/settings/config.metadata.php'; 95522c019cSSzymon Olewniczak $configuration = new configuration($datafile); 96*f9ff7301SSzymon Olewniczak } 97*f9ff7301SSzymon Olewniczak 98*f9ff7301SSzymon Olewniczak if (empty($conf['basedir'])) { 99*f9ff7301SSzymon Olewniczak $basedir = $this->basedir(); 100*f9ff7301SSzymon Olewniczak $configuration->setting['basedir']->update($basedir); 101*f9ff7301SSzymon Olewniczak $conf['basedir'] = $basedir; 102*f9ff7301SSzymon Olewniczak } 103*f9ff7301SSzymon Olewniczak 104*f9ff7301SSzymon Olewniczak if (empty($conf['baseurl'])) { 105*f9ff7301SSzymon Olewniczak $baseurl = $this->baseurl(); 106*f9ff7301SSzymon Olewniczak $configuration->setting['baseurl']->update($baseurl); 107*f9ff7301SSzymon Olewniczak $conf['baseurl'] = $baseurl; 108*f9ff7301SSzymon Olewniczak } 109*f9ff7301SSzymon Olewniczak 110*f9ff7301SSzymon Olewniczak if ($update_config) { 111522c019cSSzymon Olewniczak $configuration->save_settings('config'); 112522c019cSSzymon Olewniczak } 113522c019cSSzymon Olewniczak parent::loadConfig(); 114522c019cSSzymon Olewniczak } 115522c019cSSzymon Olewniczak 11614a1f0a4SSzymon Olewniczak 11714a1f0a4SSzymon Olewniczak public function getPluginName() { 11814a1f0a4SSzymon Olewniczak return 'bez'; 11914a1f0a4SSzymon Olewniczak } 12014a1f0a4SSzymon Olewniczak 12114a1f0a4SSzymon Olewniczak public function register(Doku_Event_Handler $controller) { 12214a1f0a4SSzymon Olewniczak } 12314a1f0a4SSzymon Olewniczak 12414a1f0a4SSzymon Olewniczak public function getGlobalConf($key='') { 12514a1f0a4SSzymon Olewniczak global $conf; 12614a1f0a4SSzymon Olewniczak if ($key == '') { 12714a1f0a4SSzymon Olewniczak return $conf; 12814a1f0a4SSzymon Olewniczak } 12914a1f0a4SSzymon Olewniczak return $conf[$key]; 13014a1f0a4SSzymon Olewniczak } 13114a1f0a4SSzymon Olewniczak 13214a1f0a4SSzymon Olewniczak public function get_model() { 13314a1f0a4SSzymon Olewniczak return $this->model; 13414a1f0a4SSzymon Olewniczak } 13514a1f0a4SSzymon Olewniczak 13614a1f0a4SSzymon Olewniczak public function get_client() { 13714a1f0a4SSzymon Olewniczak global $INFO; 13814a1f0a4SSzymon Olewniczak return $INFO['client']; 13914a1f0a4SSzymon Olewniczak } 14014a1f0a4SSzymon Olewniczak 14114a1f0a4SSzymon Olewniczak public function get_tpl() { 14214a1f0a4SSzymon Olewniczak return $this->tpl; 14314a1f0a4SSzymon Olewniczak } 14414a1f0a4SSzymon Olewniczak 14514a1f0a4SSzymon Olewniczak public function get_level() { 14614a1f0a4SSzymon Olewniczak return $this->model->get_level(); 14714a1f0a4SSzymon Olewniczak } 14814a1f0a4SSzymon Olewniczak 14914a1f0a4SSzymon Olewniczak public function bez_tpl_include($tpl_file='', $return=false) { 15014a1f0a4SSzymon Olewniczak $file = DOKU_PLUGIN . "bez/tpl/$tpl_file.php"; 15114a1f0a4SSzymon Olewniczak if (!file_exists($file)) { 15214a1f0a4SSzymon Olewniczak throw new Exception("$file doesn't exist"); 15314a1f0a4SSzymon Olewniczak } 15414a1f0a4SSzymon Olewniczak 15514a1f0a4SSzymon Olewniczak $tpl = $this->tpl; 15614a1f0a4SSzymon Olewniczak if ($return) ob_start(); 15714a1f0a4SSzymon Olewniczak include $file; 15814a1f0a4SSzymon Olewniczak if ($return) return ob_get_clean(); 15914a1f0a4SSzymon Olewniczak 16014a1f0a4SSzymon Olewniczak } 16114a1f0a4SSzymon Olewniczak 162522c019cSSzymon Olewniczak public function createObjects($skip_acl=false) { 16314a1f0a4SSzymon Olewniczak global $auth; 16414a1f0a4SSzymon Olewniczak global $INFO; 16514a1f0a4SSzymon Olewniczak 166*f9ff7301SSzymon Olewniczak if ($skip_acl) { 167*f9ff7301SSzymon Olewniczak $client = false; 168*f9ff7301SSzymon Olewniczak } else { 169*f9ff7301SSzymon Olewniczak $client = $INFO['client']; 170*f9ff7301SSzymon Olewniczak } 171*f9ff7301SSzymon Olewniczak 172*f9ff7301SSzymon Olewniczak $this->model = new bez\mdl\Model($auth, $client, $this, $skip_acl); 17314a1f0a4SSzymon Olewniczak $this->tpl = new bez\meta\Tpl($this); 17414a1f0a4SSzymon Olewniczak } 17514a1f0a4SSzymon Olewniczak 17614a1f0a4SSzymon Olewniczak public function id() { 17714a1f0a4SSzymon Olewniczak $args = func_get_args(); 17814a1f0a4SSzymon Olewniczak 17914a1f0a4SSzymon Olewniczak if (count($args) === 0) { 18014a1f0a4SSzymon Olewniczak return $_GET['id']; 18114a1f0a4SSzymon Olewniczak } 18214a1f0a4SSzymon Olewniczak 18314a1f0a4SSzymon Olewniczak $elms = array(); 18414a1f0a4SSzymon Olewniczak foreach ($args as $arg) { 18514a1f0a4SSzymon Olewniczak if (is_array($arg)) { 18614a1f0a4SSzymon Olewniczak foreach ($arg as $k => $v) { 18714a1f0a4SSzymon Olewniczak $elms[] = $k; 18814a1f0a4SSzymon Olewniczak $elms[] = $v; 18914a1f0a4SSzymon Olewniczak } 19014a1f0a4SSzymon Olewniczak } else { 19114a1f0a4SSzymon Olewniczak $elms[] = $arg; 19214a1f0a4SSzymon Olewniczak } 19314a1f0a4SSzymon Olewniczak } 19414a1f0a4SSzymon Olewniczak array_unshift($elms, 'bez'); 19514a1f0a4SSzymon Olewniczak 19614a1f0a4SSzymon Olewniczak 19714a1f0a4SSzymon Olewniczak if ($this->getGlobalConf('lang') != '') { 19814a1f0a4SSzymon Olewniczak array_unshift($elms, $this->getGlobalConf('lang')); 19914a1f0a4SSzymon Olewniczak } 20014a1f0a4SSzymon Olewniczak 20114a1f0a4SSzymon Olewniczak return implode(':', $elms); 20214a1f0a4SSzymon Olewniczak } 20314a1f0a4SSzymon Olewniczak 20414a1f0a4SSzymon Olewniczak public function url() { 20514a1f0a4SSzymon Olewniczak $args = func_get_args(); 20614a1f0a4SSzymon Olewniczak if (count($args) > 0) { 20714a1f0a4SSzymon Olewniczak $id = call_user_func_array(array($this, 'id'), $args); 20814a1f0a4SSzymon Olewniczak return DOKU_URL . 'doku.php?id=' . $id; 20914a1f0a4SSzymon Olewniczak } 21014a1f0a4SSzymon Olewniczak } 21114a1f0a4SSzymon Olewniczak}