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