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