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