xref: /plugin/structpublish/helper/assignments.php (revision 910e7e15ab7eacafbaa096c48916ba3bb1c5258f)
1*910e7e15SAnna Dabrowska<?php
2*910e7e15SAnna Dabrowska
3*910e7e15SAnna Dabrowska/**
4*910e7e15SAnna Dabrowska * DokuWiki Plugin structpublish (Helper Component)
5*910e7e15SAnna Dabrowska *
6*910e7e15SAnna Dabrowska * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
7*910e7e15SAnna Dabrowska * @author  Anna Dabrowska <dokuwiki@cosmocode.de>
8*910e7e15SAnna Dabrowska */
9*910e7e15SAnna Dabrowska
10*910e7e15SAnna Dabrowskaclass helper_plugin_structpublish_assignments extends DokuWiki_Plugin
11*910e7e15SAnna Dabrowska{
12*910e7e15SAnna Dabrowska
13*910e7e15SAnna Dabrowska    /**
14*910e7e15SAnna Dabrowska     * @param $pattern
15*910e7e15SAnna Dabrowska     * @param $src
16*910e7e15SAnna Dabrowska     * @param $config
17*910e7e15SAnna Dabrowska     * @return array
18*910e7e15SAnna Dabrowska     */
19*910e7e15SAnna Dabrowska    public function generateRules($pattern = null, $src = null, $config = null)
20*910e7e15SAnna Dabrowska    {
21*910e7e15SAnna Dabrowska        $rules = [];
22*910e7e15SAnna Dabrowska        // ns pattern
23*910e7e15SAnna Dabrowska        $pattern = 'testpage';
24*910e7e15SAnna Dabrowska        $src = [
25*910e7e15SAnna Dabrowska            'page' => [
26*910e7e15SAnna Dabrowska                'status' => [
27*910e7e15SAnna Dabrowska                    'publish' => [
28*910e7e15SAnna Dabrowska                        'user' => ['@admin']
29*910e7e15SAnna Dabrowska                    ]
30*910e7e15SAnna Dabrowska                ]
31*910e7e15SAnna Dabrowska            ],
32*910e7e15SAnna Dabrowska            'test' => [
33*910e7e15SAnna Dabrowska                'status' => [
34*910e7e15SAnna Dabrowska                    'publish' => [
35*910e7e15SAnna Dabrowska                        'user' => ['@admin']
36*910e7e15SAnna Dabrowska                    ]
37*910e7e15SAnna Dabrowska                ]
38*910e7e15SAnna Dabrowska            ],
39*910e7e15SAnna Dabrowska            'testpage' => [
40*910e7e15SAnna Dabrowska                'status' => [
41*910e7e15SAnna Dabrowska                    'publish' => [
42*910e7e15SAnna Dabrowska                        'user' => ['@admin']
43*910e7e15SAnna Dabrowska                    ]
44*910e7e15SAnna Dabrowska                ]
45*910e7e15SAnna Dabrowska            ],
46*910e7e15SAnna Dabrowska            'testpage1' => [
47*910e7e15SAnna Dabrowska                'status' => [
48*910e7e15SAnna Dabrowska                    'publish' => [
49*910e7e15SAnna Dabrowska                        'user' => ['@admin']
50*910e7e15SAnna Dabrowska                    ]
51*910e7e15SAnna Dabrowska                ]
52*910e7e15SAnna Dabrowska            ],
53*910e7e15SAnna Dabrowska        ];
54*910e7e15SAnna Dabrowska
55*910e7e15SAnna Dabrowska        // Expected return pattern:
56*910e7e15SAnna Dabrowska
57*910e7e15SAnna Dabrowska        $rules = [
58*910e7e15SAnna Dabrowska
59*910e7e15SAnna Dabrowska        ];
60*910e7e15SAnna Dabrowska
61*910e7e15SAnna Dabrowska        return $rules;
62*910e7e15SAnna Dabrowska    }
63*910e7e15SAnna Dabrowska    /**
64*910e7e15SAnna Dabrowska     * Check if the given pattern matches the given page
65*910e7e15SAnna Dabrowska     * @author Andreas Gohr
66*910e7e15SAnna Dabrowska     *
67*910e7e15SAnna Dabrowska     * @param string $pattern the pattern to check against
68*910e7e15SAnna Dabrowska     * @param string $page the cleaned pageid to check
69*910e7e15SAnna Dabrowska     * @param string|null $pns optimization, the colon wrapped namespace of the page, set null for automatic
70*910e7e15SAnna Dabrowska     * @return bool
71*910e7e15SAnna Dabrowska     */
72*910e7e15SAnna Dabrowska    public function matchPagePattern($pattern, $page, $pns = null)
73*910e7e15SAnna Dabrowska    {
74*910e7e15SAnna Dabrowska        if (trim($pattern, ':') == '**') return true; // match all
75*910e7e15SAnna Dabrowska
76*910e7e15SAnna Dabrowska        // regex patterns
77*910e7e15SAnna Dabrowska        if ($pattern[0] == '/') {
78*910e7e15SAnna Dabrowska            return (bool)preg_match($pattern, ":$page");
79*910e7e15SAnna Dabrowska        }
80*910e7e15SAnna Dabrowska
81*910e7e15SAnna Dabrowska        if (is_null($pns)) {
82*910e7e15SAnna Dabrowska            $pns = ':' . getNS($page) . ':';
83*910e7e15SAnna Dabrowska        }
84*910e7e15SAnna Dabrowska
85*910e7e15SAnna Dabrowska        $ans = ':' . cleanID($pattern) . ':';
86*910e7e15SAnna Dabrowska        if (substr($pattern, -2) == '**') {
87*910e7e15SAnna Dabrowska            // upper namespaces match
88*910e7e15SAnna Dabrowska            if (strpos($pns, $ans) === 0) {
89*910e7e15SAnna Dabrowska                return true;
90*910e7e15SAnna Dabrowska            }
91*910e7e15SAnna Dabrowska        } elseif (substr($pattern, -1) == '*') {
92*910e7e15SAnna Dabrowska            // namespaces match exact
93*910e7e15SAnna Dabrowska            if ($ans == $pns) {
94*910e7e15SAnna Dabrowska                return true;
95*910e7e15SAnna Dabrowska            }
96*910e7e15SAnna Dabrowska        } else {
97*910e7e15SAnna Dabrowska            // exact match
98*910e7e15SAnna Dabrowska            if (cleanID($pattern) == $page) {
99*910e7e15SAnna Dabrowska                return true;
100*910e7e15SAnna Dabrowska            }
101*910e7e15SAnna Dabrowska        }
102*910e7e15SAnna Dabrowska
103*910e7e15SAnna Dabrowska        return false;
104*910e7e15SAnna Dabrowska    }
105*910e7e15SAnna Dabrowska}
106