/wiki/lib/tpl/vector/main.php
PHP | 813 lines | 478 code | 64 blank | 271 comment | 71 complexity | 469338f299a933b9500a3fbf54575974 MD5 | raw file
Possible License(s): GPL-2.0
- <?php
- /**
- * Main file of the "vector" template for DokuWiki
- *
- *
- * LICENSE: This file is open source software (OSS) and may be copied under
- * certain conditions. See COPYING file for details or try to contact
- * the author(s) of this file in doubt.
- *
- * @license GPLv2 (http://www.gnu.org/licenses/gpl2.html)
- * @author Andreas Haerter <development@andreas-haerter.com>
- * @link http://andreas-haerter.com/projects/dokuwiki-template-vector
- * @link http://www.dokuwiki.org/template:vector
- * @link http://www.dokuwiki.org/devel:templates
- * @link http://www.dokuwiki.org/devel:coding_style
- * @link http://www.dokuwiki.org/devel:environment
- * @link http://www.dokuwiki.org/devel:action_modes
- */
- //check if we are running within the DokuWiki environment
- if (!defined("DOKU_INC")){
- die();
- }
- ini_set('display_errors', false);
- /**
- * Stores the template wide action
- *
- * Different DokuWiki actions requiring some template logic. Therefore the
- * template has to know, what we are doing right now - and that is what this
- * var is for.
- *
- * Please have a look at the "mediamanager.php" and "detail.php" file in the
- * same folder, they are also influencing the var's value.
- *
- * @var string
- * @author Andreas Haerter <development@andreas-haerter.com>
- */
- $vector_action = "article";
- //note: I used $_REQUEST before (cause DokuWiki controls and fills it. Normally,
- // using $_REQUEST is a possible security threat. For details, see
- // <http://www.suspekt.org/2008/10/01/php-53-and-delayed-cross-site-request-forgerieshijacking/>
- // and <http://forum.dokuwiki.org/post/16524>), but it did not work as
- // expected by me (maybe it is a reference and setting $vector_action
- // also changed the contents of $_REQUEST?!). That is why I switched back,
- // checking $_GET and $_POST like I did it before.
- if (!empty($_GET["vecdo"])){
- $vector_action = (string)$_GET["vecdo"];
- }elseif (!empty($_POST["vecdo"])){
- $vector_action = (string)$_POST["vecdo"];
- }
- if (!empty($vector_action) &&
- $vector_action !== "article" &&
- $vector_action !== "print" &&
- $vector_action !== "detail" &&
- $vector_action !== "mediamanager" &&
- $vector_action !== "cite"){
- //ignore unknown values
- $vector_action = "article";
- }
- /**
- * Stores the template wide context
- *
- * This template offers discussion pages via common articles, which should be
- * marked as "special". DokuWiki does not know any "special" articles, therefore
- * we have to take care about detecting if the current page is a discussion
- * page or not.
- *
- * @var string
- * @author Andreas Haerter <development@andreas-haerter.com>
- */
- $vector_context = "article";
- if (preg_match("/^".tpl_getConf("vector_discuss_ns")."?$|^".tpl_getConf("vector_discuss_ns").".*?$/i", ":".getNS(getID()))){
- $vector_context = "discuss";
- }
- /**
- * Stores the name the current client used to login
- *
- * @var string
- * @author Andreas Haerter <development@andreas-haerter.com>
- */
- $loginname = "";
- if (!empty($conf["useacl"])){
- if (isset($_SERVER["REMOTE_USER"]) && //no empty() but isset(): "0" may be a valid username...
- $_SERVER["REMOTE_USER"] !== ""){
- $loginname = $_SERVER["REMOTE_USER"]; //$INFO["client"] would not work here (-> e.g. if
- //current IP differs from the one used to login)
- }
- }
- //get needed language array
- include DOKU_TPLINC."lang/en/lang.php";
- //overwrite English language values with available translations
- if (!empty($conf["lang"]) &&
- $conf["lang"] !== "en" &&
- file_exists(DOKU_TPLINC."/lang/".$conf["lang"]."/lang.php")){
- //get language file (partially translated language files are no problem
- //cause non translated stuff is still existing as English array value)
- include DOKU_TPLINC."/lang/".$conf["lang"]."/lang.php";
- }
- //detect revision
- $rev = (int)$INFO["rev"]; //$INFO comes from the DokuWiki core
- if ($rev < 1){
- $rev = (int)$INFO["lastmod"];
- }
- //get tab config
- include DOKU_TPLINC."/conf/tabs.php"; //default
- if (file_exists(DOKU_TPLINC."/user/tabs.php")){
- include DOKU_TPLINC."/user/tabs.php"; //add user defined
- }
- //get boxes config
- include DOKU_TPLINC."/conf/boxes.php"; //default
- if (file_exists(DOKU_TPLINC."/user/boxes.php")){
- include DOKU_TPLINC."/user/boxes.php"; //add user defined
- }
- //get button config
- include DOKU_TPLINC."/conf/buttons.php"; //default
- if (file_exists(DOKU_TPLINC."/user/buttons.php")){
- include DOKU_TPLINC."/user/buttons.php"; //add user defined
- }
- /**
- * Helper to render the tabs (like a dynamic XHTML snippet)
- *
- * @param array The tab data to render within the snippet. Each element
- * is represented through a subarray:
- * $array = array("tab1" => array("text" => "hello world!",
- * "href" => "http://www.example.com"
- * "nofollow" => true),
- * "tab2" => array("text" => "I did it again",
- * "href" => DOKU_BASE."doku.php?id=foobar",
- * "class" => "foobar-css"),
- * "tab3" => array("text" => "I did it again and again",
- * "href" => wl("start", false, false, "&"),
- * "class" => "foobar-css"),
- * "tab4" => array("text" => "Home",
- * "wiki" => ":start"
- * "accesskey" => "H"));
- * Available keys within the subarrays:
- * - "text" (mandatory)
- * The text/label of the element.
- * - "href" (optional)
- * URL the element should point to (as link). Please submit raw,
- * unencoded URLs, the encoding will be done by this function for
- * security reasons. If the URL is not relative
- * (= starts with http(s)://), the URL will be treated as external
- * (=a special style will be used if "class" is not set).
- * - "wiki" (optional)
- * ID of a WikiPage to link (like ":start" or ":wiki:foobar").
- * - "class" (optional)
- * Name of an additional CSS class to use for the element content.
- * Works only in combination with "text" or "href", NOT with "wiki"
- * (will be ignored in this case).
- * - "nofollow" (optional)
- * If set to TRUE, rel="nofollow" will be added to the link if "href"
- * is set (otherwise this flag will do nothing).
- * - "accesskey" (optional)
- * accesskey="<value>" will be added to the link if "href" is set
- * (otherwise this option will do nothing).
- * @author Andreas Haerter <development@andreas-haerter.com>
- * @see _vector_renderButtons()
- * @see _vector_renderBoxes()
- * @link http://www.wikipedia.org/wiki/Nofollow
- * @link http://de.selfhtml.org/html/verweise/tastatur.htm#kuerzel
- * @link http://www.dokuwiki.org/devel:environment
- * @link http://www.dokuwiki.org/devel:coding_style
- */
- function _vector_renderTabs($arr)
- {
- //is there something useful?
- if (empty($arr) ||
- !is_array($arr)){
- return false; //nope, break operation
- }
- //array to store the created tabs into
- $elements = array();
- //handle the tab data
- foreach($arr as $li_id => $element){
- //basic check
- if (empty($element) ||
- !is_array($element) ||
- !isset($element["text"]) ||
- (empty($element["href"]) &&
- empty($element["wiki"]))){
- continue; //ignore invalid stuff and go on
- }
- $li_created = true; //flag to control if we created any list element
- $interim = "";
- //do we have an external link?
- if (!empty($element["href"])){
- //add URL
- $interim = "<a href=\"".hsc($element["href"])."\""; //@TODO: real URL encoding
- //add rel="nofollow" attribute to the link?
- if (!empty($element["nofollow"])){
- $interim .= " rel=\"nofollow\"";
- }
- //mark external link?
- if (substr($element["href"], 0, 4) === "http" ||
- substr($element["href"], 0, 3) === "ftp"){
- $interim .= " class=\"urlextern\"";
- }
- //add access key?
- if (!empty($element["accesskey"])){
- $interim .= " accesskey=\"".hsc($element["accesskey"])."\" title=\"[ALT+".hsc(strtoupper($element["accesskey"]))."]\"";
- }
- $interim .= "><span>".hsc($element["text"])."</span></a>";
- //internal wiki link
- }else if (!empty($element["wiki"])){
- $interim = "<a href=\"".hsc(wl(cleanID($element["wiki"])))."\"><span>".hsc($element["text"])."</span></a>";
- }
- //store it
- $elements[] = "\n <li id=\"".hsc($li_id)."\"".(!empty($element["class"])
- ? " class=\"".hsc($element["class"])."\""
- : "").">".$interim."</li>";
- }
- //show everything created
- if (!empty($elements)){
- foreach ($elements as $element){
- echo $element;
- }
- }
- return true;
- }
- /**
- * Helper to render the boxes (like a dynamic XHTML snippet)
- *
- * @param array The box data to render within the snippet. Each box is
- * represented through a subarray:
- * $array = array("box-id1" => array("headline" => "hello world!",
- * "xhtml" => "I am <i>here</i>."));
- * Available keys within the subarrays:
- * - "xhtml" (mandatory)
- * The content of the Box you want to show as XHTML. Attention: YOU
- * HAVE TO TAKE CARE ABOUT FILTER EVENTUALLY USED INPUT/SECURITY. Be
- * aware of XSS and stuff.
- * - "headline" (optional)
- * Headline to show above the box. Leave empty/do not set for none.
- * @author Andreas Haerter <development@andreas-haerter.com>
- * @see _vector_renderButtons()
- * @see _vector_renderTabs()
- * @link http://www.wikipedia.org/wiki/Nofollow
- * @link http://www.wikipedia.org/wiki/Cross-site_scripting
- * @link http://www.dokuwiki.org/devel:coding_style
- */
- function _vector_renderBoxes($arr)
- {
- //is there something useful?
- if (empty($arr) ||
- !is_array($arr)){
- return false; //nope, break operation
- }
- //array to store the created boxes into
- $boxes = array();
- //handle the box data
- foreach($arr as $div_id => $contents){
- //basic check
- if (empty($contents) ||
- !is_array($contents) ||
- !isset($contents["xhtml"])){
- continue; //ignore invalid stuff and go on
- }
- $interim = " <div id=\"".hsc($div_id)."\" class=\"portal\">\n";
- if (isset($contents["headline"])
- && $contents["headline"] !== ""){
- $interim .= " <h5>".hsc($contents["headline"])."</h5>\n";
- }
- $interim .= " <div class=\"body\">\n"
- ." <div class=\"dokuwiki\">\n" //dokuwiki CSS class needed cause we might have to show rendered page content
- .$contents["xhtml"]."\n"
- ." </div>\n"
- ." </div>\n"
- ." </div>\n";
- //store it
- $boxes[] = $interim;
- }
- //show everything created
- if (!empty($boxes)){
- echo "\n";
- foreach ($boxes as $box){
- echo $box;
- }
- echo "\n";
- }
- return true;
- }
- /**
- * Helper to render the footer buttons (like a dynamic XHTML snippet)
- *
- * @param array The button data to render within the snippet. Each element
- * is represented through a subarray:
- * $array = array("btn1" => array("img" => DOKU_TPL."static/img/button-vector.png",
- * "href" => "http://andreas-haerter.com/projects/dokuwiki-template-vector",
- * "width" => 80,
- * "height" => 15,
- * "title" => "vector for DokuWiki",
- * "nofollow" => false),
- * "btn2" => array("img" => DOKU_TPL."user/mybutton1.png",
- * "href" => wl("start", false, false, "&")),
- * "btn3" => array("img" => DOKU_TPL."user/mybutton2.png",
- * "href" => "http://www.example.com");
- * Available keys within the subarrays:
- * - "img" (mandatory)
- * The relative or full path of an image/button to show. Users may
- * place own images within the /user/ dir of this template.
- * - "href" (mandatory)
- * URL the element should point to (as link). Please submit raw,
- * unencoded URLs, the encoding will be done by this function for
- * security reasons.
- * - "width" (optional)
- * width="<value>" will be added to the image tag if both "width" and
- * "height" are set (otherwise, this will be ignored).
- * - "height" (optional)
- * height="<value>" will be added to the image tag if both "height" and
- * "width" are set (otherwise, this will be ignored).
- * - "nofollow" (optional)
- * If set to TRUE, rel="nofollow" will be added to the link.
- * - "title" (optional)
- * title="<value>" will be added to the link and image if "title"
- * is set + alt="<value>".
- * @author Andreas Haerter <development@andreas-haerter.com>
- * @see _vector_renderButtons()
- * @see _vector_renderBoxes()
- * @link http://www.wikipedia.org/wiki/Nofollow
- * @link http://www.dokuwiki.org/devel:coding_style
- */
- function _vector_renderButtons($arr)
- {
- //array to store the created buttons into
- $elements = array();
- //handle the button data
- foreach($arr as $li_id => $element){
- //basic check
- if (empty($element) ||
- !is_array($element) ||
- !isset($element["img"]) ||
- !isset($element["href"])){
- continue; //ignore invalid stuff and go on
- }
- $interim = "";
- //add URL
- $interim = "<a href=\"".hsc($element["href"])."\""; //@TODO: real URL encoding
- //add rel="nofollow" attribute to the link?
- if (!empty($element["nofollow"])){
- $interim .= " rel=\"nofollow\"";
- }
- //add title attribute to the link?
- if (!empty($element["title"])){
- $interim .= " title=\"".hsc($element["title"])."\"";
- }
- $interim .= " target=\"_blank\"><img src=\"".hsc($element["img"])."\"";
- //add width and height attribute to the image?
- if (!empty($element["width"]) &&
- !empty($element["height"])){
- $interim .= " width=\"".(int)$element["width"]."\" height=\"".(int)$element["height"]."\"";
- }
- //add title and alt attribute to the image?
- if (!empty($element["title"])){
- $interim .= " title=\"".hsc($element["title"])."\" alt=\"".hsc($element["title"])."\"";
- } else {
- $interim .= " alt=\"\""; //alt is a mandatory attribute for images
- }
- $interim .= " border=\"0\" /></a>";
- //store it
- $elements[] = " ".$interim."\n";
- }
- //show everything created
- if (!empty($elements)){
- echo "\n";
- foreach ($elements as $element){
- echo $element;
- }
- }
- return true;
- }
- //workaround for the "jumping textarea" IE bug. CSS only fix not possible cause
- //some DokuWiki JavaScript is triggering this bug, too. See the following for
- //info:
- //- <http://blog.andreas-haerter.com/2010/05/28/fix-msie-8-auto-scroll-textarea-css-width-percentage-bug>
- //- <http://msdn.microsoft.com/library/cc817574.aspx>
- if ($ACT === "edit" &&
- !headers_sent()){
- header("X-UA-Compatible: IE=EmulateIE7");
- }
- ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <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"]); ?>">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title><?php tpl_pagetitle(); echo " - ".hsc($conf["title"]); ?></title>
- <!-- link to own generated RSS feed -->
- <link rel="alternate" type="application/rss+xml" title="Selected pages (subscribe to this!)"
- href="http://reganmian.net/wiki/feed.xml">
- <?php
- //show meta-tags
- tpl_metaheaders();
- //manually load needed CSS? this is a workaround for PHP Bug #49642. In some
- //version/os combinations PHP is not able to parse INI-file entries if there
- //are slashes "/" used for the keynames (see bugreport for more information:
- //<http://bugs.php.net/bug.php?id=49692>). to trigger this workaround, simply
- //delete/rename vector's style.ini.
- if (!file_exists(DOKU_TPLINC."style.ini")){
- 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
- }
- //include default or userdefined favicon
- if (file_exists(DOKU_TPLINC."user/favicon.ico")) {
- //user defined - you might find http://tools.dynamicdrive.com/favicon/
- //useful to generate one
- echo "\n<link rel=\"shortcut icon\" href=\"".DOKU_TPL."user/favicon.ico\" />\n";
- } elseif (file_exists(DOKU_TPLINC."user/favicon.png")) {
- //note: I do NOT recommend PNG for favicons (cause it is not supported by
- //all browsers), but some users requested this feature.
- echo "\n<link rel=\"shortcut icon\" href=\"".DOKU_TPL."user/favicon.png\" />\n";
- }else{
- //default
- echo "\n<link rel=\"shortcut icon\" href=\"".DOKU_TPL."static/3rd/dokuwiki/favicon.ico\" />\n";
- }
- //load userdefined js?
- if (tpl_getConf("vector_loaduserjs")){
- echo "<script type=\"text/javascript\" charset=\"utf-8\" src=\"".DOKU_TPL."user/user.js\"></script>\n";
- }
- //show printable version?
- if ($vector_action === "print"){
- //note: this is just a workaround for people searching for a print version.
- // don't forget to update the styles.ini, this is the really important
- // thing! BTW: good text about this: http://is.gd/5MyG5
- echo "<link rel=\"stylesheet\" media=\"all\" type=\"text/css\" href=\"".DOKU_TPL."static/3rd/dokuwiki/print.css\" />\n"
- ."<link rel=\"stylesheet\" media=\"all\" type=\"text/css\" href=\"".DOKU_TPL."static/css/print.css\" />\n"
- ."<link rel=\"stylesheet\" media=\"all\" type=\"text/css\" href=\"".DOKU_TPL."user/print.css\" />\n";
- }
- //load language specific css hacks?
- if (file_exists(DOKU_TPLINC."lang/".$conf["lang"]."/style.css")){
- $interim = trim(file_get_contents(DOKU_TPLINC."lang/".$conf["lang"]."/style.css"));
- if (!empty($interim)){
- echo "<style type=\"text/css\" media=\"all\">\n".hsc($interim)."\n</style>\n";
- }
- }
- ?>
- <!--[if lt IE 7]><style type="text/css">body{behavior:url("<?php echo DOKU_TPL; ?>static/3rd/vector/csshover.htc")}</style><![endif]-->
- </head>
- <body class="<?php
- //different styles/backgrounds for different page types
- switch (true){
- //special: tech
- case ($vector_action === "detail"):
- case ($vector_action === "mediamanager"):
- case ($vector_action === "cite"):
- case ($ACT === "search"): //var comes from DokuWiki
- echo "mediawiki ltr ns-1 ns-special ";
- break;
- //special: wiki
- case (preg_match("/^wiki$|^wiki:.*?$/i", getNS(getID()))):
- case "mediawiki ltr capitalize-all-nouns ns-4 ns-subject ";
- break;
- //discussion
- case ($vector_context === "discuss"):
- echo "mediawiki ltr capitalize-all-nouns ns-1 ns-talk ";
- break;
- //"normal" content
- case ($ACT === "edit"): //var comes from DokuWiki
- case ($ACT === "draft"): //var comes from DokuWiki
- case ($ACT === "revisions"): //var comes from DokuWiki
- case ($vector_action === "print"):
- default:
- echo "mediawiki ltr capitalize-all-nouns ns-0 ns-subject ";
- break;
- }
- //add additional CSS class to hide some elements when
- //we have to show the (not) embedded mediamanager
- if ($vector_action === "mediamanager" &&
- !tpl_getConf("vector_mediamanager_embedded")){
- echo "mmanagernotembedded ";
- } ?>skin-vector">
- <div id="page-container">
- <div id="page-base" class="noprint"></div>
- <div id="head-base" class="noprint"></div>
- <!-- start div id=content -->
- <div id="content">
- <a name="top" id="top"></a>
- <a name="dokuwiki__top" id="dokuwiki__top"></a>
- <!-- start main content area -->
- <?php
- //show messages (if there are any)
- html_msgarea();
- //show site notice
- if (tpl_getConf("vector_sitenotice")){
- //we have to show a custom sitenotice
- if (empty($conf["useacl"]) ||
- auth_quickaclcheck(cleanID(tpl_getConf("vector_sitenotice_location"))) >= AUTH_READ){ //current user got access?
- echo "\n <div id=\"siteNotice\" class=\"noprint\">\n";
- //get the rendered content of the defined wiki article to use as
- //custom sitenotice.
- $interim = tpl_include_page(tpl_getConf("vector_sitenotice_location"), false);
- if ($interim === "" ||
- $interim === false){
- //show creation/edit link if the defined page got no content
- echo "[ ";
- tpl_pagelink(tpl_getConf("vector_sitenotice_location"), hsc($lang["vector_fillplaceholder"]." (".tpl_getConf("vector_sitenotice_location").")"));
- echo " ]<br />";
- }else{
- //show the rendered page content
- echo " <div class=\"dokuwiki\">\n" //dokuwiki CSS class needed cause we are showing rendered page content
- .$interim."\n "
- ."</div>";
- }
- echo "\n </div>\n";
- }
- }
- //show breadcrumps if enabled and position = top
- if ($conf["breadcrumbs"] == true &&
- tpl_getConf("vector_breadcrumbs_position") === "top"){
- echo "\n <div class=\"catlinks noprint\"><p>\n ";
- tpl_breadcrumbs();
- echo "\n </p></div>\n";
- }
- //show hierarchical breadcrumps if enabled and position = top
- if ($conf["youarehere"] == true &&
- tpl_getConf("vector_youarehere_position") === "top"){
- echo "\n <div class=\"catlinks noprint\"><p>\n ";
- tpl_youarehere();
- echo "\n </p></div>\n";
- }
- ?>
- <!-- start div id bodyContent -->
- <div id="bodyContent" class="dokuwiki">
- <!-- start rendered wiki content -->
- <?php
- //flush the buffer for faster page rendering, heaviest content follows
- flush();
- //decide which type of pagecontent we have to show
- switch ($vector_action){
- //"image details"
- case "detail":
- include DOKU_TPLINC."inc_detail.php";
- break;
- //file browser/"mediamanager"
- case "mediamanager":
- include DOKU_TPLINC."inc_mediamanager.php";
- break;
- //"cite this article"
- case "cite":
- include DOKU_TPLINC."inc_cite.php";
- break;
- //show "normal" content
- default:
- if($vector_context == "discuss"){
- $disqus = &plugin_load('syntax','disqus');
- echo $disqus->_disqus();
-
- }else{
- tpl_content(((tpl_getConf("vector_toc_position") === "article") ? true : false));}
- break;
- }
- ?>
- <!-- end rendered wiki content -->
- <div class="clearer"></div>
- </div>
- <!-- end div id bodyContent -->
- <?php
- //show breadcrumps if enabled and position = bottom
- if ($conf["breadcrumbs"] == true &&
- tpl_getConf("vector_breadcrumbs_position") === "bottom"){
- echo "\n <div class=\"catlinks noprint\"><p>\n ";
- tpl_breadcrumbs();
- echo "\n </p></div>\n";
- }
- //show hierarchical breadcrumps if enabled and position = bottom
- if ($conf["youarehere"] == true &&
- tpl_getConf("vector_youarehere_position") === "bottom"){
- echo "\n <div class=\"catlinks noprint\"><p>\n ";
- tpl_youarehere();
- echo "\n </p></div>\n";
- }
- ?>
- </div>
- <!-- end div id=content -->
- <!-- start div id=head -->
- <div id="head" class="noprint">
- <?php
- //show personal tools
- if (!empty($conf["useacl"])){ //...makes only sense if there are users
- echo "\n"
- ." <div id=\"p-personal\">\n"
- ." <ul>\n";
- //login?
- if ($loginname === ""){
- 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
- }else{
- //username and userpage
- echo " <li id=\"pt-userpage\">".(tpl_getConf("vector_userpage")
- ? html_wikilink(tpl_getConf("vector_userpage_ns").$loginname, hsc($loginname))
- : hsc($loginname))."</li>";
- //personal discussion
- if (tpl_getConf("vector_discuss") &&
- tpl_getConf("vector_userpage")){
- echo " <li id=\"pt-mytalk\">".html_wikilink(tpl_getConf("vector_discuss_ns").ltrim(tpl_getConf("vector_userpage_ns"), ":").$loginname, hsc($lang["vector_mytalk"]))."</li>";
- }
- //admin
- if (!empty($INFO["isadmin"]) ||
- !empty($INFO["ismanager"])){
- 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
- }
- //profile
- if (actionOK("profile")){ //check if action is disabled
- 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
- }
- //logout
- 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
- }
- echo " </ul>\n"
- ." </div>\n";
- }
- ?>
- <!-- start div id=left-navigation -->
- <div id="left-navigation">
- <div id="p-namespaces" class="vectorTabs">
- <ul><?php
- //show tabs: left. see vector/user/tabs.php to configure them
- if (!empty($_vector_tabs_left) &&
- is_array($_vector_tabs_left)){
- _vector_renderTabs($_vector_tabs_left);
- }
- ?>
- </ul>
- </div>
- </div>
- <!-- end div id=left-navigation -->
- <!-- start div id=right-navigation -->
- <div id="right-navigation">
- <div id="p-views" class="vectorTabs">
- <ul><?php
- //show tabs: right. see vector/user/tabs.php to configure them
- if (!empty($_vector_tabs_right) &&
- is_array($_vector_tabs_right)){
- _vector_renderTabs($_vector_tabs_right);
- }
- ?>
- </ul>
- </div>
- <?php if (actionOK("search")){ ?>
- <div id="p-search">
- <h5>
- <label for="qsearch__in"><?php echo hsc($lang["vector_search"]); ?></label>
- </h5>
- <form action="<?php echo wl(); ?>" accept-charset="utf-8" id="dw__search" name="dw__search">
- <input type="hidden" name="do" value="search" />
- <div id="simpleSearch">
- <input id="qsearch__in" name="id" type="text" accesskey="f" value="" />
- <button id="searchButton" type="submit" name="button" title="<?php echo hsc($lang["vector_btn_search_title"]); ?>"> </button>
- </div>
- <div id="qsearch__out" class="ajax_qsearch JSpopup"></div>
- </form>
- </div>
- <?php } ?>
- </div>
- <!-- end div id=right-navigation -->
- </div>
- <!-- end div id=head -->
- <!-- start panel/sidebar -->
- <div id="panel" class="noprint">
- <!-- start logo -->
- <div id="p-logo">
- <?php
- //include default or userdefined logo
- echo "<a href=\"".wl()."\" ";
- if (file_exists(DOKU_TPLINC."user/logo.png")){
- //user defined PNG
- echo "style=\"background-image:url(".DOKU_TPL."user/logo.png);\"";
- }elseif (file_exists(DOKU_TPLINC."user/logo.gif")){
- //user defined GIF
- echo "style=\"background-image:url(".DOKU_TPL."user/logo.gif);\"";
- }elseif (file_exists(DOKU_TPLINC."user/logo.jpg")){
- //user defined JPG
- echo "style=\"background-image:url(".DOKU_TPL."user/logo.jpg);\"";
- }else{
- //default
- echo "style=\"background-image:url(".DOKU_TPL."static/3rd/dokuwiki/logo.png);\"";
- }
- echo " accesskey=\"h\" title=\"[ALT+H]\"></a>\n";
- ?>
- </div>
- <!-- end logo -->
- <?php
- //show boxes, see vector/user/boxes.php to configure them
- if (!empty($_vector_boxes) &&
- is_array($_vector_boxes)){
- _vector_renderBoxes($_vector_boxes);
- }
- ?>
- </div>
- <!-- end panel/sidebar -->
- </div>
- <!-- end page-container -->
- <!-- start footer -->
- <div id="footer">
- <ul id="footer-info">
- <li id="footer-info-lastmod">
- <?php tpl_pageinfo()?><br />
- </li>
- <?php
- //copyright notice
- if (tpl_getConf("vector_copyright")){
- //show dokuwiki's default notice?
- if (tpl_getConf("vector_copyright_default")){
- echo "<li id=\"footer-info-copyright\">\n <div class=\"dokuwiki\">"; //dokuwiki CSS class needed cause we have to show DokuWiki content
- tpl_license(false);
- echo "</div>\n </li>\n";
- //show custom notice.
- }else{
- if (empty($conf["useacl"]) ||
- auth_quickaclcheck(cleanID(tpl_getConf("vector_copyright_location"))) >= AUTH_READ){ //current user got access?
- echo "<li id=\"footer-info-copyright\">\n ";
- //get the rendered content of the defined wiki article to use as custom notice
- $interim = tpl_include_page(tpl_getConf("vector_copyright_location"), false);
- if ($interim === "" ||
- $interim === false){
- //show creation/edit link if the defined page got no content
- echo "[ ";
- tpl_pagelink(tpl_getConf("vector_copyright_location"), hsc($lang["vector_fillplaceholder"]." (".tpl_getConf("vector_copyright_location").")"));
- echo " ]<br />";
- }else{
- //show the rendered page content
- echo "<div class=\"dokuwiki\">\n" //dokuwiki CSS class needed cause we are showing rendered page content
- .$interim."\n "
- ."</div>";
- }
- echo "\n </li>\n";
- }
- }
- }
- ?>
- </ul>
- <ul id="footer-places" class="noprint">
- <li><?php
- //show buttons, see vector/user/buttons.php to configure them
- if (!empty($_vector_btns) &&
- is_array($_vector_btns)){
- _vector_renderButtons($_vector_btns);
- }
- ?>
- </li>
- </ul>
- <div style="clearer"></div>
- </div>
- <!-- end footer -->
- <?php
- //provide DokuWiki housekeeping, required in all templates
- tpl_indexerWebBug();
- //include web analytics software
- if (file_exists(DOKU_TPLINC."/user/tracker.php")){
- include DOKU_TPLINC."/user/tracker.php";
- }
- ?>
- </body>
- </html>