check_feature(['feature_multilingual', 'feature_multilingual_one_page']); $multilinguallib = TikiLib::lib('multilingual'); $wikilib = TikiLib::lib('wiki'); if (! isset($_REQUEST['page'])) { header('Location: tiki-index.php'); die; } $pages = []; $_REQUEST['page'] = $wikilib->get_page_by_slug($_REQUEST['page']); $requested = $tikilib->get_page_info($_REQUEST['page']); $page_id = $requested['page_id']; $pages[] = $requested; $unordered = []; $excluded = []; $page = $_REQUEST['page']; $smarty->assign_by_ref('page', $page); // If the page doesn't exist if (empty($requested)) { // First, try cleaning the url to see if it matches an existing page. $wikilib->clean_url_suffix_and_redirect($page, $type = '', $path = '', $prefix = ''); // If after cleaning the url, the page does not exist then display an error $likepages = $wikilib->get_like_pages($page); // if we have exactly one match, redirect to it if ($prefs['feature_wiki_1like_redirection'] == 'y' && count($likepages) == 1 && ! $isUserPage) { $access->redirect('tiki-all_languages.php?page=' . urlencode($likepages[0])); } $smarty->assign_by_ref('likepages', $likepages); $smarty->assign('create', $isUserPage ? 'n' : 'y'); $access->display_error($page, tra('Page cannot be found'), '404'); } $preferred_langs = $multilinguallib->preferredLangs(); if (count($preferred_langs) == 1) { // If user only has one language, then assume he wants to see all // languages supported by the site (otherwise, why would he have asked // for all languages). This has the advantage that users can see multiple // languages even if they haven't registered and set their language preferences, // or if they haven't logged in. Yet, if they have registered, set language // preferences, and logged in, they can limit the displayed languages // to only those that they want. $preferred_langs = $prefs['available_languages']; } // Sort languages according to user's prefences foreach ($multilinguallib->getTrads('wiki page', $page_id) as $row) { if ($row['objId'] != $page_id && in_array($row['lang'], $preferred_langs)) { $unordered[ $row['lang'] ] = $tikilib->get_page_info_from_id($row['objId']); } elseif ($row['lang'] != $requested['lang']) { $excluded[] = $row['lang']; } } foreach ($preferred_langs as $lang) { if (array_key_exists($lang, $unordered)) { $pages[] = $unordered[$lang]; } } $contents = []; $show_langs_side_by_side = false; if (count($pages) <= 2) { // If only two languages, its best to show // them side by side for easier comparison // (as opposed to one on top of the other). // But for more than two languages, side by // side is not possible, cause not enough real estate $show_langs_side_by_side = true; } foreach (array_reverse($pages) as $id => $info) { $page = $info['pageName']; $section = 'wiki page'; $renderer = new WikiRenderer($info, $user); $renderer->applyPermissions(); if ($tiki_p_view == 'y') { $renderer->runSetups(); $contents[] = $smarty->fetch('extends:layouts/internal/layout_view.tpl|tiki-show_page.tpl'); if ($id === count($pages) - 1) { $renderer->restoreAll(); } } } $contents = array_reverse($contents); $smarty->assign('metatag_robots', 'NOINDEX, NOFOLLOW'); $smarty->assign('side_by_side', $show_langs_side_by_side); $smarty->assign('excluded', $excluded); $smarty->assign('content', $contents); $smarty->assign('mid', 'tiki-all_languages.tpl'); $smarty->display('tiki.tpl');