1*1989ee26SSzymon Olewniczak<?php 2*1989ee26SSzymon Olewniczak 3*1989ee26SSzymon Olewniczakuse dokuwiki\Extension\Plugin; 4*1989ee26SSzymon Olewniczak 5*1989ee26SSzymon Olewniczakclass helper_plugin_approve_acl extends Plugin 6*1989ee26SSzymon Olewniczak{ 7*1989ee26SSzymon Olewniczak public function useApproveHere($id) { 8*1989ee26SSzymon Olewniczak /** @var helper_plugin_approve_data $db */ 9*1989ee26SSzymon Olewniczak $db = $this->loadHelper('approve_data'); 10*1989ee26SSzymon Olewniczak $page_metadata = $db->getPageMetadata($id); 11*1989ee26SSzymon Olewniczak if ($page_metadata === null) { // do not use approve plugin here 12*1989ee26SSzymon Olewniczak return false; 13*1989ee26SSzymon Olewniczak } 14*1989ee26SSzymon Olewniczak return true; 15*1989ee26SSzymon Olewniczak } 16*1989ee26SSzymon Olewniczak 17*1989ee26SSzymon Olewniczak public function clientCanApprove($id): bool 18*1989ee26SSzymon Olewniczak { 19*1989ee26SSzymon Olewniczak global $INFO; 20*1989ee26SSzymon Olewniczak 21*1989ee26SSzymon Olewniczak // user not log in 22*1989ee26SSzymon Olewniczak if (!isset($INFO['userinfo'])) return false; 23*1989ee26SSzymon Olewniczak 24*1989ee26SSzymon Olewniczak /** @var helper_plugin_approve_data $db */ 25*1989ee26SSzymon Olewniczak $db = $this->loadHelper('approve_data'); 26*1989ee26SSzymon Olewniczak $page_metadata = $db->getPageMetadata($id); 27*1989ee26SSzymon Olewniczak 28*1989ee26SSzymon Olewniczak if ($page_metadata === null) { 29*1989ee26SSzymon Olewniczak return false; 30*1989ee26SSzymon Olewniczak } elseif ($page_metadata['approver'] == $INFO['client']) { // user is approver 31*1989ee26SSzymon Olewniczak return true; 32*1989ee26SSzymon Olewniczak // user is in approvers group 33*1989ee26SSzymon Olewniczak } elseif (strncmp($page_metadata['approver'], "@", 1) === 0 && 34*1989ee26SSzymon Olewniczak in_array(substr($page_metadata['approver'], 1), $INFO['userinfo']['grps'])) { 35*1989ee26SSzymon Olewniczak return true; 36*1989ee26SSzymon Olewniczak // if the user has AUTH_DELETE permission and the approver is not defined or strict_approver is turn off 37*1989ee26SSzymon Olewniczak // user can approve the page 38*1989ee26SSzymon Olewniczak } elseif (auth_quickaclcheck($id) >= AUTH_DELETE && 39*1989ee26SSzymon Olewniczak ($page_metadata['approver'] === null || !$this->getConf('strict_approver'))) { 40*1989ee26SSzymon Olewniczak return true; 41*1989ee26SSzymon Olewniczak } 42*1989ee26SSzymon Olewniczak return false; 43*1989ee26SSzymon Olewniczak } 44*1989ee26SSzymon Olewniczak 45*1989ee26SSzymon Olewniczak public function clientCanMarkReadyForApproval($id): bool { 46*1989ee26SSzymon Olewniczak global $INFO; 47*1989ee26SSzymon Olewniczak 48*1989ee26SSzymon Olewniczak $ready_for_approval_acl = preg_split('/\s+/', $this->getConf('ready_for_approval_acl'), 49*1989ee26SSzymon Olewniczak -1, PREG_SPLIT_NO_EMPTY); 50*1989ee26SSzymon Olewniczak 51*1989ee26SSzymon Olewniczak if (count($ready_for_approval_acl) == 0) { 52*1989ee26SSzymon Olewniczak return auth_quickaclcheck($id) >= AUTH_EDIT; 53*1989ee26SSzymon Olewniczak } 54*1989ee26SSzymon Olewniczak foreach ($ready_for_approval_acl as $user_or_group) { 55*1989ee26SSzymon Olewniczak if ($user_or_group[0] == '@' && in_array(substr($user_or_group, 1), $INFO['userinfo']['grps'])) { 56*1989ee26SSzymon Olewniczak return true; 57*1989ee26SSzymon Olewniczak } elseif ($user_or_group == $INFO['client']) { 58*1989ee26SSzymon Olewniczak return true; 59*1989ee26SSzymon Olewniczak } 60*1989ee26SSzymon Olewniczak } 61*1989ee26SSzymon Olewniczak return false; 62*1989ee26SSzymon Olewniczak } 63*1989ee26SSzymon Olewniczak 64*1989ee26SSzymon Olewniczak public function clientCanSeeDrafts($id): bool { 65*1989ee26SSzymon Olewniczak 66*1989ee26SSzymon Olewniczak // in view mode no one can see drafts 67*1989ee26SSzymon Olewniczak if ($this->getConf('viewmode') && get_doku_pref('approve_viewmode', false)) return false; 68*1989ee26SSzymon Olewniczak 69*1989ee26SSzymon Olewniczak if (!$this->getConf('hide_drafts_for_viewers')) return true; 70*1989ee26SSzymon Olewniczak 71*1989ee26SSzymon Olewniczak if (auth_quickaclcheck($id) >= AUTH_EDIT) return true; 72*1989ee26SSzymon Olewniczak if ($this->clientCanApprove($id)) return true; 73*1989ee26SSzymon Olewniczak 74*1989ee26SSzymon Olewniczak return false; 75*1989ee26SSzymon Olewniczak } 76*1989ee26SSzymon Olewniczak} 77