+
+ # keep either login or logout parts depending on user level
+ global $User;
+ $hideclass = $User && property_exists($User, 'login') && $User->login ? 'logout' : 'login';
+ $doc = preg_replace('{\s*<([a-z]+) class="'.$hideclass.'">.*?</\1>}s', '', $doc);
+
+ return preg_replace_callback(
+ '{ (?<! <!--BLOCK: ) \[\[ ([^] ]+) ([^]]*) \]\] }x',
+ function ($sub) use ($blocks) {
+ list ($placeholder, $name, $params) = $sub;
+ if (isset($blocks[$name])) {
+ $html = $blocks[$name];
+ }
+ else {
+ $html = placeholder_include($name, explode(' ', $params));
+ }
+ return sprintf('<!--BLOCK:%s-->%s<!--/-->',
+ is_numeric($name) ? '' : $placeholder, # edit replacement
+ preg_replace('{<!--[^-]*-->}', '', $html) # contents
+ );
+ },
+ $doc
+ );