* @license: CC Attribution-Share Alike 3.0 Unported */ // must be run within Dokuwiki if(!defined('DOKU_INC')) die(); class helper_plugin_userhomepage extends DokuWiki_Plugin { // Returns the ID of current user's private namespace start page (even if it doesn't exist) function getPrivateID() { if ($this->getConf('group_by_name')) { // private:s:simon or private:s:simon_delage $this->private_ns = cleanID($this->getConf('users_namespace').':'.strtolower(substr($this->privateNamespace(), 0, 1)).':'. $this->privateNamespace()); } else { // private:simon or private:simon_delage $this->private_ns = cleanID($this->getConf('users_namespace').':'. $this->privateNamespace()); } // ...:start.txt return $this->private_page = $this->private_ns.':'.$this->privateStart(); } // Returns the ID of any (or current) user's public page (even if it doesn't exist) function getPublicID($userLogin=null) { global $conf; if ($userLogin == null) { $userLogin = $_SERVER['REMOTE_USER']; } if (strpos($this->getConf('public_pages_ns'),':%NAME%:%START%') !== false) { $target = str_replace('%NAME%', $userLogin, $this->getConf('public_pages_ns')); $target = str_replace('%START%', $conf['start'], $target); } else { $target = $this->getConf('public_pages_ns').':'.$userLogin; } return $this->public_page = cleanID($target); } // Returns a link to current user's private namespace start page (even if it doesn't exist) // If @param == "loggedinas", the link will be wraped in an
  • element function getPrivateLink($param=null) { global $INFO; global $lang; $pageId = $this->getPrivateID(); $classes = 'class="'.$this->getLinkClasses($pageId, "uhp_private_".$this->getConf('userlink_icons')).'"'; if ($param == "loggedinas") { return '
  • '.$lang['loggedinas'].' '.$INFO['userinfo']['name'].' ('.$_SERVER['REMOTE_USER'].')
  • '; } elseif ($param != null) { return ''.$param.''; } else { return ''.$this->getLang('privatenamespace').''; } } // Returns a link to current user's public page (even if it doesn't exist) // If @param == "loggedinas", the link will be wraped in an
  • element function getPublicLink($param=null) { global $INFO; global $lang; $pageId = $this->getPublicID(); $classes = 'class="'.$this->getLinkClasses($pageId, "uhp_public_".$this->getConf('userlink_icons')).'"'; if ($param == "loggedinas") { return '
  • '.$lang['loggedinas'].' '.$INFO['userinfo']['name'].' ('.$_SERVER['REMOTE_USER'].')
  • '; } elseif ($param != null) { return ''.$param.''; } else { return ''.$this->publicString().''; } } // Returns CSS classes to apply to a UHP link // $pageID is target ID, $class is link's primary CSS class, $default adds default interwiki classes or not function getLinkClasses($pageId = null, $class = null, $default = true) { if ($default) { $ret = $this->getConf('userlink_classes'); } if ($class != null) { $ret .= " ".$class; } if ($ret != null) { $ret .= " "; } // Make sure "wikilink1" isn't there yet (because it was previously part of default 'userlink_classes' setting) $ret = str_replace(" wikilink1", "", $ret); if (page_exists($pageId)) { $ret .= "wikilink1"; } else { $ret .= "wikilink2"; } return $ret; } // Returns a more or less complex 'Logged in as' string with link(s) to private and/or public page function getComplexLoggedInAs() { global $INFO; global $lang; // If user's private namespace and public page exist, return a 'Logged in as' string with both styled links) if ((page_exists($this->getPrivateID())) && (page_exists($this->getPublicID()))) { //return '
  • '.$lang['loggedinas'].' '.$INFO['userinfo']['name'].' ('.$_SERVER['REMOTE_USER'].')
  • '; return '
  • '.$lang['loggedinas'].' '.$this->getPrivateLink($INFO['userinfo']['name']).' ('.$this->getPublicLink($_SERVER['REMOTE_USER']).')
  • '; // Else if only private namespace exists, return 'Logged in as' string with private namespace styled link } elseif (page_exists($this->getPrivateID())) { return $this->getPrivateLink("loggedinas"); // Else if only public page exists, return 'Logged in as' string with public page styled link } elseif (page_exists($this->getPublicID())) { return $this->getPublicLink("loggedinas"); // Else default back to standard string } else { return '
  • '.$lang['loggedinas'].' '.userlink().'
  • '; } } // Returns a link to any user's public page (user login is required and page must exist) // This is to provide proper "Last update by" link function getAnyPublicLink($userLogin) { global $lang; if ($userLogin != null) { $publicID = $this->getPublicID($userLogin); $classes = 'class="'.$this->getLinkClasses($publicID, "uhp_public_".$this->getConf('userlink_icons')).'"'; $result = ''.editorinfo($userLogin, true).''; return $result; } else { return false; } } /** * Print some info about the current page with a link to last editor's public page * * Based on core function tpl_pageinfo() by Andreas Gohr * * @param bool $ret return content instead of printing it * @return bool|string */ function getPageInfo($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; } // prepare date and path $fn = $INFO['filepath']; if(!$conf['fullpath']) { if($INFO['rev']) { $fn = str_replace($conf['olddir'].'/', '', $fn); } else { $fn = str_replace($conf['datadir'].'/', '', $fn); } } $fn = utf8_decodeFN($fn); $date = dformat($INFO['lastmod']); // print it if($INFO['exists']) { $out = ''; $out .= ''.$fn.''; $out .= ' · '; $out .= $lang['lastmod']; $out .= ' '; $out .= $date; if($INFO['editor']) { $out .= ' '.$lang['by'].' '; $out .= $this->getAnyPublicLink($INFO['editor']); } else { $out .= ' ('.$lang['external_edit'].')'; } if($INFO['locked']) { $out .= ' · '; $out .= $lang['lockedby']; $out .= ' '; $out .= $this->getAnyPublicLink($INFO['locked']); } if($ret) { return $out; } else { echo $out; return true; } } return false; } function getButton($type="private") { global $INFO; global $lang; if ($type == "private") { echo '
    '; } elseif ($type == "public") { echo '
    '; } } // Returns an array containing id and language strings of Private NS Start Page and/or Public Page (depending on options, page existance isn't checked) // $default adds default interwiki classes or not function getElements($default) { global $INFO; $return = array(); // Don't return anything if no known user is logged in if ($_SERVER['REMOTE_USER'] != null) { // Add PRIVATE NAMESPACE START PAGE INFO IF NEEDED (is required by options) if ($this->getConf('create_private_ns')) { $return['private'] = array(); $return['private']['id'] = $this->getPrivateID(); $return['private']['title'] = $this->getLang('privatenamespace'); $return['private']['string'] = $INFO['userinfo']['name']; $return['private']['classes'] = $this->getLinkClasses($this->getPrivateID(), null, $default); } // Add PUBLIC PAGE INFO IF NEEDED (is required by options) if ($this->getConf('create_public_page')) { $return['public'] = array(); $return['public']['id'] = $this->getPublicID(); $return['public']['title'] = $this->publicString(); $return['public']['string'] = $_SERVER['REMOTE_USER']; $return['public']['classes'] = $this->getLinkClasses($this->getPublicID(), null, $default); } } return $return; } function privateNamespace() { if ($this->getConf('use_name_string')) { global $INFO; $raw_string = cleanID($INFO['userinfo']['name']); // simon_delage return $raw_string; } else { // simon return strtolower($_SERVER['REMOTE_USER']); } } function privateStart() { if ( $this->getConf('use_start_page')) { global $conf; return cleanID($conf['start']); } else { return $this->privateNamespace(); } } function publicString() { if (strpos($this->getConf('public_pages_ns'),':%NAME%:%START%') !== false) { return $this->getLang('publicnamespace'); } else { return $this->getLang('publicpage'); } } }