mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-17 06:53:09 +00:00
DS-1945 Add request_message to requestitem DB table
Also, refactored requestitem to be a dspace-api "model", moved all DB logic from XMLUI regarding this module to the dspace-api model. Add the requestitem.request_message to display in the contact-author form, so they can see what the original request message was.
This commit is contained in:
@@ -0,0 +1,152 @@
|
|||||||
|
package org.dspace.app.requestitem;
|
||||||
|
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
|
import org.dspace.core.Context;
|
||||||
|
import org.dspace.core.Utils;
|
||||||
|
import org.dspace.storage.rdbms.DatabaseManager;
|
||||||
|
import org.dspace.storage.rdbms.TableRow;
|
||||||
|
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Object representing an Item Request
|
||||||
|
*/
|
||||||
|
public class RequestItem {
|
||||||
|
private static Logger log = Logger.getLogger(RequestItem.class);
|
||||||
|
|
||||||
|
private int bitstreamId, itemID;
|
||||||
|
private String reqEmail;
|
||||||
|
private String reqName;
|
||||||
|
private String reqMessage;
|
||||||
|
private String token;
|
||||||
|
private boolean allfiles;
|
||||||
|
private Date decision_date;
|
||||||
|
private boolean accept_request;
|
||||||
|
|
||||||
|
public RequestItem(int itemID, int bitstreamId, String reqEmail, String reqName, String reqMessage, boolean allfiles){
|
||||||
|
this.itemID = itemID;
|
||||||
|
this.bitstreamId = bitstreamId;
|
||||||
|
this.reqEmail = reqEmail;
|
||||||
|
this.reqName = reqName;
|
||||||
|
this.reqMessage = reqMessage;
|
||||||
|
this.allfiles = allfiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
private RequestItem(TableRow record) {
|
||||||
|
this.itemID = record.getIntColumn("item_id");
|
||||||
|
this.bitstreamId = record.getIntColumn("bitstream_id");
|
||||||
|
this.token = record.getStringColumn("token");
|
||||||
|
this.reqEmail = record.getStringColumn("request_email");
|
||||||
|
this.reqName = record.getStringColumn("request_name");
|
||||||
|
this.reqMessage = record.getStringColumn("request_message");
|
||||||
|
this.allfiles = record.getBooleanColumn("allfiles");
|
||||||
|
this.decision_date = record.getDateColumn("decision_date");
|
||||||
|
this.accept_request = record.getBooleanColumn("accept_request");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RequestItem findByToken(Context context, String token) {
|
||||||
|
try {
|
||||||
|
TableRow requestItem = DatabaseManager.findByUnique(context, "requestitem", "token", token);
|
||||||
|
return new RequestItem(requestItem);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
log.error(e.getMessage());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save updates to the record. Only accept_request, and decision_date are set-able.
|
||||||
|
* @param context
|
||||||
|
*/
|
||||||
|
public void update(Context context) {
|
||||||
|
try {
|
||||||
|
TableRow record = DatabaseManager.findByUnique(context, "requestitem", "token", token);
|
||||||
|
|
||||||
|
record.setColumn("accept_request", accept_request);
|
||||||
|
record.setColumn("decision_date", decision_date);
|
||||||
|
|
||||||
|
DatabaseManager.update(context, record);
|
||||||
|
|
||||||
|
} catch (SQLException e) {
|
||||||
|
log.error(e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate a unique id of the request and put it into the DB
|
||||||
|
* @param context
|
||||||
|
* @return
|
||||||
|
* @throws java.sql.SQLException
|
||||||
|
*/
|
||||||
|
public String getNewToken(Context context) throws SQLException
|
||||||
|
{
|
||||||
|
TableRow record = DatabaseManager.create(context, "requestitem");
|
||||||
|
record.setColumn("token", Utils.generateHexKey());
|
||||||
|
record.setColumn("bitstream_id", bitstreamId);
|
||||||
|
record.setColumn("item_id", itemID);
|
||||||
|
record.setColumn("allfiles", allfiles);
|
||||||
|
record.setColumn("request_email", reqEmail);
|
||||||
|
record.setColumn("request_name", reqName);
|
||||||
|
record.setColumn("request_message", reqMessage);
|
||||||
|
record.setColumnNull("accept_request");
|
||||||
|
record.setColumn("request_date", new Date());
|
||||||
|
record.setColumnNull("decision_date");
|
||||||
|
record.setColumnNull("expires");
|
||||||
|
|
||||||
|
DatabaseManager.update(context, record);
|
||||||
|
|
||||||
|
if (log.isDebugEnabled())
|
||||||
|
{
|
||||||
|
log.debug("Created requestitem_token " + record.getIntColumn("requestitem_id")
|
||||||
|
+ " with token " + record.getStringColumn("token") + "\"");
|
||||||
|
}
|
||||||
|
return record.getStringColumn("token");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAllfiles() {
|
||||||
|
return allfiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getReqMessage() {
|
||||||
|
return reqMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getReqName() {
|
||||||
|
return reqName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getReqEmail() {
|
||||||
|
return reqEmail;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getToken() {
|
||||||
|
return token;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getItemID() {
|
||||||
|
return itemID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getBitstreamId() {
|
||||||
|
return bitstreamId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getDecision_date() {
|
||||||
|
return decision_date;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDecision_date(Date decision_date) {
|
||||||
|
this.decision_date = decision_date;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAccept_request() {
|
||||||
|
return accept_request;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAccept_request(boolean accept_request) {
|
||||||
|
this.accept_request = accept_request;
|
||||||
|
}
|
||||||
|
}
|
@@ -7,6 +7,7 @@ import org.apache.cocoon.util.HashUtil;
|
|||||||
import org.apache.excalibur.source.SourceValidity;
|
import org.apache.excalibur.source.SourceValidity;
|
||||||
import org.apache.excalibur.source.impl.validity.NOPValidity;
|
import org.apache.excalibur.source.impl.validity.NOPValidity;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
import org.dspace.app.requestitem.RequestItem;
|
||||||
import org.dspace.app.requestitem.RequestItemAuthor;
|
import org.dspace.app.requestitem.RequestItemAuthor;
|
||||||
import org.dspace.app.requestitem.RequestItemAuthorExtractor;
|
import org.dspace.app.requestitem.RequestItemAuthorExtractor;
|
||||||
import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer;
|
import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer;
|
||||||
@@ -21,8 +22,6 @@ import org.dspace.content.service.ItemService;
|
|||||||
import org.dspace.core.Context;
|
import org.dspace.core.Context;
|
||||||
import org.dspace.core.I18nUtil;
|
import org.dspace.core.I18nUtil;
|
||||||
import org.dspace.handle.HandleManager;
|
import org.dspace.handle.HandleManager;
|
||||||
import org.dspace.storage.rdbms.DatabaseManager;
|
|
||||||
import org.dspace.storage.rdbms.TableRow;
|
|
||||||
import org.dspace.utils.DSpace;
|
import org.dspace.utils.DSpace;
|
||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
|
|
||||||
@@ -105,10 +104,10 @@ public class ItemRequestContactAuthor extends AbstractDSpaceTransformer implemen
|
|||||||
Request request = ObjectModelHelper.getRequest(objectModel);
|
Request request = ObjectModelHelper.getRequest(objectModel);
|
||||||
Context context = ContextUtil.obtainContext(objectModel);
|
Context context = ContextUtil.obtainContext(objectModel);
|
||||||
|
|
||||||
TableRow requestItem = DatabaseManager.findByUnique(context,
|
String token = (String) request.getAttribute("token");
|
||||||
"requestitem", "token", (String) request.getAttribute("token"));
|
RequestItem requestItem = RequestItem.findByToken(context, token);
|
||||||
|
|
||||||
Item item = Item.find(context, requestItem.getIntColumn("item_id"));
|
Item item = Item.find(context, requestItem.getItemID());
|
||||||
|
|
||||||
RequestItemAuthor requestItemAuthor = new DSpace()
|
RequestItemAuthor requestItemAuthor = new DSpace()
|
||||||
.getServiceManager()
|
.getServiceManager()
|
||||||
@@ -122,9 +121,9 @@ public class ItemRequestContactAuthor extends AbstractDSpaceTransformer implemen
|
|||||||
HandleManager.getCanonicalForm(item.getHandle()),
|
HandleManager.getCanonicalForm(item.getHandle()),
|
||||||
requestItemAuthor.getFullName(),
|
requestItemAuthor.getFullName(),
|
||||||
requestItemAuthor.getEmail(),
|
requestItemAuthor.getEmail(),
|
||||||
requestItem.getStringColumn("request_name"),
|
requestItem.getReqName(),
|
||||||
requestItem.getStringColumn("request_email"),
|
requestItem.getReqEmail(),
|
||||||
"Not Yet Implemented"
|
requestItem.getReqMessage()
|
||||||
};
|
};
|
||||||
|
|
||||||
String subject = I18nUtil.getMessage("itemRequest.response.subject.contactAuthor");
|
String subject = I18nUtil.getMessage("itemRequest.response.subject.contactAuthor");
|
||||||
|
@@ -6,7 +6,7 @@ import org.apache.cocoon.environment.Request;
|
|||||||
import org.apache.cocoon.util.HashUtil;
|
import org.apache.cocoon.util.HashUtil;
|
||||||
import org.apache.excalibur.source.SourceValidity;
|
import org.apache.excalibur.source.SourceValidity;
|
||||||
import org.apache.excalibur.source.impl.validity.NOPValidity;
|
import org.apache.excalibur.source.impl.validity.NOPValidity;
|
||||||
import org.apache.log4j.Logger;
|
import org.dspace.app.requestitem.RequestItem;
|
||||||
import org.dspace.app.requestitem.RequestItemAuthor;
|
import org.dspace.app.requestitem.RequestItemAuthor;
|
||||||
import org.dspace.app.requestitem.RequestItemAuthorExtractor;
|
import org.dspace.app.requestitem.RequestItemAuthorExtractor;
|
||||||
import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer;
|
import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer;
|
||||||
@@ -19,8 +19,6 @@ import org.dspace.authorize.AuthorizeException;
|
|||||||
import org.dspace.content.Item;
|
import org.dspace.content.Item;
|
||||||
import org.dspace.core.Context;
|
import org.dspace.core.Context;
|
||||||
import org.dspace.core.I18nUtil;
|
import org.dspace.core.I18nUtil;
|
||||||
import org.dspace.storage.rdbms.DatabaseManager;
|
|
||||||
import org.dspace.storage.rdbms.TableRow;
|
|
||||||
import org.dspace.utils.DSpace;
|
import org.dspace.utils.DSpace;
|
||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
|
|
||||||
@@ -34,8 +32,6 @@ import java.text.MessageFormat;
|
|||||||
*/
|
*/
|
||||||
public class ItemRequestContactRequester extends AbstractDSpaceTransformer implements CacheableProcessingComponent
|
public class ItemRequestContactRequester extends AbstractDSpaceTransformer implements CacheableProcessingComponent
|
||||||
{
|
{
|
||||||
//private static Logger log = Logger.getLogger(ItemRequestContactRequester.class);
|
|
||||||
|
|
||||||
/** Language Strings */
|
/** Language Strings */
|
||||||
private static final Message T_title =
|
private static final Message T_title =
|
||||||
message("xmlui.ArtifactBrowser.ItemRequestContactRequester.title");
|
message("xmlui.ArtifactBrowser.ItemRequestContactRequester.title");
|
||||||
@@ -103,10 +99,10 @@ public class ItemRequestContactRequester extends AbstractDSpaceTransformer imple
|
|||||||
Request request = ObjectModelHelper.getRequest(objectModel);
|
Request request = ObjectModelHelper.getRequest(objectModel);
|
||||||
Context context = ContextUtil.obtainContext(objectModel);
|
Context context = ContextUtil.obtainContext(objectModel);
|
||||||
|
|
||||||
TableRow requestItem = DatabaseManager.findByUnique(context,
|
String token = (String) request.getAttribute("token");
|
||||||
"requestitem", "token", (String) request.getAttribute("token"));
|
RequestItem requestItem = RequestItem.findByToken(context, token);
|
||||||
|
|
||||||
Item item = Item.find(context, requestItem.getIntColumn("item_id"));
|
Item item = Item.find(context, requestItem.getItemID());
|
||||||
|
|
||||||
RequestItemAuthor requestItemAuthor = new DSpace()
|
RequestItemAuthor requestItemAuthor = new DSpace()
|
||||||
.getServiceManager()
|
.getServiceManager()
|
||||||
@@ -115,7 +111,7 @@ public class ItemRequestContactRequester extends AbstractDSpaceTransformer imple
|
|||||||
.getRequestItemAuthor(context, item);
|
.getRequestItemAuthor(context, item);
|
||||||
|
|
||||||
Object[] args = new String[]{
|
Object[] args = new String[]{
|
||||||
requestItem.getStringColumn("request_name"),
|
requestItem.getReqName(),
|
||||||
requestItemAuthor.getFullName(),
|
requestItemAuthor.getFullName(),
|
||||||
requestItemAuthor.getEmail()
|
requestItemAuthor.getEmail()
|
||||||
};
|
};
|
||||||
@@ -133,7 +129,7 @@ public class ItemRequestContactRequester extends AbstractDSpaceTransformer imple
|
|||||||
|
|
||||||
Text toEmail = form.addItem().addText("to");
|
Text toEmail = form.addItem().addText("to");
|
||||||
toEmail.setLabel(T_toEmail);
|
toEmail.setLabel(T_toEmail);
|
||||||
toEmail.setValue(requestItem.getStringColumn("request_email"));
|
toEmail.setValue(requestItem.getReqEmail());
|
||||||
toEmail.setDisabled(true);
|
toEmail.setDisabled(true);
|
||||||
|
|
||||||
Text subj = form.addItem().addText("subject");
|
Text subj = form.addItem().addText("subject");
|
||||||
|
@@ -15,6 +15,7 @@ import org.apache.cocoon.environment.Request;
|
|||||||
import org.apache.cocoon.environment.SourceResolver;
|
import org.apache.cocoon.environment.SourceResolver;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
import org.dspace.app.requestitem.RequestItem;
|
||||||
import org.dspace.app.requestitem.RequestItemAuthor;
|
import org.dspace.app.requestitem.RequestItemAuthor;
|
||||||
import org.dspace.app.requestitem.RequestItemAuthorExtractor;
|
import org.dspace.app.requestitem.RequestItemAuthorExtractor;
|
||||||
import org.dspace.app.xmlui.utils.ContextUtil;
|
import org.dspace.app.xmlui.utils.ContextUtil;
|
||||||
@@ -27,8 +28,6 @@ import org.dspace.core.Email;
|
|||||||
import org.dspace.core.I18nUtil;
|
import org.dspace.core.I18nUtil;
|
||||||
import org.dspace.handle.HandleManager;
|
import org.dspace.handle.HandleManager;
|
||||||
import org.dspace.storage.bitstore.BitstreamStorageManager;
|
import org.dspace.storage.bitstore.BitstreamStorageManager;
|
||||||
import org.dspace.storage.rdbms.DatabaseManager;
|
|
||||||
import org.dspace.storage.rdbms.TableRow;
|
|
||||||
import org.dspace.utils.DSpace;
|
import org.dspace.utils.DSpace;
|
||||||
|
|
||||||
import javax.mail.MessagingException;
|
import javax.mail.MessagingException;
|
||||||
@@ -66,10 +65,10 @@ public class ItemRequestResponseAction extends AbstractAction
|
|||||||
|
|
||||||
Context context = ContextUtil.obtainContext(objectModel);
|
Context context = ContextUtil.obtainContext(objectModel);
|
||||||
request.setAttribute("token", token);
|
request.setAttribute("token", token);
|
||||||
|
|
||||||
TableRow requestItem = DatabaseManager.findByUnique(context, "requestitem", "token", token);
|
RequestItem requestItem = RequestItem.findByToken(context, token);
|
||||||
String title;
|
String title;
|
||||||
Item item = Item.find(context, requestItem.getIntColumn("item_id"));
|
Item item = Item.find(context, requestItem.getItemID());
|
||||||
DCValue[] titleDC = item.getDC("title", null, Item.ANY);
|
DCValue[] titleDC = item.getDC("title", null, Item.ANY);
|
||||||
if (titleDC != null || titleDC.length > 0)
|
if (titleDC != null || titleDC.length > 0)
|
||||||
title=titleDC[0].value;
|
title=titleDC[0].value;
|
||||||
@@ -149,7 +148,7 @@ public class ItemRequestResponseAction extends AbstractAction
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
private boolean processOpenAccessRequest(Context context,Request request, TableRow requestItem,Item item,String title) throws SQLException, IOException, MessagingException {
|
private boolean processOpenAccessRequest(Context context,Request request, RequestItem requestItem,Item item,String title) throws SQLException, IOException, MessagingException {
|
||||||
String name = request.getParameter("name");
|
String name = request.getParameter("name");
|
||||||
String mail = request.getParameter("email");
|
String mail = request.getParameter("email");
|
||||||
|
|
||||||
@@ -163,9 +162,9 @@ public class ItemRequestResponseAction extends AbstractAction
|
|||||||
Email email = Email.getEmail(I18nUtil.getEmailFilename(context.getCurrentLocale(), "request_item.admin"));
|
Email email = Email.getEmail(I18nUtil.getEmailFilename(context.getCurrentLocale(), "request_item.admin"));
|
||||||
email.addRecipient(requestItemAuthor.getEmail());
|
email.addRecipient(requestItemAuthor.getEmail());
|
||||||
|
|
||||||
email.addArgument(Bitstream.find(context,requestItem.getIntColumn("bitstream_id")).getName());
|
email.addArgument(Bitstream.find(context,requestItem.getBitstreamId()).getName());
|
||||||
email.addArgument(HandleManager.getCanonicalForm(item.getHandle()));
|
email.addArgument(HandleManager.getCanonicalForm(item.getHandle()));
|
||||||
email.addArgument(requestItem.getStringColumn("token"));
|
email.addArgument(requestItem.getToken());
|
||||||
email.addArgument(name);
|
email.addArgument(name);
|
||||||
email.addArgument(mail);
|
email.addArgument(mail);
|
||||||
|
|
||||||
@@ -175,17 +174,17 @@ public class ItemRequestResponseAction extends AbstractAction
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processSendDocuments(Context context,Request request, TableRow requestItem,Item item,String title) throws SQLException, MessagingException, IOException {
|
private void processSendDocuments(Context context,Request request, RequestItem requestItem,Item item,String title) throws SQLException, MessagingException, IOException {
|
||||||
String message = request.getParameter("message");
|
String message = request.getParameter("message");
|
||||||
String subject = request.getParameter("subject");
|
String subject = request.getParameter("subject");
|
||||||
|
|
||||||
Email email = new Email();
|
Email email = new Email();
|
||||||
email.setSubject(subject);
|
email.setSubject(subject);
|
||||||
email.setContent("{0}");
|
email.setContent("{0}");
|
||||||
email.addRecipient(requestItem.getStringColumn("request_email"));
|
email.addRecipient(requestItem.getReqEmail());
|
||||||
email.addArgument(message);
|
email.addArgument(message);
|
||||||
|
|
||||||
if (requestItem.getBooleanColumn("allfiles")){
|
if (requestItem.isAllfiles()){
|
||||||
Bundle[] bundles = item.getBundles("ORIGINAL");
|
Bundle[] bundles = item.getBundles("ORIGINAL");
|
||||||
for (int i = 0; i < bundles.length; i++){
|
for (int i = 0; i < bundles.length; i++){
|
||||||
Bitstream[] bitstreams = bundles[i].getBitstreams();
|
Bitstream[] bitstreams = bundles[i].getBitstreams();
|
||||||
@@ -196,30 +195,31 @@ public class ItemRequestResponseAction extends AbstractAction
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Bitstream bit = Bitstream.find(context,requestItem.getIntColumn("bitstream_id"));
|
Bitstream bit = Bitstream.find(context,requestItem.getBitstreamId());
|
||||||
email.addAttachment(BitstreamStorageManager.retrieve(context, requestItem.getIntColumn("bitstream_id")), bit.getName(), bit.getFormat().getMIMEType());
|
email.addAttachment(BitstreamStorageManager.retrieve(context, requestItem.getBitstreamId()), bit.getName(), bit.getFormat().getMIMEType());
|
||||||
}
|
}
|
||||||
|
|
||||||
email.send();
|
email.send();
|
||||||
requestItem.setColumn("decision_date",new Date());
|
|
||||||
requestItem.setColumn("accept_request",true);
|
requestItem.setDecision_date(new Date());
|
||||||
DatabaseManager.update(context, requestItem);
|
requestItem.setAccept_request(true);
|
||||||
|
requestItem.update(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processDeny(Context context,Request request, TableRow requestItem,Item item,String title) throws SQLException, IOException, MessagingException {
|
private void processDeny(Context context,Request request, RequestItem requestItem,Item item,String title) throws SQLException, IOException, MessagingException {
|
||||||
String message = request.getParameter("message");
|
String message = request.getParameter("message");
|
||||||
String subject = request.getParameter("subject");
|
String subject = request.getParameter("subject");
|
||||||
|
|
||||||
Email email = new Email();
|
Email email = new Email();
|
||||||
email.setSubject(subject);
|
email.setSubject(subject);
|
||||||
email.setContent("{0}");
|
email.setContent("{0}");
|
||||||
email.addRecipient(requestItem.getStringColumn("request_email"));
|
email.addRecipient(requestItem.getReqEmail());
|
||||||
email.addArgument(message);
|
email.addArgument(message);
|
||||||
email.send();
|
email.send();
|
||||||
|
|
||||||
requestItem.setColumn("decision_date",new Date());
|
requestItem.setDecision_date(new Date());
|
||||||
requestItem.setColumn("accept_request",false);
|
requestItem.setAccept_request(false);
|
||||||
DatabaseManager.update(context, requestItem);
|
requestItem.update(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -230,14 +230,14 @@ public class ItemRequestResponseAction extends AbstractAction
|
|||||||
* @throws IOException
|
* @throws IOException
|
||||||
* @throws MessagingException
|
* @throws MessagingException
|
||||||
*/
|
*/
|
||||||
private void processContactRequester(Request request, TableRow requestItem) throws IOException, MessagingException {
|
private void processContactRequester(Request request, RequestItem requestItem) throws IOException, MessagingException {
|
||||||
String message = request.getParameter("message");
|
String message = request.getParameter("message");
|
||||||
String subject = request.getParameter("subject");
|
String subject = request.getParameter("subject");
|
||||||
|
|
||||||
Email email = new Email();
|
Email email = new Email();
|
||||||
email.setSubject(subject);
|
email.setSubject(subject);
|
||||||
email.setContent("{0}");
|
email.setContent("{0}");
|
||||||
email.addRecipient(requestItem.getStringColumn("request_email"));
|
email.addRecipient(requestItem.getReqEmail());
|
||||||
email.addArgument(message);
|
email.addArgument(message);
|
||||||
|
|
||||||
email.send();
|
email.send();
|
||||||
|
@@ -18,6 +18,7 @@ import org.apache.cocoon.environment.Request;
|
|||||||
import org.apache.cocoon.util.HashUtil;
|
import org.apache.cocoon.util.HashUtil;
|
||||||
import org.apache.excalibur.source.SourceValidity;
|
import org.apache.excalibur.source.SourceValidity;
|
||||||
import org.apache.excalibur.source.impl.validity.NOPValidity;
|
import org.apache.excalibur.source.impl.validity.NOPValidity;
|
||||||
|
import org.dspace.app.requestitem.RequestItem;
|
||||||
import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer;
|
import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer;
|
||||||
import org.dspace.app.xmlui.utils.ContextUtil;
|
import org.dspace.app.xmlui.utils.ContextUtil;
|
||||||
import org.dspace.app.xmlui.utils.HandleUtil;
|
import org.dspace.app.xmlui.utils.HandleUtil;
|
||||||
@@ -39,8 +40,6 @@ import org.dspace.core.Context;
|
|||||||
import org.dspace.core.I18nUtil;
|
import org.dspace.core.I18nUtil;
|
||||||
import org.dspace.eperson.EPerson;
|
import org.dspace.eperson.EPerson;
|
||||||
import org.dspace.handle.HandleManager;
|
import org.dspace.handle.HandleManager;
|
||||||
import org.dspace.storage.rdbms.DatabaseManager;
|
|
||||||
import org.dspace.storage.rdbms.TableRow;
|
|
||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -116,10 +115,11 @@ public class ItemRequestResponseFalseForm extends AbstractDSpaceTransformer impl
|
|||||||
Request request = ObjectModelHelper.getRequest(objectModel);
|
Request request = ObjectModelHelper.getRequest(objectModel);
|
||||||
Context context = ContextUtil.obtainContext(objectModel);
|
Context context = ContextUtil.obtainContext(objectModel);
|
||||||
|
|
||||||
TableRow requestItem = DatabaseManager.findByUnique(context,
|
String token = (String) request.getAttribute("token");
|
||||||
"requestitem", "token", (String) request.getAttribute("token"));
|
RequestItem requestItem = RequestItem.findByToken(context, token);
|
||||||
|
|
||||||
String title;
|
String title;
|
||||||
Item item = Item.find(context, requestItem.getIntColumn("item_id"));
|
Item item = Item.find(context, requestItem.getItemID());
|
||||||
DCValue[] titleDC = item.getDC("title", null, Item.ANY);
|
DCValue[] titleDC = item.getDC("title", null, Item.ANY);
|
||||||
if (titleDC != null || titleDC.length > 0)
|
if (titleDC != null || titleDC.length > 0)
|
||||||
title = titleDC[0].value;
|
title = titleDC[0].value;
|
||||||
@@ -129,7 +129,7 @@ public class ItemRequestResponseFalseForm extends AbstractDSpaceTransformer impl
|
|||||||
EPerson submitter = item.getSubmitter();
|
EPerson submitter = item.getSubmitter();
|
||||||
|
|
||||||
Object[] args = new String[]{
|
Object[] args = new String[]{
|
||||||
requestItem.getStringColumn("request_name"),
|
requestItem.getReqName(),
|
||||||
HandleManager.getCanonicalForm(item.getHandle()), // User
|
HandleManager.getCanonicalForm(item.getHandle()), // User
|
||||||
title, // request item title
|
title, // request item title
|
||||||
submitter.getFullName(), // # submmiter name
|
submitter.getFullName(), // # submmiter name
|
||||||
|
@@ -18,6 +18,7 @@ import org.apache.cocoon.environment.Request;
|
|||||||
import org.apache.cocoon.util.HashUtil;
|
import org.apache.cocoon.util.HashUtil;
|
||||||
import org.apache.excalibur.source.SourceValidity;
|
import org.apache.excalibur.source.SourceValidity;
|
||||||
import org.apache.excalibur.source.impl.validity.NOPValidity;
|
import org.apache.excalibur.source.impl.validity.NOPValidity;
|
||||||
|
import org.dspace.app.requestitem.RequestItem;
|
||||||
import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer;
|
import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer;
|
||||||
import org.dspace.app.xmlui.utils.ContextUtil;
|
import org.dspace.app.xmlui.utils.ContextUtil;
|
||||||
import org.dspace.app.xmlui.utils.UIException;
|
import org.dspace.app.xmlui.utils.UIException;
|
||||||
@@ -113,10 +114,11 @@ public class ItemRequestResponseTrueForm extends AbstractDSpaceTransformer imple
|
|||||||
Request request = ObjectModelHelper.getRequest(objectModel);
|
Request request = ObjectModelHelper.getRequest(objectModel);
|
||||||
Context context = ContextUtil.obtainContext(objectModel);
|
Context context = ContextUtil.obtainContext(objectModel);
|
||||||
|
|
||||||
TableRow requestItem = DatabaseManager.findByUnique(context,
|
String token = (String) request.getAttribute("token");
|
||||||
"requestitem", "token", (String) request.getAttribute("token"));
|
RequestItem requestItem = RequestItem.findByToken(context, token);
|
||||||
|
|
||||||
String title;
|
String title;
|
||||||
Item item = Item.find(context, requestItem.getIntColumn("item_id"));
|
Item item = Item.find(context, requestItem.getItemID());
|
||||||
DCValue[] titleDC = item.getDC("title", null, Item.ANY);
|
DCValue[] titleDC = item.getDC("title", null, Item.ANY);
|
||||||
if (titleDC != null || titleDC.length > 0)
|
if (titleDC != null || titleDC.length > 0)
|
||||||
title = titleDC[0].value;
|
title = titleDC[0].value;
|
||||||
@@ -126,7 +128,7 @@ public class ItemRequestResponseTrueForm extends AbstractDSpaceTransformer imple
|
|||||||
EPerson submitter = item.getSubmitter();
|
EPerson submitter = item.getSubmitter();
|
||||||
|
|
||||||
Object[] args = new String[]{
|
Object[] args = new String[]{
|
||||||
requestItem.getStringColumn("request_name"),
|
requestItem.getReqName(),
|
||||||
HandleManager.getCanonicalForm(item.getHandle()), // User
|
HandleManager.getCanonicalForm(item.getHandle()), // User
|
||||||
title, // request item title
|
title, // request item title
|
||||||
submitter.getFullName(), // # submmiter name
|
submitter.getFullName(), // # submmiter name
|
||||||
|
@@ -20,6 +20,7 @@ import org.apache.cocoon.environment.Request;
|
|||||||
import org.apache.cocoon.environment.SourceResolver;
|
import org.apache.cocoon.environment.SourceResolver;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
import org.dspace.app.requestitem.RequestItem;
|
||||||
import org.dspace.app.requestitem.RequestItemAuthor;
|
import org.dspace.app.requestitem.RequestItemAuthor;
|
||||||
import org.dspace.app.requestitem.RequestItemAuthorExtractor;
|
import org.dspace.app.requestitem.RequestItemAuthorExtractor;
|
||||||
import org.dspace.app.xmlui.utils.ContextUtil;
|
import org.dspace.app.xmlui.utils.ContextUtil;
|
||||||
@@ -111,7 +112,9 @@ public class SendItemRequestAction extends AbstractAction
|
|||||||
.getServiceByName(RequestItemAuthorExtractor.class.getName(),
|
.getServiceByName(RequestItemAuthorExtractor.class.getName(),
|
||||||
RequestItemAuthorExtractor.class)
|
RequestItemAuthorExtractor.class)
|
||||||
.getRequestItemAuthor(context, item);
|
.getRequestItemAuthor(context, item);
|
||||||
|
|
||||||
|
RequestItem requestItem = new RequestItem(item.getID(), Integer.parseInt(bitstreamId), requesterEmail, requesterName, message, Boolean.getBoolean(allFiles));
|
||||||
|
|
||||||
// All data is there, send the email
|
// All data is there, send the email
|
||||||
Email email = Email.getEmail(I18nUtil.getEmailFilename(context.getCurrentLocale(), "request_item.author"));
|
Email email = Email.getEmail(I18nUtil.getEmailFilename(context.getCurrentLocale(), "request_item.author"));
|
||||||
email.addRecipient(requestItemAuthor.getEmail());
|
email.addRecipient(requestItemAuthor.getEmail());
|
||||||
@@ -122,7 +125,7 @@ public class SendItemRequestAction extends AbstractAction
|
|||||||
email.addArgument(HandleManager.getCanonicalForm(item.getHandle()));
|
email.addArgument(HandleManager.getCanonicalForm(item.getHandle()));
|
||||||
email.addArgument(title); // request item title
|
email.addArgument(title); // request item title
|
||||||
email.addArgument(message); // message
|
email.addArgument(message); // message
|
||||||
email.addArgument(getLinkTokenEmail(context,request, bitstreamId, item.getID(), requesterEmail, requesterName, Boolean.parseBoolean(allFiles)));
|
email.addArgument(getLinkTokenEmail(context,requestItem));
|
||||||
email.addArgument(requestItemAuthor.getFullName()); // corresponding author name
|
email.addArgument(requestItemAuthor.getFullName()); // corresponding author name
|
||||||
email.addArgument(requestItemAuthor.getEmail()); // corresponding author email
|
email.addArgument(requestItemAuthor.getEmail()); // corresponding author email
|
||||||
email.addArgument(ConfigurationManager.getProperty("dspace.name"));
|
email.addArgument(ConfigurationManager.getProperty("dspace.name"));
|
||||||
@@ -137,62 +140,22 @@ public class SendItemRequestAction extends AbstractAction
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the link to the author in RequestLink email.
|
* Get the link to the author in RequestLink email.
|
||||||
*
|
|
||||||
* @param email
|
|
||||||
* The email address to mail to
|
|
||||||
*
|
|
||||||
* @exception SQLExeption
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
protected String getLinkTokenEmail(Context context,Request request, String bitstreamId
|
|
||||||
, int itemID, String reqEmail, String reqName, boolean allfiles)
|
|
||||||
throws SQLException
|
|
||||||
{
|
|
||||||
String base = ConfigurationManager.getProperty("dspace.url");
|
|
||||||
|
|
||||||
request.getPathInfo();
|
|
||||||
String specialLink = (new StringBuffer()).append(base).append(
|
|
||||||
base.endsWith("/") ? "" : "/").append(
|
|
||||||
"itemRequestResponse/").append(getNewToken(context, Integer.parseInt(bitstreamId), itemID, reqEmail, reqName, allfiles))
|
|
||||||
.toString()+"/";
|
|
||||||
|
|
||||||
return specialLink;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Generate a unique id of the request and put it into the ddbb
|
|
||||||
* @param context
|
* @param context
|
||||||
* @param bitstreamId
|
* @param requestItem
|
||||||
* @param itemID
|
|
||||||
* @param reqEmail
|
|
||||||
* @param reqName
|
|
||||||
* @param allfiles
|
|
||||||
* @return
|
* @return
|
||||||
* @throws SQLException
|
* @throws SQLException
|
||||||
*/
|
*/
|
||||||
protected String getNewToken(Context context, int bitstreamId, int itemID, String reqEmail, String reqName, boolean allfiles) throws SQLException
|
protected String getLinkTokenEmail(Context context, RequestItem requestItem)
|
||||||
|
throws SQLException
|
||||||
{
|
{
|
||||||
TableRow rd = DatabaseManager.create(context, "requestitem");
|
String base = ConfigurationManager.getProperty("dspace.url");
|
||||||
rd.setColumn("token", Utils.generateHexKey());
|
|
||||||
rd.setColumn("bitstream_id", bitstreamId);
|
|
||||||
rd.setColumn("item_id",itemID);
|
|
||||||
rd.setColumn("allfiles", allfiles);
|
|
||||||
rd.setColumn("request_email", reqEmail);
|
|
||||||
rd.setColumn("request_name", reqName);
|
|
||||||
rd.setColumnNull("accept_request");
|
|
||||||
rd.setColumn("request_date", new Date());
|
|
||||||
rd.setColumnNull("decision_date");
|
|
||||||
rd.setColumnNull("expires");
|
|
||||||
|
|
||||||
DatabaseManager.update(context, rd);
|
String specialLink = (new StringBuffer()).append(base).append(
|
||||||
|
base.endsWith("/") ? "" : "/").append(
|
||||||
|
"itemRequestResponse/").append(requestItem.getNewToken(context))
|
||||||
|
.toString()+"/";
|
||||||
|
|
||||||
if (log.isDebugEnabled())
|
return specialLink;
|
||||||
{
|
|
||||||
log.debug("Created requestitem_token "
|
|
||||||
+ rd.getIntColumn("requestitem_id")
|
|
||||||
+ " with token " + rd.getStringColumn("token")
|
|
||||||
+ "\"");
|
|
||||||
}
|
|
||||||
return rd.getStringColumn("token");
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -788,6 +788,7 @@ CREATE TABLE requestitem
|
|||||||
allfiles NUMBER(1),
|
allfiles NUMBER(1),
|
||||||
request_email VARCHAR2(64),
|
request_email VARCHAR2(64),
|
||||||
request_name VARCHAR2(64),
|
request_name VARCHAR2(64),
|
||||||
|
request_message TEXT,
|
||||||
request_date TIMESTAMP,
|
request_date TIMESTAMP,
|
||||||
accept_request NUMBER(1),
|
accept_request NUMBER(1),
|
||||||
decision_date TIMESTAMP,
|
decision_date TIMESTAMP,
|
||||||
|
12
dspace/etc/oracle/database_schema_4-5.sql
Normal file
12
dspace/etc/oracle/database_schema_4-5.sql
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
-- http://www.dspace.org/license/
|
||||||
|
-- SQL commands to upgrade the ORACLE database schema from DSpace 4.x to 5.x
|
||||||
|
-- DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST.
|
||||||
|
START TRANSACTION;
|
||||||
|
|
||||||
|
------------------------------------------------------
|
||||||
|
-- DS-1945 RequestItem Helpdesk, store request message
|
||||||
|
------------------------------------------------------
|
||||||
|
ALTER TABLE requestitem ADD request_message TEXT;
|
||||||
|
|
||||||
|
|
||||||
|
COMMIT;
|
@@ -836,6 +836,7 @@ CREATE TABLE requestitem
|
|||||||
allfiles bool,
|
allfiles bool,
|
||||||
request_email varchar(64),
|
request_email varchar(64),
|
||||||
request_name varchar(64),
|
request_name varchar(64),
|
||||||
|
request_message TEXT,
|
||||||
request_date timestamp,
|
request_date timestamp,
|
||||||
accept_request bool,
|
accept_request bool,
|
||||||
decision_date timestamp,
|
decision_date timestamp,
|
||||||
|
12
dspace/etc/postgres/database_schema_4_5.sql
Normal file
12
dspace/etc/postgres/database_schema_4_5.sql
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
-- http://www.dspace.org/license/
|
||||||
|
-- SQL commands to upgrade the Postgres database schema from DSpace 4.x to 5.x
|
||||||
|
-- DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST.
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
------------------------------------------------------
|
||||||
|
-- DS-1945 RequestItem Helpdesk, store request message
|
||||||
|
------------------------------------------------------
|
||||||
|
ALTER TABLE requestitem ADD request_message TEXT;
|
||||||
|
|
||||||
|
|
||||||
|
COMMIT;
|
Reference in New Issue
Block a user