1e394901aSAnna Dabrowska<?php 2e394901aSAnna Dabrowska 3910e7e15SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Assignments; 4910e7e15SAnna Dabrowska 5e394901aSAnna Dabrowskaclass helper_plugin_structpublish_db extends helper_plugin_struct_db 6e394901aSAnna Dabrowska{ 7e394901aSAnna Dabrowska /** 8910e7e15SAnna Dabrowska * Get list of all pages known to the plugin 9910e7e15SAnna Dabrowska * @return array 10910e7e15SAnna Dabrowska */ 11910e7e15SAnna Dabrowska public function getPages($pid = null) 12910e7e15SAnna Dabrowska { 13910e7e15SAnna Dabrowska $sql = 'SELECT pid FROM data_structpublish'; 14910e7e15SAnna Dabrowska if ($pid) { 15910e7e15SAnna Dabrowska $sql .= ' WHERE pid = ?'; 16910e7e15SAnna Dabrowska } 17910e7e15SAnna Dabrowska $res = $this->sqlite->query($sql, $pid); 18910e7e15SAnna Dabrowska $list = $this->sqlite->res2arr($res); 19910e7e15SAnna Dabrowska $this->sqlite->res_close($res); 20910e7e15SAnna Dabrowska return $list; 21910e7e15SAnna Dabrowska } 22910e7e15SAnna Dabrowska 23910e7e15SAnna Dabrowska /** 24e394901aSAnna Dabrowska * Overwrites dummy IS_PUBLISHER from struct plugin 25910e7e15SAnna Dabrowska * Required argument: pid 26910e7e15SAnna Dabrowska * Expected arguments: user, grps; default to current user and their groups 27910e7e15SAnna Dabrowska * 28*40f4519bSAnna Dabrowska * Returns true if user/group may see unpublished revisions of a page 29e394901aSAnna Dabrowska * 30e394901aSAnna Dabrowska * @return bool 31e394901aSAnna Dabrowska */ 32e394901aSAnna Dabrowska public function IS_PUBLISHER() // phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps 33e394901aSAnna Dabrowska { 34910e7e15SAnna Dabrowska global $USERINFO; 35910e7e15SAnna Dabrowska global $INPUT; 36e394901aSAnna Dabrowska 37910e7e15SAnna Dabrowska $args = func_get_args(); 38910e7e15SAnna Dabrowska $pid = $args[0]; 39910e7e15SAnna Dabrowska $userId = $args[1] ?? $INPUT->server->str('REMOTE_USER'); 40910e7e15SAnna Dabrowska $grps = $args[2] ?? ($USERINFO['grps'] ?? []); 41910e7e15SAnna Dabrowska 42*40f4519bSAnna Dabrowska return $this->userHasRole( 43*40f4519bSAnna Dabrowska [helper_plugin_structpublish_permissions::ACTION_PUBLISH, helper_plugin_structpublish_permissions::ACTION_APPROVE], 44*40f4519bSAnna Dabrowska $userId, 45*40f4519bSAnna Dabrowska $grps, 46*40f4519bSAnna Dabrowska $pid 47*40f4519bSAnna Dabrowska ); 48910e7e15SAnna Dabrowska } 49910e7e15SAnna Dabrowska 50*40f4519bSAnna Dabrowska protected function userHasRole($roles, $userId, $grps, $pid) 51910e7e15SAnna Dabrowska { 52910e7e15SAnna Dabrowska $assignments = Assignments::getInstance(); 53910e7e15SAnna Dabrowska $rules = $assignments->getPageAssignments($pid); 54910e7e15SAnna Dabrowska 55*40f4519bSAnna Dabrowska foreach ($roles as $role) { 56910e7e15SAnna Dabrowska if (isset($rules[$role])) { 57910e7e15SAnna Dabrowska $users = $rules[helper_plugin_structpublish_permissions::ACTION_PUBLISH]; 58910e7e15SAnna Dabrowska if (auth_isMember(implode(',', $users), $userId, $grps)) { 59910e7e15SAnna Dabrowska return true; 60910e7e15SAnna Dabrowska } 61910e7e15SAnna Dabrowska } 62*40f4519bSAnna Dabrowska } 63910e7e15SAnna Dabrowska 64910e7e15SAnna Dabrowska return false; 65e394901aSAnna Dabrowska } 66e394901aSAnna Dabrowska} 67