WikiUserDetails userDetails = ServletUtil.currentUserDetails();
String pageName = pageInfo.getTopicName();
String virtualWiki = pageInfo.getVirtualWikiName();
if (pageInfo.getAdmin()) {
if (userDetails.hasRole(RoleImpl.ROLE_SYSADMIN)) {
links.put("Special:Admin", new WikiMessage("tab.admin.configuration"));
links.put("Special:Maintenance", new WikiMessage(
"tab.admin.maintenance"));
links.put("Special:Roles", new WikiMessage("tab.admin.roles"));
}
if (userDetails.hasRole(RoleImpl.ROLE_TRANSLATE)) {
links.put("Special:Translation", new WikiMessage(
"tab.admin.translations"));
}
} else if (pageInfo.getSpecial()) {
// append query params for pages such as Special:Contributions that need
// it
String specialUrl = pageName;
if (!StringUtils.isBlank(request.getQueryString())) {
specialUrl = pageName + "?" + request.getQueryString();
}
links.put(specialUrl, new WikiMessage("tab.common.special"));
} else {
try {
String article = WikiUtil.extractTopicLink(pageName);
String comments = WikiUtil.extractCommentsLink(pageName);
links.put(article, new WikiMessage("tab.common.article"));
links.put(comments, new WikiMessage("tab.common.comments"));
if (ServletUtil.isEditable(virtualWiki, pageName, userDetails)) {
String editLink = "Special:Edit?topic="
+ Utilities.encodeAndEscapeTopicName(pageName);
if (!StringUtils.isBlank(request.getParameter("topicVersionId"))) {
editLink += "&topicVersionId="
+ request.getParameter("topicVersionId");
}
links.put(editLink, new WikiMessage("tab.common.edit"));
}
String historyLink = "Special:History?topic="
+ Utilities.encodeAndEscapeTopicName(pageName);
links.put(historyLink, new WikiMessage("tab.common.history"));
// if (ServletUtil.isMoveable(virtualWiki, pageName, userDetails)) {
// String moveLink = "Special:Move?topic="
// + Utilities.encodeAndEscapeTopicName(pageName);
// links.put(moveLink, new WikiMessage("tab.common.move"));
// }
// if (!userDetails.hasRole(RoleImpl.ROLE_ANONYMOUS)) {
// Watchlist watchlist = ServletUtil.currentWatchlist(request,
// virtualWiki);
// boolean watched = watchlist.containsTopic(pageName);
// String watchlistLabel = (watched) ? "tab.common.unwatch"
// : "tab.common.watch";
// String watchlistLink = "Special:Watchlist?topic="
// + Utilities.encodeAndEscapeTopicName(pageName);
// links.put(watchlistLink, new WikiMessage(watchlistLabel));
// }
if (pageInfo.isUserPage()) {
WikiLink wikiLink = LinkUtil.parseWikiLink(pageName);
String contributionsLink = "Special:Contributions?contributor="
+ Utilities.encodeAndEscapeTopicName(wikiLink.getArticle());
links.put(contributionsLink, new WikiMessage(
"tab.common.contributions"));
}
String linkToLink = "Special:LinkTo?topic="
+ Utilities.encodeAndEscapeTopicName(pageName);
links.put(linkToLink, new WikiMessage("tab.common.links"));
// if (userDetails.hasRole(RoleImpl.ROLE_ADMIN)) {
// String manageLink = "Special:Manage?topic=" +
// Utilities.encodeAndEscapeTopicName(pageName);
// links.put(manageLink, new WikiMessage("tab.common.manage"));
// }
String printLink = "Special:Print?topic="
+ Utilities.encodeAndEscapeTopicName(pageName);
links.put(printLink, new WikiMessage("tab.common.print"));
} catch (WikiException e) {
logger.severe("Unable to build tabbed menu links", e);
}
}
return links;