From ac7a515f564d088e043bf190c9a4ced1d5c309db Mon Sep 17 00:00:00 2001
From: Andreas Gohr <andi@splitbrain.org>
Date: Thu, 9 Aug 2012 23:32:58 +0200
Subject: [PATCH] code cleanup in template.php

* make use of $INPUT
* clean up coding style
* add phpdoc comments
---
 inc/template.php | 925 ++++++++++++++++++++++++++---------------------
 1 file changed, 511 insertions(+), 414 deletions(-)

diff --git a/inc/template.php b/inc/template.php
index 7d09f7dd4..2dc58b36d 100644
--- a/inc/template.php
+++ b/inc/template.php
@@ -9,29 +9,33 @@
 if(!defined('DOKU_INC')) die('meh.');
 
 /**
- * Returns the path to the given template, uses
- * default one if the custom version doesn't exist.
+ * Access a template file
+ *
+ * Returns the path to the given file inside the current template, uses
+ * default template if the custom version doesn't exist.
  *
  * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $file
+ * @return string
  */
-function template($tpl){
+function template($file) {
     global $conf;
 
-    if(@is_readable(DOKU_INC.'lib/tpl/'.$conf['template'].'/'.$tpl))
-        return DOKU_INC.'lib/tpl/'.$conf['template'].'/'.$tpl;
+    if(@is_readable(DOKU_INC.'lib/tpl/'.$conf['template'].'/'.$file))
+        return DOKU_INC.'lib/tpl/'.$conf['template'].'/'.$file;
 
-    return DOKU_INC.'lib/tpl/default/'.$tpl;
+    return DOKU_INC.'lib/tpl/dokuwiki/'.$file;
 }
 
-
 /**
  * Convenience function to access template dir from local FS
  *
  * This replaces the deprecated DOKU_TPLINC constant
  *
  * @author Andreas Gohr <andi@splitbrain.org>
+ * @return string
  */
-function tpl_incdir(){
+function tpl_incdir() {
     global $conf;
     return DOKU_INC.'lib/tpl/'.$conf['template'].'/';
 }
@@ -42,8 +46,9 @@ function tpl_incdir(){
  * This replaces the deprecated DOKU_TPL constant
  *
  * @author Andreas Gohr <andi@splitbrain.org>
+ * @return string
  */
-function tpl_basedir(){
+function tpl_basedir() {
     global $conf;
     return DOKU_BASE.'lib/tpl/'.$conf['template'].'/';
 }
@@ -59,32 +64,43 @@ function tpl_basedir(){
  * handled by this function. ACL stuff is not done here either.
  *
  * @author Andreas Gohr <andi@splitbrain.org>
+ * @triggers TPL_ACT_RENDER
+ * @triggers TPL_CONTENT_DISPLAY
+ * @param bool $prependTOC should the TOC be displayed here?
+ * @return bool true if any output
  */
-function tpl_content($prependTOC=true) {
+function tpl_content($prependTOC = true) {
     global $ACT;
     global $INFO;
     $INFO['prependTOC'] = $prependTOC;
 
     ob_start();
-    trigger_event('TPL_ACT_RENDER',$ACT,'tpl_content_core');
+    trigger_event('TPL_ACT_RENDER', $ACT, 'tpl_content_core');
     $html_output = ob_get_clean();
-    trigger_event('TPL_CONTENT_DISPLAY',$html_output,'ptln');
+    trigger_event('TPL_CONTENT_DISPLAY', $html_output, 'ptln');
 
     return !empty($html_output);
 }
 
-function tpl_content_core(){
+/**
+ * Default Action of TPL_ACT_RENDER
+ *
+ * @return bool
+ */
+function tpl_content_core() {
     global $ACT;
     global $TEXT;
     global $PRE;
     global $SUF;
     global $SUM;
     global $IDX;
+    global $INPUT;
 
-    switch($ACT){
+    switch($ACT) {
         case 'show':
             html_show();
             break;
+        /** @noinspection PhpMissingBreakStatementInspection */
         case 'locked':
             html_locked();
         case 'edit':
@@ -102,20 +118,13 @@ function tpl_content_core(){
             html_search();
             break;
         case 'revisions':
-            $first = isset($_REQUEST['first']) ? intval($_REQUEST['first']) : 0;
-            html_revisions($first);
+            html_revisions($INPUT->int('first'));
             break;
         case 'diff':
             html_diff();
             break;
         case 'recent':
-            if (is_array($_REQUEST['first'])) {
-                $_REQUEST['first'] = array_keys($_REQUEST['first']);
-                $_REQUEST['first'] = $_REQUEST['first'][0];
-            }
-            $first = is_numeric($_REQUEST['first']) ? intval($_REQUEST['first']) : 0;
-            $show_changes = $_REQUEST['show_changes'];
-            html_recent($first, $show_changes);
+            html_recent($INPUT->extract('first')->int('first'), $INPUT->str('show_changes'));
             break;
         case 'index':
             html_index($IDX); #FIXME can this be pulled from globals? is it sanitized correctly?
@@ -124,8 +133,8 @@ function tpl_content_core(){
             html_backlinks();
             break;
         case 'conflict':
-            html_conflict(con($PRE,$TEXT,$SUF),$SUM);
-            html_diff(con($PRE,$TEXT,$SUF),false);
+            html_conflict(con($PRE, $TEXT, $SUF), $SUM);
+            html_diff(con($PRE, $TEXT, $SUF), false);
             break;
         case 'login':
             html_login();
@@ -152,9 +161,9 @@ function tpl_content_core(){
             tpl_media();
             break;
         default:
-            $evt = new Doku_Event('TPL_ACT_UNKNOWN',$ACT);
-            if ($evt->advise_before())
-                msg("Failed to handle command: ".hsc($ACT),-1);
+            $evt = new Doku_Event('TPL_ACT_UNKNOWN', $ACT);
+            if($evt->advise_before())
+                msg("Failed to handle command: ".hsc($ACT), -1);
             $evt->advise_after();
             unset($evt);
             return false;
@@ -169,43 +178,47 @@ function tpl_content_core(){
  * a false argument
  *
  * @author Andreas Gohr <andi@splitbrain.org>
+ * @param bool $return Should the TOC be returned instead to be printed?
+ * @return string
  */
-function tpl_toc($return=false){
+function tpl_toc($return = false) {
     global $TOC;
     global $ACT;
     global $ID;
     global $REV;
     global $INFO;
     global $conf;
+    global $INPUT;
     $toc = array();
 
-    if(is_array($TOC)){
+    if(is_array($TOC)) {
         // if a TOC was prepared in global scope, always use it
         $toc = $TOC;
-    }elseif(($ACT == 'show' || substr($ACT,0,6) == 'export') && !$REV && $INFO['exists']){
+    } elseif(($ACT == 'show' || substr($ACT, 0, 6) == 'export') && !$REV && $INFO['exists']) {
         // get TOC from metadata, render if neccessary
         $meta = p_get_metadata($ID, false, METADATA_RENDER_USING_CACHE);
-        if(isset($meta['internal']['toc'])){
+        if(isset($meta['internal']['toc'])) {
             $tocok = $meta['internal']['toc'];
-        }else{
+        } else {
             $tocok = true;
         }
-        $toc   = $meta['description']['tableofcontents'];
-        if(!$tocok || !is_array($toc) || !$conf['tocminheads'] || count($toc) < $conf['tocminheads']){
+        $toc = $meta['description']['tableofcontents'];
+        if(!$tocok || !is_array($toc) || !$conf['tocminheads'] || count($toc) < $conf['tocminheads']) {
             $toc = array();
         }
-    }elseif($ACT == 'admin'){
+    } elseif($ACT == 'admin') {
         // try to load admin plugin TOC FIXME: duplicates code from tpl_admin
         $plugin = null;
-        if (!empty($_REQUEST['page'])) {
+        $class  = $INPUT->str('page');
+        if(!empty($class)) {
             $pluginlist = plugin_list('admin');
-            if (in_array($_REQUEST['page'], $pluginlist)) {
+            if(in_array($class, $pluginlist)) {
                 // attempt to load the plugin
-                $plugin =& plugin_load('admin',$_REQUEST['page']);
+                /** @var $plugin DokuWiki_Admin_Plugin */
+                $plugin =& plugin_load('admin', $class);
             }
         }
-        if ( ($plugin !== null) &&
-                (!$plugin->forAdminOnly() || $INFO['isadmin']) ){
+        if( ($plugin !== null) && (!$plugin->forAdminOnly() || $INFO['isadmin']) ) {
             $toc = $plugin->getTOC();
             $TOC = $toc; // avoid later rebuild
         }
@@ -215,6 +228,7 @@ function tpl_toc($return=false){
     $html = html_TOC($toc);
     if($return) return $html;
     echo $html;
+    return '';
 }
 
 /**
@@ -222,26 +236,28 @@ function tpl_toc($return=false){
  *
  * @author Andreas Gohr <andi@splitbrain.org>
  */
-function tpl_admin(){
+function tpl_admin() {
     global $INFO;
     global $TOC;
+    global $INPUT;
 
     $plugin = null;
-    if (!empty($_REQUEST['page'])) {
+    $class  = $INPUT->str('page');
+    if(!empty($class)) {
         $pluginlist = plugin_list('admin');
 
-        if (in_array($_REQUEST['page'], $pluginlist)) {
-
+        if(in_array($class, $pluginlist)) {
             // attempt to load the plugin
-            $plugin =& plugin_load('admin',$_REQUEST['page']);
+            /** @var $plugin DokuWiki_Admin_Plugin */
+            $plugin =& plugin_load('admin', $class);
         }
     }
 
-    if ($plugin !== null){
+    if($plugin !== null) {
         if(!is_array($TOC)) $TOC = $plugin->getTOC(); //if TOC wasn't requested yet
         if($INFO['prependTOC']) tpl_toc();
         $plugin->html();
-    }else{
+    } else {
         html_admin();
     }
     return true;
@@ -252,11 +268,12 @@ function tpl_admin(){
  *
  * This has to go into the head section of your template.
  *
- * @triggers TPL_METAHEADER_OUTPUT
- * @param  boolean $alt Should feeds and alternative format links be added?
  * @author Andreas Gohr <andi@splitbrain.org>
+ * @triggers TPL_METAHEADER_OUTPUT
+ * @param  bool $alt Should feeds and alternative format links be added?
+ * @return bool
  */
-function tpl_metaheaders($alt=true){
+function tpl_metaheaders($alt = true) {
     global $ID;
     global $REV;
     global $INFO;
@@ -265,13 +282,12 @@ function tpl_metaheaders($alt=true){
     global $QUERY;
     global $lang;
     global $conf;
-    $it=2;
 
     // prepare the head array
     $head = array();
 
     // prepare seed for js and css
-    $tseed = 0;
+    $tseed   = 0;
     $depends = getConfigFiles('main');
     foreach($depends as $f) {
         $time = @filemtime($f);
@@ -279,99 +295,119 @@ function tpl_metaheaders($alt=true){
     }
 
     // the usual stuff
-    $head['meta'][] = array( 'name'=>'generator', 'content'=>'DokuWiki');
-    $head['link'][] = array( 'rel'=>'search', 'type'=>'application/opensearchdescription+xml',
-            'href'=>DOKU_BASE.'lib/exe/opensearch.php', 'title'=>$conf['title'] );
-    $head['link'][] = array( 'rel'=>'start', 'href'=>DOKU_BASE );
-    if(actionOK('index')){
-        $head['link'][] = array( 'rel'=>'contents', 'href'=> wl($ID,'do=index',false,'&'),
-                'title'=>$lang['btn_index'] );
+    $head['meta'][] = array('name'=> 'generator', 'content'=> 'DokuWiki');
+    $head['link'][] = array(
+        'rel' => 'search', 'type'=> 'application/opensearchdescription+xml',
+        'href'=> DOKU_BASE.'lib/exe/opensearch.php', 'title'=> $conf['title']
+    );
+    $head['link'][] = array('rel'=> 'start', 'href'=> DOKU_BASE);
+    if(actionOK('index')) {
+        $head['link'][] = array(
+            'rel'  => 'contents', 'href'=> wl($ID, 'do=index', false, '&'),
+            'title'=> $lang['btn_index']
+        );
     }
 
-    if($alt){
-        $head['link'][] = array( 'rel'=>'alternate', 'type'=>'application/rss+xml',
-                'title'=>'Recent Changes', 'href'=>DOKU_BASE.'feed.php');
-        $head['link'][] = array( 'rel'=>'alternate', 'type'=>'application/rss+xml',
-                'title'=>'Current Namespace',
-                'href'=>DOKU_BASE.'feed.php?mode=list&ns='.$INFO['namespace']);
-        if(($ACT == 'show' || $ACT == 'search') && $INFO['writable']){
-            $head['link'][] = array( 'rel'=>'edit',
-                    'title'=>$lang['btn_edit'],
-                    'href'=> wl($ID,'do=edit',false,'&'));
+    if($alt) {
+        $head['link'][] = array(
+            'rel'  => 'alternate', 'type'=> 'application/rss+xml',
+            'title'=> 'Recent Changes', 'href'=> DOKU_BASE.'feed.php'
+        );
+        $head['link'][] = array(
+            'rel'  => 'alternate', 'type'=> 'application/rss+xml',
+            'title'=> 'Current Namespace',
+            'href' => DOKU_BASE.'feed.php?mode=list&ns='.$INFO['namespace']
+        );
+        if(($ACT == 'show' || $ACT == 'search') && $INFO['writable']) {
+            $head['link'][] = array(
+                'rel'  => 'edit',
+                'title'=> $lang['btn_edit'],
+                'href' => wl($ID, 'do=edit', false, '&')
+            );
         }
 
-        if($ACT == 'search'){
-            $head['link'][] = array( 'rel'=>'alternate', 'type'=>'application/rss+xml',
-                    'title'=>'Search Result',
-                    'href'=>DOKU_BASE.'feed.php?mode=search&q='.$QUERY);
+        if($ACT == 'search') {
+            $head['link'][] = array(
+                'rel'  => 'alternate', 'type'=> 'application/rss+xml',
+                'title'=> 'Search Result',
+                'href' => DOKU_BASE.'feed.php?mode=search&q='.$QUERY
+            );
         }
 
-        if(actionOK('export_xhtml')){
-            $head['link'][] = array( 'rel'=>'alternate', 'type'=>'text/html', 'title'=>'Plain HTML',
-                    'href'=>exportlink($ID, 'xhtml', '', false, '&'));
+        if(actionOK('export_xhtml')) {
+            $head['link'][] = array(
+                'rel' => 'alternate', 'type'=> 'text/html', 'title'=> 'Plain HTML',
+                'href'=> exportlink($ID, 'xhtml', '', false, '&')
+            );
         }
 
-        if(actionOK('export_raw')){
-            $head['link'][] = array( 'rel'=>'alternate', 'type'=>'text/plain', 'title'=>'Wiki Markup',
-                    'href'=>exportlink($ID, 'raw', '', false, '&'));
+        if(actionOK('export_raw')) {
+            $head['link'][] = array(
+                'rel' => 'alternate', 'type'=> 'text/plain', 'title'=> 'Wiki Markup',
+                'href'=> exportlink($ID, 'raw', '', false, '&')
+            );
         }
     }
 
     // setup robot tags apropriate for different modes
-    if( ($ACT=='show' || $ACT=='export_xhtml') && !$REV){
-        if($INFO['exists']){
+    if(($ACT == 'show' || $ACT == 'export_xhtml') && !$REV) {
+        if($INFO['exists']) {
             //delay indexing:
-            if((time() - $INFO['lastmod']) >= $conf['indexdelay']){
-                $head['meta'][] = array( 'name'=>'robots', 'content'=>'index,follow');
-            }else{
-                $head['meta'][] = array( 'name'=>'robots', 'content'=>'noindex,nofollow');
+            if((time() - $INFO['lastmod']) >= $conf['indexdelay']) {
+                $head['meta'][] = array('name'=> 'robots', 'content'=> 'index,follow');
+            } else {
+                $head['meta'][] = array('name'=> 'robots', 'content'=> 'noindex,nofollow');
             }
-            $head['link'][] = array( 'rel'=>'canonical', 'href'=>wl($ID,'',true,'&') );
-        }else{
-            $head['meta'][] = array( 'name'=>'robots', 'content'=>'noindex,follow');
+            $head['link'][] = array('rel'=> 'canonical', 'href'=> wl($ID, '', true, '&'));
+        } else {
+            $head['meta'][] = array('name'=> 'robots', 'content'=> 'noindex,follow');
         }
-    }elseif(defined('DOKU_MEDIADETAIL')){
-        $head['meta'][] = array( 'name'=>'robots', 'content'=>'index,follow');
-    }else{
-        $head['meta'][] = array( 'name'=>'robots', 'content'=>'noindex,nofollow');
+    } elseif(defined('DOKU_MEDIADETAIL')) {
+        $head['meta'][] = array('name'=> 'robots', 'content'=> 'index,follow');
+    } else {
+        $head['meta'][] = array('name'=> 'robots', 'content'=> 'noindex,nofollow');
     }
 
     // set metadata
-    if($ACT == 'show' || $ACT=='export_xhtml'){
+    if($ACT == 'show' || $ACT == 'export_xhtml') {
         // date of modification
-        if($REV){
-            $head['meta'][] = array( 'name'=>'date', 'content'=>date('Y-m-d\TH:i:sO',$REV));
-        }else{
-            $head['meta'][] = array( 'name'=>'date', 'content'=>date('Y-m-d\TH:i:sO',$INFO['lastmod']));
+        if($REV) {
+            $head['meta'][] = array('name'=> 'date', 'content'=> date('Y-m-d\TH:i:sO', $REV));
+        } else {
+            $head['meta'][] = array('name'=> 'date', 'content'=> date('Y-m-d\TH:i:sO', $INFO['lastmod']));
         }
 
         // keywords (explicit or implicit)
-        if(!empty($INFO['meta']['subject'])){
-            $head['meta'][] = array( 'name'=>'keywords', 'content'=>join(',',$INFO['meta']['subject']));
-        }else{
-            $head['meta'][] = array( 'name'=>'keywords', 'content'=>str_replace(':',',',$ID));
+        if(!empty($INFO['meta']['subject'])) {
+            $head['meta'][] = array('name'=> 'keywords', 'content'=> join(',', $INFO['meta']['subject']));
+        } else {
+            $head['meta'][] = array('name'=> 'keywords', 'content'=> str_replace(':', ',', $ID));
         }
     }
 
     // load stylesheets
-    $head['link'][] = array('rel'=>'stylesheet', 'type'=>'text/css',
-            'href'=>DOKU_BASE.'lib/exe/css.php?t='.$conf['template'].'&tseed='.$tseed);
+    $head['link'][] = array(
+        'rel' => 'stylesheet', 'type'=> 'text/css',
+        'href'=> DOKU_BASE.'lib/exe/css.php?t='.$conf['template'].'&tseed='.$tseed
+    );
 
     // make $INFO and other vars available to JavaScripts
-    $json = new JSON();
+    $json   = new JSON();
     $script = "var NS='".$INFO['namespace']."';";
-    if($conf['useacl'] && $_SERVER['REMOTE_USER']){
+    if($conf['useacl'] && $_SERVER['REMOTE_USER']) {
         $script .= "var SIG='".toolbar_signature()."';";
     }
     $script .= 'var JSINFO = '.$json->encode($JSINFO).';';
-    $head['script'][] = array( 'type'=>'text/javascript', '_data'=> $script);
+    $head['script'][] = array('type'=> 'text/javascript', '_data'=> $script);
 
     // load external javascript
-    $head['script'][] = array( 'type'=>'text/javascript', 'charset'=>'utf-8', '_data'=>'',
-            'src'=>DOKU_BASE.'lib/exe/js.php'.'?tseed='.$tseed);
+    $head['script'][] = array(
+        'type'=> 'text/javascript', 'charset'=> 'utf-8', '_data'=> '',
+        'src' => DOKU_BASE.'lib/exe/js.php'.'?tseed='.$tseed
+    );
 
     // trigger event here
-    trigger_event('TPL_METAHEADER_OUTPUT',$head,'_tpl_metaheaders_action',true);
+    trigger_event('TPL_METAHEADER_OUTPUT', $head, '_tpl_metaheaders_action', true);
     return true;
 }
 
@@ -387,18 +423,18 @@ function tpl_metaheaders($alt=true){
  *
  * @author Andreas Gohr <andi@splitbrain.org>
  */
-function _tpl_metaheaders_action($data){
-    foreach($data as $tag => $inst){
-        foreach($inst as $attr){
-            echo '<',$tag,' ',buildAttributes($attr);
-            if(isset($attr['_data']) || $tag == 'script'){
+function _tpl_metaheaders_action($data) {
+    foreach($data as $tag => $inst) {
+        foreach($inst as $attr) {
+            echo '<', $tag, ' ', buildAttributes($attr);
+            if(isset($attr['_data']) || $tag == 'script') {
                 if($tag == 'script' && $attr['_data'])
                     $attr['_data'] = "/*<![CDATA[*/".
                         $attr['_data'].
                         "\n/*!]]>*/";
 
-                echo '>',$attr['_data'],'</',$tag,'>';
-            }else{
+                echo '>', $attr['_data'], '</', $tag, '>';
+            } else {
                 echo '/>';
             }
             echo "\n";
@@ -413,11 +449,11 @@ function _tpl_metaheaders_action($data){
  *
  * @author Andreas Gohr <andi@splitbrain.org>
  */
-function tpl_link($url,$name,$more='',$return=false){
+function tpl_link($url, $name, $more = '', $return = false) {
     $out = '<a href="'.$url.'" ';
-    if ($more) $out .= ' '.$more;
+    if($more) $out .= ' '.$more;
     $out .= ">$name</a>";
-    if ($return) return $out;
+    if($return) return $out;
     print $out;
     return true;
 }
@@ -429,8 +465,8 @@ function tpl_link($url,$name,$more='',$return=false){
  *
  * @author Andreas Gohr <andi@splitbrain.org>
  */
-function tpl_pagelink($id,$name=null){
-    print html_wikilink($id,$name);
+function tpl_pagelink($id, $name = null) {
+    print html_wikilink($id, $name);
     return true;
 }
 
@@ -442,14 +478,13 @@ function tpl_pagelink($id,$name=null){
  *
  * @author Andreas Gohr <andi@splitbrain.org>
  */
-function tpl_getparent($id){
-    global $conf;
+function tpl_getparent($id) {
     $parent = getNS($id).':';
-    resolve_pageid('',$parent,$exists);
+    resolve_pageid('', $parent, $exists);
     if($parent == $id) {
-        $pos = strrpos (getNS($id),':');
-        $parent = substr($parent,0,$pos).':';
-        resolve_pageid('',$parent,$exists);
+        $pos    = strrpos(getNS($id), ':');
+        $parent = substr($parent, 0, $pos).':';
+        resolve_pageid('', $parent, $exists);
         if($parent == $id) return false;
     }
     return $parent;
@@ -461,21 +496,27 @@ function tpl_getparent($id){
  * @author Adrian Lang <mail@adrianlang.de>
  * @see    tpl_get_action
  */
-function tpl_button($type,$return=false){
+function tpl_button($type, $return = false) {
     $data = tpl_get_action($type);
-    if ($data === false) {
+    if($data === false) {
         return false;
-    } elseif (!is_array($data)) {
+    } elseif(!is_array($data)) {
         $out = sprintf($data, 'button');
     } else {
+        /**
+         * @var string $accesskey
+         * @var string $id
+         * @var string $method
+         * @var array  $params
+         */
         extract($data);
-        if ($id === '#dokuwiki__top') {
+        if($id === '#dokuwiki__top') {
             $out = html_topbtn();
         } else {
             $out = html_btn($type, $id, $accesskey, $params, $method);
         }
     }
-    if ($return) return $out;
+    if($return) return $out;
     echo $out;
     return true;
 }
@@ -486,32 +527,40 @@ function tpl_button($type,$return=false){
  * @author Adrian Lang <mail@adrianlang.de>
  * @see    tpl_get_action
  */
-function tpl_actionlink($type,$pre='',$suf='',$inner='',$return=false){
+function tpl_actionlink($type, $pre = '', $suf = '', $inner = '', $return = false) {
     global $lang;
     $data = tpl_get_action($type);
-    if ($data === false) {
+    if($data === false) {
         return false;
-    } elseif (!is_array($data)) {
+    } elseif(!is_array($data)) {
         $out = sprintf($data, 'link');
     } else {
+        /**
+         * @var string $accesskey
+         * @var string $id
+         * @var string $method
+         * @var array  $params
+         */
         extract($data);
-        if (strpos($id, '#') === 0) {
+        if(strpos($id, '#') === 0) {
             $linktarget = $id;
         } else {
             $linktarget = wl($id, $params);
         }
-        $caption = $lang['btn_' . $type];
-        $akey = $addTitle = '';
-        if($accesskey){
-            $akey = 'accesskey="'.$accesskey.'" ';
+        $caption = $lang['btn_'.$type];
+        $akey    = $addTitle = '';
+        if($accesskey) {
+            $akey     = 'accesskey="'.$accesskey.'" ';
             $addTitle = ' ['.strtoupper($accesskey).']';
         }
-        $out = tpl_link($linktarget, $pre.(($inner)?$inner:$caption).$suf,
-                        'class="action ' . $type . '" ' .
-                        $akey . 'rel="nofollow" ' .
-                        'title="' . hsc($caption).$addTitle . '"', 1);
+        $out = tpl_link(
+            $linktarget, $pre.(($inner) ? $inner : $caption).$suf,
+            'class="action '.$type.'" '.
+                $akey.'rel="nofollow" '.
+                'title="'.hsc($caption).$addTitle.'"', 1
+        );
     }
-    if ($return) return $out;
+    if($return) return $out;
     echo $out;
     return true;
 }
@@ -536,53 +585,53 @@ function tpl_actionlink($type,$pre='',$suf='',$inner='',$return=false){
  * @author Andreas Gohr <andi@splitbrain.org>
  * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
  * @author Adrian Lang <mail@adrianlang.de>
+ * @param string $type
+ * @return array|bool|string
  */
 function tpl_get_action($type) {
     global $ID;
     global $INFO;
     global $REV;
     global $ACT;
-    global $conf;
-    global $auth;
 
     // check disabled actions and fix the badly named ones
-    if($type == 'history') $type='revisions';
+    if($type == 'history') $type = 'revisions';
     if(!actionOK($type)) return false;
 
     $accesskey = null;
     $id        = $ID;
     $method    = 'get';
     $params    = array('do' => $type);
-    switch($type){
+    switch($type) {
         case 'edit':
             // most complicated type - we need to decide on current action
-            if($ACT == 'show' || $ACT == 'search'){
+            if($ACT == 'show' || $ACT == 'search') {
                 $method = 'post';
-                if($INFO['writable']){
+                if($INFO['writable']) {
                     $accesskey = 'e';
                     if(!empty($INFO['draft'])) {
-                        $type = 'draft';
+                        $type         = 'draft';
                         $params['do'] = 'draft';
                     } else {
                         $params['rev'] = $REV;
-                        if(!$INFO['exists']){
-                            $type   = 'create';
+                        if(!$INFO['exists']) {
+                            $type = 'create';
                         }
                     }
-                }else{
+                } else {
                     if(!actionOK('source')) return false; //pseudo action
                     $params['rev'] = $REV;
-                    $type = 'source';
-                    $accesskey = 'v';
+                    $type          = 'source';
+                    $accesskey     = 'v';
                 }
-            }else{
-                $params = array();
-                $type = 'show';
+            } else {
+                $params    = array();
+                $type      = 'show';
                 $accesskey = 'v';
             }
             break;
         case 'revisions':
-            $type = 'revs';
+            $type      = 'revs';
             $accesskey = 'o';
             break;
         case 'recent':
@@ -593,40 +642,40 @@ function tpl_get_action($type) {
             break;
         case 'top':
             $accesskey = 't';
-            $params = array();
-            $id = '#dokuwiki__top';
+            $params    = array();
+            $id        = '#dokuwiki__top';
             break;
         case 'back':
             $parent = tpl_getparent($ID);
-            if (!$parent) {
+            if(!$parent) {
                 return false;
             }
-            $id = $parent;
-            $params = array();
+            $id        = $parent;
+            $params    = array();
             $accesskey = 'b';
             break;
         case 'login':
             $params['sectok'] = getSecurityToken();
-            if(isset($_SERVER['REMOTE_USER'])){
-                if (!actionOK('logout')) {
+            if(isset($_SERVER['REMOTE_USER'])) {
+                if(!actionOK('logout')) {
                     return false;
                 }
                 $params['do'] = 'logout';
-                $type = 'logout';
+                $type         = 'logout';
             }
             break;
         case 'register':
-            if($_SERVER['REMOTE_USER']){
+            if($_SERVER['REMOTE_USER']) {
                 return false;
             }
             break;
         case 'resendpwd':
-            if($_SERVER['REMOTE_USER']){
+            if($_SERVER['REMOTE_USER']) {
                 return false;
             }
             break;
         case 'admin':
-            if(!$INFO['ismanager']){
+            if(!$INFO['ismanager']) {
                 return false;
             }
             break;
@@ -634,21 +683,22 @@ function tpl_get_action($type) {
             if(!$INFO['ismanager'] || !$REV || !$INFO['writable']) {
                 return false;
             }
-            $params['rev'] = $REV;
+            $params['rev']    = $REV;
             $params['sectok'] = getSecurityToken();
             break;
+        /** @noinspection PhpMissingBreakStatementInspection */
         case 'subscription':
-            $type = 'subscribe';
+            $type         = 'subscribe';
             $params['do'] = 'subscribe';
         case 'subscribe':
-            if(!$_SERVER['REMOTE_USER']){
+            if(!$_SERVER['REMOTE_USER']) {
                 return false;
             }
             break;
         case 'backlink':
             break;
         case 'profile':
-            if(!isset($_SERVER['REMOTE_USER'])){
+            if(!isset($_SERVER['REMOTE_USER'])) {
                 return false;
             }
             break;
@@ -665,14 +715,25 @@ function tpl_get_action($type) {
  * Wrapper around tpl_button() and tpl_actionlink()
  *
  * @author Anika Henke <anika@selfthinker.org>
+ * @param
+ * @param bool   $link link or form button?
+ * @param bool   $wrapper HTML element wrapper
+ * @param bool   $return return or print
+ * @param string $pre prefix for links
+ * @param string $suf suffix for links
+ * @param string $inner inner HTML for links
+ * @return bool|string
  */
-function tpl_action($type,$link=0,$wrapper=false,$return=false,$pre='',$suf='',$inner='') {
+function tpl_action($type, $link = false, $wrapper = false, $return = false, $pre = '', $suf = '', $inner = '') {
     $out = '';
-    if ($link) $out .= tpl_actionlink($type,$pre,$suf,$inner,1);
-    else $out .= tpl_button($type,1);
-    if ($out && $wrapper) $out = "<$wrapper>$out</$wrapper>";
+    if($link) {
+        $out .= tpl_actionlink($type, $pre, $suf, $inner, 1);
+    } else {
+        $out .= tpl_button($type, 1);
+    }
+    if($out && $wrapper) $out = "<$wrapper>$out</$wrapper>";
 
-    if ($return) return $out;
+    if($return) return $out;
     print $out;
     return $out ? true : false;
 }
@@ -688,14 +749,17 @@ function tpl_action($type,$link=0,$wrapper=false,$return=false,$pre='',$suf='',$
  * autocompletion feature (MSIE and Firefox)
  *
  * @author Andreas Gohr <andi@splitbrain.org>
+ * @param bool $ajax
+ * @param bool $autocomplete
+ * @return bool
  */
-function tpl_searchform($ajax=true,$autocomplete=true){
+function tpl_searchform($ajax = true, $autocomplete = true) {
     global $lang;
     global $ACT;
     global $QUERY;
 
     // don't print the search form if search action has been disabled
-    if (!actionOk('search')) return false;
+    if(!actionOk('search')) return false;
 
     print '<form action="'.wl().'" accept-charset="utf-8" class="search" id="dw__search" method="get"><div class="no">';
     print '<input type="hidden" name="do" value="search" />';
@@ -713,8 +777,10 @@ function tpl_searchform($ajax=true,$autocomplete=true){
  * Print the breadcrumbs trace
  *
  * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $sep Separator between entries
+ * @return bool
  */
-function tpl_breadcrumbs($sep='•'){
+function tpl_breadcrumbs($sep = '•') {
     global $lang;
     global $conf;
 
@@ -725,7 +791,7 @@ function tpl_breadcrumbs($sep='•'){
 
     //reverse crumborder in right-to-left mode, add RLM character to fix heb/eng display mixups
     if($lang['direction'] == 'rtl') {
-        $crumbs = array_reverse($crumbs,true);
+        $crumbs     = array_reverse($crumbs, true);
         $crumbs_sep = ' &#8207;<span class="bcsep">'.$sep.'</span>&#8207; ';
     } else {
         $crumbs_sep = ' <span class="bcsep">'.$sep.'</span> ';
@@ -734,13 +800,13 @@ function tpl_breadcrumbs($sep='•'){
     //render crumbs, highlight the last one
     print '<span class="bchead">'.$lang['breadcrumb'].':</span>';
     $last = count($crumbs);
-    $i = 0;
-    foreach ($crumbs as $id => $name){
+    $i    = 0;
+    foreach($crumbs as $id => $name) {
         $i++;
         echo $crumbs_sep;
-        if ($i == $last) print '<span class="curid">';
-        tpl_link(wl($id),hsc($name),'class="breadcrumbs" title="'.$id.'"');
-        if ($i == $last) print '</span>';
+        if($i == $last) print '<span class="curid">';
+        tpl_link(wl($id), hsc($name), 'class="breadcrumbs" title="'.$id.'"');
+        if($i == $last) print '</span>';
     }
     return true;
 }
@@ -756,8 +822,10 @@ function tpl_breadcrumbs($sep='•'){
  * @author Sean Coates <sean@caedmon.net>
  * @author <fredrik@averpil.com>
  * @todo   May behave strangely in RTL languages
+ * @param string $sep Separator between entries
+ * @return bool
  */
-function tpl_youarehere($sep=' » '){
+function tpl_youarehere($sep = ' » ') {
     global $conf;
     global $ID;
     global $lang;
@@ -775,10 +843,10 @@ function tpl_youarehere($sep=' » '){
 
     // print intermediate namespace links
     $part = '';
-    for($i=0; $i<$count - 1; $i++){
+    for($i = 0; $i < $count - 1; $i++) {
         $part .= $parts[$i].':';
         $page = $part;
-        if ($page == $conf['start']) continue; // Skip startpage
+        if($page == $conf['start']) continue; // Skip startpage
 
         // output
         echo $sep;
@@ -786,10 +854,10 @@ function tpl_youarehere($sep=' » '){
     }
 
     // print current page, skipping start page, skipping for namespace index
-    resolve_pageid('',$page,$exists);
-    if(isset($page) && $page==$part.$parts[$i]) return;
+    resolve_pageid('', $page, $exists);
+    if(isset($page) && $page == $part.$parts[$i]) return true;
     $page = $part.$parts[$i];
-    if($page == $conf['start']) return;
+    if($page == $conf['start']) return true;
     echo $sep;
     tpl_pagelink($page);
     return true;
@@ -802,11 +870,12 @@ function tpl_youarehere($sep=' » '){
  * Could be enhanced with a profile link in future?
  *
  * @author Andreas Gohr <andi@splitbrain.org>
+ * @return bool
  */
-function tpl_userinfo(){
+function tpl_userinfo() {
     global $lang;
     global $INFO;
-    if(isset($_SERVER['REMOTE_USER'])){
+    if(isset($_SERVER['REMOTE_USER'])) {
         print $lang['loggedinas'].': '.hsc($INFO['userinfo']['name']).' ('.hsc($_SERVER['REMOTE_USER']).')';
         return true;
     }
@@ -817,51 +886,55 @@ function tpl_userinfo(){
  * Print some info about the current page
  *
  * @author Andreas Gohr <andi@splitbrain.org>
+ * @param bool $ret return content instead of printing it
+ * @return bool|string
  */
-function tpl_pageinfo($ret=false){
+function tpl_pageinfo($ret = false) {
     global $conf;
     global $lang;
     global $INFO;
     global $ID;
 
     // return if we are not allowed to view the page
-    if (!auth_quickaclcheck($ID)) { return false; }
+    if(!auth_quickaclcheck($ID)) {
+        return false;
+    }
 
     // prepare date and path
     $fn = $INFO['filepath'];
-    if(!$conf['fullpath']){
-        if($INFO['rev']){
-            $fn = str_replace(fullpath($conf['olddir']).'/','',$fn);
-        }else{
-            $fn = str_replace(fullpath($conf['datadir']).'/','',$fn);
+    if(!$conf['fullpath']) {
+        if($INFO['rev']) {
+            $fn = str_replace(fullpath($conf['olddir']).'/', '', $fn);
+        } else {
+            $fn = str_replace(fullpath($conf['datadir']).'/', '', $fn);
         }
     }
-    $fn = utf8_decodeFN($fn);
+    $fn   = utf8_decodeFN($fn);
     $date = dformat($INFO['lastmod']);
 
     // print it
-    if($INFO['exists']){
+    if($INFO['exists']) {
         $out = '';
         $out .= $fn;
         $out .= ' · ';
         $out .= $lang['lastmod'];
         $out .= ': ';
         $out .= $date;
-        if($INFO['editor']){
+        if($INFO['editor']) {
             $out .= ' '.$lang['by'].' ';
             $out .= editorinfo($INFO['editor']);
-        }else{
+        } else {
             $out .= ' ('.$lang['external_edit'].')';
         }
-        if($INFO['locked']){
+        if($INFO['locked']) {
             $out .= ' · ';
             $out .= $lang['lockedby'];
             $out .= ': ';
             $out .= editorinfo($INFO['locked']);
         }
-        if($ret){
+        if($ret) {
             return $out;
-        }else{
+        } else {
             echo $out;
             return true;
         }
@@ -876,21 +949,23 @@ function tpl_pageinfo($ret=false){
  * the given ID is used.
  *
  * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $id page id
+ * @param bool   $ret return content instead of printing
+ * @return bool|string
  */
-function tpl_pagetitle($id=null, $ret=false){
-    global $conf;
-    if(is_null($id)){
+function tpl_pagetitle($id = null, $ret = false) {
+    if(is_null($id)) {
         global $ID;
         $id = $ID;
     }
 
     $name = $id;
-    if (useHeading('navigation')) {
+    if(useHeading('navigation')) {
         $title = p_get_first_heading($id);
-        if ($title) $name = $title;
+        if($title) $name = $title;
     }
 
-    if ($ret) {
+    if($ret) {
         return hsc($name);
     } else {
         print hsc($name);
@@ -911,8 +986,12 @@ function tpl_pagetitle($id=null, $ret=false){
  * Only allowed in: detail.php
  *
  * @author Andreas Gohr <andi@splitbrain.org>
+ * @param array  $tags tags to try
+ * @param string $alt alternative output if no data was found
+ * @param null   $src the image src, uses global $SRC if not given
+ * @return string
  */
-function tpl_img_getTag($tags,$alt='',$src=null){
+function tpl_img_getTag($tags, $alt = '', $src = null) {
     // Init Exif Reader
     global $SRC;
 
@@ -931,66 +1010,72 @@ function tpl_img_getTag($tags,$alt='',$src=null){
  *
  * Only allowed in: detail.php
  *
+ * @triggers TPL_IMG_DISPLAY
  * @param $maxwidth  int - maximal width of the image
  * @param $maxheight int - maximal height of the image
  * @param $link bool     - link to the orginal size?
  * @param $params array  - additional image attributes
+ * @return mixed Result of TPL_IMG_DISPLAY
  */
-function tpl_img($maxwidth=0,$maxheight=0,$link=true,$params=null){
+function tpl_img($maxwidth = 0, $maxheight = 0, $link = true, $params = null) {
     global $IMG;
+    global $INPUT;
     $w = tpl_img_getTag('File.Width');
     $h = tpl_img_getTag('File.Height');
 
     //resize to given max values
     $ratio = 1;
-    if($w >= $h){
-        if($maxwidth && $w >= $maxwidth){
-            $ratio = $maxwidth/$w;
-        }elseif($maxheight && $h > $maxheight){
-            $ratio = $maxheight/$h;
+    if($w >= $h) {
+        if($maxwidth && $w >= $maxwidth) {
+            $ratio = $maxwidth / $w;
+        } elseif($maxheight && $h > $maxheight) {
+            $ratio = $maxheight / $h;
         }
-    }else{
-        if($maxheight && $h >= $maxheight){
-            $ratio = $maxheight/$h;
-        }elseif($maxwidth && $w > $maxwidth){
-            $ratio = $maxwidth/$w;
+    } else {
+        if($maxheight && $h >= $maxheight) {
+            $ratio = $maxheight / $h;
+        } elseif($maxwidth && $w > $maxwidth) {
+            $ratio = $maxwidth / $w;
         }
     }
-    if($ratio){
-        $w = floor($ratio*$w);
-        $h = floor($ratio*$h);
+    if($ratio) {
+        $w = floor($ratio * $w);
+        $h = floor($ratio * $h);
     }
 
     //prepare URLs
-    $url=ml($IMG,array('cache'=>$_REQUEST['cache']),true,'&');
-    $src=ml($IMG,array('cache'=>$_REQUEST['cache'],'w'=>$w,'h'=>$h),true,'&');
+    $url = ml($IMG, array('cache'=> $INPUT->str('cache')), true, '&');
+    $src = ml($IMG, array('cache'=> $INPUT->str('cache'), 'w'=> $w, 'h'=> $h), true, '&');
 
     //prepare attributes
-    $alt=tpl_img_getTag('Simple.Title');
-    if(is_null($params)){
+    $alt = tpl_img_getTag('Simple.Title');
+    if(is_null($params)) {
         $p = array();
-    }else{
+    } else {
         $p = $params;
     }
-    if($w) $p['width']  = $w;
+    if($w) $p['width'] = $w;
     if($h) $p['height'] = $h;
-    $p['class']  = 'img_detail';
-    if($alt){
+    $p['class'] = 'img_detail';
+    if($alt) {
         $p['alt']   = $alt;
         $p['title'] = $alt;
-    }else{
+    } else {
         $p['alt'] = '';
     }
     $p['src'] = $src;
 
-    $data = array('url'=>($link?$url:null), 'params'=>$p);
-    return trigger_event('TPL_IMG_DISPLAY',$data,'_tpl_img_action',true);
+    $data = array('url'=> ($link ? $url : null), 'params'=> $p);
+    return trigger_event('TPL_IMG_DISPLAY', $data, '_tpl_img_action', true);
 }
 
 /**
  * Default action for TPL_IMG_DISPLAY
+ *
+ * @param array $data
+ * @return bool
  */
-function _tpl_img_action($data, $param=null) {
+function _tpl_img_action($data) {
     global $lang;
     $p = buildAttributes($data['params']);
 
@@ -1005,38 +1090,42 @@ function _tpl_img_action($data, $param=null) {
  *
  * Should be called somewhere at the very end of the main.php
  * template
+ *
+ * @return bool
  */
-function tpl_indexerWebBug(){
+function tpl_indexerWebBug() {
     global $ID;
 
-    $p = array();
+    $p           = array();
     $p['src']    = DOKU_BASE.'lib/exe/indexer.php?id='.rawurlencode($ID).
         '&'.time();
     $p['width']  = 2; //no more 1x1 px image because we live in times of ad blockers...
     $p['height'] = 1;
     $p['alt']    = '';
-    $att = buildAttributes($p);
+    $att         = buildAttributes($p);
     print "<img $att />";
     return true;
 }
 
-// configuration methods
 /**
  * tpl_getConf($id)
  *
  * use this function to access template configuration variables
+ *
+ * @param string $id
+ * @return string
  */
-function tpl_getConf($id){
+function tpl_getConf($id) {
     global $conf;
     static $tpl_configloaded = false;
 
     $tpl = $conf['template'];
 
-    if (!$tpl_configloaded){
+    if(!$tpl_configloaded) {
         $tconf = tpl_loadConfig();
-        if ($tconf !== false){
-            foreach ($tconf as $key => $value){
-                if (isset($conf['tpl'][$tpl][$key])) continue;
+        if($tconf !== false) {
+            foreach($tconf as $key => $value) {
+                if(isset($conf['tpl'][$tpl][$key])) continue;
                 $conf['tpl'][$tpl][$key] = $value;
             }
             $tpl_configloaded = true;
@@ -1048,15 +1137,18 @@ function tpl_getConf($id){
 
 /**
  * tpl_loadConfig()
+ *
  * reads all template configuration variables
  * this function is automatically called by tpl_getConf()
+ *
+ * @return array
  */
-function tpl_loadConfig(){
+function tpl_loadConfig() {
 
     $file = tpl_incdir().'/conf/default.php';
     $conf = array();
 
-    if (!@file_exists($file)) return false;
+    if(!@file_exists($file)) return false;
 
     // load default config file
     include($file);
@@ -1070,18 +1162,18 @@ function tpl_loadConfig(){
  *
  * use this function to access template language variables
  */
-function tpl_getLang($id){
+function tpl_getLang($id) {
     static $lang = array();
 
-    if (count($lang) === 0){
+    if(count($lang) === 0) {
         $path = tpl_incdir().'lang/';
 
         $lang = array();
 
-        global $conf;            // definitely don't invoke "global $lang"
+        global $conf; // definitely don't invoke "global $lang"
         // don't include once
         @include($path.'en/lang.php');
-        if ($conf['lang'] != 'en') @include($path.$conf['lang'].'/lang.php');
+        if($conf['lang'] != 'en') @include($path.$conf['lang'].'/lang.php');
     }
 
     return $lang[$id];
@@ -1100,44 +1192,41 @@ function tpl_getLang($id){
  * @param bool $fromajax - set true when calling this function via ajax
  * @author Andreas Gohr <andi@splitbrain.org>
  */
-function tpl_mediaContent($fromajax=false){
+function tpl_mediaContent($fromajax = false) {
     global $IMG;
     global $AUTH;
     global $INUSE;
     global $NS;
     global $JUMPTO;
+    global $INPUT;
 
-    if(is_array($_REQUEST['do'])){
-        $do = array_shift(array_keys($_REQUEST['do']));
-    }else{
-        $do = $_REQUEST['do'];
-    }
-    if(in_array($do,array('save','cancel'))) $do = '';
+    $do = $INPUT->extract('do')->str('do');
+    if(in_array($do, array('save', 'cancel'))) $do = '';
 
-    if(!$do){
-        if($_REQUEST['edit']){
+    if(!$do) {
+        if($INPUT->bool('edit')) {
             $do = 'metaform';
-        }elseif(is_array($INUSE)){
+        } elseif(is_array($INUSE)) {
             $do = 'filesinuse';
-        }else{
+        } else {
             $do = 'filelist';
         }
     }
 
     // output the content pane, wrapped in an event.
     if(!$fromajax) ptln('<div id="media__content">');
-    $data = array( 'do' => $do);
-    $evt = new Doku_Event('MEDIAMANAGER_CONTENT_OUTPUT', $data);
-    if ($evt->advise_before()) {
+    $data = array('do' => $do);
+    $evt  = new Doku_Event('MEDIAMANAGER_CONTENT_OUTPUT', $data);
+    if($evt->advise_before()) {
         $do = $data['do'];
-        if($do == 'filesinuse'){
-            media_filesinuse($INUSE,$IMG);
-        }elseif($do == 'filelist'){
-            media_filelist($NS,$AUTH,$JUMPTO);
-        }elseif($do == 'searchlist'){
-            media_searchlist($_REQUEST['q'],$NS,$AUTH);
-        }else{
-            msg('Unknown action '.hsc($do),-1);
+        if($do == 'filesinuse') {
+            media_filesinuse($INUSE, $IMG);
+        } elseif($do == 'filelist') {
+            media_filelist($NS, $AUTH, $JUMPTO);
+        } elseif($do == 'searchlist') {
+            media_searchlist($INPUT->str('q'), $NS, $AUTH);
+        } else {
+            msg('Unknown action '.hsc($do), -1);
         }
     }
     $evt->advise_after();
@@ -1153,37 +1242,38 @@ function tpl_mediaContent($fromajax=false){
  *
  * @author Kate Arzamastseva <pshns@ukr.net>
  */
-function tpl_mediaFileList(){
+function tpl_mediaFileList() {
     global $AUTH;
     global $NS;
     global $JUMPTO;
     global $lang;
+    global $INPUT;
 
-    $opened_tab = $_REQUEST['tab_files'];
-    if (!$opened_tab || !in_array($opened_tab, array('files', 'upload', 'search'))) $opened_tab = 'files';
-    if ($_REQUEST['mediado'] == 'update') $opened_tab = 'upload';
+    $opened_tab = $INPUT->str('tab_files');
+    if(!$opened_tab || !in_array($opened_tab, array('files', 'upload', 'search'))) $opened_tab = 'files';
+    if($INPUT->str('mediado') == 'update') $opened_tab = 'upload';
 
-    echo '<h2 class="a11y">' . $lang['mediaselect'] . '</h2>'.NL;
+    echo '<h2 class="a11y">'.$lang['mediaselect'].'</h2>'.NL;
 
     media_tabs_files($opened_tab);
 
     echo '<div class="panelHeader">'.NL;
     echo '<h3>';
     $tabTitle = ($NS) ? $NS : '['.$lang['mediaroot'].']';
-    printf($lang['media_' . $opened_tab], '<strong>'.hsc($tabTitle).'</strong>');
+    printf($lang['media_'.$opened_tab], '<strong>'.hsc($tabTitle).'</strong>');
     echo '</h3>'.NL;
-    if ($opened_tab === 'search' || $opened_tab === 'files') {
+    if($opened_tab === 'search' || $opened_tab === 'files') {
         media_tab_files_options();
     }
     echo '</div>'.NL;
 
     echo '<div class="panelContent">'.NL;
-    if ($opened_tab == 'files') {
-        media_tab_files($NS,$AUTH,$JUMPTO);
-    } elseif ($opened_tab == 'upload') {
-        media_tab_upload($NS,$AUTH,$JUMPTO);
-    } elseif ($opened_tab == 'search') {
-        media_tab_search($NS,$AUTH);
+    if($opened_tab == 'files') {
+        media_tab_files($NS, $AUTH, $JUMPTO);
+    } elseif($opened_tab == 'upload') {
+        media_tab_upload($NS, $AUTH, $JUMPTO);
+    } elseif($opened_tab == 'search') {
+        media_tab_search($NS, $AUTH);
     }
     echo '</div>'.NL;
 }
@@ -1196,55 +1286,55 @@ function tpl_mediaFileList(){
  *
  * @author Kate Arzamastseva <pshns@ukr.net>
  */
-function tpl_mediaFileDetails($image, $rev){
-    global $AUTH, $NS, $conf, $DEL, $lang;
+function tpl_mediaFileDetails($image, $rev) {
+    global $AUTH, $NS, $conf, $DEL, $lang, $INPUT;
 
     $removed = (!file_exists(mediaFN($image)) && file_exists(mediaMetaFN($image, '.changes')) && $conf['mediarevisions']);
-    if (!$image || (!file_exists(mediaFN($image)) && !$removed) || $DEL) return '';
-    if ($rev && !file_exists(mediaFN($image, $rev))) $rev = false;
-    if (isset($NS) && getNS($image) != $NS) return '';
-    $do = $_REQUEST['mediado'];
+    if(!$image || (!file_exists(mediaFN($image)) && !$removed) || $DEL) return;
+    if($rev && !file_exists(mediaFN($image, $rev))) $rev = false;
+    if(isset($NS) && getNS($image) != $NS) return;
+    $do = $INPUT->str('mediado');
 
-    $opened_tab = $_REQUEST['tab_details'];
+    $opened_tab = $INPUT->str('tab_details');
 
     $tab_array = array('view');
-    list($ext, $mime) = mimetype($image);
-    if ($mime == 'image/jpeg') {
+    list(, $mime) = mimetype($image);
+    if($mime == 'image/jpeg') {
         $tab_array[] = 'edit';
     }
-    if ($conf['mediarevisions']) {
+    if($conf['mediarevisions']) {
         $tab_array[] = 'history';
     }
 
-    if (!$opened_tab || !in_array($opened_tab, $tab_array)) $opened_tab = 'view';
-    if ($_REQUEST['edit']) $opened_tab = 'edit';
-    if ($do == 'restore') $opened_tab = 'view';
+    if(!$opened_tab || !in_array($opened_tab, $tab_array)) $opened_tab = 'view';
+    if($INPUT->bool('edit')) $opened_tab = 'edit';
+    if($do == 'restore') $opened_tab = 'view';
 
     media_tabs_details($image, $opened_tab);
 
     echo '<div class="panelHeader"><h3>';
-    list($ext,$mime,$dl) = mimetype($image,false);
-    $class = preg_replace('/[^_\-a-z0-9]+/i','_',$ext);
-    $class = 'select mediafile mf_'.$class;
+    list($ext) = mimetype($image, false);
+    $class    = preg_replace('/[^_\-a-z0-9]+/i', '_', $ext);
+    $class    = 'select mediafile mf_'.$class;
     $tabTitle = '<strong><a href="'.ml($image).'" class="'.$class.'" title="'.$lang['mediaview'].'">'.$image.'</a>'.'</strong>';
-    if ($opened_tab === 'view' && $rev) {
+    if($opened_tab === 'view' && $rev) {
         printf($lang['media_viewold'], $tabTitle, dformat($rev));
     } else {
-        printf($lang['media_' . $opened_tab], $tabTitle);
+        printf($lang['media_'.$opened_tab], $tabTitle);
     }
 
     echo '</h3></div>'.NL;
 
     echo '<div class="panelContent">'.NL;
 
-    if ($opened_tab == 'view') {
+    if($opened_tab == 'view') {
         media_tab_view($image, $NS, $AUTH, $rev);
 
-    } elseif ($opened_tab == 'edit' && !$removed) {
+    } elseif($opened_tab == 'edit' && !$removed) {
         media_tab_edit($image, $NS, $AUTH);
 
-    } elseif ($opened_tab == 'history' && $conf['mediarevisions']) {
-        media_tab_history($image,$NS,$AUTH);
+    } elseif($opened_tab == 'history' && $conf['mediarevisions']) {
+        media_tab_history($image, $NS, $AUTH);
     }
 
     echo '</div>'.NL;
@@ -1257,14 +1347,13 @@ function tpl_mediaFileDetails($image, $rev){
  *
  * @author Andreas Gohr <andi@splitbrain.org>
  */
-function tpl_mediaTree(){
+function tpl_mediaTree() {
     global $NS;
     ptln('<div id="media__tree">');
     media_nstree($NS);
     ptln('</div>');
 }
 
-
 /**
  * Print a dropdown menu with all DokuWiki actions
  *
@@ -1272,16 +1361,12 @@ function tpl_mediaTree(){
  *
  * @author Andreas Gohr <andi@splitbrain.org>
  */
-function tpl_actiondropdown($empty='',$button='&gt;'){
+function tpl_actiondropdown($empty = '', $button = '&gt;') {
     global $ID;
-    global $INFO;
     global $REV;
-    global $ACT;
-    global $conf;
     global $lang;
-    global $auth;
 
-    echo '<form action="' . DOKU_SCRIPT . '" method="post" accept-charset="utf-8">';
+    echo '<form action="'.DOKU_SCRIPT.'" method="post" accept-charset="utf-8">';
     echo '<div class="no">';
     echo '<input type="hidden" name="id" value="'.$ID.'" />';
     if($REV) echo '<input type="hidden" name="rev" value="'.$REV.'" />';
@@ -1291,45 +1376,45 @@ function tpl_actiondropdown($empty='',$button='&gt;'){
     echo '<option value="">'.$empty.'</option>';
 
     echo '<optgroup label="'.$lang['page_tools'].'">';
-        $act = tpl_get_action('edit');
-        if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
+    $act = tpl_get_action('edit');
+    if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
 
-        $act = tpl_get_action('revert');
-        if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
+    $act = tpl_get_action('revert');
+    if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
 
-        $act = tpl_get_action('revisions');
-        if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
+    $act = tpl_get_action('revisions');
+    if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
 
-        $act = tpl_get_action('backlink');
-        if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
+    $act = tpl_get_action('backlink');
+    if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
 
-        $act = tpl_get_action('subscribe');
-        if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
-        echo '</optgroup>';
+    $act = tpl_get_action('subscribe');
+    if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
+    echo '</optgroup>';
 
     echo '<optgroup label="'.$lang['site_tools'].'">';
-        $act = tpl_get_action('recent');
-        if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
+    $act = tpl_get_action('recent');
+    if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
 
-        $act = tpl_get_action('media');
-        if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
+    $act = tpl_get_action('media');
+    if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
 
-        $act = tpl_get_action('index');
-        if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
+    $act = tpl_get_action('index');
+    if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
     echo '</optgroup>';
 
     echo '<optgroup label="'.$lang['user_tools'].'">';
-        $act = tpl_get_action('login');
-        if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
+    $act = tpl_get_action('login');
+    if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
 
-        $act = tpl_get_action('register');
-        if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
+    $act = tpl_get_action('register');
+    if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
 
-        $act = tpl_get_action('profile');
-        if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
+    $act = tpl_get_action('profile');
+    if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
 
-        $act = tpl_get_action('admin');
-        if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
+    $act = tpl_get_action('admin');
+    if($act) echo '<option value="'.$act['params']['do'].'">'.$lang['btn_'.$act['type']].'</option>';
     echo '</optgroup>';
 
     echo '</select>';
@@ -1342,24 +1427,26 @@ function tpl_actiondropdown($empty='',$button='&gt;'){
  * Print a informational line about the used license
  *
  * @author Andreas Gohr <andi@splitbrain.org>
- * @param  string $img    - print image? (|button|badge)
- * @param  bool   $return - when true don't print, but return HTML
- * @param  bool   $wrap   - wrap in div with class="license"?
+ * @param  string $img     print image? (|button|badge)
+ * @param  bool   $imgonly skip the textual description?
+ * @param  bool   $return  when true don't print, but return HTML
+ * @param  bool   $wrap    wrap in div with class="license"?
+ * @return string
  */
-function tpl_license($img='badge',$imgonly=false,$return=false,$wrap=true){
+function tpl_license($img = 'badge', $imgonly = false, $return = false, $wrap = true) {
     global $license;
     global $conf;
     global $lang;
     if(!$conf['license']) return '';
     if(!is_array($license[$conf['license']])) return '';
-    $lic = $license[$conf['license']];
+    $lic    = $license[$conf['license']];
     $target = ($conf['target']['extern']) ? ' target="'.$conf['target']['extern'].'"' : '';
 
     $out = '';
-    if($wrap) $out  .= '<div class="license">';
-    if($img){
+    if($wrap) $out .= '<div class="license">';
+    if($img) {
         $src = license_img($img);
-        if($src){
+        if($src) {
             $out .= '<a href="'.$lic['url'].'" rel="license"'.$target;
             $out .= '><img src="'.DOKU_BASE.$src.'" alt="'.$lic['name'].'" /></a>';
             if(!$imgonly) $out .= ' ';
@@ -1374,23 +1461,23 @@ function tpl_license($img='badge',$imgonly=false,$return=false,$wrap=true){
 
     if($return) return $out;
     echo $out;
+    return '';
 }
 
-
 /**
  * Includes the rendered XHTML of a given page
  *
  * This function is useful to populate sidebars or similar features in a
  * template
  */
-function tpl_include_page($pageid,$print=true){
+function tpl_include_page($pageid, $print = true) {
     global $ID;
     global $TOC;
     $oldid  = $ID;
     $oldtoc = $TOC;
-    $html = p_wiki_xhtml($pageid,'',false);
-    $ID  = $oldid;
-    $TOC = $oldtoc;
+    $html   = p_wiki_xhtml($pageid, '', false);
+    $ID     = $oldid;
+    $TOC    = $oldtoc;
 
     if(!$print) return $html;
     echo $html;
@@ -1400,7 +1487,7 @@ function tpl_include_page($pageid,$print=true){
 /**
  * Include the sidebar, will check current namespaces first
  */
-function tpl_sidebar($print=true){
+function tpl_sidebar($print = true) {
     global $conf;
 
     $sidebar = page_findnearest($conf['sidebar']);
@@ -1418,18 +1505,18 @@ function tpl_subscribe() {
     global $ID;
     global $lang;
     global $conf;
-    $stime_days = $conf['subscribe_time']/60/60/24;
+    $stime_days = $conf['subscribe_time'] / 60 / 60 / 24;
 
     echo p_locale_xhtml('subscr_form');
-    echo '<h2>' . $lang['subscr_m_current_header'] . '</h2>';
+    echo '<h2>'.$lang['subscr_m_current_header'].'</h2>';
     echo '<div class="level2">';
-    if ($INFO['subscribed'] === false) {
-        echo '<p>' . $lang['subscr_m_not_subscribed'] . '</p>';
+    if($INFO['subscribed'] === false) {
+        echo '<p>'.$lang['subscr_m_not_subscribed'].'</p>';
     } else {
         echo '<ul>';
         foreach($INFO['subscribed'] as $sub) {
             echo '<li><div class="li">';
-            if ($sub['target'] !== $ID) {
+            if($sub['target'] !== $ID) {
                 echo '<code class="ns">'.hsc(prettyprint_id($sub['target'])).'</code>';
             } else {
                 echo '<code class="page">'.hsc(prettyprint_id($sub['target'])).'</code>';
@@ -1438,32 +1525,36 @@ function tpl_subscribe() {
             if(!$sstl) $sstl = hsc($sub['style']);
             echo ' ('.$sstl.') ';
 
-            echo '<a href="' . wl($ID,
-                                  array('do'=>'subscribe',
-                                        'sub_target'=>$sub['target'],
-                                        'sub_style'=>$sub['style'],
-                                        'sub_action'=>'unsubscribe',
-                                        'sectok' => getSecurityToken())) .
-                 '" class="unsubscribe">'.$lang['subscr_m_unsubscribe'] .
-                 '</a></div></li>';
+            echo '<a href="'.wl(
+                $ID,
+                array(
+                     'do'        => 'subscribe',
+                     'sub_target'=> $sub['target'],
+                     'sub_style' => $sub['style'],
+                     'sub_action'=> 'unsubscribe',
+                     'sectok'    => getSecurityToken()
+                )
+            ).
+                '" class="unsubscribe">'.$lang['subscr_m_unsubscribe'].
+                '</a></div></li>';
         }
         echo '</ul>';
     }
     echo '</div>';
 
     // Add new subscription form
-    echo '<h2>' . $lang['subscr_m_new_header'] . '</h2>';
+    echo '<h2>'.$lang['subscr_m_new_header'].'</h2>';
     echo '<div class="level2">';
-    $ns = getNS($ID).':';
+    $ns      = getNS($ID).':';
     $targets = array(
-            $ID => '<code class="page">'.prettyprint_id($ID).'</code>',
-            $ns => '<code class="ns">'.prettyprint_id($ns).'</code>',
-            );
-    $styles = array(
-            'every'  => $lang['subscr_style_every'],
-            'digest' => sprintf($lang['subscr_style_digest'], $stime_days),
-            'list' => sprintf($lang['subscr_style_list'], $stime_days),
-            );
+        $ID => '<code class="page">'.prettyprint_id($ID).'</code>',
+        $ns => '<code class="ns">'.prettyprint_id($ns).'</code>',
+    );
+    $styles  = array(
+        'every'  => $lang['subscr_style_every'],
+        'digest' => sprintf($lang['subscr_style_digest'], $stime_days),
+        'list'   => sprintf($lang['subscr_style_list'], $stime_days),
+    );
 
     $form = new Doku_Form(array('id' => 'subscribe__form'));
     $form->startFieldset($lang['subscr_m_subscribe']);
@@ -1486,7 +1577,7 @@ function tpl_subscribe() {
  *
  * @author Andreas Gohr <andi@splitbrain.org>
  */
-function tpl_flush(){
+function tpl_flush() {
     ob_flush();
     flush();
 }
@@ -1498,18 +1589,22 @@ function tpl_flush(){
  * file, otherwise it is assumed to be relative to the current template
  *
  * @param  array $search       locations to look at
- * @param  bool $abs           if to use absolute URL
- * @param  arrayref $imginfo   filled with getimagesize()
+ * @param  bool  $abs           if to use absolute URL
+ * @param  array &$imginfo   filled with getimagesize()
+ * @return string
  * @author Andreas  Gohr <andi@splitbrain.org>
  */
-function tpl_getMediaFile($search, $abs=false, &$imginfo=null){
+function tpl_getMediaFile($search, $abs = false, &$imginfo = null) {
+    $img     = '';
+    $file    = '';
+    $ismedia = false;
     // loop through candidates until a match was found:
-    foreach($search as $img){
-        if(substr($img,0,1) == ':'){
+    foreach($search as $img) {
+        if(substr($img, 0, 1) == ':') {
             $file    = mediaFN($img);
             $ismedia = true;
-        }else{
-            $file = tpl_incdir().$img;
+        } else {
+            $file    = tpl_incdir().$img;
             $ismedia = false;
         }
 
@@ -1517,14 +1612,14 @@ function tpl_getMediaFile($search, $abs=false, &$imginfo=null){
     }
 
     // fetch image data if requested
-    if(!is_null($imginfo)){
+    if(!is_null($imginfo)) {
         $imginfo = getimagesize($file);
     }
 
     // build URL
-    if($ismedia){
+    if($ismedia) {
         $url = ml($img, '', true, '', $abs);
-    }else{
+    } else {
         $url = tpl_basedir().$img;
         if($abs) $url = DOKU_URL.substr($url, strlen(DOKU_REL));
     }
@@ -1548,13 +1643,13 @@ function tpl_getMediaFile($search, $abs=false, &$imginfo=null){
  * @author Anika Henke <anika@selfthinker.org>
  * @author Andreas Gohr <andi@splitbrain.org>
  */
-function tpl_includeFile($file){
+function tpl_includeFile($file) {
     global $config_cascade;
-    foreach (array('protected','local','default') as $config_group) {
-        if (empty($config_cascade['main'][$config_group])) continue;
-        foreach ($config_cascade['main'][$config_group] as $conf_file) {
+    foreach(array('protected', 'local', 'default') as $config_group) {
+        if(empty($config_cascade['main'][$config_group])) continue;
+        foreach($config_cascade['main'][$config_group] as $conf_file) {
             $dir = dirname($conf_file);
-            if(file_exists("$dir/$file")){
+            if(file_exists("$dir/$file")) {
                 include("$dir/$file");
                 return;
             }
@@ -1563,7 +1658,7 @@ function tpl_includeFile($file){
 
     // still here? try the template dir
     $file = tpl_incdir().$file;
-    if(file_exists($file)){
+    if(file_exists($file)) {
         include($file);
     }
 }
@@ -1575,7 +1670,7 @@ function tpl_includeFile($file){
  * @deprecated Use tpl_getMediaFile() instead
  * @author Anika Henke <anika@selfthinker.org>
  */
-function tpl_getFavicon($abs=false, $fileName='favicon.ico') {
+function tpl_getFavicon($abs = false, $fileName = 'favicon.ico') {
     $look = array(":wiki:$fileName", ":$fileName", "images/$fileName");
     return tpl_getMediaFile($look, $abs);
 }
@@ -1583,14 +1678,15 @@ function tpl_getFavicon($abs=false, $fileName='favicon.ico') {
 /**
  * Returns <link> tag for various icon types (favicon|mobile|generic)
  *
- * @param  array $types - list of icon types to display (favicon|mobile|generic)
  * @author Anika Henke <anika@selfthinker.org>
+ * @param  array $types - list of icon types to display (favicon|mobile|generic)
+ * @return string
  */
-function tpl_favicon($types=array('favicon')) {
+function tpl_favicon($types = array('favicon')) {
 
     $return = '';
 
-    foreach ($types as $type) {
+    foreach($types as $type) {
         switch($type) {
             case 'favicon':
                 $look = array(':wiki:favicon.ico', ':favicon.ico', 'images/favicon.ico');
@@ -1617,14 +1713,15 @@ function tpl_favicon($types=array('favicon')) {
  * @author Kate Arzamastseva <pshns@ukr.net>
  */
 function tpl_media() {
-    global $DEL, $NS, $IMG, $AUTH, $JUMPTO, $REV, $lang, $fullscreen, $conf;
+    global $NS, $IMG, $JUMPTO, $REV, $lang, $fullscreen, $INPUT;
     $fullscreen = true;
     require_once DOKU_INC.'lib/exe/mediamanager.php';
 
-    if ($_REQUEST['image']) $image = cleanID($_REQUEST['image']);
-    if (isset($IMG)) $image = $IMG;
-    if (isset($JUMPTO)) $image = $JUMPTO;
-    if (isset($REV) && !$JUMPTO) $rev = $REV;
+    $rev   = '';
+    $image = cleanID($INPUT->str('image'));
+    if(isset($IMG)) $image = $IMG;
+    if(isset($JUMPTO)) $image = $JUMPTO;
+    if(isset($REV) && !$JUMPTO) $rev = $REV;
 
     echo '<div id="mediamanager__page">'.NL;
     echo '<h1>'.$lang['btn_media'].'</h1>'.NL;
-- 
GitLab