1<?php 2 3use dokuwiki\plugin\structpublish\meta\Assignments; 4 5class helper_plugin_structpublish_db extends helper_plugin_struct_db 6{ 7 /** 8 * Get list of all pages known to the plugin 9 * @return array 10 */ 11 public function getPages($pid = null) 12 { 13 $sql = 'SELECT pid FROM data_structpublish'; 14 if ($pid) { 15 $sql .= ' WHERE pid = ?'; 16 } 17 $res = $this->sqlite->query($sql, $pid); 18 $list = $this->sqlite->res2arr($res); 19 $this->sqlite->res_close($res); 20 return $list; 21 } 22 23 /** 24 * Overwrites dummy IS_PUBLISHER from struct plugin 25 * Required argument: pid 26 * Expected arguments: user, grps; default to current user and their groups 27 * 28 * Returns true if user/group may see unpublished revisions of a page 29 * 30 * @return bool 31 */ 32 public function IS_PUBLISHER() // phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps 33 { 34 global $USERINFO; 35 global $INPUT; 36 37 $args = func_get_args(); 38 $pid = $args[0]; 39 $userId = $args[1] ?? $INPUT->server->str('REMOTE_USER'); 40 $grps = $args[2] ?? ($USERINFO['grps'] ?? []); 41 42 return $this->userHasRole( 43 [helper_plugin_structpublish_permissions::ACTION_PUBLISH, helper_plugin_structpublish_permissions::ACTION_APPROVE], 44 $userId, 45 $grps, 46 $pid 47 ); 48 } 49 50 protected function userHasRole($roles, $userId, $grps, $pid) 51 { 52 $assignments = Assignments::getInstance(); 53 $rules = $assignments->getPageAssignments($pid); 54 55 foreach ($roles as $role) { 56 if (isset($rules[$role])) { 57 $users = $rules[helper_plugin_structpublish_permissions::ACTION_PUBLISH]; 58 if (auth_isMember(implode(',', $users), $userId, $grps)) { 59 return true; 60 } 61 } 62 } 63 64 return false; 65 } 66} 67