xref: /plugin/structpublish/helper/db.php (revision 40f4519b316f8d5316baab41bc31c713611b3179)
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