"PVE Documentation Pages", 'description' => "Display PVE Documentation Pages", 'author' => "Dietmar Maurer", ); # Define a setup function $wgHooks['ParserFirstCallInit'][] = 'efPvedocsParserFunction_Setup'; $wgHooks['ParserAfterTidy'][] = 'efPvedocsPostProcessFunction'; # Add a hook to initialise the magic word $wgHooks['LanguageGetMagic'][] = 'efPvedocsParserFunction_Magic'; function efPvedocsParserFunction_Setup(&$parser) { # Set a function hook associating the "pvedocs" magic # word with our function $parser->setFunctionHook('pvedocs', 'efPvedocsParserFunction_Render'); $parser->setHook('pvehide', 'renderTagPveHideContent'); return true; } # similar code as in tag... function efPvedocsPostProcessFunction($parser, &$text) { $text = preg_replace_callback( '/-_- @PVEDOCS_BASE64@ ([0-9a-zA-Z\\+\\/]+=*) @PVEDOCS_BASE64@ -_-/sm', function ($m) { return base64_decode("$m[1]"); }, $text); return true; } // Render function renderTagPveHideContent($input, array $args, Parser $parser, PPFrame $frame ) { // simply return nothing return ''; } function efPvedocsParserFunction_Magic(&$magicWords, $langCode) { # Add the magic word # The first array element is whether to be case sensitive, # in this case (0) it is not case sensitive, 1 would be sensitive # All remaining elements are synonyms for our parser function $magicWords['pvedocs'] = array( 0, 'pvedocs' ); # unless we return true, other parser functions extensions won't get loaded. return true; } function efPvedocsParserFunction_Render($parser, $param1 = '', $param2 = '') { $parser->disableCache(); # only allow simply names, so that users can only include # files from within "/usr/share/pve-docs/" if (!preg_match("/[a-z0-9.-]+\.html/i", $param1)) { die("no such manual page"); } $content = file_get_contents("/usr/share/pve-docs/$param1"); # do not use '<' or '>', it seems newer mediawiki converts it to '<' and '>' # and then the regex for the decode in efPvedocsPostProcessFunction does not matches.. $output = '-_- @PVEDOCS_BASE64@ '.base64_encode($content).' @PVEDOCS_BASE64@ -_-'; return array($output, 'noparse' => true, 'isHTML' => true); } ?>