xref: /plugin/approve/helper/acl.php (revision b59355cdb0bc1813158c3cec643671b1fa1b3e90)
11989ee26SSzymon Olewniczak<?php
21989ee26SSzymon Olewniczak
31989ee26SSzymon Olewniczakuse dokuwiki\Extension\Plugin;
41989ee26SSzymon Olewniczak
51989ee26SSzymon Olewniczakclass helper_plugin_approve_acl extends Plugin
61989ee26SSzymon Olewniczak{
71989ee26SSzymon Olewniczak    public function useApproveHere($id) {
8*b59355cdSSzymon Olewniczak        /** @var helper_plugin_approve_db $db */
9*b59355cdSSzymon Olewniczak        $db = $this->loadHelper('approve_db');
101989ee26SSzymon Olewniczak        $page_metadata = $db->getPageMetadata($id);
111989ee26SSzymon Olewniczak        if ($page_metadata === null) { // do not use approve plugin here
121989ee26SSzymon Olewniczak            return false;
131989ee26SSzymon Olewniczak        }
141989ee26SSzymon Olewniczak        return true;
151989ee26SSzymon Olewniczak    }
161989ee26SSzymon Olewniczak
171989ee26SSzymon Olewniczak    public function clientCanApprove($id): bool
181989ee26SSzymon Olewniczak    {
191989ee26SSzymon Olewniczak        global $INFO;
201989ee26SSzymon Olewniczak
211989ee26SSzymon Olewniczak        // user not log in
221989ee26SSzymon Olewniczak        if (!isset($INFO['userinfo'])) return false;
231989ee26SSzymon Olewniczak
24*b59355cdSSzymon Olewniczak        /** @var helper_plugin_approve_db $db */
25*b59355cdSSzymon Olewniczak        $db = $this->loadHelper('approve_db');
261989ee26SSzymon Olewniczak        $page_metadata = $db->getPageMetadata($id);
271989ee26SSzymon Olewniczak
281989ee26SSzymon Olewniczak        if ($page_metadata === null) {
291989ee26SSzymon Olewniczak            return false;
301989ee26SSzymon Olewniczak        } elseif ($page_metadata['approver'] == $INFO['client']) { // user is approver
311989ee26SSzymon Olewniczak            return true;
321989ee26SSzymon Olewniczak            // user is in approvers group
331989ee26SSzymon Olewniczak        } elseif (strncmp($page_metadata['approver'], "@", 1) === 0 &&
341989ee26SSzymon Olewniczak            in_array(substr($page_metadata['approver'], 1), $INFO['userinfo']['grps'])) {
351989ee26SSzymon Olewniczak            return true;
361989ee26SSzymon Olewniczak            // if the user has AUTH_DELETE permission and the approver is not defined or strict_approver is turn off
371989ee26SSzymon Olewniczak            // user can approve the page
381989ee26SSzymon Olewniczak        } elseif (auth_quickaclcheck($id) >= AUTH_DELETE &&
391989ee26SSzymon Olewniczak            ($page_metadata['approver'] === null || !$this->getConf('strict_approver'))) {
401989ee26SSzymon Olewniczak            return true;
411989ee26SSzymon Olewniczak        }
421989ee26SSzymon Olewniczak        return false;
431989ee26SSzymon Olewniczak    }
441989ee26SSzymon Olewniczak
451989ee26SSzymon Olewniczak    public function clientCanMarkReadyForApproval($id): bool {
461989ee26SSzymon Olewniczak        global $INFO;
471989ee26SSzymon Olewniczak
481989ee26SSzymon Olewniczak        $ready_for_approval_acl = preg_split('/\s+/', $this->getConf('ready_for_approval_acl'),
491989ee26SSzymon Olewniczak            -1, PREG_SPLIT_NO_EMPTY);
501989ee26SSzymon Olewniczak
511989ee26SSzymon Olewniczak        if (count($ready_for_approval_acl) == 0) {
521989ee26SSzymon Olewniczak            return auth_quickaclcheck($id) >= AUTH_EDIT;
531989ee26SSzymon Olewniczak        }
541989ee26SSzymon Olewniczak        foreach ($ready_for_approval_acl as $user_or_group) {
551989ee26SSzymon Olewniczak            if ($user_or_group[0] == '@' && in_array(substr($user_or_group, 1), $INFO['userinfo']['grps'])) {
561989ee26SSzymon Olewniczak                return true;
571989ee26SSzymon Olewniczak            } elseif ($user_or_group == $INFO['client']) {
581989ee26SSzymon Olewniczak                return true;
591989ee26SSzymon Olewniczak            }
601989ee26SSzymon Olewniczak        }
611989ee26SSzymon Olewniczak        return false;
621989ee26SSzymon Olewniczak    }
631989ee26SSzymon Olewniczak
641989ee26SSzymon Olewniczak    public function clientCanSeeDrafts($id): bool {
651989ee26SSzymon Olewniczak
661989ee26SSzymon Olewniczak        // in view mode no one can see drafts
671989ee26SSzymon Olewniczak        if ($this->getConf('viewmode') && get_doku_pref('approve_viewmode', false)) return false;
681989ee26SSzymon Olewniczak
691989ee26SSzymon Olewniczak        if (!$this->getConf('hide_drafts_for_viewers')) return true;
701989ee26SSzymon Olewniczak
711989ee26SSzymon Olewniczak        if (auth_quickaclcheck($id) >= AUTH_EDIT) return true;
721989ee26SSzymon Olewniczak        if ($this->clientCanApprove($id)) return true;
731989ee26SSzymon Olewniczak
741989ee26SSzymon Olewniczak        return false;
751989ee26SSzymon Olewniczak    }
761989ee26SSzymon Olewniczak}
77