1 <?php
2 
3 /**
4  * DokuWiki Actions
5  *
6  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
7  * @author     Andreas Gohr <andi@splitbrain.org>
8  */
9 
10 use dokuwiki\ActionRouter;
11 use dokuwiki\Extension\Event;
12 
13 /**
14  * All action processing starts here
15  */
16 function act_dispatch()
17 {
18     // always initialize on first dispatch (test request may dispatch mutliple times on one request)
19     $router = ActionRouter::getInstance(true);
20 
21     $headers = ['Content-Type: text/html; charset=utf-8'];
22     Event::createAndTrigger('ACTION_HEADERS_SEND', $headers, 'act_sendheaders');
23 
24     // clear internal variables
25     unset($router);
26     unset($headers);
27     // make all globals available to the template
28     extract($GLOBALS);
29 
30     include(template('main.php'));
31     // output for the commands is now handled in inc/templates.php
32     // in function tpl_content()
33 }
34 
35 /**
36  * Send the given headers using header()
37  *
38  * @param array $headers The headers that shall be sent
39  */
40 function act_sendheaders($headers)
41 {
42     foreach ($headers as $hdr) header($hdr);
43 }
44 
45 /**
46  * Sanitize the action command
47  *
48  * @author Andreas Gohr <andi@splitbrain.org>
49  *
50  * @param array|string $act
51  * @return string
52  */
53 function act_clean($act)
54 {
55     // check if the action was given as array key
56     if (is_array($act)) {
57         [$act] = array_keys($act);
58     }
59 
60     // no action given
61     if ($act === null) return 'show';
62 
63     //remove all bad chars
64     $act = strtolower($act);
65     $act = preg_replace('/[^1-9a-z_]+/', '', $act);
66 
67     if ($act == 'export_html') $act = 'export_xhtml';
68     if ($act == 'export_htmlbody') $act = 'export_xhtmlbody';
69 
70     if ($act === '') $act = 'show';
71     return $act;
72 }
73