1e394901aSAnna Dabrowska<?php 2e394901aSAnna Dabrowska 3*910e7e15SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Assignments; 4*910e7e15SAnna Dabrowska 5e394901aSAnna Dabrowskaclass helper_plugin_structpublish_db extends helper_plugin_struct_db 6e394901aSAnna Dabrowska{ 7e394901aSAnna Dabrowska /** 8*910e7e15SAnna Dabrowska * Get list of all pages known to the plugin 9*910e7e15SAnna Dabrowska * @return array 10*910e7e15SAnna Dabrowska */ 11*910e7e15SAnna Dabrowska public function getPages($pid = null) 12*910e7e15SAnna Dabrowska { 13*910e7e15SAnna Dabrowska $sql = 'SELECT pid FROM data_structpublish'; 14*910e7e15SAnna Dabrowska if ($pid) { 15*910e7e15SAnna Dabrowska $sql .= ' WHERE pid = ?'; 16*910e7e15SAnna Dabrowska } 17*910e7e15SAnna Dabrowska $res = $this->sqlite->query($sql, $pid); 18*910e7e15SAnna Dabrowska $list = $this->sqlite->res2arr($res); 19*910e7e15SAnna Dabrowska $this->sqlite->res_close($res); 20*910e7e15SAnna Dabrowska return $list; 21*910e7e15SAnna Dabrowska } 22*910e7e15SAnna Dabrowska 23*910e7e15SAnna Dabrowska /** 24e394901aSAnna Dabrowska * Overwrites dummy IS_PUBLISHER from struct plugin 25*910e7e15SAnna Dabrowska * Required argument: pid 26*910e7e15SAnna Dabrowska * Expected arguments: user, grps; default to current user and their groups 27*910e7e15SAnna Dabrowska * 28*910e7e15SAnna Dabrowska * Returns true if user/group matches the 'publish' rule for the given page 29e394901aSAnna Dabrowska * 30e394901aSAnna Dabrowska * @return bool 31e394901aSAnna Dabrowska */ 32e394901aSAnna Dabrowska public function IS_PUBLISHER() // phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps 33e394901aSAnna Dabrowska { 34*910e7e15SAnna Dabrowska global $USERINFO; 35*910e7e15SAnna Dabrowska global $INPUT; 36e394901aSAnna Dabrowska 37*910e7e15SAnna Dabrowska $args = func_get_args(); 38*910e7e15SAnna Dabrowska $pid = $args[0]; 39*910e7e15SAnna Dabrowska $userId = $args[1] ?? $INPUT->server->str('REMOTE_USER'); 40*910e7e15SAnna Dabrowska $grps = $args[2] ?? ($USERINFO['grps'] ?? []); 41*910e7e15SAnna Dabrowska 42*910e7e15SAnna Dabrowska $role = helper_plugin_structpublish_permissions::ACTION_PUBLISH; 43*910e7e15SAnna Dabrowska 44*910e7e15SAnna Dabrowska return $this->isRoleAllowed($role, $pid, $userId, $grps); 45*910e7e15SAnna Dabrowska } 46*910e7e15SAnna Dabrowska 47*910e7e15SAnna Dabrowska /** 48*910e7e15SAnna Dabrowska * Check for approver role 49*910e7e15SAnna Dabrowska * @see \helper_plugin_structpublish_db::IS_PUBLISHER 50*910e7e15SAnna Dabrowska * @FIXME This is method is not used yet. 51*910e7e15SAnna Dabrowska * 52*910e7e15SAnna Dabrowska * Required argument: pid 53*910e7e15SAnna Dabrowska * Expected arguments: user, grps; default to current user and their groups 54*910e7e15SAnna Dabrowska * 55*910e7e15SAnna Dabrowska * Returns true if user/group matches the 'approve' rule for the given page 56*910e7e15SAnna Dabrowska * 57*910e7e15SAnna Dabrowska * @return bool 58*910e7e15SAnna Dabrowska */ 59*910e7e15SAnna Dabrowska public function IS_APPROVER() // phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps 60*910e7e15SAnna Dabrowska { 61*910e7e15SAnna Dabrowska global $USERINFO; 62*910e7e15SAnna Dabrowska global $INPUT; 63*910e7e15SAnna Dabrowska 64*910e7e15SAnna Dabrowska $args = func_get_args(); 65*910e7e15SAnna Dabrowska $pid = $args[0]; 66*910e7e15SAnna Dabrowska $userId = $args[1] ?? $INPUT->server->str('REMOTE_USER'); 67*910e7e15SAnna Dabrowska $grps = $args[2] ?? ($USERINFO['grps'] ?? []); 68*910e7e15SAnna Dabrowska 69*910e7e15SAnna Dabrowska $role = helper_plugin_structpublish_permissions::ACTION_APPROVE; 70*910e7e15SAnna Dabrowska 71*910e7e15SAnna Dabrowska return $this->isRoleAllowed($role, $pid, $userId, $grps); 72*910e7e15SAnna Dabrowska } 73*910e7e15SAnna Dabrowska 74*910e7e15SAnna Dabrowska protected function isRoleAllowed($role, $pid, $userId, $grps) 75*910e7e15SAnna Dabrowska { 76*910e7e15SAnna Dabrowska $assignments = Assignments::getInstance(); 77*910e7e15SAnna Dabrowska $rules = $assignments->getPageAssignments($pid); 78*910e7e15SAnna Dabrowska 79*910e7e15SAnna Dabrowska if (isset($rules[$role])) { 80*910e7e15SAnna Dabrowska $users = $rules[helper_plugin_structpublish_permissions::ACTION_PUBLISH]; 81*910e7e15SAnna Dabrowska if (auth_isMember(implode(',', $users), $userId, $grps)) { 82*910e7e15SAnna Dabrowska return true; 83*910e7e15SAnna Dabrowska } 84*910e7e15SAnna Dabrowska } 85*910e7e15SAnna Dabrowska 86*910e7e15SAnna Dabrowska return false; 87e394901aSAnna Dabrowska } 88e394901aSAnna Dabrowska} 89