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