Mercurial Hosting > nabble
diff src/nabble/view/web/app/Languages.java @ 0:7ecd1a4ef557
add content
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 21 Mar 2019 19:15:52 -0600 |
parents | |
children | 18cf4872fd7f |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/nabble/view/web/app/Languages.java Thu Mar 21 19:15:52 2019 -0600 @@ -0,0 +1,126 @@ + +package nabble.view.web.app; + +import fschmidt.db.DbDatabase; +import nabble.model.Node; +import nabble.model.Site; +import nabble.model.User; +import nabble.view.lib.Jtp; +import nabble.view.lib.Permissions; +import nabble.view.lib.Shared; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.LinkedHashMap; +import java.util.Map; + + +public final class Languages extends HttpServlet { + + public static Map<String, String> languages = new LinkedHashMap<String, String>(); + + static { + languages.put("lang_cs_cz", "Čeština (Czech Republic)"); + languages.put("none", "English"); + languages.put("lang_de", "Deutsch"); + languages.put("lang_es", "Español"); + languages.put("lang_fr_fr", "Français (France)"); + languages.put("lang_pl", "Polski"); + languages.put("lang_pt_br", "Português (Brasil)"); + languages.put("lang_sv", "Svenska (<span class='important'>Incomplete</span>)"); + languages.put("lang_tu", "Türkçe"); + languages.put("lang_rus_ru", "Русский"); + languages.put("lang_ell", "Ελληνικά"); + languages.put("lang_ch_si", "中文 (简体)"); + languages.put("lang_ch_tr", "中文 (繁體)"); + languages.put("lang_arabic", "Arabic"); + } + + protected void service(HttpServletRequest request,HttpServletResponse response) + throws ServletException, IOException + { + Site site = Jtp.getSite(request); + if (site == null) { + response.sendError(HttpServletResponse.SC_NOT_FOUND, "No application match the \"<i>" + request.getHeader("host") + "</i>\" domain."); + return; + } + + User user = Jtp.getUser(request, response); + if (user == null) { + response.sendRedirect(site.getBaseUrl() + Jtp.loginPath(site,null,response.encodeURL("/forum/Addons.jtp?site="+site.getId())) ); + return; + } + + boolean isSiteAdmin = Permissions.isInGroup(user, Permissions.ADMINISTRATORS_GROUP); + boolean isSysAdmin = Permissions.isSysAdmin(user); + if (!isSiteAdmin && !isSysAdmin) { + Jtp.login("Only administrators can proceed in this area.", request, response); + return; + } + + boolean isSave = "save".equals(request.getParameter("action")); + + if (isSave && "POST".equals(request.getMethod())) { + DbDatabase db = site.getDb(); + db.beginTransaction(); + try { + site = site.getGoodCopy(); + String selectedLanguage = request.getParameter("lang"); + for( Map.Entry<String,String> entry : languages.entrySet() ) { + boolean isEnglish = "none".equals(entry.getKey()); + if (!isEnglish) { + boolean isEnabled = entry.getKey().equals(selectedLanguage); + site.setModuleEnabled(entry.getKey(), isEnabled); + } + } + db.commitTransaction(); + Jtp.sendRedirect(request,response,Jtp.path(site.getRootNode())); + return; + } finally { + db.endTransaction(); + } + } + Node rootNode = site.getRootNode(); + PrintWriter out = response.getWriter(); + + String selected = "none"; + for( Map.Entry<String,String> entry : languages.entrySet() ) { + if (site.isModuleEnabled(entry.getKey())) { + selected = entry.getKey(); + break; + } + } + + out.print( "\n<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n <head>\n <META NAME=\"robots\" CONTENT=\"noindex,nofollow\">\n " ); + Shared.title(request, response, "Languages"); + out.print( "\n <style type=\"text/css\">\n div.language {\n margin: .4em .8em;\n }\n </style>\n </head>\n <body>\n " ); + Shared.minHeader(request,response, rootNode); + out.print( "\n\n <div style=\"padding:.5em 0 .5em 60px;background:url('/images/world.png') 5px 5px no-repeat;min-height:45px\">\n <div class=\"big-title second-font\">Languages</div>\n <div class=\"weak-color\">\n Select a language for this Nabble application.\n </div>\n </div>\n\n <form method=\"post\" action=\"/app/Languages.jtp\" accept-charset=\"UTF-8\">\n <input type=\"hidden\" name=\"action\" value=\"save\"/>\n\n " ); + for( Map.Entry<String,String> entry : languages.entrySet() ) { + out.print( "\n " ); + boolean isChecked = selected.equals(entry.getKey()); + out.print( "\n <div class=\"language\">\n <input id=\"_" ); + out.print( (entry.getKey()) ); + out.print( "\" type=\"radio\" name=\"lang\" value=\"" ); + out.print( (entry.getKey()) ); + out.print( "\" " ); + out.print( (isChecked?"checked=\"true\"":"") ); + out.print( ">\n <label for=\"_" ); + out.print( (entry.getKey()) ); + out.print( "\">" ); + out.print( (entry.getValue()) ); + out.print( "</label>\n </div>\n " ); + } + out.print( "\n\n <br/>\n <input type=\"submit\" class=\"toolbar action-button\" value=\"Save Changes\"/>\n or <a href=\"/\">Cancel</a>\n </form>\n\n " ); + Shared.footer(request, response); + out.print( "\n " ); + Shared.analytics(request, response); + out.print( "\n </body>\n</html>\n" ); + + } +} +