diff --git a/src/main/java/info/magnolia/module/diff/VersionDiffHtmlServlet.java b/src/main/java/info/magnolia/module/diff/VersionDiffHtmlServlet.java index df0b069..db6cbf5 100755 --- a/src/main/java/info/magnolia/module/diff/VersionDiffHtmlServlet.java +++ b/src/main/java/info/magnolia/module/diff/VersionDiffHtmlServlet.java @@ -16,8 +16,12 @@ import info.magnolia.cms.beans.config.ContentRepository; import info.magnolia.cms.core.Content; +import info.magnolia.cms.util.ContentUtil; import info.magnolia.context.MgnlContext; import info.magnolia.freemarker.FreemarkerUtil; +import info.magnolia.jcr.util.NodeUtil; +import info.magnolia.jcr.wrapper.I18nNodeWrapper; +import info.magnolia.link.LinkUtil; import info.magnolia.module.ModuleRegistry; import info.magnolia.module.diff.ssl.EasySslProtocolSocketFactory; import info.magnolia.module.diff.util.VersionUtil; @@ -29,8 +33,10 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.HashMap; +import java.util.Locale; import java.util.Map; +import javax.jcr.Node; import javax.jcr.RepositoryException; import javax.servlet.ServletException; import javax.servlet.http.Cookie; @@ -50,7 +56,7 @@ * Checks request parameter: * - toVersionNr: name of the newer version, default is current version. Leave empty in order to force comparison to "current" (not yet versioned) content. * - fromVersionNr: name of the older version, default is current state. This value can be also relative "previous". - * + * * @author diana.racho (08.06.2009) */ public class VersionDiffHtmlServlet extends HttpServlet { @@ -67,6 +73,7 @@ private static final String PARAM_NAME_CONTENT_HANDLE = "diffViewContentHandle"; private static final String PARAM_NAME_WORKSPACE_NAME = "workspaceName"; private static final String PARAM_PREVIEW = "mgnlPreview"; + private static final String PARAM_LOCALE = "diffLocale"; private static final String SERVICE_PATH = "/.magnolia/versionDiff"; private static final String PROP_NAME = "Cookie"; private static final String PROTOCOL_HTTPS = "https"; @@ -77,7 +84,7 @@ /** * Generates diff view between to different versions of one content page. - * + * * @param request HttpServletRequest * @param response HttpServletResponse */ @@ -185,7 +192,7 @@ /** * Returns content of handle from request parameter PARAM_NAME_CONTENT_HANDLE. - * + * * @param request HttpServletRequest * @return null, when no content of handle exist */ @@ -205,7 +212,7 @@ /** * Generates diff view between to different versions of one url. - * + * * @param content content which should be compared * @param fromVersion older version label * @param toVersion newer version label @@ -225,7 +232,28 @@ } private String getVersionSource(String version, Content content, HttpServletRequest request) { - String url = getSourceUrl(request, content.getHandle()); + String url; + String diffLocale = request.getParameter(PARAM_LOCALE); + // Parameter was detectable + if (diffLocale != null && !diffLocale.isEmpty() && !diffLocale.equals("undefined")) { + // Wrappes the node with i18N wrapper. + Node jcrNode = content.getJCRNode(); + if (!NodeUtil.isWrappedWith(jcrNode, I18nNodeWrapper.class)) { + content = ContentUtil.asContent(new I18nNodeWrapper(jcrNode)); + } + //Sets the locale + MgnlContext.getAggregationState().setLocale(new Locale(diffLocale)); + //Will take now locale into account + String internalLink = LinkUtil.createLink(content); + //Removes the contextPath, as its already a part of the internalLink. + String serverAddress = StringUtils.substringBefore(request.getRequestURL().toString(), MgnlContext.getWebContext().getContextPath()); + url = serverAddress + internalLink; + } + // Original code + else { + url = getSourceUrl(request, content.getHandle()); + } + try { HttpClient client = new HttpClient(); url = setHostConfiguration(client, url); @@ -316,7 +344,7 @@ /** * Returns older version of content. * Gets from version number or 1.0. - * + * * @param request HttpServletRequest * @return older version label */ @@ -332,7 +360,7 @@ /** * Returns newer version of content. * Gets to version number or current version. - * + * * @param request HttpServletRequest * @return newer version label */ @@ -347,7 +375,7 @@ /** * Return base url of contentHandle without any additional parameters of mgnlUserPSWD, mgnlUserId and mgnlVersion. - * + * * @param request http request * @param contentHandle handle of current page * @return base url diff --git a/src/main/java/info/magnolia/module/diff/dialog/DiffLink.java b/src/main/java/info/magnolia/module/diff/dialog/DiffLink.java index 93b6607..c6aa1a8 100644 --- a/src/main/java/info/magnolia/module/diff/dialog/DiffLink.java +++ b/src/main/java/info/magnolia/module/diff/dialog/DiffLink.java @@ -25,8 +25,12 @@ import java.io.IOException; import java.io.Writer; +import java.util.ArrayList; +import java.util.Arrays; import javax.jcr.RepositoryException; + +import org.apache.commons.lang.StringUtils; /** * Used in the workflow dialog to provide a diff link if a previous version exists. @@ -50,6 +54,11 @@ return NodeDataUtil.getString(getStorageNode(), Context.ATTRIBUTE_PATH); } + public ArrayList getLocales() { + String locales = this.getConfigValue("locales"); + return new ArrayList(Arrays.asList(StringUtils.split(locales, ","))); + } + /** * Attention this is not the versioned content but really the current node. */ diff --git a/src/main/resources/info/magnolia/module/diff/dialog/DiffLink.html b/src/main/resources/info/magnolia/module/diff/dialog/DiffLink.html index b8a5e49..516ec1d 100644 --- a/src/main/resources/info/magnolia/module/diff/dialog/DiffLink.html +++ b/src/main/resources/info/magnolia/module/diff/dialog/DiffLink.html @@ -1,9 +1,12 @@ [#if this.hasThisVersion()] [#if this.hasPreviousVersion()] - ${this.getMessage("versions.compareWithPrevious")} + [#list this.locales as locale] + ${"Language "+locale+": "+ this.getMessage("versions.compareWithPrevious")} +
+ [/#list] [#else] - ${this.getMessage("versions.initialVersion")} + ${this.getMessage("versions.initialVersion")} [/#if] [#else] ${this.getMessage("versions.versioningDisabled")} -[/#if] +[/#if] \ No newline at end of file diff --git a/src/main/resources/mgnl-bootstrap/diff/config.modules.workflow.dialogs.editActivationWorkItem.tabActivation.diff.xml b/src/main/resources/mgnl-bootstrap/diff/config.modules.workflow.dialogs.editActivationWorkItem.tabActivation.diff.xml index 453e510..ce88edb 100644 --- a/src/main/resources/mgnl-bootstrap/diff/config.modules.workflow.dialogs.editActivationWorkItem.tabActivation.diff.xml +++ b/src/main/resources/mgnl-bootstrap/diff/config.modules.workflow.dialogs.editActivationWorkItem.tabActivation.diff.xml @@ -3,7 +3,7 @@ mgnl:contentNode - + mix:lockable @@ -15,8 +15,14 @@ info.magnolia.admininterface.messages + + admin + versions.changes + + + de,en,fr String @@ -25,6 +31,9 @@ mgnl:metaData + + admin + superuser @@ -32,7 +41,7 @@ 2010-11-04T17:16:07.595+01:00 - 2010-11-04T17:31:45.310+01:00 + 2014-02-06T16:44:17.968+01:00 diff --git a/src/main/resources/mgnl-resources/js-classes/mgnl/diff/Diff.js b/src/main/resources/mgnl-resources/js-classes/mgnl/diff/Diff.js index 9333f63..f1a04bb 100644 --- a/src/main/resources/mgnl-resources/js-classes/mgnl/diff/Diff.js +++ b/src/main/resources/mgnl-resources/js-classes/mgnl/diff/Diff.js @@ -1,11 +1,12 @@ importClass("mgnl.util.URLUtil"); classDef("mgnl.diff.Diff", { - diff: function(repository, path, from, to){ + diff: function(repository, path, from, to, locale){ var url = contextPath + "/.magnolia/versionDiff"; url = MgnlURLUtil.addParameter(url, "diffViewContentHandle", encodeURIComponent(path)); url = MgnlURLUtil.addParameter(url, "fromVersionNr", from); url = MgnlURLUtil.addParameter(url, "toVersionNr", to); + url = MgnlURLUtil.addParameter(url, "diffLocale", locale); open(url); } });