xref: /template/kiwiki/classes/kiwiki_functions.php (revision 7744d923190e75be6ccd8eaa86a5565f4d5d9c12)
16d5babb2Snicolasprigent<?php
26d5babb2Snicolasprigent
3*7744d923SNicolas Prigent// must be run from within DokuWiki
4*7744d923SNicolas Prigentif (!defined('DOKU_INC')) die();
5*7744d923SNicolas Prigent
66d5babb2Snicolasprigentclass Kiwiki_Functions {
76d5babb2Snicolasprigent
8b5b95f16Snicolasprigent
9b5b95f16Snicolasprigent    /**
10b5b95f16Snicolasprigent     * Edit icon button
11b5b95f16Snicolasprigent     */
12b5b95f16Snicolasprigent    public static function _edit_icon($what){
13b5b95f16Snicolasprigent        global $ACT;
14aae5d272SNicolas Prigent        global $INFO;
15aae5d272SNicolas Prigent        $rev = ($INFO['rev']) ? '&rev='.$INFO['rev'] : '';
16b5b95f16Snicolasprigent        if ($ACT == 'show'){
17b5b95f16Snicolasprigent            $editicon = (new \dokuwiki\Menu\KiwikiEdit())->getListItems('kiwiki-',true);
18b5b95f16Snicolasprigent            if (!empty($what)){
19c17c23bdSNicolas Prigent                $editicon = preg_replace('/<a(.*)href="([^"]*)"(.*)>/','<a$1href="'.DOKU_BASE.'doku.php?id='.$what.'&do=edit"$3 role="button">',$editicon);
20aae5d272SNicolas Prigent            }else{
21c17c23bdSNicolas Prigent                $editicon = preg_replace('/<a(.*)href="([^"]*)"(.*)>/','<a$1href="'.DOKU_BASE.'doku.php?id='.$INFO['id'].'&do=edit'.$rev.'"$3 role="button">',$editicon);
226d5babb2Snicolasprigent            }
23b5b95f16Snicolasprigent            return $editicon;
246d5babb2Snicolasprigent        }
25f155da6aSAzurCrystal    }
266d5babb2Snicolasprigent
27cc57aeb6Snicolasprigent
28cc57aeb6Snicolasprigent    /**
29cc57aeb6Snicolasprigent     * Go bottom button
30cc57aeb6Snicolasprigent     */
31cc57aeb6Snicolasprigent
3247612ce1SNicolas Prigent    public static function html_bottombtn() {
33cc57aeb6Snicolasprigent        global $lang;
34cc57aeb6Snicolasprigent
35c17c23bdSNicolas Prigent        return '<a class="nolink" href="#dokuwiki__bottom" role="button" aria-label="' . $lang['btn_bottom'] . '" title="' . $lang['btn_bottom'] . '">'
36cc57aeb6Snicolasprigent            .'<button class="button" onclick="window.scrollTo(0, 0)" title="'. $lang['btn_bottom'] .'">'
37cc57aeb6Snicolasprigent            . $lang['btn_bottom']
38cc57aeb6Snicolasprigent            .'</button></a>';
3947612ce1SNicolas Prigent    }
40cc57aeb6Snicolasprigent
41477069bfSnicolasprigent    /**
42477069bfSnicolasprigent     * Custom ACL Informations in footer
43477069bfSnicolasprigent     * Original code from Chris75
44477069bfSnicolasprigent     * https://forum.dokuwiki.org/d/21636-acl-deny-a-user-group-to-a-namespace/13
45477069bfSnicolasprigent     */
46cc57aeb6Snicolasprigent
47046cd792Snicolasprigent     public static function tpl_aclinfo() {
48477069bfSnicolasprigent        global $ID, $AUTH_ACL, $INFO;
49cc57aeb6Snicolasprigent
50477069bfSnicolasprigent        if ((auth_quickaclcheck($ID) == 0) ||(!$INFO['editable']))
51cc57aeb6Snicolasprigent            return; // no rights to view, no rights to get this info
52cc57aeb6Snicolasprigent
53cc57aeb6Snicolasprigent        $page_acls = array();
54cc57aeb6Snicolasprigent        $namespaces = array();
55cc57aeb6Snicolasprigent
56cc57aeb6Snicolasprigent        $ns = getNS($ID);
57cc57aeb6Snicolasprigent        while ($ns) {
58cc57aeb6Snicolasprigent        array_unshift($namespaces,$ns . ':*');
59cc57aeb6Snicolasprigent        $ns = getNS($ns);
60cc57aeb6Snicolasprigent        }
61cc57aeb6Snicolasprigent        array_unshift($namespaces,'*'); // root
62cc57aeb6Snicolasprigent
63cc57aeb6Snicolasprigent        $namespaces[] = $ID;
64cc57aeb6Snicolasprigent
65cc57aeb6Snicolasprigent        // check matches
66cc57aeb6Snicolasprigent        foreach ($namespaces as $level) {
67cc57aeb6Snicolasprigent            $matches = preg_grep('/^'.preg_quote($level,'/').'\s+\S+\s+\d+\s*$/',$AUTH_ACL);
68cc57aeb6Snicolasprigent            $this_acls = array();
69cc57aeb6Snicolasprigent            foreach($matches as $match){
70cc57aeb6Snicolasprigent            $match = preg_replace('/#.*$/','',$match); //ignore comments
71cc57aeb6Snicolasprigent            $acl   = preg_split('/\s+/',$match);
72cc57aeb6Snicolasprigent            $this_acls[urldecode($acl[1])] = $acl[2];
73cc57aeb6Snicolasprigent            if ($acl[1] == "@ALL")  // overwrites stuff from upper level
74cc57aeb6Snicolasprigent                $page_acls = array();
75cc57aeb6Snicolasprigent            }
76cc57aeb6Snicolasprigent            $page_acls =  array_merge($page_acls,$this_acls);
77cc57aeb6Snicolasprigent        }
78cc57aeb6Snicolasprigent
79cc57aeb6Snicolasprigent        // check if visible to everyone:
80477069bfSnicolasprigent        /*if (($page_acls['@ALL'] !== false) && $page_acls['@ALL'] > 0)
81477069bfSnicolasprigent        return; // page is visible to everyone*/
82cc57aeb6Snicolasprigent
83cc57aeb6Snicolasprigent        $list = array();
84cc57aeb6Snicolasprigent        foreach ($page_acls as $user => $right) {
85cc57aeb6Snicolasprigent            if ($right > 0 && $user != "@admin" ) // admins can see everything
86cc57aeb6Snicolasprigent                array_push($list,$user);
87cc57aeb6Snicolasprigent        }
88cc57aeb6Snicolasprigent        if (count($list)) {
89cc57aeb6Snicolasprigent            sort($list);
90593242adSnicolasprigent            print tpl_getLang('Visible to');
91477069bfSnicolasprigent            print join(', ',$list);
92cc57aeb6Snicolasprigent        }
93cc57aeb6Snicolasprigent
94cc57aeb6Snicolasprigent        // Uncomment this, if you want to display users/groups who cannot access this page, too:
95cc57aeb6Snicolasprigent        $list = array();
96cc57aeb6Snicolasprigent        foreach ($page_acls as $user => $right) {
97cc57aeb6Snicolasprigent            if ($right == 0)
98cc57aeb6Snicolasprigent                array_push($list,$user);
99cc57aeb6Snicolasprigent        }
100cc57aeb6Snicolasprigent        if (count($list)) {
101cc57aeb6Snicolasprigent            sort($list);
102593242adSnicolasprigent            print " • ";
103593242adSnicolasprigent            print tpl_getLang('Hidden to');
104477069bfSnicolasprigent            print join(', ',$list);
105cc57aeb6Snicolasprigent        }
106cc57aeb6Snicolasprigent    }
1076d5babb2Snicolasprigent}
108