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