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