Index: anwiki/_override/contentclasses/contentclass_menu/contentclass_menu.tpl.php |
=================================================================== |
--- a/anwiki/_override/contentclasses/contentclass_menu/contentclass_menu.tpl.php |
+++ b/anwiki/_override/contentclasses/contentclass_menu/contentclass_menu.tpl.php |
@@ -29,28 +29,116 @@ EOF; |
<button id="search-button" type="submit">$sTitle</button> |
</label> |
</form> |
</li> |
EOF; |
return $HTML; |
} |
+ function renderLanguages() |
+ { |
+ $languages = $this->getLanguages($aoTranslations); |
+ if (count($languages) == 0) |
+ return ""; |
+ |
+ $currentLanguage = array_shift($languages); |
+ $currentLang = $currentLanguage['lang']; |
+ $currentText = $currentLanguage['text']; |
+ |
+ $HTML = <<<EOF |
+ |
+<li id="language"> |
+ <div id="current-language"> |
+ <div id="flag-$currentLang" class="flag sprite"></div><span>$currentText</span> |
+ <span id="language-arrow" class="sprite"></span> |
+ </div> |
+ <ul id="language-selector"> |
+EOF; |
+ |
+ foreach ($languages as $language) |
+ { |
+ $url = $language['url']; |
+ $linkStyle = $language['linkStyle']; |
+ $lang = $language['lang']; |
+ $text = $language['text']; |
+ |
+ # Note: The space before URL is required because otherwise Anwiki will |
+ # automatically replace the URL based on current language. |
+ $HTML .= <<<EOF |
+ |
+ <li class="language-entry"><a href=" $url"$linkStyle><div id="flag-$lang" class="flag sprite"></div>$text</a></li> |
+EOF; |
+ } |
+ |
+ $HTML .= <<<EOF |
+ |
+ </ul> |
+</li> |
+EOF; |
+ return $HTML; |
+ } |
+ |
+ private function getLanguages() |
+ { |
+ $languages = array(); |
+ |
+ $currentPageName = AnwActionPage::getCurrentPageName(); |
+ if (!AnwPage::isValidPageName($currentPageName)) |
+ return $languages; |
+ |
+ $currentPage = new AnwPageByName($currentPageName); |
+ if (!$currentPage->exists()) |
+ return $languages; |
+ |
+ $pages = $currentPage->getPageGroup()->getPages(); |
+ $translationThreshold = AnwComponent::globalCfgViewUntranslatedMinpercent(); |
+ foreach ($pages as $page) |
+ { |
+ if ($page->isActionAllowed('view')) |
+ { |
+ $current = ($page->getName() == $currentPageName); |
+ $online = ($page->getTranslatedPercent() >= $translationThreshold); |
+ $linkStyle = ($online ? '' : ' style="text-decoration:line-through;"'); |
+ $lang = $this->xQuote($page->getLang()); |
+ $text = $this->xText(self::g_('lang_' . $lang, array(), |
+ AnwAction::getActionLang())); |
+ $entry = array("lang" => $lang, "linkStyle" => $linkStyle, |
+ "text" => $text); |
+ if ($current) |
+ array_unshift($languages, $entry); |
+ else |
+ { |
+ $params = $_GET; |
+ unset($params[AnwActionPage::GET_PAGENAME]); //avoid loop |
+ unset($params['browser']); |
+ $url = AnwUtils::link($page, "view", $params); |
+ $entry['url'] = $this->xQuote($url); |
+ array_push($languages, $entry); |
+ } |
+ } |
+ } |
+ |
+ return $languages; |
+ } |
+ |
function mainItem($sTitle, $sUrl, $sTarget, $sRenderedSubItems=false) |
{ |
if ($this->firstItem) |
{ |
$classAttribute = ' class="first"'; |
$this->firstItem = false; |
} |
else |
$classAttribute = ''; |
if ($sUrl == "/search/") |
return $this->renderSearch($sTitle, $classAttribute); |
+ else if ($sUrl == "/languages/") |
+ return $this->renderLanguages(); |
# Anything with a link relative to site root must be in English |
$sHrefLang = (preg_match('!^/!', $sUrl) ? ' hreflang="en"' : ''); |
$HTML = <<<EOF |
<li$classAttribute><a href="$sUrl"$sHrefLang>$sTitle</a></li> |
EOF; |