]>
Commit | Line | Data |
---|---|---|
0e25828e DM |
1 | <?php |
2 | ||
3 | # see http://www.mediawiki.org/wiki/Manual:Parser_functions | |
4 | ||
5 | $wgExtensionCredits['parserhook'][] = array( | |
6 | 'name' => "PVE Documenation Pages", | |
7 | 'description' => "Display PVE Documentation Pages", | |
8 | 'author' => "Dietmar Maurer", | |
9 | ); | |
10 | ||
11 | # Define a setup function | |
12 | $wgHooks['ParserFirstCallInit'][] = 'efPvedocsParserFunction_Setup'; | |
13 | ||
14 | # Add a hook to initialise the magic word | |
15 | $wgHooks['LanguageGetMagic'][] = 'efPvedocsParserFunction_Magic'; | |
16 | ||
17 | function efPvedocsParserFunction_Setup(&$parser) { | |
18 | # Set a function hook associating the "pvedocs" magic | |
19 | # word with our function | |
20 | $parser->setFunctionHook( 'pvedocs', 'efPvedocsParserFunction_Render' ); | |
21 | return true; | |
22 | } | |
23 | ||
24 | function efPvedocsParserFunction_Magic(&$magicWords, $langCode) { | |
25 | # Add the magic word | |
26 | # The first array element is whether to be case sensitive, | |
27 | # in this case (0) it is not case sensitive, 1 would be sensitive | |
28 | # All remaining elements are synonyms for our parser function | |
29 | $magicWords['pvedocs'] = array( 0, 'pvedocs' ); | |
30 | ||
31 | # unless we return true, other parser functions extensions won't get loaded. | |
32 | return true; | |
33 | } | |
34 | ||
35 | function encodeURI($uri) { | |
36 | return preg_replace_callback("{[^0-9a-z_.!~*'();,/?:@&=+$#-]}i", | |
37 | function ($m) { return sprintf('%%%02X', ord($m[0])); }, $uri); | |
38 | } | |
39 | ||
40 | function efPvedocsParserFunction_Render($parser, $param1 = '', $param2 = '') { | |
41 | ||
42 | $parser->disableCache(); | |
43 | ||
44 | # only allow simply names, so that users can only include | |
45 | # files from within "/usr/share/pve-docs/" | |
46 | if (!preg_match("/[a-z0-9.-]+\.html/i", $param1)) { | |
47 | die("no such manual page"); | |
48 | } | |
49 | ||
50 | $content = file_get_contents("/usr/share/pve-docs/$param1"); | |
51 | ||
d80b5cbd DM |
52 | $output = "<noscript><div><p>" . |
53 | "This page requires java-script. To view " . | |
54 | "this page without java-script goto " . | |
55 | "<a href='/pve-docs/$param1'>$param1</a>" . | |
56 | "</div></noscript>\n"; | |
57 | ||
0e25828e DM |
58 | # hack to inject html without modifications my mediawiki parser |
59 | $encHtml = encodeURI($content); | |
60 | $output .= "<div id='pve_embed_data'></div>"; | |
61 | $output .= "<script>" . | |
62 | "var data = decodeURI(\"".$encHtml."\");" . | |
63 | "document.getElementById('pve_embed_data').innerHTML = data;" . | |
64 | "</script>"; | |
65 | ||
66 | return array($output, 'noparse' => true, 'isHTML' => true); | |
67 | } | |
68 | ||
69 | ?> |