xref: /plugin/bez/action/base.php (revision f9ff7301c8be81b541bedb8a1ddfa376d9cf9938)
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}