/* * Copyright (C) 2003-2011 eXo Platform SAS. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see<http://www.gnu.org/licenses/>. */ package org.exoplatform.forum.common.webui; import java.text.MessageFormat; import java.util.List; import java.util.MissingResourceException; import java.util.ResourceBundle; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringUtils; import org.exoplatform.commons.utils.CommonsUtils; import org.exoplatform.forum.common.CommonUtils; import org.exoplatform.portal.application.PortalRequestContext; import org.exoplatform.portal.application.RequestNavigationData; import org.exoplatform.portal.mop.SiteType; import org.exoplatform.portal.webui.util.Util; import org.exoplatform.services.log.ExoLogger; import org.exoplatform.services.log.Log; import org.exoplatform.social.common.router.ExoRouter; import org.exoplatform.social.common.router.ExoRouter.Route; import org.exoplatform.social.core.space.SpaceUtils; import org.exoplatform.social.core.space.model.Space; import org.exoplatform.social.core.space.spi.SpaceService; import org.exoplatform.web.application.RequireJS; import org.exoplatform.webui.application.WebuiRequestContext; import org.exoplatform.webui.application.portlet.PortletRequestContext; public class WebUIUtils { private static final Log LOG = ExoLogger.getLogger(WebUIUtils.class); private static final String SCRIPT_PATTERN = "<script src=\"/forum/syntaxhighlighter/Scripts/{0}\" id=\"script_{1}_UIScriptBBCodeContainer\" type=\"text/javascript\"></script>"; public static String getRemoteIP() { String remoteAddr = ""; try { PortalRequestContext context = Util.getPortalRequestContext(); remoteAddr = ((HttpServletRequest)context.getRequest()).getRemoteAddr() ; } catch (Exception e) { LOG.error("Can not get remote IP", e); } return remoteAddr; } public String getLabel(String key) throws Exception { return getLabel(null, key); } public static String getLabel(String componentId, String label) { if (!StringUtils.isEmpty(componentId)) { label = componentId.concat(".label.").concat(label); } try { WebuiRequestContext context = WebuiRequestContext.getCurrentInstance(); ResourceBundle res = context.getApplicationResourceBundle(); return res.getString(label); } catch (MissingResourceException e) { return label; } } public static String getLabelEscapedJavaScript(String componentId, String label) { return StringEscapeUtils.escapeJavaScript(getLabel(componentId, label)); } static public RequireJS addScripts(String module, String alias) { return addScripts(module, alias, ""); } static public RequireJS addScripts(String[] scripts) { return addScripts(null, null, scripts); } static public RequireJS addScripts(String module, String alias, String... scripts) { PortletRequestContext pContext = (PortletRequestContext) WebuiRequestContext.getCurrentInstance(); RequireJS requireJS; if (CommonUtils.isEmpty(module) == false) { if (CommonUtils.isEmpty(alias) == false) { requireJS = pContext.getJavascriptManager().require("SHARED/" + module, alias); } else { requireJS = pContext.getJavascriptManager().require("SHARED/" + module); } } else { requireJS = pContext.getJavascriptManager().getRequireJS(); } if(scripts != null) { String script; for (int i = 0; i < scripts.length; i++) { script = scripts[i]; if (CommonUtils.isEmpty(script) == false) { requireJS.addScripts(script + ";"); } } } return requireJS; } /** * Build the script tag HTML * * @param scriptName * @param index * @return The script tag */ private static String makeScript(String scriptName, int index) { return MessageFormat.format(SCRIPT_PATTERN, scriptName, index); } /** * Attach the list javaScript files of SyntaxHighlighter * @param languageOption The list of files name javaScript * @return The list files attach for SyntaxHighlighter */ public static String attachJSSyntaxHighlighter(List<String> languageOption) { StringBuilder scripts = new StringBuilder(); if(languageOption != null && !languageOption.isEmpty()) { int index = 0; //Attach javaScript core of SyntaxHighlighter scripts.append(makeScript("shCore.js", (index++))) .append(makeScript("shAutoloader.js", (index++))); // Attach javaScript by language code (ex: java, php, script, html ...) for (String lang : languageOption) { scripts.append(makeScript("shBrush" + lang + ".js", (index++))); } // Attach javaScript loader of SyntaxHighlighter scripts.append(makeScript("shLegacy.js", (index++))) .append(makeScript("load_syntaxhighlighter.js", (index++))); // Execute method javaScript to process SyntaxHighlighter try { String script = "setTimeout(function() {try {SyntaxHighlighter.initLoader();SyntaxHighlighter.all();" + "dp.SyntaxHighlighter.HighlightAll('code');}catch(err){if(window.console && SyntaxHighlighter.config.strings.isAlert) {window.console.log(err);}}}, 500);"; addScripts(new String[] { script }); } catch (Exception e) { LOG.warn("Failed to add JavaScripts for SyntaxHighlighter"); } } // return scripts.toString(); } public static Space getSpaceByContext() { // PortalRequestContext pcontext = Util.getPortalRequestContext(); if (!pcontext.getSiteType().equals(SiteType.GROUP) || !pcontext.getSiteName().startsWith(SpaceUtils.SPACE_GROUP)) { return null; } String requestPath = pcontext.getControllerContext().getParameter(RequestNavigationData.REQUEST_PATH); Route route = ExoRouter.route(requestPath); SpaceService spaceService = CommonsUtils.getService(SpaceService.class); if (route == null) { String groupId = pcontext.getControllerContext().getParameter(RequestNavigationData.REQUEST_SITE_NAME); return spaceService.getSpaceByGroupId(groupId); } // String spacePrettyName = route.localArgs.get("spacePrettyName"); Space space = spaceService.getSpaceByPrettyName(spacePrettyName); if (space == null) { String groupId = String.format("%s/%s", SpaceUtils.SPACE_GROUP, spacePrettyName); space = spaceService.getSpaceByGroupId(groupId); } return space; } }