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