xref: /plugin/bez/action/base.php (revision a3f545276418e968574e0ffc54c2e2d6dbd8f2f5)
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
13f9ff7301SSzymon Olewniczak    /**
14f9ff7301SSzymon Olewniczak     * See init.php:getBaseURL
15f9ff7301SSzymon Olewniczak     *
16f9ff7301SSzymon Olewniczak     * @return string
17f9ff7301SSzymon Olewniczak     */
18f9ff7301SSzymon Olewniczak    protected function basedir() {
19f9ff7301SSzymon Olewniczak        if(!empty($conf['basedir'])){
20f9ff7301SSzymon Olewniczak            $dir = $conf['basedir'];
21f9ff7301SSzymon Olewniczak        }elseif(substr($_SERVER['SCRIPT_NAME'],-4) == '.php'){
22f9ff7301SSzymon Olewniczak            $dir = dirname($_SERVER['SCRIPT_NAME']);
23f9ff7301SSzymon Olewniczak        }elseif(substr($_SERVER['PHP_SELF'],-4) == '.php'){
24f9ff7301SSzymon Olewniczak            $dir = dirname($_SERVER['PHP_SELF']);
25f9ff7301SSzymon Olewniczak        }elseif($_SERVER['DOCUMENT_ROOT'] && $_SERVER['SCRIPT_FILENAME']){
26f9ff7301SSzymon Olewniczak            $dir = preg_replace ('/^'.preg_quote($_SERVER['DOCUMENT_ROOT'],'/').'/','',
27f9ff7301SSzymon Olewniczak                                 $_SERVER['SCRIPT_FILENAME']);
28f9ff7301SSzymon Olewniczak            $dir = dirname('/'.$dir);
29f9ff7301SSzymon Olewniczak        }else{
30f9ff7301SSzymon Olewniczak            $dir = '.'; //probably wrong
31f9ff7301SSzymon Olewniczak        }
32f9ff7301SSzymon Olewniczak
33f9ff7301SSzymon Olewniczak        $dir = str_replace('\\','/',$dir);             // bugfix for weird WIN behaviour
34f9ff7301SSzymon Olewniczak        $dir = preg_replace('#//+#','/',"/$dir/");     // ensure leading and trailing slashes
35f9ff7301SSzymon Olewniczak
36f9ff7301SSzymon Olewniczak        //handle script in lib/exe dir
37f9ff7301SSzymon Olewniczak        $dir = preg_replace('!lib/exe/$!','',$dir);
38f9ff7301SSzymon Olewniczak
39f9ff7301SSzymon Olewniczak        //handle script in lib/plugins dir
40f9ff7301SSzymon Olewniczak        $dir = preg_replace('!lib/plugins/.*$!','',$dir);
41f9ff7301SSzymon Olewniczak
42f9ff7301SSzymon Olewniczak        return $dir;
43f9ff7301SSzymon Olewniczak    }
44f9ff7301SSzymon Olewniczak
45f9ff7301SSzymon Olewniczak    /**
46f9ff7301SSzymon Olewniczak     * See init.php:getBaseURL
47f9ff7301SSzymon Olewniczak     *
48f9ff7301SSzymon Olewniczak     * @return string
49f9ff7301SSzymon Olewniczak     */
50f9ff7301SSzymon Olewniczak    protected function baseurl() {
51f9ff7301SSzymon Olewniczak        //split hostheader into host and port
52f9ff7301SSzymon Olewniczak        if(isset($_SERVER['HTTP_HOST'])){
53f9ff7301SSzymon Olewniczak            $parsed_host = parse_url('http://'.$_SERVER['HTTP_HOST']);
54f9ff7301SSzymon Olewniczak            $host = isset($parsed_host['host']) ? $parsed_host['host'] : null;
55f9ff7301SSzymon Olewniczak            $port = isset($parsed_host['port']) ? $parsed_host['port'] : null;
56f9ff7301SSzymon Olewniczak        }elseif(isset($_SERVER['SERVER_NAME'])){
57f9ff7301SSzymon Olewniczak            $parsed_host = parse_url('http://'.$_SERVER['SERVER_NAME']);
58f9ff7301SSzymon Olewniczak            $host = isset($parsed_host['host']) ? $parsed_host['host'] : null;
59f9ff7301SSzymon Olewniczak            $port = isset($parsed_host['port']) ? $parsed_host['port'] : null;
60f9ff7301SSzymon Olewniczak        }else{
61f9ff7301SSzymon Olewniczak            $host = php_uname('n');
62f9ff7301SSzymon Olewniczak            $port = '';
63f9ff7301SSzymon Olewniczak        }
64f9ff7301SSzymon Olewniczak
65f9ff7301SSzymon Olewniczak        if(is_null($port)){
66f9ff7301SSzymon Olewniczak            $port = '';
67f9ff7301SSzymon Olewniczak        }
68f9ff7301SSzymon Olewniczak
69f9ff7301SSzymon Olewniczak        if(!is_ssl()){
70f9ff7301SSzymon Olewniczak            $proto = 'http://';
71f9ff7301SSzymon Olewniczak            if ($port == '80') {
72f9ff7301SSzymon Olewniczak                $port = '';
73f9ff7301SSzymon Olewniczak            }
74f9ff7301SSzymon Olewniczak        }else{
75f9ff7301SSzymon Olewniczak            $proto = 'https://';
76f9ff7301SSzymon Olewniczak            if ($port == '443') {
77f9ff7301SSzymon Olewniczak                $port = '';
78f9ff7301SSzymon Olewniczak            }
79f9ff7301SSzymon Olewniczak        }
80f9ff7301SSzymon Olewniczak
81f9ff7301SSzymon Olewniczak        if($port !== '') $port = ':'.$port;
82f9ff7301SSzymon Olewniczak
83f9ff7301SSzymon Olewniczak        return $proto.$host.$port;
84f9ff7301SSzymon Olewniczak    }
85f9ff7301SSzymon Olewniczak
86522c019cSSzymon Olewniczak    public function loadConfig() {
87522c019cSSzymon Olewniczak        global $conf;
88522c019cSSzymon Olewniczak
89f9ff7301SSzymon Olewniczak        $update_config = false;
90f9ff7301SSzymon Olewniczak        if (empty($conf['basedir']) || empty($conf['baseurl'])) {
91f9ff7301SSzymon Olewniczak            $update_config = true;
92f9ff7301SSzymon 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);
96f9ff7301SSzymon Olewniczak        }
97f9ff7301SSzymon Olewniczak
98f9ff7301SSzymon Olewniczak        if (empty($conf['basedir'])) {
99f9ff7301SSzymon Olewniczak            $basedir = $this->basedir();
100f9ff7301SSzymon Olewniczak            $configuration->setting['basedir']->update($basedir);
101f9ff7301SSzymon Olewniczak            $conf['basedir'] = $basedir;
102f9ff7301SSzymon Olewniczak        }
103f9ff7301SSzymon Olewniczak
104f9ff7301SSzymon Olewniczak        if (empty($conf['baseurl'])) {
105f9ff7301SSzymon Olewniczak            $baseurl = $this->baseurl();
106f9ff7301SSzymon Olewniczak            $configuration->setting['baseurl']->update($baseurl);
107f9ff7301SSzymon Olewniczak            $conf['baseurl'] = $baseurl;
108f9ff7301SSzymon Olewniczak        }
109f9ff7301SSzymon Olewniczak
110f9ff7301SSzymon 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
166f9ff7301SSzymon Olewniczak        if ($skip_acl) {
167f9ff7301SSzymon Olewniczak            $client = false;
168f9ff7301SSzymon Olewniczak        } else {
169f9ff7301SSzymon Olewniczak            $client = $INFO['client'];
170f9ff7301SSzymon Olewniczak        }
171f9ff7301SSzymon Olewniczak
172f9ff7301SSzymon 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
2014511e9d7SSzymon Olewniczak        $elms = array_map(function ($elm) {
2024511e9d7SSzymon Olewniczak            return str_replace(':', '', $elm);
2034511e9d7SSzymon Olewniczak        }, $elms);
20414a1f0a4SSzymon Olewniczak        return implode(':', $elms);
20514a1f0a4SSzymon Olewniczak    }
20614a1f0a4SSzymon Olewniczak
20714a1f0a4SSzymon Olewniczak    public function url() {
208*a3f54527SSzymon Olewniczak        global $conf;
209*a3f54527SSzymon Olewniczak
21014a1f0a4SSzymon Olewniczak        $args = func_get_args();
21114a1f0a4SSzymon Olewniczak        if (count($args) > 0) {
21214a1f0a4SSzymon Olewniczak            $id = call_user_func_array(array($this, 'id'), $args);
213*a3f54527SSzymon Olewniczak            if ($conf['userewrite'] == '1') {
214*a3f54527SSzymon Olewniczak                return DOKU_URL . $id;
215*a3f54527SSzymon Olewniczak            } elseif ($conf['userewrite'] == '2') {
216*a3f54527SSzymon Olewniczak                return DOKU_URL . 'doku.php/' . $id;
217*a3f54527SSzymon Olewniczak            } else {
21814a1f0a4SSzymon Olewniczak                return DOKU_URL . 'doku.php?id=' . $id;
21914a1f0a4SSzymon Olewniczak            }
220*a3f54527SSzymon Olewniczak
221*a3f54527SSzymon Olewniczak        }
22214a1f0a4SSzymon Olewniczak    }
22314a1f0a4SSzymon Olewniczak}