xref: /plugin/structpublish/helper/assignments.php (revision 8b0ba635402b9a3b9717898c9e08f6ff65eb73f7)
1910e7e15SAnna Dabrowska<?php
2910e7e15SAnna Dabrowska
3910e7e15SAnna Dabrowska/**
4910e7e15SAnna Dabrowska * DokuWiki Plugin structpublish (Helper Component)
5910e7e15SAnna Dabrowska *
6910e7e15SAnna Dabrowska * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
7910e7e15SAnna Dabrowska * @author  Anna Dabrowska <dokuwiki@cosmocode.de>
8910e7e15SAnna Dabrowska */
9910e7e15SAnna Dabrowskaclass helper_plugin_structpublish_assignments extends DokuWiki_Plugin
10910e7e15SAnna Dabrowska{
11910e7e15SAnna Dabrowska    /**
12910e7e15SAnna Dabrowska     * Check if the given pattern matches the given page
13910e7e15SAnna Dabrowska     *
14910e7e15SAnna Dabrowska     * @param string $pattern the pattern to check against
15910e7e15SAnna Dabrowska     * @param string $page the cleaned pageid to check
16910e7e15SAnna Dabrowska     * @param string|null $pns optimization, the colon wrapped namespace of the page, set null for automatic
17910e7e15SAnna Dabrowska     * @return bool
18*8b0ba635SAndreas Gohr     * @author Andreas Gohr
19*8b0ba635SAndreas Gohr     *
20910e7e15SAnna Dabrowska     */
21910e7e15SAnna Dabrowska    public function matchPagePattern($pattern, $page, $pns = null)
22910e7e15SAnna Dabrowska    {
23*8b0ba635SAndreas Gohr        if (trim($pattern, ':') == '**') {
24*8b0ba635SAndreas Gohr            return true;
25*8b0ba635SAndreas Gohr        } // match all
26910e7e15SAnna Dabrowska
27910e7e15SAnna Dabrowska        // regex patterns
28910e7e15SAnna Dabrowska        if ($pattern[0] == '/') {
29910e7e15SAnna Dabrowska            return (bool) preg_match($pattern, ":$page");
30910e7e15SAnna Dabrowska        }
31910e7e15SAnna Dabrowska
32910e7e15SAnna Dabrowska        if (is_null($pns)) {
33910e7e15SAnna Dabrowska            $pns = ':' . getNS($page) . ':';
34910e7e15SAnna Dabrowska        }
35910e7e15SAnna Dabrowska
36910e7e15SAnna Dabrowska        $ans = ':' . cleanID($pattern) . ':';
37910e7e15SAnna Dabrowska        if (substr($pattern, -2) == '**') {
38910e7e15SAnna Dabrowska            // upper namespaces match
39910e7e15SAnna Dabrowska            if (strpos($pns, $ans) === 0) {
40910e7e15SAnna Dabrowska                return true;
41910e7e15SAnna Dabrowska            }
42910e7e15SAnna Dabrowska        } elseif (substr($pattern, -1) == '*') {
43910e7e15SAnna Dabrowska            // namespaces match exact
44910e7e15SAnna Dabrowska            if ($ans == $pns) {
45910e7e15SAnna Dabrowska                return true;
46910e7e15SAnna Dabrowska            }
47910e7e15SAnna Dabrowska        } else {
48910e7e15SAnna Dabrowska            // exact match
49910e7e15SAnna Dabrowska            if (cleanID($pattern) == $page) {
50910e7e15SAnna Dabrowska                return true;
51910e7e15SAnna Dabrowska            }
52910e7e15SAnna Dabrowska        }
53910e7e15SAnna Dabrowska
54910e7e15SAnna Dabrowska        return false;
55910e7e15SAnna Dabrowska    }
56910e7e15SAnna Dabrowska}
57