xref: /plugin/approve/helper/tpl.php (revision 4438242dce0c443b1470f637180b483505e39cd4)
1*4438242dSSzymon Olewniczak<?php
2*4438242dSSzymon Olewniczak
3*4438242dSSzymon Olewniczakuse dokuwiki\Extension\Plugin;
4*4438242dSSzymon Olewniczak
5*4438242dSSzymon Olewniczakclass helper_plugin_approve_tpl extends Plugin
6*4438242dSSzymon Olewniczak{
7*4438242dSSzymon Olewniczak    public function banner($action) {
8*4438242dSSzymon Olewniczak        global $INFO;
9*4438242dSSzymon Olewniczak
10*4438242dSSzymon Olewniczak        if ($action != 'show' || !$INFO['exists']) return;
11*4438242dSSzymon Olewniczak
12*4438242dSSzymon Olewniczak        /* Return true if banner should not be displayed for users with or below read only permission. */
13*4438242dSSzymon Olewniczak        if (auth_quickaclcheck($INFO['id']) <= AUTH_READ && !$this->getConf('display_banner_for_readonly')) {
14*4438242dSSzymon Olewniczak            return;
15*4438242dSSzymon Olewniczak        }
16*4438242dSSzymon Olewniczak
17*4438242dSSzymon Olewniczak        /** @var helper_plugin_approve_acl $acl */
18*4438242dSSzymon Olewniczak        $acl = $this->loadHelper('approve_acl');
19*4438242dSSzymon Olewniczak        if (!$acl->useApproveHere($INFO['id'])) return;
20*4438242dSSzymon Olewniczak
21*4438242dSSzymon Olewniczak        $last_change_date = @filemtime(wikiFN($INFO['id']));
22*4438242dSSzymon Olewniczak        $rev = !$INFO['rev'] ? $last_change_date : $INFO['rev'];
23*4438242dSSzymon Olewniczak
24*4438242dSSzymon Olewniczak
25*4438242dSSzymon Olewniczak        /** @var helper_plugin_approve_db $db */
26*4438242dSSzymon Olewniczak        $db = $this->loadHelper('approve_db');
27*4438242dSSzymon Olewniczak
28*4438242dSSzymon Olewniczak        $page_revision = $db->getPageRevision($INFO['id'], $rev);
29*4438242dSSzymon Olewniczak        $last_approved_rev = $db->getLastDbRev($INFO['id'], 'approved');
30*4438242dSSzymon Olewniczak
31*4438242dSSzymon Olewniczak        $classes = [];
32*4438242dSSzymon Olewniczak        if ($page_revision['status'] == 'approved' && $rev == $last_approved_rev) {
33*4438242dSSzymon Olewniczak            $classes[] = 'plugin__approve_approved';
34*4438242dSSzymon Olewniczak        } elseif ($page_revision['status'] == 'approved') {
35*4438242dSSzymon Olewniczak            $classes[] = 'plugin__approve_old_approved';
36*4438242dSSzymon Olewniczak        } elseif ($this->getConf('ready_for_approval') && $page_revision['status'] == 'ready_for_approval') {
37*4438242dSSzymon Olewniczak            $classes[] = 'plugin__approve_ready';
38*4438242dSSzymon Olewniczak        } else {
39*4438242dSSzymon Olewniczak            $classes[] = 'plugin__approve_draft';
40*4438242dSSzymon Olewniczak        }
41*4438242dSSzymon Olewniczak
42*4438242dSSzymon Olewniczak        echo '<div id="plugin__approve" class="' . implode(' ', $classes) . '">';
43*4438242dSSzymon Olewniczak
44*4438242dSSzymon Olewniczak
45*4438242dSSzymon Olewniczak        if ($page_revision['status'] == 'approved') {
46*4438242dSSzymon Olewniczak            echo '<strong>'.$this->getLang('approved').'</strong>';
47*4438242dSSzymon Olewniczak            echo ' ' . dformat(strtotime($page_revision['approved']));
48*4438242dSSzymon Olewniczak
49*4438242dSSzymon Olewniczak            if($this->getConf('banner_long')) {
50*4438242dSSzymon Olewniczak                echo ' ' . $this->getLang('by') . ' ' . userlink($page_revision['approved_by'], true);
51*4438242dSSzymon Olewniczak                echo ' (' . $this->getLang('version') .  ': ' . $page_revision['version'] . ')';
52*4438242dSSzymon Olewniczak            }
53*4438242dSSzymon Olewniczak
54*4438242dSSzymon Olewniczak            //not the newest page
55*4438242dSSzymon Olewniczak            if ($rev != $last_change_date) {
56*4438242dSSzymon Olewniczak                // we can see drafts
57*4438242dSSzymon Olewniczak                if ($acl->clientCanSeeDrafts($INFO['id'])) {
58*4438242dSSzymon Olewniczak                    echo ' <a href="' . wl($INFO['id']) . '">';
59*4438242dSSzymon Olewniczak                    echo $this->getLang($last_approved_rev == $last_change_date ? 'newest_approved' : 'newest_draft');
60*4438242dSSzymon Olewniczak                    echo '</a>';
61*4438242dSSzymon Olewniczak                    // we cannot see link to draft but there is some newer approved version
62*4438242dSSzymon Olewniczak                } elseif ($last_approved_rev != $rev) {
63*4438242dSSzymon Olewniczak                    $urlParameters = [];
64*4438242dSSzymon Olewniczak                    if ($last_approved_rev != $last_change_date) {
65*4438242dSSzymon Olewniczak                        $urlParameters['rev'] = $last_approved_rev;
66*4438242dSSzymon Olewniczak                    }
67*4438242dSSzymon Olewniczak                    echo ' <a href="' . wl($INFO['id'], $urlParameters) . '">';
68*4438242dSSzymon Olewniczak                    echo $this->getLang('newest_approved');
69*4438242dSSzymon Olewniczak                    echo '</a>';
70*4438242dSSzymon Olewniczak                }
71*4438242dSSzymon Olewniczak            }
72*4438242dSSzymon Olewniczak
73*4438242dSSzymon Olewniczak        } else {
74*4438242dSSzymon Olewniczak            if ($this->getConf('ready_for_approval') && $page_revision['status'] == 'ready_for_approval') {
75*4438242dSSzymon Olewniczak                echo '<strong>'.$this->getLang('marked_approve_ready').'</strong>';
76*4438242dSSzymon Olewniczak                echo ' ' . dformat(strtotime($page_revision['ready_for_approval']));
77*4438242dSSzymon Olewniczak                echo ' ' . $this->getLang('by') . ' ' . userlink($page_revision['ready_for_approval_by'], true);
78*4438242dSSzymon Olewniczak            } else {
79*4438242dSSzymon Olewniczak                echo '<strong>'.$this->getLang('draft').'</strong>';
80*4438242dSSzymon Olewniczak            }
81*4438242dSSzymon Olewniczak
82*4438242dSSzymon Olewniczak            // not exists approve for current page
83*4438242dSSzymon Olewniczak            if ($last_approved_rev == null) {
84*4438242dSSzymon Olewniczak                // not the newest page
85*4438242dSSzymon Olewniczak                if ($rev != $last_change_date) {
86*4438242dSSzymon Olewniczak                    echo ' <a href="'.wl($INFO['id']).'">';
87*4438242dSSzymon Olewniczak                    echo $this->getLang('newest_draft');
88*4438242dSSzymon Olewniczak                    echo '</a>';
89*4438242dSSzymon Olewniczak                }
90*4438242dSSzymon Olewniczak            } else {
91*4438242dSSzymon Olewniczak                $urlParameters = [];
92*4438242dSSzymon Olewniczak                if ($last_approved_rev != $last_change_date) {
93*4438242dSSzymon Olewniczak                    $urlParameters['rev'] = $last_approved_rev;
94*4438242dSSzymon Olewniczak                }
95*4438242dSSzymon Olewniczak                echo ' <a href="' . wl($INFO['id'], $urlParameters) . '">';
96*4438242dSSzymon Olewniczak                echo $this->getLang('newest_approved');
97*4438242dSSzymon Olewniczak                echo '</a>';
98*4438242dSSzymon Olewniczak            }
99*4438242dSSzymon Olewniczak
100*4438242dSSzymon Olewniczak            //we are in current page
101*4438242dSSzymon Olewniczak            if ($rev == $last_change_date) {
102*4438242dSSzymon Olewniczak                if ($this->getConf('ready_for_approval') &&
103*4438242dSSzymon Olewniczak                    $acl->clientCanMarkReadyForApproval($INFO['id']) &&
104*4438242dSSzymon Olewniczak                    $page_revision['status'] != 'ready_for_approval') {
105*4438242dSSzymon Olewniczak
106*4438242dSSzymon Olewniczak                    $urlParameters = [
107*4438242dSSzymon Olewniczak                        'rev' => $last_approved_rev,
108*4438242dSSzymon Olewniczak                        'do' => 'diff',
109*4438242dSSzymon Olewniczak                        'ready_for_approval' => 'ready_for_approval'
110*4438242dSSzymon Olewniczak                    ];
111*4438242dSSzymon Olewniczak                    echo ' | <a href="'.wl($INFO['id'], $urlParameters).'">';
112*4438242dSSzymon Olewniczak                    echo $this->getLang('approve_ready');
113*4438242dSSzymon Olewniczak                    echo '</a>';
114*4438242dSSzymon Olewniczak                }
115*4438242dSSzymon Olewniczak
116*4438242dSSzymon Olewniczak                if ($acl->clientCanApprove($INFO['id'])) {
117*4438242dSSzymon Olewniczak                    $urlParameters = [
118*4438242dSSzymon Olewniczak                        'rev' => $last_approved_rev,
119*4438242dSSzymon Olewniczak                        'do' => 'diff',
120*4438242dSSzymon Olewniczak                        'approve' => 'approve'
121*4438242dSSzymon Olewniczak                    ];
122*4438242dSSzymon Olewniczak                    echo ' | <a href="'.wl($INFO['id'], $urlParameters).'">';
123*4438242dSSzymon Olewniczak                    echo $this->getLang('approve');
124*4438242dSSzymon Olewniczak                    echo '</a>';
125*4438242dSSzymon Olewniczak                }
126*4438242dSSzymon Olewniczak            }
127*4438242dSSzymon Olewniczak        }
128*4438242dSSzymon Olewniczak
129*4438242dSSzymon Olewniczak
130*4438242dSSzymon Olewniczak        if ($this->getConf('banner_long')) {
131*4438242dSSzymon Olewniczak            $page_metadata = $db->getPageMetadata($INFO['id']);
132*4438242dSSzymon Olewniczak            if (isset($page_metadata['approver'])) {
133*4438242dSSzymon Olewniczak                echo ' | ' . $this->getLang('approver') . ': ' . userlink($page_metadata['approver'], true);
134*4438242dSSzymon Olewniczak            }
135*4438242dSSzymon Olewniczak        }
136*4438242dSSzymon Olewniczak
137*4438242dSSzymon Olewniczak        echo '</div>';
138*4438242dSSzymon Olewniczak    }
139*4438242dSSzymon Olewniczak}
140