1*fa5fcacaSAndreas Haerter<?php 2*fa5fcacaSAndreas Haerter 3*fa5fcacaSAndreas Haerter/** 4*fa5fcacaSAndreas Haerter * Main file of the "vector" template for DokuWiki 5*fa5fcacaSAndreas Haerter * 6*fa5fcacaSAndreas Haerter * 7*fa5fcacaSAndreas Haerter * LICENSE: This file is open source software (OSS) and may be copied under 8*fa5fcacaSAndreas Haerter * certain conditions. See COPYING file for details or try to contact 9*fa5fcacaSAndreas Haerter * the author(s) of this file in doubt. 10*fa5fcacaSAndreas Haerter * 11*fa5fcacaSAndreas Haerter * @license GPLv2 (http://www.gnu.org/licenses/gpl2.html) 12*fa5fcacaSAndreas Haerter * @author Andreas Haerter <andreas.haerter@dev.mail-node.com> 13*fa5fcacaSAndreas Haerter * @link http://andreas-haerter.com/projects/dokuwiki-template-vector 14*fa5fcacaSAndreas Haerter * @link http://www.dokuwiki.org/template:vector 15*fa5fcacaSAndreas Haerter * @link http://www.dokuwiki.org/devel:templates 16*fa5fcacaSAndreas Haerter * @link http://www.dokuwiki.org/devel:coding_style 17*fa5fcacaSAndreas Haerter * @link http://www.dokuwiki.org/devel:environment 18*fa5fcacaSAndreas Haerter * @link http://www.dokuwiki.org/devel:action_modes 19*fa5fcacaSAndreas Haerter */ 20*fa5fcacaSAndreas Haerter 21*fa5fcacaSAndreas Haerter 22*fa5fcacaSAndreas Haerter//check if we are running within the DokuWiki environment 23*fa5fcacaSAndreas Haerterif (!defined("DOKU_INC")){ 24*fa5fcacaSAndreas Haerter die(); 25*fa5fcacaSAndreas Haerter} 26*fa5fcacaSAndreas Haerter 27*fa5fcacaSAndreas Haerter 28*fa5fcacaSAndreas Haerter/** 29*fa5fcacaSAndreas Haerter * Stores the template wide action 30*fa5fcacaSAndreas Haerter * 31*fa5fcacaSAndreas Haerter * Different DokuWiki actions requiring some template logic. Therefore the 32*fa5fcacaSAndreas Haerter * template has to know, what we are doing right now - and that is what this 33*fa5fcacaSAndreas Haerter * var is for. 34*fa5fcacaSAndreas Haerter * 35*fa5fcacaSAndreas Haerter * Please have a look at the "mediamanager.php" and "detail.php" file in the 36*fa5fcacaSAndreas Haerter * same folder, they are also influencing the var's value. 37*fa5fcacaSAndreas Haerter * 38*fa5fcacaSAndreas Haerter * @var string 39*fa5fcacaSAndreas Haerter * @author Andreas Haerter <andreas.haerter@dev.mail-node.com> 40*fa5fcacaSAndreas Haerter */ 41*fa5fcacaSAndreas Haerter$vector_action = "article"; 42*fa5fcacaSAndreas Haerter//note: I used $_REQUEST before (cause DokuWiki controls and fills it. Normally, 43*fa5fcacaSAndreas Haerter// using $_REQUEST is a possible security threat. For details, see 44*fa5fcacaSAndreas Haerter// <http://www.suspekt.org/2008/10/01/php-53-and-delayed-cross-site-request-forgerieshijacking/> 45*fa5fcacaSAndreas Haerter// and <http://forum.dokuwiki.org/post/16524>), but it did not work as 46*fa5fcacaSAndreas Haerter// expected by me (maybe it is a reference and setting $vector_action 47*fa5fcacaSAndreas Haerter// also changed the contents of $_REQUEST?!). That is why I switched back, 48*fa5fcacaSAndreas Haerter// checking $_GET and $_POST like I did it before. 49*fa5fcacaSAndreas Haerterif (!empty($_GET["vecdo"])){ 50*fa5fcacaSAndreas Haerter $vector_action = (string)$_GET["vecdo"]; 51*fa5fcacaSAndreas Haerter}elseif (!empty($_POST["vecdo"])){ 52*fa5fcacaSAndreas Haerter $vector_action = (string)$_POST["vecdo"]; 53*fa5fcacaSAndreas Haerter} 54*fa5fcacaSAndreas Haerterif (!empty($vector_action) && 55*fa5fcacaSAndreas Haerter $vector_action !== "article" && 56*fa5fcacaSAndreas Haerter $vector_action !== "print" && 57*fa5fcacaSAndreas Haerter $vector_action !== "detail" && 58*fa5fcacaSAndreas Haerter $vector_action !== "mediamanager" && 59*fa5fcacaSAndreas Haerter $vector_action !== "cite"){ 60*fa5fcacaSAndreas Haerter //ignore unknown values 61*fa5fcacaSAndreas Haerter $vector_action = "article"; 62*fa5fcacaSAndreas Haerter} 63*fa5fcacaSAndreas Haerter 64*fa5fcacaSAndreas Haerter 65*fa5fcacaSAndreas Haerter/** 66*fa5fcacaSAndreas Haerter * Stores the template wide context 67*fa5fcacaSAndreas Haerter * 68*fa5fcacaSAndreas Haerter * This template offers discussion pages via common articles, which should be 69*fa5fcacaSAndreas Haerter * marked as "special". DokuWiki does not know any "special" articles, therefore 70*fa5fcacaSAndreas Haerter * we have to take care about detecting if the current page is a discussion 71*fa5fcacaSAndreas Haerter * page or not. 72*fa5fcacaSAndreas Haerter * 73*fa5fcacaSAndreas Haerter * @var string 74*fa5fcacaSAndreas Haerter * @author Andreas Haerter <andreas.haerter@dev.mail-node.com> 75*fa5fcacaSAndreas Haerter */ 76*fa5fcacaSAndreas Haerter$vector_context = "article"; 77*fa5fcacaSAndreas Haerterif (preg_match("/^".tpl_getConf("vector_discuss_ns")."?$|^".tpl_getConf("vector_discuss_ns").".*?$/i", ":".getNS(getID()))){ 78*fa5fcacaSAndreas Haerter $vector_context = "discuss"; 79*fa5fcacaSAndreas Haerter} 80*fa5fcacaSAndreas Haerter 81*fa5fcacaSAndreas Haerter 82*fa5fcacaSAndreas Haerter/** 83*fa5fcacaSAndreas Haerter * Stores the name the current client used to login 84*fa5fcacaSAndreas Haerter * 85*fa5fcacaSAndreas Haerter * @var string 86*fa5fcacaSAndreas Haerter * @author Andreas Haerter <andreas.haerter@dev.mail-node.com> 87*fa5fcacaSAndreas Haerter */ 88*fa5fcacaSAndreas Haerter$loginname = ""; 89*fa5fcacaSAndreas Haerterif (!empty($conf["useacl"])){ 90*fa5fcacaSAndreas Haerter if (isset($_SERVER["REMOTE_USER"]) && //no empty() but isset(): "0" may be a valid username... 91*fa5fcacaSAndreas Haerter $_SERVER["REMOTE_USER"] !== ""){ 92*fa5fcacaSAndreas Haerter $loginname = $_SERVER["REMOTE_USER"]; //$INFO["client"] would not work here (-> e.g. if 93*fa5fcacaSAndreas Haerter //current IP differs from the one used to login) 94*fa5fcacaSAndreas Haerter } 95*fa5fcacaSAndreas Haerter} 96*fa5fcacaSAndreas Haerter 97*fa5fcacaSAndreas Haerter 98*fa5fcacaSAndreas Haerter//get needed language array 99*fa5fcacaSAndreas Haerterinclude DOKU_TPLINC."lang/en/lang.php"; 100*fa5fcacaSAndreas Haerter//overwrite English language values with available translations 101*fa5fcacaSAndreas Haerterif (!empty($conf["lang"]) && 102*fa5fcacaSAndreas Haerter $conf["lang"] !== "en" && 103*fa5fcacaSAndreas Haerter file_exists(DOKU_TPLINC."/lang/".$conf["lang"]."/lang.php")){ 104*fa5fcacaSAndreas Haerter //get language file (partially translated language files are no problem 105*fa5fcacaSAndreas Haerter //cause non translated stuff is still existing as English array value) 106*fa5fcacaSAndreas Haerter include DOKU_TPLINC."/lang/".$conf["lang"]."/lang.php"; 107*fa5fcacaSAndreas Haerter} 108*fa5fcacaSAndreas Haerter 109*fa5fcacaSAndreas Haerter 110*fa5fcacaSAndreas Haerter//detect revision 111*fa5fcacaSAndreas Haerter$rev = (int)$INFO["rev"]; //$INFO comes from the DokuWiku core 112*fa5fcacaSAndreas Haerterif ($rev < 1){ 113*fa5fcacaSAndreas Haerter $rev = (int)$INFO["lastmod"]; 114*fa5fcacaSAndreas Haerter} 115*fa5fcacaSAndreas Haerter 116*fa5fcacaSAndreas Haerter 117*fa5fcacaSAndreas Haerter//get tab config 118*fa5fcacaSAndreas Haerterinclude DOKU_TPLINC."/conf/tabs.php"; //default 119*fa5fcacaSAndreas Haerterif (file_exists(DOKU_TPLINC."/user/tabs.php")){ 120*fa5fcacaSAndreas Haerter include DOKU_TPLINC."/user/tabs.php"; //add user defined 121*fa5fcacaSAndreas Haerter} 122*fa5fcacaSAndreas Haerter 123*fa5fcacaSAndreas Haerter 124*fa5fcacaSAndreas Haerter//get boxes config 125*fa5fcacaSAndreas Haerterinclude DOKU_TPLINC."/conf/boxes.php"; //default 126*fa5fcacaSAndreas Haerterif (file_exists(DOKU_TPLINC."/user/boxes.php")){ 127*fa5fcacaSAndreas Haerter include DOKU_TPLINC."/user/boxes.php"; //add user defined 128*fa5fcacaSAndreas Haerter} 129*fa5fcacaSAndreas Haerter 130*fa5fcacaSAndreas Haerter 131*fa5fcacaSAndreas Haerter//get button config 132*fa5fcacaSAndreas Haerterinclude DOKU_TPLINC."/conf/buttons.php"; //default 133*fa5fcacaSAndreas Haerterif (file_exists(DOKU_TPLINC."/user/buttons.php")){ 134*fa5fcacaSAndreas Haerter include DOKU_TPLINC."/user/buttons.php"; //add user defined 135*fa5fcacaSAndreas Haerter} 136*fa5fcacaSAndreas Haerter 137*fa5fcacaSAndreas Haerter 138*fa5fcacaSAndreas Haerter/** 139*fa5fcacaSAndreas Haerter * Helper to render the tabs (like a dynamic XHTML snippet) 140*fa5fcacaSAndreas Haerter * 141*fa5fcacaSAndreas Haerter * @param array The tab data to render within the snippet. Each element 142*fa5fcacaSAndreas Haerter * is represented through an subarray: 143*fa5fcacaSAndreas Haerter * $array = array("tab1" => array("text" => "hello world!", 144*fa5fcacaSAndreas Haerter * "href" => "http://www.example.com" 145*fa5fcacaSAndreas Haerter * "nofollow" => true), 146*fa5fcacaSAndreas Haerter * "tab2" => array("text" => "I did it again", 147*fa5fcacaSAndreas Haerter * "href" => DOKU_BASE."doku.php?id=foobar", 148*fa5fcacaSAndreas Haerter * "class" => "foobar-css"), 149*fa5fcacaSAndreas Haerter * "tab3" => array("text" => "I did it again and again", 150*fa5fcacaSAndreas Haerter * "href" => wl("start", false, false, "&"), 151*fa5fcacaSAndreas Haerter * "class" => "foobar-css"), 152*fa5fcacaSAndreas Haerter * "tab4" => array("text" => "Home", 153*fa5fcacaSAndreas Haerter * "wiki" => ":start" 154*fa5fcacaSAndreas Haerter * "accesskey" => "H")); 155*fa5fcacaSAndreas Haerter * Available keys within the subarrays: 156*fa5fcacaSAndreas Haerter * - "text" (mandatory) 157*fa5fcacaSAndreas Haerter * The text/label of the element. 158*fa5fcacaSAndreas Haerter * - "href" (optional) 159*fa5fcacaSAndreas Haerter * URL the element should point to (as link). Please submit raw, 160*fa5fcacaSAndreas Haerter * unencoded URLs, the encoding will be done by this function for 161*fa5fcacaSAndreas Haerter * security reasons. If the URL is not relative 162*fa5fcacaSAndreas Haerter * (= starts with http(s)://), the URL will be treated as external 163*fa5fcacaSAndreas Haerter * (=a special style will be used if "class" is not set). 164*fa5fcacaSAndreas Haerter * - "wiki" (optional) 165*fa5fcacaSAndreas Haerter * ID of a WikiPage to link (like ":start" or ":wiki:foobar"). 166*fa5fcacaSAndreas Haerter * - "class" (optional) 167*fa5fcacaSAndreas Haerter * Name of an additional CSS class to use for the element content. 168*fa5fcacaSAndreas Haerter * Works only in combination with "text" or "href", NOT with "wiki" 169*fa5fcacaSAndreas Haerter * (will be ignored in this case). 170*fa5fcacaSAndreas Haerter * - "nofollow" (optional) 171*fa5fcacaSAndreas Haerter * If set to TRUE, rel="nofollow" will be added to the link if "href" 172*fa5fcacaSAndreas Haerter * is set (otherwise this flag will do nothing). 173*fa5fcacaSAndreas Haerter * - "accesskey" (optional) 174*fa5fcacaSAndreas Haerter * accesskey="<value>" will be added to the link if "href" is set 175*fa5fcacaSAndreas Haerter * (otherwise this option will do nothing). 176*fa5fcacaSAndreas Haerter * @author Andreas Haerter <andreas.haerter@dev.mail-node.com> 177*fa5fcacaSAndreas Haerter * @see _vector_renderButtons() 178*fa5fcacaSAndreas Haerter * @see _vector_renderBoxes() 179*fa5fcacaSAndreas Haerter * @link http://www.wikipedia.org/wiki/Nofollow 180*fa5fcacaSAndreas Haerter * @link http://de.selfhtml.org/html/verweise/tastatur.htm#kuerzel 181*fa5fcacaSAndreas Haerter * @link http://www.dokuwiki.org/devel:environment 182*fa5fcacaSAndreas Haerter * @link http://www.dokuwiki.org/devel:coding_style 183*fa5fcacaSAndreas Haerter */ 184*fa5fcacaSAndreas Haerterfunction _vector_renderTabs($arr) 185*fa5fcacaSAndreas Haerter{ 186*fa5fcacaSAndreas Haerter //is there something useful? 187*fa5fcacaSAndreas Haerter if (empty($arr) || 188*fa5fcacaSAndreas Haerter !is_array($arr)){ 189*fa5fcacaSAndreas Haerter return false; //nope, break operation 190*fa5fcacaSAndreas Haerter } 191*fa5fcacaSAndreas Haerter 192*fa5fcacaSAndreas Haerter //array to store the created tabs into 193*fa5fcacaSAndreas Haerter $elements = array(); 194*fa5fcacaSAndreas Haerter 195*fa5fcacaSAndreas Haerter //handle the tab data 196*fa5fcacaSAndreas Haerter foreach($arr as $li_id => $element){ 197*fa5fcacaSAndreas Haerter //basic check 198*fa5fcacaSAndreas Haerter if (empty($element) || 199*fa5fcacaSAndreas Haerter !is_array($element) || 200*fa5fcacaSAndreas Haerter !isset($element["text"]) || 201*fa5fcacaSAndreas Haerter (empty($element["href"]) && 202*fa5fcacaSAndreas Haerter empty($element["wiki"]))){ 203*fa5fcacaSAndreas Haerter continue; //ignore invalid stuff and go on 204*fa5fcacaSAndreas Haerter } 205*fa5fcacaSAndreas Haerter $li_created = true; //flag to control if we created any list element 206*fa5fcacaSAndreas Haerter $interim = ""; 207*fa5fcacaSAndreas Haerter //do we have an external link? 208*fa5fcacaSAndreas Haerter if (!empty($element["href"])){ 209*fa5fcacaSAndreas Haerter //add URL 210*fa5fcacaSAndreas Haerter $interim = "<a href=\"".hsc($element["href"])."\""; //@TODO: real URL encoding 211*fa5fcacaSAndreas Haerter //add rel="nofollow" attribute to the link? 212*fa5fcacaSAndreas Haerter if (!empty($element["nofollow"])){ 213*fa5fcacaSAndreas Haerter $interim .= " rel=\"nofollow\""; 214*fa5fcacaSAndreas Haerter } 215*fa5fcacaSAndreas Haerter //mark external link? 216*fa5fcacaSAndreas Haerter if (substr($element["href"], 0, 4) === "http" || 217*fa5fcacaSAndreas Haerter substr($element["href"], 0, 3) === "ftp"){ 218*fa5fcacaSAndreas Haerter $interim .= " class=\"urlextern\""; 219*fa5fcacaSAndreas Haerter } 220*fa5fcacaSAndreas Haerter //add access key? 221*fa5fcacaSAndreas Haerter if (!empty($element["accesskey"])){ 222*fa5fcacaSAndreas Haerter $interim .= " accesskey=\"".hsc($element["accesskey"])."\" title=\"[ALT+".hsc(strtoupper($element["accesskey"]))."]\""; 223*fa5fcacaSAndreas Haerter } 224*fa5fcacaSAndreas Haerter $interim .= "><span>".hsc($element["text"])."</span></a>"; 225*fa5fcacaSAndreas Haerter //internal wiki link 226*fa5fcacaSAndreas Haerter }else if (!empty($element["wiki"])){ 227*fa5fcacaSAndreas Haerter $interim = "<a href=\"".hsc(wl(cleanID($element["wiki"])))."\"><span>".hsc($element["text"])."</span></a>"; 228*fa5fcacaSAndreas Haerter } 229*fa5fcacaSAndreas Haerter //store it 230*fa5fcacaSAndreas Haerter $elements[] = "\n <li id=\"".hsc($li_id)."\"".(!empty($element["class"]) 231*fa5fcacaSAndreas Haerter ? " class=\"".hsc($element["class"])."\"" 232*fa5fcacaSAndreas Haerter : "").">".$interim."</li>"; 233*fa5fcacaSAndreas Haerter } 234*fa5fcacaSAndreas Haerter 235*fa5fcacaSAndreas Haerter //show everything created 236*fa5fcacaSAndreas Haerter if (!empty($elements)){ 237*fa5fcacaSAndreas Haerter foreach ($elements as $element){ 238*fa5fcacaSAndreas Haerter echo $element; 239*fa5fcacaSAndreas Haerter } 240*fa5fcacaSAndreas Haerter } 241*fa5fcacaSAndreas Haerter return true; 242*fa5fcacaSAndreas Haerter} 243*fa5fcacaSAndreas Haerter 244*fa5fcacaSAndreas Haerter 245*fa5fcacaSAndreas Haerter/** 246*fa5fcacaSAndreas Haerter * Helper to render the boxes (like a dynamic XHTML snippet) 247*fa5fcacaSAndreas Haerter * 248*fa5fcacaSAndreas Haerter * @param array The box data to render within the snippet. Each box is 249*fa5fcacaSAndreas Haerter * represented through an subarray: 250*fa5fcacaSAndreas Haerter * $array = array("box-id1" => array("headline" => "hello world!", 251*fa5fcacaSAndreas Haerter * "xhtml" => "I am <i>here</i>.")); 252*fa5fcacaSAndreas Haerter * Available keys within the subarrays: 253*fa5fcacaSAndreas Haerter * - "xhtml" (mandatory) 254*fa5fcacaSAndreas Haerter * The content of the Box you want to show as XHTML. Attention: YOU 255*fa5fcacaSAndreas Haerter * HAVE TO TAKE CARE ABOUT FILTER EVENTUALLY USED INPUT/SECURITY. Be 256*fa5fcacaSAndreas Haerter * aware of XSS and stuff. 257*fa5fcacaSAndreas Haerter * - "headline" (optional) 258*fa5fcacaSAndreas Haerter * Headline to show above the box. Leave empty/do not set for none. 259*fa5fcacaSAndreas Haerter * @author Andreas Haerter <andreas.haerter@dev.mail-node.com> 260*fa5fcacaSAndreas Haerter * @see _vector_renderButtons() 261*fa5fcacaSAndreas Haerter * @see _vector_renderTabs() 262*fa5fcacaSAndreas Haerter * @link http://www.wikipedia.org/wiki/Nofollow 263*fa5fcacaSAndreas Haerter * @link http://www.wikipedia.org/wiki/Cross-site_scripting 264*fa5fcacaSAndreas Haerter * @link http://www.dokuwiki.org/devel:coding_style 265*fa5fcacaSAndreas Haerter */ 266*fa5fcacaSAndreas Haerterfunction _vector_renderBoxes($arr) 267*fa5fcacaSAndreas Haerter{ 268*fa5fcacaSAndreas Haerter //is there something useful? 269*fa5fcacaSAndreas Haerter if (empty($arr) || 270*fa5fcacaSAndreas Haerter !is_array($arr)){ 271*fa5fcacaSAndreas Haerter return false; //nope, break operation 272*fa5fcacaSAndreas Haerter } 273*fa5fcacaSAndreas Haerter 274*fa5fcacaSAndreas Haerter //array to store the created boxes into 275*fa5fcacaSAndreas Haerter $boxes = array(); 276*fa5fcacaSAndreas Haerter 277*fa5fcacaSAndreas Haerter //handle the box data 278*fa5fcacaSAndreas Haerter foreach($arr as $div_id => $contents){ 279*fa5fcacaSAndreas Haerter //basic check 280*fa5fcacaSAndreas Haerter if (empty($contents) || 281*fa5fcacaSAndreas Haerter !is_array($contents) || 282*fa5fcacaSAndreas Haerter !isset($contents["xhtml"])){ 283*fa5fcacaSAndreas Haerter continue; //ignore invalid stuff and go on 284*fa5fcacaSAndreas Haerter } 285*fa5fcacaSAndreas Haerter $interim = " <div id=\"".hsc($div_id)."\" class=\"portal\">\n"; 286*fa5fcacaSAndreas Haerter if (isset($contents["headline"]) 287*fa5fcacaSAndreas Haerter && $contents["headline"] !== ""){ 288*fa5fcacaSAndreas Haerter $interim .= " <h5>".hsc($contents["headline"])."</h5>\n"; 289*fa5fcacaSAndreas Haerter } 290*fa5fcacaSAndreas Haerter $interim .= " <div class=\"body\">\n" 291*fa5fcacaSAndreas Haerter ." <div class=\"dokuwiki\">\n" //dokuwiki CSS class needed cause we might have to show rendered page content 292*fa5fcacaSAndreas Haerter .$contents["xhtml"]."\n" 293*fa5fcacaSAndreas Haerter ." </div>\n" 294*fa5fcacaSAndreas Haerter ." </div>\n" 295*fa5fcacaSAndreas Haerter ." </div>\n"; 296*fa5fcacaSAndreas Haerter //store it 297*fa5fcacaSAndreas Haerter $boxes[] = $interim; 298*fa5fcacaSAndreas Haerter } 299*fa5fcacaSAndreas Haerter //show everything created 300*fa5fcacaSAndreas Haerter if (!empty($boxes)){ 301*fa5fcacaSAndreas Haerter echo "\n"; 302*fa5fcacaSAndreas Haerter foreach ($boxes as $box){ 303*fa5fcacaSAndreas Haerter echo $box; 304*fa5fcacaSAndreas Haerter } 305*fa5fcacaSAndreas Haerter echo "\n"; 306*fa5fcacaSAndreas Haerter } 307*fa5fcacaSAndreas Haerter 308*fa5fcacaSAndreas Haerter return true; 309*fa5fcacaSAndreas Haerter} 310*fa5fcacaSAndreas Haerter 311*fa5fcacaSAndreas Haerter 312*fa5fcacaSAndreas Haerter/** 313*fa5fcacaSAndreas Haerter * Helper to render the footer buttons (like a dynamic XHTML snippet) 314*fa5fcacaSAndreas Haerter * 315*fa5fcacaSAndreas Haerter * @param array The button data to render within the snippet. Each element 316*fa5fcacaSAndreas Haerter * is represented through an subarray: 317*fa5fcacaSAndreas Haerter * $array = array("btn1" => array("img" => DOKU_TPL."static/img/button-vector.png", 318*fa5fcacaSAndreas Haerter * "href" => "http://andreas-haerter.com/projects/dokuwiki-template-vector", 319*fa5fcacaSAndreas Haerter * "width" => 80, 320*fa5fcacaSAndreas Haerter * "height" => 15, 321*fa5fcacaSAndreas Haerter * "title" => "vector for DokuWiki", 322*fa5fcacaSAndreas Haerter * "nofollow" => false), 323*fa5fcacaSAndreas Haerter * "btn2" => array("img" => DOKU_TPL."user/mybutton1.png", 324*fa5fcacaSAndreas Haerter * "href" => wl("start", false, false, "&")), 325*fa5fcacaSAndreas Haerter * "btn3" => array("img" => DOKU_TPL."user/mybutton2.png", 326*fa5fcacaSAndreas Haerter * "href" => "http://www.example.com"); 327*fa5fcacaSAndreas Haerter * Available keys within the subarrays: 328*fa5fcacaSAndreas Haerter * - "img" (mandatory) 329*fa5fcacaSAndreas Haerter * The relative or full path of an image/button to show. Users may 330*fa5fcacaSAndreas Haerter * place own images within the /user/ dir of this template. 331*fa5fcacaSAndreas Haerter * - "href" (mandatory) 332*fa5fcacaSAndreas Haerter * URL the element should point to (as link). Please submit raw, 333*fa5fcacaSAndreas Haerter * unencoded URLs, the encoding will be done by this function for 334*fa5fcacaSAndreas Haerter * security reasons. 335*fa5fcacaSAndreas Haerter * - "width" (optional) 336*fa5fcacaSAndreas Haerter * width="<value>" will be added to the image tag if both "width" and 337*fa5fcacaSAndreas Haerter * "height" are set (otherwise, this will be ignored). 338*fa5fcacaSAndreas Haerter * - "height" (optional) 339*fa5fcacaSAndreas Haerter * height="<value>" will be added to the image tag if both "height" and 340*fa5fcacaSAndreas Haerter * "width" are set (otherwise, this will be ignored). 341*fa5fcacaSAndreas Haerter * - "nofollow" (optional) 342*fa5fcacaSAndreas Haerter * If set to TRUE, rel="nofollow" will be added to the link. 343*fa5fcacaSAndreas Haerter * - "nofollow" (optional) 344*fa5fcacaSAndreas Haerter * If set to TRUE, rel="nofollow" will be added to the link. 345*fa5fcacaSAndreas Haerter * - "title" (optional) 346*fa5fcacaSAndreas Haerter * title="<value>" will be added to the link and image if "title" 347*fa5fcacaSAndreas Haerter * is set + alt="<value>". 348*fa5fcacaSAndreas Haerter * @author Andreas Haerter <andreas.haerter@dev.mail-node.com> 349*fa5fcacaSAndreas Haerter * @see _vector_renderButtons() 350*fa5fcacaSAndreas Haerter * @see _vector_renderBoxes() 351*fa5fcacaSAndreas Haerter * @link http://www.wikipedia.org/wiki/Nofollow 352*fa5fcacaSAndreas Haerter * @link http://www.dokuwiki.org/devel:coding_style 353*fa5fcacaSAndreas Haerter */ 354*fa5fcacaSAndreas Haerterfunction _vector_renderButtons($arr) 355*fa5fcacaSAndreas Haerter{ 356*fa5fcacaSAndreas Haerter //array to store the created buttons into 357*fa5fcacaSAndreas Haerter $elements = array(); 358*fa5fcacaSAndreas Haerter 359*fa5fcacaSAndreas Haerter //handle the button data 360*fa5fcacaSAndreas Haerter foreach($arr as $li_id => $element){ 361*fa5fcacaSAndreas Haerter //basic check 362*fa5fcacaSAndreas Haerter if (empty($element) || 363*fa5fcacaSAndreas Haerter !is_array($element) || 364*fa5fcacaSAndreas Haerter !isset($element["img"]) || 365*fa5fcacaSAndreas Haerter !isset($element["href"])){ 366*fa5fcacaSAndreas Haerter continue; //ignore invalid stuff and go on 367*fa5fcacaSAndreas Haerter } 368*fa5fcacaSAndreas Haerter $interim = ""; 369*fa5fcacaSAndreas Haerter 370*fa5fcacaSAndreas Haerter //add URL 371*fa5fcacaSAndreas Haerter $interim = "<a href=\"".hsc($element["href"])."\""; //@TODO: real URL encoding 372*fa5fcacaSAndreas Haerter //add rel="nofollow" attribute to the link? 373*fa5fcacaSAndreas Haerter if (!empty($element["nofollow"])){ 374*fa5fcacaSAndreas Haerter $interim .= " rel=\"nofollow\""; 375*fa5fcacaSAndreas Haerter } 376*fa5fcacaSAndreas Haerter //add title attribute to the link? 377*fa5fcacaSAndreas Haerter if (!empty($element["title"])){ 378*fa5fcacaSAndreas Haerter $interim .= " title=\"".hsc($element["title"])."\""; 379*fa5fcacaSAndreas Haerter } 380*fa5fcacaSAndreas Haerter $interim .= " target=\"_blank\"><img src=\"".hsc($element["img"])."\""; 381*fa5fcacaSAndreas Haerter //add width and height attribute to the image? 382*fa5fcacaSAndreas Haerter if (!empty($element["width"]) && 383*fa5fcacaSAndreas Haerter !empty($element["height"])){ 384*fa5fcacaSAndreas Haerter $interim .= " width=\"".(int)$element["width"]."\" height=\"".(int)$element["height"]."\""; 385*fa5fcacaSAndreas Haerter } 386*fa5fcacaSAndreas Haerter //add title and alt attribute to the image? 387*fa5fcacaSAndreas Haerter if (!empty($element["title"])){ 388*fa5fcacaSAndreas Haerter $interim .= " title=\"".hsc($element["title"])."\" alt=\"".hsc($element["title"])."\""; 389*fa5fcacaSAndreas Haerter } else { 390*fa5fcacaSAndreas Haerter $interim .= " alt=\"\""; //alt is a mandatory attribute for images 391*fa5fcacaSAndreas Haerter } 392*fa5fcacaSAndreas Haerter $interim .= " border=\"0\" /></a>"; 393*fa5fcacaSAndreas Haerter 394*fa5fcacaSAndreas Haerter //store it 395*fa5fcacaSAndreas Haerter $elements[] = " ".$interim."\n"; 396*fa5fcacaSAndreas Haerter } 397*fa5fcacaSAndreas Haerter 398*fa5fcacaSAndreas Haerter //show everything created 399*fa5fcacaSAndreas Haerter if (!empty($elements)){ 400*fa5fcacaSAndreas Haerter echo "\n"; 401*fa5fcacaSAndreas Haerter foreach ($elements as $element){ 402*fa5fcacaSAndreas Haerter echo $element; 403*fa5fcacaSAndreas Haerter } 404*fa5fcacaSAndreas Haerter } 405*fa5fcacaSAndreas Haerter return true; 406*fa5fcacaSAndreas Haerter} 407*fa5fcacaSAndreas Haerter 408*fa5fcacaSAndreas Haerter//workaround for the "jumping textarea" IE bug. CSS only fix not possible cause 409*fa5fcacaSAndreas Haerter//some DokuWiki JavaScript is triggering this bug, too. See the following for 410*fa5fcacaSAndreas Haerter//info: 411*fa5fcacaSAndreas Haerter//- <http://blog.andreas-haerter.com/2010/05/28/fix-msie-8-auto-scroll-textarea-css-width-percentage-bug> 412*fa5fcacaSAndreas Haerter//- <http://msdn.microsoft.com/library/cc817574.aspx> 413*fa5fcacaSAndreas Haerterif ($ACT === "edit" && 414*fa5fcacaSAndreas Haerter !headers_sent()){ 415*fa5fcacaSAndreas Haerter header("X-UA-Compatible: IE=EmulateIE7"); 416*fa5fcacaSAndreas Haerter} 417*fa5fcacaSAndreas Haerter 418*fa5fcacaSAndreas Haerter?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 419*fa5fcacaSAndreas Haerter "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 420*fa5fcacaSAndreas Haerter<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo hsc($conf["lang"]); ?>" lang="<?php echo hsc($conf["lang"]); ?>" dir="<?php echo hsc($lang["direction"]); ?>"> 421*fa5fcacaSAndreas Haerter<head> 422*fa5fcacaSAndreas Haerter<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 423*fa5fcacaSAndreas Haerter<title><?php tpl_pagetitle(); echo " - ".hsc($conf["title"]); ?></title> 424*fa5fcacaSAndreas Haerter<?php 425*fa5fcacaSAndreas Haerter//show meta-tags 426*fa5fcacaSAndreas Haertertpl_metaheaders(); 427*fa5fcacaSAndreas Haerter 428*fa5fcacaSAndreas Haerter//manually load needed CSS? this is a workaround for PHP Bug #49642. In some 429*fa5fcacaSAndreas Haerter//version/os combinations PHP is not able to parse INI-file entries if there 430*fa5fcacaSAndreas Haerter//are slashes "/" used for the keynames (see bugreport for more information: 431*fa5fcacaSAndreas Haerter//<http://bugs.php.net/bug.php?id=49692>). to trigger this workaround, simply 432*fa5fcacaSAndreas Haerter//delete/rename vector's style.ini. 433*fa5fcacaSAndreas Haerterif (!file_exists(DOKU_TPLINC."style.ini")){ 434*fa5fcacaSAndreas Haerter echo "<link rel=\"stylesheet\" media=\"all\" type=\"text/css\" href=\"".DOKU_TPL."bug49642.php".((!empty($lang["direction"]) && $lang["direction"] === "rtl") ? "?langdir=rtl" : "")."\" />\n"; //var comes from DokuWiki core 435*fa5fcacaSAndreas Haerter} 436*fa5fcacaSAndreas Haerter 437*fa5fcacaSAndreas Haerter//include default or userdefined favicon 438*fa5fcacaSAndreas Haerterif (file_exists(DOKU_TPLINC."user/favicon.ico")) { 439*fa5fcacaSAndreas Haerter //user defined - you might find http://tools.dynamicdrive.com/favicon/ 440*fa5fcacaSAndreas Haerter //useful to generate one 441*fa5fcacaSAndreas Haerter echo "\n<link rel=\"shortcut icon\" href=\"".DOKU_TPL."user/favicon.ico\" />\n"; 442*fa5fcacaSAndreas Haerter} elseif (file_exists(DOKU_TPLINC."user/favicon.png")) { 443*fa5fcacaSAndreas Haerter //note: I do NOT recommend PNG for favicons (cause it is not supported by 444*fa5fcacaSAndreas Haerter //all browsers), but some users requested this feature. 445*fa5fcacaSAndreas Haerter echo "\n<link rel=\"shortcut icon\" href=\"".DOKU_TPL."user/favicon.png\" />\n"; 446*fa5fcacaSAndreas Haerter}else{ 447*fa5fcacaSAndreas Haerter //default 448*fa5fcacaSAndreas Haerter echo "\n<link rel=\"shortcut icon\" href=\"".DOKU_TPL."static/3rd/dokuwiki/favicon.ico\" />\n"; 449*fa5fcacaSAndreas Haerter} 450*fa5fcacaSAndreas Haerter 451*fa5fcacaSAndreas Haerter//load userdefined js? 452*fa5fcacaSAndreas Haerterif (tpl_getConf("vector_loaduserjs")){ 453*fa5fcacaSAndreas Haerter echo "<script type=\"text/javascript\" charset=\"utf-8\" src=\"".DOKU_TPL."user/user.js\"></script>\n"; 454*fa5fcacaSAndreas Haerter} 455*fa5fcacaSAndreas Haerter 456*fa5fcacaSAndreas Haerter//show printable version? 457*fa5fcacaSAndreas Haerterif ($vector_action === "print"){ 458*fa5fcacaSAndreas Haerter //note: this is just a workaround for people searching for a print version. 459*fa5fcacaSAndreas Haerter // don't forget to update the styles.ini, this is the really important 460*fa5fcacaSAndreas Haerter // thing! BTW: good text about this: http://is.gd/5MyG5 461*fa5fcacaSAndreas Haerter echo "<link rel=\"stylesheet\" media=\"all\" type=\"text/css\" href=\"".DOKU_TPL."static/3rd/dokuwiki/print.css\" />\n" 462*fa5fcacaSAndreas Haerter ."<link rel=\"stylesheet\" media=\"all\" type=\"text/css\" href=\"".DOKU_TPL."static/css/print.css\" />\n" 463*fa5fcacaSAndreas Haerter ."<link rel=\"stylesheet\" media=\"all\" type=\"text/css\" href=\"".DOKU_TPL."user/print.css\" />\n"; 464*fa5fcacaSAndreas Haerter} 465*fa5fcacaSAndreas Haerter//load language specific css hacks? 466*fa5fcacaSAndreas Haerterif (file_exists(DOKU_TPLINC."lang/".$conf["lang"]."/style.css")){ 467*fa5fcacaSAndreas Haerter $interim = trim(file_get_contents(DOKU_TPLINC."lang/".$conf["lang"]."/style.css")); 468*fa5fcacaSAndreas Haerter if (!empty($interim)){ 469*fa5fcacaSAndreas Haerter echo "<style type=\"text/css\" media=\"all\">\n".hsc($interim)."\n</style>\n"; 470*fa5fcacaSAndreas Haerter } 471*fa5fcacaSAndreas Haerter} 472*fa5fcacaSAndreas Haerter?> 473*fa5fcacaSAndreas Haerter<!--[if lt IE 7]><style type="text/css">body{behavior:url("<?php echo DOKU_TPL; ?>static/3rd/vector/csshover.htc")}</style><![endif]--> 474*fa5fcacaSAndreas Haerter</head> 475*fa5fcacaSAndreas Haerter<body class="<?php 476*fa5fcacaSAndreas Haerter //different styles/backgrounds for different page types 477*fa5fcacaSAndreas Haerter switch (true){ 478*fa5fcacaSAndreas Haerter //special: tech 479*fa5fcacaSAndreas Haerter case ($vector_action === "detail"): 480*fa5fcacaSAndreas Haerter case ($vector_action === "mediamanager"): 481*fa5fcacaSAndreas Haerter case ($vector_action === "cite"): 482*fa5fcacaSAndreas Haerter case ($ACT === "search"): //var comes from DokuWiki 483*fa5fcacaSAndreas Haerter echo "mediawiki ltr ns-1 ns-special "; 484*fa5fcacaSAndreas Haerter break; 485*fa5fcacaSAndreas Haerter //special: wiki 486*fa5fcacaSAndreas Haerter case (preg_match("/^wiki$|^wiki:.*?$/i", getNS(getID()))): 487*fa5fcacaSAndreas Haerter case "mediawiki ltr capitalize-all-nouns ns-4 ns-subject "; 488*fa5fcacaSAndreas Haerter break; 489*fa5fcacaSAndreas Haerter //discussion 490*fa5fcacaSAndreas Haerter case ($vector_context === "discuss"): 491*fa5fcacaSAndreas Haerter echo "mediawiki ltr capitalize-all-nouns ns-1 ns-talk "; 492*fa5fcacaSAndreas Haerter break; 493*fa5fcacaSAndreas Haerter //"normal" content 494*fa5fcacaSAndreas Haerter case ($ACT === "edit"): //var comes from DokuWiki 495*fa5fcacaSAndreas Haerter case ($ACT === "draft"): //var comes from DokuWiki 496*fa5fcacaSAndreas Haerter case ($ACT === "revisions"): //var comes from DokuWiki 497*fa5fcacaSAndreas Haerter case ($vector_action === "print"): 498*fa5fcacaSAndreas Haerter default: 499*fa5fcacaSAndreas Haerter echo "mediawiki ltr capitalize-all-nouns ns-0 ns-subject "; 500*fa5fcacaSAndreas Haerter break; 501*fa5fcacaSAndreas Haerter } 502*fa5fcacaSAndreas Haerter //add additional CSS class to hide some elements when 503*fa5fcacaSAndreas Haerter //we have to show the (not) embedded mediamanager 504*fa5fcacaSAndreas Haerter if ($vector_action === "mediamanager" && 505*fa5fcacaSAndreas Haerter !tpl_getConf("vector_mediamanager_embedded")){ 506*fa5fcacaSAndreas Haerter echo "mmanagernotembedded "; 507*fa5fcacaSAndreas Haerter } ?>skin-vector"> 508*fa5fcacaSAndreas Haerter<div id="page-base" class="noprint"></div> 509*fa5fcacaSAndreas Haerter<div id="head-base" class="noprint"></div> 510*fa5fcacaSAndreas Haerter 511*fa5fcacaSAndreas Haerter<!-- start div id=content --> 512*fa5fcacaSAndreas Haerter<div id="content"> 513*fa5fcacaSAndreas Haerter <a name="top" id="top"></a> 514*fa5fcacaSAndreas Haerter <a name="dokuwiki__top" id="dokuwiki__top"></a> 515*fa5fcacaSAndreas Haerter 516*fa5fcacaSAndreas Haerter <!-- start main content area --> 517*fa5fcacaSAndreas Haerter <?php 518*fa5fcacaSAndreas Haerter //show messages (if there are any) 519*fa5fcacaSAndreas Haerter html_msgarea(); 520*fa5fcacaSAndreas Haerter //show site notice 521*fa5fcacaSAndreas Haerter if (tpl_getConf("vector_sitenotice")){ 522*fa5fcacaSAndreas Haerter //we have to show a custom sitenotice 523*fa5fcacaSAndreas Haerter if (empty($conf["useacl"]) || 524*fa5fcacaSAndreas Haerter auth_quickaclcheck(cleanID(tpl_getConf("vector_sitenotice_location"))) >= AUTH_READ){ //current user got access? 525*fa5fcacaSAndreas Haerter echo "\n <div id=\"siteNotice\" class=\"noprint\">\n"; 526*fa5fcacaSAndreas Haerter //get the rendered content of the defined wiki article to use as 527*fa5fcacaSAndreas Haerter //custom sitenotice. 528*fa5fcacaSAndreas Haerter $interim = tpl_include_page(tpl_getConf("vector_sitenotice_location"), false); 529*fa5fcacaSAndreas Haerter if ($interim === "" || 530*fa5fcacaSAndreas Haerter $interim === false){ 531*fa5fcacaSAndreas Haerter //show creation/edit link if the defined page got no content 532*fa5fcacaSAndreas Haerter echo "[ "; 533*fa5fcacaSAndreas Haerter tpl_pagelink(tpl_getConf("vector_sitenotice_location"), hsc($lang["vector_fillplaceholder"]." (".tpl_getConf("vector_sitenotice_location").")")); 534*fa5fcacaSAndreas Haerter echo " ]<br />"; 535*fa5fcacaSAndreas Haerter }else{ 536*fa5fcacaSAndreas Haerter //show the rendered page content 537*fa5fcacaSAndreas Haerter echo " <div class=\"dokuwiki\">\n" //dokuwiki CSS class needed cause we are showing rendered page content 538*fa5fcacaSAndreas Haerter .$interim."\n " 539*fa5fcacaSAndreas Haerter ."</div>"; 540*fa5fcacaSAndreas Haerter } 541*fa5fcacaSAndreas Haerter echo "\n </div>\n"; 542*fa5fcacaSAndreas Haerter } 543*fa5fcacaSAndreas Haerter } 544*fa5fcacaSAndreas Haerter //show breadcrumps if enabled and position = top 545*fa5fcacaSAndreas Haerter if ($conf["breadcrumbs"] == true && 546*fa5fcacaSAndreas Haerter tpl_getConf("vector_breadcrumbs_position") === "top"){ 547*fa5fcacaSAndreas Haerter echo "\n <div class=\"catlinks noprint\"><p>\n "; 548*fa5fcacaSAndreas Haerter tpl_breadcrumbs(); 549*fa5fcacaSAndreas Haerter echo "\n </p></div>\n"; 550*fa5fcacaSAndreas Haerter } 551*fa5fcacaSAndreas Haerter //show hierarchical breadcrumps if enabled and position = top 552*fa5fcacaSAndreas Haerter if ($conf["youarehere"] == true && 553*fa5fcacaSAndreas Haerter tpl_getConf("vector_youarehere_position") === "top"){ 554*fa5fcacaSAndreas Haerter echo "\n <div class=\"catlinks noprint\"><p>\n "; 555*fa5fcacaSAndreas Haerter tpl_youarehere(); 556*fa5fcacaSAndreas Haerter echo "\n </p></div>\n"; 557*fa5fcacaSAndreas Haerter } 558*fa5fcacaSAndreas Haerter ?> 559*fa5fcacaSAndreas Haerter 560*fa5fcacaSAndreas Haerter <!-- start div id bodyContent --> 561*fa5fcacaSAndreas Haerter <div id="bodyContent" class="dokuwiki"> 562*fa5fcacaSAndreas Haerter <!-- start rendered wiki content --> 563*fa5fcacaSAndreas Haerter <?php 564*fa5fcacaSAndreas Haerter //flush the buffer for faster page rendering, heaviest content follows 565*fa5fcacaSAndreas Haerter flush(); 566*fa5fcacaSAndreas Haerter //decide which type of pagecontent we have to show 567*fa5fcacaSAndreas Haerter switch ($vector_action){ 568*fa5fcacaSAndreas Haerter //"image details" 569*fa5fcacaSAndreas Haerter case "detail": 570*fa5fcacaSAndreas Haerter include DOKU_TPLINC."inc_detail.php"; 571*fa5fcacaSAndreas Haerter break; 572*fa5fcacaSAndreas Haerter //file browser/"mediamanager" 573*fa5fcacaSAndreas Haerter case "mediamanager": 574*fa5fcacaSAndreas Haerter include DOKU_TPLINC."inc_mediamanager.php"; 575*fa5fcacaSAndreas Haerter break; 576*fa5fcacaSAndreas Haerter //"cite this article" 577*fa5fcacaSAndreas Haerter case "cite": 578*fa5fcacaSAndreas Haerter include DOKU_TPLINC."inc_cite.php"; 579*fa5fcacaSAndreas Haerter break; 580*fa5fcacaSAndreas Haerter //show "normal" content 581*fa5fcacaSAndreas Haerter default: 582*fa5fcacaSAndreas Haerter tpl_content(((tpl_getConf("vector_toc_position") === "article") ? true : false)); 583*fa5fcacaSAndreas Haerter break; 584*fa5fcacaSAndreas Haerter } 585*fa5fcacaSAndreas Haerter ?> 586*fa5fcacaSAndreas Haerter <!-- end rendered wiki content --> 587*fa5fcacaSAndreas Haerter <div class="clearer"></div> 588*fa5fcacaSAndreas Haerter </div> 589*fa5fcacaSAndreas Haerter <!-- end div id bodyContent --> 590*fa5fcacaSAndreas Haerter 591*fa5fcacaSAndreas Haerter <?php 592*fa5fcacaSAndreas Haerter //show breadcrumps if enabled and position = bottom 593*fa5fcacaSAndreas Haerter if ($conf["breadcrumbs"] == true && 594*fa5fcacaSAndreas Haerter tpl_getConf("vector_breadcrumbs_position") === "bottom"){ 595*fa5fcacaSAndreas Haerter echo "\n <div class=\"catlinks noprint\"><p>\n "; 596*fa5fcacaSAndreas Haerter tpl_breadcrumbs(); 597*fa5fcacaSAndreas Haerter echo "\n </p></div>\n"; 598*fa5fcacaSAndreas Haerter } 599*fa5fcacaSAndreas Haerter //show hierarchical breadcrumps if enabled and position = bottom 600*fa5fcacaSAndreas Haerter if ($conf["youarehere"] == true && 601*fa5fcacaSAndreas Haerter tpl_getConf("vector_youarehere_position") === "bottom"){ 602*fa5fcacaSAndreas Haerter echo "\n <div class=\"catlinks noprint\"><p>\n "; 603*fa5fcacaSAndreas Haerter tpl_youarehere(); 604*fa5fcacaSAndreas Haerter echo "\n </p></div>\n"; 605*fa5fcacaSAndreas Haerter } 606*fa5fcacaSAndreas Haerter ?> 607*fa5fcacaSAndreas Haerter 608*fa5fcacaSAndreas Haerter</div> 609*fa5fcacaSAndreas Haerter<!-- end div id=content --> 610*fa5fcacaSAndreas Haerter 611*fa5fcacaSAndreas Haerter 612*fa5fcacaSAndreas Haerter<!-- start div id=head --> 613*fa5fcacaSAndreas Haerter<div id="head" class="noprint"> 614*fa5fcacaSAndreas Haerter <?php 615*fa5fcacaSAndreas Haerter //show personal tools 616*fa5fcacaSAndreas Haerter if (!empty($conf["useacl"])){ //...makes only sense if there are users 617*fa5fcacaSAndreas Haerter echo "\n" 618*fa5fcacaSAndreas Haerter ." <div id=\"p-personal\">\n" 619*fa5fcacaSAndreas Haerter ." <ul>\n"; 620*fa5fcacaSAndreas Haerter //login? 621*fa5fcacaSAndreas Haerter if ($loginname === ""){ 622*fa5fcacaSAndreas Haerter echo " <li id=\"pt-login\"><a href=\"".wl(cleanID(getId()), array("do" => "login"))."\" rel=\"nofollow\">".hsc($lang["btn_login"])."</a></li>\n"; //language comes from DokuWiki core 623*fa5fcacaSAndreas Haerter }else{ 624*fa5fcacaSAndreas Haerter //username and userpage 625*fa5fcacaSAndreas Haerter echo " <li id=\"pt-userpage\">".(tpl_getConf("vector_userpage") 626*fa5fcacaSAndreas Haerter ? html_wikilink(tpl_getConf("vector_userpage_ns").$loginname, hsc($loginname)) 627*fa5fcacaSAndreas Haerter : hsc($loginname))."</li>"; 628*fa5fcacaSAndreas Haerter //personal discussion 629*fa5fcacaSAndreas Haerter if (tpl_getConf("vector_discuss") && 630*fa5fcacaSAndreas Haerter tpl_getConf("vector_userpage")){ 631*fa5fcacaSAndreas Haerter echo " <li id=\"pt-mytalk\">".html_wikilink(tpl_getConf("vector_discuss_ns").ltrim(tpl_getConf("vector_userpage_ns"), ":").$loginname, hsc($lang["vector_mytalk"]))."</li>"; 632*fa5fcacaSAndreas Haerter } 633*fa5fcacaSAndreas Haerter //admin 634*fa5fcacaSAndreas Haerter if (!empty($INFO["isadmin"]) || 635*fa5fcacaSAndreas Haerter !empty($INFO["ismanager"])){ 636*fa5fcacaSAndreas Haerter echo " <li id=\"pt-admin\"><a href=\"".wl(cleanID(getId()), array("do" => "admin"))."\" rel=\"nofollow\">".hsc($lang["btn_admin"])."</a></li>\n"; //language comes from DokuWiki core 637*fa5fcacaSAndreas Haerter } 638*fa5fcacaSAndreas Haerter //profile 639*fa5fcacaSAndreas Haerter echo " <li id=\"pt-preferences\"><a href=\"".wl(cleanID(getId()), array("do" => "profile"))."\" rel=\"nofollow\">".hsc($lang["btn_profile"])."</a></li>\n"; //language comes from DokuWiki core 640*fa5fcacaSAndreas Haerter //logout 641*fa5fcacaSAndreas Haerter echo " <li id=\"pt-logout\"><a href=\"".wl(cleanID(getId()), array("do" => "logout"))."\" rel=\"nofollow\">".hsc($lang["btn_logout"])."</a></li>\n"; //language comes from DokuWiki core 642*fa5fcacaSAndreas Haerter } 643*fa5fcacaSAndreas Haerter echo " </ul>\n" 644*fa5fcacaSAndreas Haerter ." </div>\n"; 645*fa5fcacaSAndreas Haerter } 646*fa5fcacaSAndreas Haerter ?> 647*fa5fcacaSAndreas Haerter 648*fa5fcacaSAndreas Haerter <!-- start div id=left-navigation --> 649*fa5fcacaSAndreas Haerter <div id="left-navigation"> 650*fa5fcacaSAndreas Haerter <div id="p-namespaces" class="vectorTabs"> 651*fa5fcacaSAndreas Haerter <ul><?php 652*fa5fcacaSAndreas Haerter //show tabs: left. see vector/user/tabs.php to configure them 653*fa5fcacaSAndreas Haerter if (!empty($_vector_tabs_left) && 654*fa5fcacaSAndreas Haerter is_array($_vector_tabs_left)){ 655*fa5fcacaSAndreas Haerter _vector_renderTabs($_vector_tabs_left); 656*fa5fcacaSAndreas Haerter } 657*fa5fcacaSAndreas Haerter ?> 658*fa5fcacaSAndreas Haerter 659*fa5fcacaSAndreas Haerter </ul> 660*fa5fcacaSAndreas Haerter </div> 661*fa5fcacaSAndreas Haerter </div> 662*fa5fcacaSAndreas Haerter <!-- end div id=left-navigation --> 663*fa5fcacaSAndreas Haerter 664*fa5fcacaSAndreas Haerter <!-- start div id=right-navigation --> 665*fa5fcacaSAndreas Haerter <div id="right-navigation"> 666*fa5fcacaSAndreas Haerter <div id="p-views" class="vectorTabs"> 667*fa5fcacaSAndreas Haerter <ul><?php 668*fa5fcacaSAndreas Haerter //show tabs: right. see vector/user/tabs.php to configure them 669*fa5fcacaSAndreas Haerter if (!empty($_vector_tabs_right) && 670*fa5fcacaSAndreas Haerter is_array($_vector_tabs_right)){ 671*fa5fcacaSAndreas Haerter _vector_renderTabs($_vector_tabs_right); 672*fa5fcacaSAndreas Haerter } 673*fa5fcacaSAndreas Haerter ?> 674*fa5fcacaSAndreas Haerter 675*fa5fcacaSAndreas Haerter </ul> 676*fa5fcacaSAndreas Haerter </div> 677*fa5fcacaSAndreas Haerter <div id="p-search"> 678*fa5fcacaSAndreas Haerter <h5> 679*fa5fcacaSAndreas Haerter <label for="qsearch__in"><?php echo hsc($lang["vector_search"]); ?></label> 680*fa5fcacaSAndreas Haerter </h5> 681*fa5fcacaSAndreas Haerter <form action="<?php echo wl(); ?>" accept-charset="utf-8" id="dw__search" name="dw__search"> 682*fa5fcacaSAndreas Haerter <input type="hidden" name="do" value="search" /> 683*fa5fcacaSAndreas Haerter <div id="simpleSearch"> 684*fa5fcacaSAndreas Haerter <input id="qsearch__in" name="id" type="text" accesskey="f" value="" /> 685*fa5fcacaSAndreas Haerter <button id="searchButton" type="submit" name="button" title="<?php echo hsc($lang["vector_btn_search_title"]); ?>"> </button> 686*fa5fcacaSAndreas Haerter </div> 687*fa5fcacaSAndreas Haerter <div id="qsearch__out" class="ajax_qsearch JSpopup"></div> 688*fa5fcacaSAndreas Haerter </form> 689*fa5fcacaSAndreas Haerter </div> 690*fa5fcacaSAndreas Haerter </div> 691*fa5fcacaSAndreas Haerter <!-- end div id=right-navigation --> 692*fa5fcacaSAndreas Haerter 693*fa5fcacaSAndreas Haerter</div> 694*fa5fcacaSAndreas Haerter<!-- end div id=head --> 695*fa5fcacaSAndreas Haerter 696*fa5fcacaSAndreas Haerter<!-- start panel/sidebar --> 697*fa5fcacaSAndreas Haerter<div id="panel" class="noprint"> 698*fa5fcacaSAndreas Haerter <!-- start logo --> 699*fa5fcacaSAndreas Haerter <div id="p-logo"> 700*fa5fcacaSAndreas Haerter <?php 701*fa5fcacaSAndreas Haerter //include default or userdefined logo 702*fa5fcacaSAndreas Haerter echo "<a href=\"".wl()."\" "; 703*fa5fcacaSAndreas Haerter if (file_exists(DOKU_TPLINC."user/logo.png")){ 704*fa5fcacaSAndreas Haerter //user defined PNG 705*fa5fcacaSAndreas Haerter echo "style=\"background-image:url(".DOKU_TPL."user/logo.png);\""; 706*fa5fcacaSAndreas Haerter }elseif (file_exists(DOKU_TPLINC."user/logo.gif")){ 707*fa5fcacaSAndreas Haerter //user defined GIF 708*fa5fcacaSAndreas Haerter echo "style=\"background-image:url(".DOKU_TPL."user/logo.gif);\""; 709*fa5fcacaSAndreas Haerter }elseif (file_exists(DOKU_TPLINC."user/logo.jpg")){ 710*fa5fcacaSAndreas Haerter //user defined JPG 711*fa5fcacaSAndreas Haerter echo "style=\"background-image:url(".DOKU_TPL."user/logo.jpg);\""; 712*fa5fcacaSAndreas Haerter }else{ 713*fa5fcacaSAndreas Haerter //default 714*fa5fcacaSAndreas Haerter echo "style=\"background-image:url(".DOKU_TPL."static/3rd/dokuwiki/logo.png);\""; 715*fa5fcacaSAndreas Haerter } 716*fa5fcacaSAndreas Haerter echo " accesskey=\"h\" title=\"[ALT+H]\"></a>\n"; 717*fa5fcacaSAndreas Haerter ?> 718*fa5fcacaSAndreas Haerter </div> 719*fa5fcacaSAndreas Haerter <!-- end logo --> 720*fa5fcacaSAndreas Haerter 721*fa5fcacaSAndreas Haerter <?php 722*fa5fcacaSAndreas Haerter //show boxes, see vector/user/boxes.php to configure them 723*fa5fcacaSAndreas Haerter if (!empty($_vector_boxes) && 724*fa5fcacaSAndreas Haerter is_array($_vector_boxes)){ 725*fa5fcacaSAndreas Haerter _vector_renderBoxes($_vector_boxes); 726*fa5fcacaSAndreas Haerter } 727*fa5fcacaSAndreas Haerter ?> 728*fa5fcacaSAndreas Haerter 729*fa5fcacaSAndreas Haerter</div> 730*fa5fcacaSAndreas Haerter<!-- end panel/sidebar --> 731*fa5fcacaSAndreas Haerter 732*fa5fcacaSAndreas Haerter<!-- start footer --> 733*fa5fcacaSAndreas Haerter<div id="footer"> 734*fa5fcacaSAndreas Haerter <ul id="footer-info"> 735*fa5fcacaSAndreas Haerter <li id="footer-info-lastmod"> 736*fa5fcacaSAndreas Haerter <?php tpl_pageinfo()?><br /> 737*fa5fcacaSAndreas Haerter </li> 738*fa5fcacaSAndreas Haerter <?php 739*fa5fcacaSAndreas Haerter //copyright notice 740*fa5fcacaSAndreas Haerter if (tpl_getConf("vector_copyright")){ 741*fa5fcacaSAndreas Haerter //show dokuwikis default notice? 742*fa5fcacaSAndreas Haerter if (tpl_getConf("vector_copyright_default")){ 743*fa5fcacaSAndreas Haerter echo "<li id=\"footer-info-copyright\">\n <div class=\"dokuwiki\">"; //dokuwiki CSS class needed cause we have to show DokuWiki content 744*fa5fcacaSAndreas Haerter tpl_license(false); 745*fa5fcacaSAndreas Haerter echo "</div>\n </li>\n"; 746*fa5fcacaSAndreas Haerter //show custom notice. 747*fa5fcacaSAndreas Haerter }else{ 748*fa5fcacaSAndreas Haerter if (empty($conf["useacl"]) || 749*fa5fcacaSAndreas Haerter auth_quickaclcheck(cleanID(tpl_getConf("vector_copyright_location"))) >= AUTH_READ){ //current user got access? 750*fa5fcacaSAndreas Haerter echo "<li id=\"footer-info-copyright\">\n "; 751*fa5fcacaSAndreas Haerter //get the rendered content of the defined wiki article to use as custom notice 752*fa5fcacaSAndreas Haerter $interim = tpl_include_page(tpl_getConf("vector_copyright_location"), false); 753*fa5fcacaSAndreas Haerter if ($interim === "" || 754*fa5fcacaSAndreas Haerter $interim === false){ 755*fa5fcacaSAndreas Haerter //show creation/edit link if the defined page got no content 756*fa5fcacaSAndreas Haerter echo "[ "; 757*fa5fcacaSAndreas Haerter tpl_pagelink(tpl_getConf("vector_copyright_location"), hsc($lang["vector_fillplaceholder"]." (".tpl_getConf("vector_copyright_location").")")); 758*fa5fcacaSAndreas Haerter echo " ]<br />"; 759*fa5fcacaSAndreas Haerter }else{ 760*fa5fcacaSAndreas Haerter //show the rendered page content 761*fa5fcacaSAndreas Haerter echo "<div class=\"dokuwiki\">\n" //dokuwiki CSS class needed cause we are showing rendered page content 762*fa5fcacaSAndreas Haerter .$interim."\n " 763*fa5fcacaSAndreas Haerter ."</div>"; 764*fa5fcacaSAndreas Haerter } 765*fa5fcacaSAndreas Haerter echo "\n </li>\n"; 766*fa5fcacaSAndreas Haerter } 767*fa5fcacaSAndreas Haerter } 768*fa5fcacaSAndreas Haerter } 769*fa5fcacaSAndreas Haerter ?> 770*fa5fcacaSAndreas Haerter </ul> 771*fa5fcacaSAndreas Haerter <ul id="footer-places" class="noprint"> 772*fa5fcacaSAndreas Haerter <li><?php 773*fa5fcacaSAndreas Haerter //show buttons, see vector/user/buttons.php to configure them 774*fa5fcacaSAndreas Haerter if (!empty($_vector_btns) && 775*fa5fcacaSAndreas Haerter is_array($_vector_btns)){ 776*fa5fcacaSAndreas Haerter _vector_renderButtons($_vector_btns); 777*fa5fcacaSAndreas Haerter } 778*fa5fcacaSAndreas Haerter ?> 779*fa5fcacaSAndreas Haerter </li> 780*fa5fcacaSAndreas Haerter </ul> 781*fa5fcacaSAndreas Haerter <div style="clearer"></div> 782*fa5fcacaSAndreas Haerter</div> 783*fa5fcacaSAndreas Haerter<!-- end footer --> 784*fa5fcacaSAndreas Haerter<?php 785*fa5fcacaSAndreas Haerter//provide DokuWiki housekeeping, required in all templates 786*fa5fcacaSAndreas Haertertpl_indexerWebBug(); 787*fa5fcacaSAndreas Haerter?> 788*fa5fcacaSAndreas Haerter 789*fa5fcacaSAndreas Haerter</body> 790*fa5fcacaSAndreas Haerter</html> 791