diff --git a/dspace-api/src/main/resources/Messages.properties b/dspace-api/src/main/resources/Messages.properties index 6df66fe715e3..5de7004ce7bb 100644 --- a/dspace-api/src/main/resources/Messages.properties +++ b/dspace-api/src/main/resources/Messages.properties @@ -1689,8 +1689,8 @@ jsp.version.version-summary.submit_version = Version jsp.dspace-admin.version-summary.text = Reason for creating new version jsp.version.history.delete.success.message = Ok, version/versions has been removed -jsp.version.history.delete.warning.head1 = Confirm Deletion(s)\\n -jsp.version.history.delete.warning.para1 = Are you sure you want to delete these versions?\\n +jsp.version.history.delete.warning.head1 = Confirm Deletion(s) +jsp.version.history.delete.warning.para1 = Are you sure you want to delete these versions? jsp.version.history.delete.warning.para2 = PLEASE NOTE: That by deleting these versions, the associated items will no longer be accessible. jsp.version.history.title = Version History @@ -1700,15 +1700,15 @@ jsp.version.history.column2 = Item jsp.version.history.column3 = Editor jsp.version.history.column4 = Date jsp.version.history.column5 = Summary -jsp.version.history.column6 = Actions jsp.version.history.restore = Restore -jsp.version.history.update = Update -jsp.version.history.legend = *Selected version +jsp.version.history.update = Edit +jsp.version.history.legend = Selected version jsp.version.history.delete = Delete Versions jsp.version.history.return = Return +jsp.version.history.popup.delete = Yes +jsp.version.history.popup.close = No jsp.version.notice.new_version_head = Notice jsp.version.notice.new_version_help = This is not the latest version of this item. The latest version can be found at: jsp.version.notice.workflow_version_head = Notice jsp.version.notice.workflow_version_help = A more recent version of this item is in the Workflow. -#End Versioning diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/components/VersioningItemHome.java b/dspace-jspui/src/main/java/org/dspace/app/webui/components/VersioningItemHome.java new file mode 100644 index 000000000000..c8eda6e1e769 --- /dev/null +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/components/VersioningItemHome.java @@ -0,0 +1,128 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.app.webui.components; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.log4j.Logger; +import org.dspace.app.webui.util.VersionUtil; +import org.dspace.authorize.AuthorizeException; +import org.dspace.authorize.AuthorizeManager; +import org.dspace.content.Item; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.Context; +import org.dspace.handle.HandleManager; +import org.dspace.plugin.ItemHomeProcessor; +import org.dspace.plugin.PluginException; +import org.dspace.versioning.Version; +import org.dspace.versioning.VersionHistory; + +public class VersioningItemHome implements ItemHomeProcessor { + + /** log4j category */ + private static Logger log = Logger.getLogger(VersioningItemHome.class); + + @Override + public void process(Context context, HttpServletRequest request, + HttpServletResponse response, Item item) throws PluginException, + AuthorizeException { + boolean versioningEnabled = ConfigurationManager.getBooleanProperty( + "versioning", "enabled"); + boolean newVersionAvailable = false; + boolean showVersionWorkflowAvailable = false; + boolean hasVersionButton = false; + boolean hasVersionHistory = false; + + VersionHistory history = null; + List historyVersions = new ArrayList(); + String latestVersionHandle = null; + String latestVersionURL = null; + if (versioningEnabled) { + try { + if(item.canEdit()) { + if (VersionUtil.isLatest(context, item) && item.isArchived()) { + hasVersionButton = true; + } + } + } catch (SQLException e) { + throw new PluginException(e.getMessage()); + } + + if (VersionUtil.hasVersionHistory(context, item)) { + hasVersionHistory = true; + history = VersionUtil.retrieveVersionHistory(context, item); + for(Version versRow : history.getVersions()) { + + //Skip items currently in submission + try { + if(VersionUtil.isItemInSubmission(context, versRow.getItem())) + { + continue; + } + else { + historyVersions.add(versRow); + } + } catch (SQLException e) { + throw new PluginException(e.getMessage()); + } + } + } + + // Check if we have a history for the item + Version latestVersion; + try { + latestVersion = VersionUtil.checkLatestVersion(context, item); + } catch (SQLException e) { + throw new PluginException(e.getMessage()); + } + + if (latestVersion != null) { + if (latestVersion != null + && latestVersion.getItemID() != item.getID()) { + // We have a newer version + Item latestVersionItem = latestVersion.getItem(); + if (latestVersionItem.isArchived()) { + // Available, add a link for the user alerting him that + // a new version is available + newVersionAvailable = true; + try { + latestVersionURL = HandleManager.resolveToURL( + context, latestVersionItem.getHandle()); + } catch (SQLException e) { + throw new PluginException(e.getMessage()); + } + latestVersionHandle = latestVersionItem.getHandle(); + } else { + // We might be dealing with a workflow/workspace item + showVersionWorkflowAvailable = true; + } + } + } + } + + request.setAttribute("versioning.enabled", versioningEnabled); + request.setAttribute("versioning.hasversionbutton", hasVersionButton); + request.setAttribute("versioning.hasversionhistory", hasVersionHistory); + request.setAttribute("versioning.history", history); + request.setAttribute("versioning.historyversions", historyVersions); + request.setAttribute("versioning.newversionavailable", + newVersionAvailable); + request.setAttribute("versioning.showversionwfavailable", + showVersionWorkflowAvailable); + request.setAttribute("versioning.latestversionhandle", + latestVersionHandle); + request.setAttribute("versioning.latestversionurl", latestVersionURL); + + } + +} diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/VersionHistoryServlet.java b/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/VersionHistoryServlet.java index 8089e65d2486..d0b894ecdd2a 100644 --- a/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/VersionHistoryServlet.java +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/VersionHistoryServlet.java @@ -47,8 +47,11 @@ protected void doDSGet(Context context, HttpServletRequest request, Item item = Item.find(context, itemID); - if (item == null - || !AuthorizeManager.isAdmin(context, + if (item == null) { + throw new IllegalArgumentException("Item is null"); + } + + if(!AuthorizeManager.isAdmin(context, item.getOwningCollection())) { // Check if only administrators can view the item history diff --git a/dspace-jspui/src/main/webapp/display-item.jsp b/dspace-jspui/src/main/webapp/display-item.jsp index 866594bd2aed..3e9e7f65ca48 100644 --- a/dspace-jspui/src/main/webapp/display-item.jsp +++ b/dspace-jspui/src/main/webapp/display-item.jsp @@ -23,10 +23,6 @@ - display any collections. - admin_button - Boolean, show admin 'edit' button --%> -<%@page import="org.dspace.core.Constants"%> -<%@page import="org.dspace.eperson.EPerson"%> -<%@page import="org.dspace.versioning.VersionHistory"%> -<%@page import="org.elasticsearch.common.trove.strategy.HashingStrategy"%> <%@ page contentType="text/html;charset=UTF-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> @@ -45,6 +41,11 @@ <%@page import="org.dspace.app.webui.util.VersionUtil"%> <%@page import="org.dspace.app.webui.util.UIUtil"%> <%@page import="org.dspace.authorize.AuthorizeManager"%> +<%@page import="java.util.List"%> +<%@page import="org.dspace.core.Constants"%> +<%@page import="org.dspace.eperson.EPerson"%> +<%@page import="org.dspace.versioning.VersionHistory"%> +<%@page import="org.elasticsearch.common.trove.strategy.HashingStrategy"%> <% // Attributes Boolean displayAllBoolean = (Boolean) request.getAttribute("display.all"); @@ -85,74 +86,23 @@ } } - boolean versioningEnabled = ConfigurationManager - .getBooleanProperty("versioning", "enabled"); - String messageVersionNoticeHead = null; - String messageVersionNoticeHelp = null; - boolean hasVersionButton = false; - boolean hasVersionHistory = false; - boolean authorizeToVersion = false; - VersionHistory history = null; - Context context = null; - if (versioningEnabled) - { - - context = UIUtil.obtainContext(request); - authorizeToVersion = AuthorizeManager.isAdmin(context, item.getOwningCollection()); - if (authorizeToVersion) - { - - if (VersionUtil.isLatest(context, item) - && item.isArchived()) - { - hasVersionButton = true; - } - - } - - if (VersionUtil.hasVersionHistory(context, item)) - { - hasVersionHistory = true; - history = VersionUtil.retrieveVersionHistory(context, item); - } - - //Check if we have a history for the item - Version latestVersion = VersionUtil.checkLatestVersion(context, - item); - - if (latestVersion != null) - { - if (latestVersion != null - && latestVersion.getItemID() != item.getID()) - { - //We have a newer version - Item latestVersionItem = latestVersion.getItem(); - if (latestVersionItem.isArchived()) - { - //Available, add a link for the user alerting him that a new version is available - messageVersionNoticeHead = LocaleSupport - .getLocalizedMessage(pageContext, - "jsp.version.notice.new_version_head"); - messageVersionNoticeHelp = LocaleSupport - .getLocalizedMessage(pageContext, - "jsp.version.notice.new_version_help"); - String url = HandleManager.resolveToURL(context, latestVersionItem.getHandle()); - messageVersionNoticeHelp += ""+latestVersionItem.getHandle()+""; - } - else - { - //We might be dealing with a workflow/workspace item - messageVersionNoticeHead = LocaleSupport - .getLocalizedMessage(pageContext, - "jsp.version.notice.workflow_version_head"); - messageVersionNoticeHelp = LocaleSupport - .getLocalizedMessage(pageContext, - "jsp.version.notice.workflow_version_help"); - - } - } - } - } + Boolean versioningEnabledBool = (Boolean)request.getAttribute("versioning.enabled"); + boolean versioningEnabled = (versioningEnabledBool!=null && versioningEnabledBool.booleanValue()); + Boolean hasVersionButtonBool = (Boolean)request.getAttribute("versioning.hasversionbutton"); + Boolean hasVersionHistoryBool = (Boolean)request.getAttribute("versioning.hasversionhistory"); + boolean hasVersionButton = (hasVersionButtonBool!=null && hasVersionButtonBool.booleanValue()); + boolean hasVersionHistory = (hasVersionHistoryBool!=null && hasVersionHistoryBool.booleanValue()); + + Boolean newversionavailableBool = (Boolean)request.getAttribute("versioning.newversionavailable"); + boolean newVersionAvailable = (newversionavailableBool!=null && newversionavailableBool.booleanValue()); + Boolean showVersionWorkflowAvailableBool = (Boolean)request.getAttribute("versioning.showversionwfavailable"); + boolean showVersionWorkflowAvailable = (showVersionWorkflowAvailableBool!=null && showVersionWorkflowAvailableBool.booleanValue()); + + String latestVersionHandle = (String)request.getAttribute("versioning.latestversionhandle"); + String latestVersionURL = (String)request.getAttribute("versioning.latestversionurl"); + + VersionHistory history = (VersionHistory)request.getAttribute("versioning.history"); + List historyVersions = (List)request.getAttribute("versioning.historyversions"); %> <%@page import="org.dspace.app.webui.servlet.MyDSpaceServlet"%> @@ -163,15 +113,27 @@ %> <% - if (messageVersionNoticeHead != null) + if (newVersionAvailable) + { + %> + + <% + } + %> + + <% + if (showVersionWorkflowAvailable) { %> -
<%=messageVersionNoticeHead%> - <%=messageVersionNoticeHelp%> +
+
<% } %> + <%-- Please use this identifier to cite or link to this item: <%= HandleManager.getCanonicalForm(handle) %>--%> @@ -203,21 +165,19 @@ " /> - <% if(hasVersionButton || hasVersionHistory) { %> <% if(hasVersionButton) { %>
" />
<% } %> - <% if(hasVersionHistory && authorizeToVersion) { %> + <% if(hasVersionHistory) { %>
- " /> + " />
<% } %> - <% } %>
@@ -318,75 +278,66 @@ %>
- <%-- Create Commons Link --%> -<% - if (cc_url != null) - { -%> -

- Creative Commons -

- -<% - } else { -%> <%-- Versioning table --%> <% if (versioningEnabled && hasVersionHistory) { boolean item_history_view_admin = ConfigurationManager .getBooleanProperty("versioning", "item.history.view.admin"); - if(!item_history_view_admin || authorizeToVersion) { - - + if(!item_history_view_admin || admin_button) { %> -
-

+
+
- - +
- + + id="tt2" class="oddRowOddCol"> + id="tt3" class="oddRowEvenCol"> + id="tt4" class="oddRowOddCol"> + id="tt5" class="oddRowEvenCol"> - <% for(Version versRow : history.getVersions()) { + <% for(Version versRow : historyVersions) { EPerson versRowPerson = versRow.getEperson(); String[] identifierPath = VersionUtil.addItemIdentifier(item, versRow); - //Skip items currently in submission - if(VersionUtil.isItemInSubmission(context, versRow.getItem())) - { - continue; - } %> - - - + + - - + + <% } %>
<%= versRow.getVersionNumber() %><%= identifierPath[1] %><%= item.getID()==versRow.getItemID()?"*":""%><% if(authorizeToVersion) { %><%= versRow.getVersionNumber() %><%= identifierPath[1] %><%= item.getID()==versRow.getItemID()?"":""%><% if(admin_button) { %><%=versRowPerson.getFullName() %><% } else { %><%=versRowPerson.getFullName() %><% } %><%= versRow.getVersionDate() %><%= versRow.getSummary() %><%= versRow.getVersionDate() %><%= versRow.getSummary() %>
-

+
- - <% } } +%> +
+ <%-- Create Commons Link --%> +<% + if (cc_url != null) + { +%> +

+ Creative Commons +

+ +<% + } else { %>

<% diff --git a/dspace-jspui/src/main/webapp/submit/verify-prune.jsp b/dspace-jspui/src/main/webapp/submit/verify-prune.jsp index 182a1bf700aa..28fdbf22fb3c 100644 --- a/dspace-jspui/src/main/webapp/submit/verify-prune.jsp +++ b/dspace-jspui/src/main/webapp/submit/verify-prune.jsp @@ -50,7 +50,7 @@ request.setAttribute("LanguageSwitch", "hide"); %> - @@ -119,17 +119,8 @@ <%-- Note: These submit buttons' names don't start with "submit", so the -- Previously passed in button will be picked up --%> -
- - - - - -
- " /> - - " /> -
-
+ + " /> + " />
diff --git a/dspace-jspui/src/main/webapp/tools/version-history.jsp b/dspace-jspui/src/main/webapp/tools/version-history.jsp index 780511fe6609..52bc415973c7 100644 --- a/dspace-jspui/src/main/webapp/tools/version-history.jsp +++ b/dspace-jspui/src/main/webapp/tools/version-history.jsp @@ -35,34 +35,37 @@ Boolean removeok = UIUtil.getBoolParameter(request, "delete"); Context context = UIUtil.obtainContext(request); - - request.setAttribute("LanguageSwitch", "hide"); %> - - - + + -

+ +

- <% if(removeok) { %>
<% } %> + <% if(removeok) { %>
<% } %>
@@ -73,7 +76,7 @@ j(document).ready(function() { %>
-

+

@@ -88,8 +91,6 @@ j(document).ready(function() { id="t4" class="oddRowOddCol"> - <% for(Version versRow : history.getVersions()) { @@ -101,20 +102,15 @@ j(document).ready(function() { - + - - + <% } %> - - - - -
<%= versRow.getVersionNumber() %><%= identifierPath[1] %><%= item.getID()==versRow.getItemID()?"*":""%><%= identifierPath[1] %><%= item.getID()==versRow.getItemID()?"":""%> <%=versRowPerson.getFullName() %> <%= versRow.getVersionDate() %><%= versRow.getSummary() %><%= versRow.getSummary() %> 
"/> " name="submit_cancel"/>
-

+ + "/> " name="submit_cancel"/>
" name="submit_delete" id="submit_delete"/> diff --git a/dspace/config/dspace.cfg b/dspace/config/dspace.cfg index a367e62cf8b1..dc67d1caa96d 100644 --- a/dspace/config/dspace.cfg +++ b/dspace/config/dspace.cfg @@ -1499,6 +1499,11 @@ google-metadata.enable = true # The value must match the name of a subfolder of dspace-jspui/src/main/webapp/layout # jspui.template.name = +##### Item Home Processor ##### + +plugin.sequence.org.dspace.plugin.ItemHomeProcessor = \ + org.dspace.app.webui.components.VersioningItemHome + ##### Upload File settings ##### # Where to temporarily store uploaded files