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