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