Author: sletellier Date: 2011-07-15 13:54:49 +0200 (Fri, 15 Jul 2011) New Revision: 122 Url: http://chorem.org/repositories/revision/vradi/122 Log: - Implement invitation responce and invitation responce validation - Remove displaytag.properties Added: trunk/vradi-web/src/main/java/org/chorem/vradi/InvitationResult.java trunk/vradi-web/src/main/java/org/chorem/vradi/actions/ShowInvitationResultAction.java trunk/vradi-web/src/main/webapp/WEB-INF/jsp/invitationResult.jsp trunk/vradi-web/src/main/webapp/WEB-INF/jsp/invitationResultConfirm.jsp trunk/vradi-web/src/main/webapp/WEB-INF/jsp/showInvitationResult.jsp Removed: trunk/vradi-web/src/main/resources/displaytag.properties Modified: trunk/vradi-web/src/main/java/org/chorem/vradi/EmailType.java trunk/vradi-web/src/main/java/org/chorem/vradi/VradiWebHelper.java trunk/vradi-web/src/main/java/org/chorem/vradi/actions/OptionsAction.java trunk/vradi-web/src/main/java/org/chorem/vradi/actions/SearchAction.java trunk/vradi-web/src/main/java/org/chorem/vradi/actions/SendInvitationAction.java trunk/vradi-web/src/main/java/org/chorem/vradi/actions/ShowInvitationAction.java trunk/vradi-web/src/main/resources/i18n/vradi-web_en_GB.properties trunk/vradi-web/src/main/resources/i18n/vradi-web_fr_FR.properties trunk/vradi-web/src/main/resources/struts.xml trunk/vradi-web/src/main/webapp/WEB-INF/jsp/formNote.jsp trunk/vradi-web/src/main/webapp/WEB-INF/jsp/seekPartners.jsp trunk/vradi-web/src/main/webapp/WEB-INF/jsp/showInvitation.jsp Modified: trunk/vradi-web/src/main/java/org/chorem/vradi/EmailType.java =================================================================== --- trunk/vradi-web/src/main/java/org/chorem/vradi/EmailType.java 2011-07-13 15:27:59 UTC (rev 121) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/EmailType.java 2011-07-15 11:54:49 UTC (rev 122) @@ -15,20 +15,28 @@ public enum EmailType { - THESAURUS_NEW_CHILD(n_("vradi.template.thesaurus.new.child")), - THESAURUS_RENAMED(n_("vradi.template.thesaurus.renamed")), - WEBHARVEST(n_("vradi.template.webHarvest")), - RSS(n_("vradi.template.rss")), - REQUEST(n_("vradi.template.request")); + OPTION_THESAURUS_NEW_CHILD(n_("vradi.template.thesaurus.new.child")), + OPTION_THESAURUS_RENAMED(n_("vradi.template.thesaurus.renamed")), + OPTION_WEBHARVEST(n_("vradi.template.webHarvest")), + OPTION_RSS(n_("vradi.template.rss")), + OPTION_REQUEST(n_("vradi.template.request")), + INVITATION_ACCEPT(n_("vradi.invitation.accept")), + INVITATION_REJECT(n_("vradi.invitation.reject")), + INVITATION_CONFIRMATION_ACCEPT(n_("vradi.invitation.result.accept")), + INVITATION_CONFIRMATION_REJECT(n_("vradi.invitation.result.reject")); protected static final Log log = LogFactory.getLog(EmailType.class); public static final String TITLE_PREFIX = ".title"; - private String key; + protected String key; EmailType(String key) { this.key = key; } + public String getKey() { + return key; + } + public boolean sendEmailToAdmins(VradiUser user, String comment, String... args) { List<String> adminEmail = VradiWebConfig.getAdminEmail(); return sendEmail(adminEmail, user, comment, args); Added: trunk/vradi-web/src/main/java/org/chorem/vradi/InvitationResult.java =================================================================== --- trunk/vradi-web/src/main/java/org/chorem/vradi/InvitationResult.java (rev 0) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/InvitationResult.java 2011-07-15 11:54:49 UTC (rev 122) @@ -0,0 +1,73 @@ +package org.chorem.vradi; + +import org.chorem.vradi.entities.VradiUser; + +import java.util.Collection; + +import static org.nuiton.i18n.I18n._; + +public enum InvitationResult { + ACCEPT("Accept", EmailType.INVITATION_ACCEPT, EmailType.INVITATION_CONFIRMATION_ACCEPT), + + // Same mails are send for both + REJECT("Reject", EmailType.INVITATION_REJECT, EmailType.INVITATION_CONFIRMATION_REJECT), + NO_MORE("NoMoreReceived", "vradi.invitation.nomore", EmailType.INVITATION_REJECT, EmailType.INVITATION_CONFIRMATION_REJECT); + + public static final String BUTTON_PREFIX = ".button"; + public static final String CONTENT_PREFIX = ".content"; + public static final String TITLE_PREFIX = ".content.title"; + public static final String CONFIRMATION_CONTENT_PREFIX = ".confirmation.content"; + public static final String CONFIRMATION_TITLE_PREFIX = ".confirmation.content.title"; + + protected String key; + protected String i18nKey; + protected EmailType emailType; + protected EmailType confirmationEmailType; + + InvitationResult(String key, EmailType emailType, EmailType confirmationEmailType) { + this(key, emailType.getKey(), emailType, confirmationEmailType); + } + + InvitationResult(String key, String i18nKey, EmailType emailType, EmailType confirmationEmailType) { + this.key = key; + this.i18nKey = i18nKey; + this.emailType = emailType; + this.confirmationEmailType = confirmationEmailType; + } + + public String getKey() { + return key; + } + + public String getI18nKey() { + return i18nKey; + } + + public String getTitle() { + return _(getI18nKey() + TITLE_PREFIX); + } + + public String getConfirmationTitle() { + return _(getI18nKey() + CONFIRMATION_TITLE_PREFIX); + } + + public String getContent() { + return _(getI18nKey() + CONTENT_PREFIX); + } + + public String getConfirmationContent() { + return _(getI18nKey() + CONFIRMATION_CONTENT_PREFIX); + } + + public String getButtonLabel() { + return _(getI18nKey() + BUTTON_PREFIX); + } + + public boolean sendEmail(Collection<String> recipients, VradiUser user, String comment, String... args) { + return emailType.sendEmail(recipients, user, comment, args); + } + + public boolean sendConfirmEmail(Collection<String> recipients, VradiUser user, String comment, String... args) { + return confirmationEmailType.sendEmail(recipients, user, comment, args); + } +} \ No newline at end of file Modified: trunk/vradi-web/src/main/java/org/chorem/vradi/VradiWebHelper.java =================================================================== --- trunk/vradi-web/src/main/java/org/chorem/vradi/VradiWebHelper.java 2011-07-13 15:27:59 UTC (rev 121) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/VradiWebHelper.java 2011-07-15 11:54:49 UTC (rev 122) @@ -5,9 +5,6 @@ import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.Date; -import java.util.Set; - -import freemarker.template.SimpleDate; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; @@ -24,6 +21,7 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(VradiWebHelper.class); + public static final String SEPARATOR = "@§@"; public static String escapeSciptBalises(String txt) { @@ -56,6 +54,20 @@ return result; } + public static String encodeAndGetUrl(String action, String... args) throws IOException { + + String info = StringUtils.join(args, SEPARATOR); + + String param = encode(info); + String url = String.format("%s/%s.action?p=%s", + VradiWebConfig.getVradiWebServerUrl(), action, param); + if (url.length() > 2000) { + log.error(String.format("Url forged for invitation is to long for some navigator '%s'", url)); + } + + return url; + } + /** * Methode inverse de {@link #encode(java.lang.String). * @@ -77,6 +89,11 @@ return result; } + public static String[] decodeAndGetInfos(String p, int i) throws IOException { + String datas = decode(p); + return datas.split(SEPARATOR, i); + } + /** * Converti le rst dans le format demande * @param resultType Modified: trunk/vradi-web/src/main/java/org/chorem/vradi/actions/OptionsAction.java =================================================================== --- trunk/vradi-web/src/main/java/org/chorem/vradi/actions/OptionsAction.java 2011-07-13 15:27:59 UTC (rev 121) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/actions/OptionsAction.java 2011-07-15 11:54:49 UTC (rev 122) @@ -83,29 +83,28 @@ boolean sent = true; if (!StringUtils.isEmpty(thesaurusNewChildName)) { // User propose new thesaurus child - sent &= EmailType.THESAURUS_NEW_CHILD.sendEmailToAdmins(getUser(), comment, thesaurusPath, thesaurusNewChildName); + sent &= EmailType.OPTION_THESAURUS_NEW_CHILD.sendEmailToAdmins(getUser(), comment, thesaurusPath, thesaurusNewChildName); } if (!StringUtils.isEmpty(thesaurusRenamed)) { // User propose to rename thesaurus - sent &= EmailType.THESAURUS_RENAMED.sendEmailToAdmins(getUser(), comment, thesaurusPath, thesaurusName, thesaurusRenamed); + sent &= EmailType.OPTION_THESAURUS_RENAMED.sendEmailToAdmins(getUser(), comment, thesaurusPath, thesaurusName, thesaurusRenamed); } if (webHarvestScript != null) { // Upload file String uri = getVradiSession().getFileService().uploadWebHarvestScript(webHarvestScript); // User propose to add a webharvest script - sent &= EmailType.WEBHARVEST.sendEmailToAdmins(getUser(), comment, uri); + sent &= EmailType.OPTION_WEBHARVEST.sendEmailToAdmins(getUser(), comment, uri); } if (!StringUtils.isEmpty(rssUrl)) { // User propose to add an rss - sent &= EmailType.RSS.sendEmailToAdmins(getUser(), comment, rssUrl); + sent &= EmailType.OPTION_RSS.sendEmailToAdmins(getUser(), comment, rssUrl); } if (sent) { return SUCCESS; - } else { - return ERROR; } + return ERROR; } } Modified: trunk/vradi-web/src/main/java/org/chorem/vradi/actions/SearchAction.java =================================================================== --- trunk/vradi-web/src/main/java/org/chorem/vradi/actions/SearchAction.java 2011-07-13 15:27:59 UTC (rev 121) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/actions/SearchAction.java 2011-07-15 11:54:49 UTC (rev 122) @@ -1,20 +1,15 @@ package org.chorem.vradi.actions; -import com.opensymphony.xwork2.ActionContext; import org.apache.commons.lang.StringUtils; -import org.apache.struts2.interceptor.ServletRequestAware; -import org.chorem.vradi.VradiSession; import org.chorem.vradi.entities.Query; import org.chorem.vradi.entities.VradiUser; -import javax.servlet.http.HttpServletRequest; - /** * Search action * * @author sletellier */ -public class SearchAction extends VradiBaseAction implements ServletRequestAware { +public class SearchAction extends VradiBaseAction { private static final long serialVersionUID = -3735250067223062719L; @@ -23,7 +18,6 @@ protected int nbForms = DEFAULT_NB_FORMS; protected String query; protected String queryName; - protected HttpServletRequest request; protected String selectedQuery; protected boolean queryActive; protected boolean saveQuery; @@ -37,12 +31,12 @@ } public String getSelectedQuery() { - selectedQuery = VradiSession.getVradiSession(request).getSelectedRequest(); + selectedQuery = getVradiSession().getSelectedRequest(); return selectedQuery; } public void setSelectedQuery(String selectedQuery) { - VradiSession.getVradiSession(request).setSelectedRequest(selectedQuery); + getVradiSession().setSelectedRequest(selectedQuery); this.selectedQuery = selectedQuery; } @@ -74,11 +68,6 @@ return queryActive; } - @Override - public void setServletRequest(HttpServletRequest request) { - this.request = request; - } - public String refreshForm() { String selectedQuery = getSelectedQuery(); if (!StringUtils.isEmpty(selectedQuery)) { Modified: trunk/vradi-web/src/main/java/org/chorem/vradi/actions/SendInvitationAction.java =================================================================== --- trunk/vradi-web/src/main/java/org/chorem/vradi/actions/SendInvitationAction.java 2011-07-13 15:27:59 UTC (rev 121) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/actions/SendInvitationAction.java 2011-07-15 11:54:49 UTC (rev 122) @@ -30,6 +30,7 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(SendInvitationAction.class); + public static final String SHOW_INVITATION_ACTION = "showInvitation"; static public SendInvitationAction getAction() { return (SendInvitationAction)ActionContext.getContext().get(CONTEXT_ACTION_KEY); @@ -103,7 +104,6 @@ */ @Override public String execute() throws Exception { - String result = SUCCESS; WikittyProxy proxy = getProxy(); VradiUser sender = getVradiSession().getUser(); @@ -164,27 +164,14 @@ } } - StringBuilder info = new StringBuilder(); - info.append(noteId); - info.append("\n"); - info.append(sender.getWikittyId()); - info.append("\n"); - info.append(StringUtils.join(note.getPartners(), ",")); - info.append("\n"); - info.append(message); + String url = VradiWebHelper.encodeAndGetUrl(SHOW_INVITATION_ACTION, noteId, sender.getWikittyId(), StringUtils.join(note.getPartners(), ","), message); - String param = VradiWebHelper.encode(info.toString()); - String url = String.format("%s/showInvitation.action?p=%s", - VradiWebConfig.getVradiWebServerUrl(), param); - if (url.length() > 2000) { - log.error(String.format("Url forged for invitation is to long for some navigator '%s'", url)); - } - - if (EmailType.REQUEST.sendEmail(recipient, sender, message, url, sender.getInfo())) { + if (EmailType.OPTION_REQUEST.sendEmail(recipient, sender, message, url, sender.getInfo())) { sendCount = recipient.size(); + return SUCCESS; } - return result; + return ERROR; } Modified: trunk/vradi-web/src/main/java/org/chorem/vradi/actions/ShowInvitationAction.java =================================================================== --- trunk/vradi-web/src/main/java/org/chorem/vradi/actions/ShowInvitationAction.java 2011-07-13 15:27:59 UTC (rev 121) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/actions/ShowInvitationAction.java 2011-07-15 11:54:49 UTC (rev 122) @@ -2,14 +2,24 @@ import com.opensymphony.xwork2.ActionContext; import java.util.Arrays; +import java.util.Collections; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; + +import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.struts2.interceptor.ServletRequestAware; +import org.chorem.vradi.InvitationResult; import org.chorem.vradi.VradiWebHelper; +import org.chorem.vradi.entities.FormNote; import org.chorem.vradi.entities.VradiUser; import org.nuiton.jrst.JRST; import org.nuiton.wikitty.WikittyProxy; +import javax.servlet.http.HttpServletRequest; + /** * * @author poussin @@ -18,22 +28,34 @@ * Last update: $Date$ * by : $Author$ */ -public class ShowInvitationAction extends VradiBaseAction { +public class ShowInvitationAction extends VradiBaseAction implements ServletRequestAware { /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(ShowInvitationAction.class); + public static final String SHOW_RESULT_INVITATION_ACTION = "showInvitationResult"; static public ShowInvitationAction getAction() { return (ShowInvitationAction)ActionContext.getContext().get(CONTEXT_ACTION_KEY); } + protected HttpServletRequest request; protected String p; protected String noteId; protected VradiUser sender; + protected String senderId; protected String senderInfo; protected List<VradiUser> partners; protected String message; + protected String messageRST; + protected String messageResult; + protected InvitationResult invitationResult; + protected Map<InvitationResult, String> invitationResultMap; + @Override + public void setServletRequest(HttpServletRequest request) { + this.request = request; + } + public void setP(String p) { this.p = p; } @@ -42,10 +64,29 @@ return noteId; } + public void setNoteId(String noteId) { + this.noteId = noteId; + } + public VradiUser getSender() { + if (sender == null) { + sender = getProxy().restore(VradiUser.class, senderId); + } return sender; } + public void setSender(VradiUser sender) { + this.sender = sender; + } + + public String getSenderId() { + return senderId; + } + + public void setSenderId(String senderId) { + this.senderId = senderId; + } + public String getSenderInfo() { return senderInfo; } @@ -58,22 +99,91 @@ return message; } - @Override - public String execute() throws Exception { + public void setMessage(String message) { + this.message = message; + } + + public String getMessageRST() { + return messageRST; + } + + public Map<InvitationResult, String> getInvitationResultMap() { + if (invitationResultMap == null) { + invitationResultMap = new LinkedHashMap<InvitationResult, String>(); + for (InvitationResult invitationResult : InvitationResult.values()) { + invitationResultMap.put(invitationResult, invitationResult.getButtonLabel()); + } + } + return invitationResultMap; + } + + public String getMessageResult() { + return messageResult; + } + + public void setMessageResult(String messageResult) { + this.messageResult = messageResult; + } + + public InvitationResult getInvitationResult() { + return invitationResult; + } + + public void setInvitationResult(InvitationResult invitationResult) { + this.invitationResult = invitationResult; + } + + public String getTitle() { + if (invitationResult == null) { + return StringUtils.EMPTY; + } + return invitationResult.getTitle(); + } + + public String getContent() { + if (invitationResult == null) { + return StringUtils.EMPTY; + } + return invitationResult.getContent(); + } + + public String getFormNoteSummary() { + FormNote formNote = getProxy().restore(FormNote.class, getNoteId()); + if (formNote != null) { + return formNote.getSummary(); + } + return StringUtils.EMPTY; + } + + public String decode() throws Exception { String result = SUCCESS; WikittyProxy proxy = getProxy(); - String datas = VradiWebHelper.decode(p); - String[] info = datas.split("\n", 4); + String[] info = VradiWebHelper.decodeAndGetInfos(p, 4); noteId = info[0]; sender = proxy.restore(VradiUser.class, info[1]); senderInfo = VradiWebHelper.rstTo(JRST.TYPE_HTML_INNER_BODY, sender.getInfo()); String[] partnersTab = info[2].split(","); partners = proxy.restore(VradiUser.class, Arrays.asList(partnersTab)); - message = VradiWebHelper.rstTo(JRST.TYPE_HTML_INNER_BODY, info[3]); + message = info[3]; + messageRST = VradiWebHelper.rstTo(JRST.TYPE_HTML_INNER_BODY, message); return result; } + + public String sendInvitationResult() throws Exception { + + String url = null; + if (invitationResult.equals(InvitationResult.ACCEPT)) { + url = VradiWebHelper.encodeAndGetUrl(SHOW_RESULT_INVITATION_ACTION, noteId, getUser().getWikittyId(), message, messageResult); + } + if (this.invitationResult.sendEmail(Collections.singleton(getSender().getLogin()), + getUser(), getMessageResult(), getFormNoteSummary(), url)) { + return SUCCESS; + } + return ERROR; + } + } Added: trunk/vradi-web/src/main/java/org/chorem/vradi/actions/ShowInvitationResultAction.java =================================================================== --- trunk/vradi-web/src/main/java/org/chorem/vradi/actions/ShowInvitationResultAction.java (rev 0) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/actions/ShowInvitationResultAction.java 2011-07-15 11:54:49 UTC (rev 122) @@ -0,0 +1,187 @@ +package org.chorem.vradi.actions; + +import com.opensymphony.xwork2.ActionContext; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; + +import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.struts2.interceptor.ServletRequestAware; +import org.chorem.vradi.InvitationResult; +import org.chorem.vradi.VradiWebHelper; +import org.chorem.vradi.entities.FormNote; +import org.chorem.vradi.entities.VradiUser; +import org.nuiton.jrst.JRST; +import org.nuiton.wikitty.WikittyProxy; + +import javax.servlet.http.HttpServletRequest; + +/** + * @author sletellier + */ +public class ShowInvitationResultAction extends VradiBaseAction implements ServletRequestAware { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(ShowInvitationAction.class); + + static public ShowInvitationResultAction getAction() { + return (ShowInvitationResultAction)ActionContext.getContext().get(CONTEXT_ACTION_KEY); + } + + protected HttpServletRequest request; + protected String p; + protected String noteId; + protected VradiUser sender; + protected String senderId; + protected String senderInfo; + protected String message; + protected String messageRST; + protected String messageResult; + protected String messageResultRST; + protected String messageConfirmResult; + protected InvitationResult invitationResult; + protected Map<InvitationResult, String> invitationResultMap; + + @Override + public void setServletRequest(HttpServletRequest request) { + this.request = request; + } + + public void setP(String p) { + this.p = p; + } + + public String getNoteId() { + return noteId; + } + + public void setNoteId(String noteId) { + this.noteId = noteId; + } + + public VradiUser getSender() { + if (sender == null) { + sender = getProxy().restore(VradiUser.class, senderId); + } + return sender; + } + + public void setSender(VradiUser sender) { + this.sender = sender; + } + + public String getSenderId() { + return senderId; + } + + public void setSenderId(String senderId) { + this.senderId = senderId; + } + + public String getSenderInfo() { + return senderInfo; + } + + public String getMessageConfirmResult() { + return messageConfirmResult; + } + + public void setMessageConfirmResult(String messageConfirmResult) { + this.messageConfirmResult = messageConfirmResult; + } + + public Map<InvitationResult, String> getInvitationResultMap() { + if (invitationResultMap == null) { + invitationResultMap = new LinkedHashMap<InvitationResult, String>(); + for (InvitationResult invitationResult : InvitationResult.values()) { + invitationResultMap.put(invitationResult, invitationResult.getButtonLabel()); + } + } + return invitationResultMap; + } + + public InvitationResult getInvitationResult() { + return invitationResult; + } + + public void setInvitationResult(InvitationResult invitationResult) { + this.invitationResult = invitationResult; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public String getMessageRST() { + return messageRST; + } + + public String getMessageResult() { + return messageResult; + } + + public void setMessageResult(String messageResult) { + this.messageResult = messageResult; + } + + public String getMessageResultRST() { + return messageResultRST; + } + + public String getTitle() { + if (invitationResult == null) { + return StringUtils.EMPTY; + } + return invitationResult.getConfirmationTitle(); + } + + public String getContent() { + if (invitationResult == null) { + return StringUtils.EMPTY; + } + return invitationResult.getConfirmationContent(); + } + + public String getFormNoteSummary() { + FormNote formNote = getProxy().restore(FormNote.class, getNoteId()); + if (formNote != null) { + return formNote.getSummary(); + } + return StringUtils.EMPTY; + } + + public String decode() throws Exception { + String result = SUCCESS; + + WikittyProxy proxy = getProxy(); + + String[] info = VradiWebHelper.decodeAndGetInfos(p, 4); + + noteId = info[0]; + sender = proxy.restore(VradiUser.class, info[1]); + senderInfo = VradiWebHelper.rstTo(JRST.TYPE_HTML_INNER_BODY, sender.getInfo()); + + message = info[2]; + messageRST = VradiWebHelper.rstTo(JRST.TYPE_HTML_INNER_BODY, info[2]); + messageResult = info[3]; + messageResultRST = VradiWebHelper.rstTo(JRST.TYPE_HTML_INNER_BODY, info[3]); + + return result; + } + + public String sendInvitationResultConfirm() throws Exception { + + if (this.invitationResult.sendConfirmEmail(Collections.singleton(getSender().getLogin()), + getUser(), getMessage(), getMessageResult(), getMessageConfirmResult(), getFormNoteSummary())) { + return SUCCESS; + } + return ERROR; + } + +} Deleted: trunk/vradi-web/src/main/resources/displaytag.properties =================================================================== --- trunk/vradi-web/src/main/resources/displaytag.properties 2011-07-13 15:27:59 UTC (rev 121) +++ trunk/vradi-web/src/main/resources/displaytag.properties 2011-07-15 11:54:49 UTC (rev 122) @@ -1,20 +0,0 @@ -basic.empty.showtable=true -basic.msg.empty_list=Vide -basic.msg.empty_list_row=<tr class="empty"><td colspan="{0}">Vide</td></tr></tr> - -sort.amount=list - -paging.banner.placement=bottom -paging.banner.item_name=\u00e9l\u00e9ment -paging.banner.items_name=\u00e9l\u00e9ments -paging.banner.no_items_found=<span class="pagebanner">Aucun {0} trouv\u00e9.</span> -paging.banner.one_item_found=<span class="pagebanner">Un seul {0} trouv\u00e9.</span> -paging.banner.all_items_found=<span class="pagebanner">{0} {1} trouv\u00e9s, tout afficher {2}.</span> -paging.banner.some_items_found=<span class="pagebanner">{0} {1} trouv\u00e9s, affich\u00e9 de {2} \u00e0 {3}.</span> -paging.banner.full=<span class="pagelinks">[<a href="{1}">Premier</a>/<a href="{2}">Pr\u00e9c\u00e9dent</a>]{0} [<a href="{3}">Suivant</a>/<a href="{4}">Dernier</a>]</span> -paging.banner.first=<span class="pagelinks">[Permier/Pr\u00e9c\u00e9dent] {0} [<a href="{3}">Suivant</a>/<a href="{4}">Dernier</a>]</span> -paging.banner.last=<span class="pagelinks">[<a href="{1}">Premier</a>/<a href="{2}">Pr\u00e9c\u00e9dent</a>]{0} [Suivant/Dernier]</span> -paging.banner.page.link=<a href="{1}" title="Aller \u00e0 {0}">{0}</a> - -pagination.sort.asc.value=ascending -pagination.sort.desc.value=descending Modified: trunk/vradi-web/src/main/resources/i18n/vradi-web_en_GB.properties =================================================================== --- trunk/vradi-web/src/main/resources/i18n/vradi-web_en_GB.properties 2011-07-13 15:27:59 UTC (rev 121) +++ trunk/vradi-web/src/main/resources/i18n/vradi-web_en_GB.properties 2011-07-15 11:54:49 UTC (rev 122) @@ -84,11 +84,12 @@ vradi.sendInvitation.count=Number of sended requests vradi.showInvitation.title=View request vradi.showInvitation.from=Request from \: +vradi.invitationResult.from=Request from \: vradi.showInvitation.otherPartners=Other partners are \: vradi.showInvitation.requestMsg=Request message \: vradi.showInvitation.accept=Accept vradi.showInvitation.reject=Reject -vradi.showInvitation.noReceived=Do not receved other request from this person +vradi.showInvitation.noReceivedMore=Do not receved other request from this person vradi.noEmail=No email vradi.userPreference=User preferences vradi.userPreference.form=Form Modified: trunk/vradi-web/src/main/resources/i18n/vradi-web_fr_FR.properties =================================================================== --- trunk/vradi-web/src/main/resources/i18n/vradi-web_fr_FR.properties 2011-07-13 15:27:59 UTC (rev 121) +++ trunk/vradi-web/src/main/resources/i18n/vradi-web_fr_FR.properties 2011-07-15 11:54:49 UTC (rev 122) @@ -36,6 +36,30 @@ vradi.formNote.title=Edition de la réponse vradi.formNoteList.title=Réponses du formulaire vradi.formView.title=Visualisation d'un formulaire +vradi.invitation.accept=L'utilisateur %1$s accèpte de travailler avec vous sur %3$s parce que \: %2$s\n\nPour répondre à cette demande veuillez aller sur la page\:'%4$s'\n"\n\nCordialement. +vradi.invitation.accept.button=Accepter +vradi.invitation.accept.confirmation.content=Text explicatif \: +vradi.invitation.accept.confirmation.content.title=Accepter la confirmation de l'invitation +vradi.invitation.accept.content=Text explicatif \: +vradi.invitation.accept.content.title=Accepter l'invitation +vradi.invitation.accept.title=[Vradi web] Une demande de partenaria à été accèpté +vradi.invitation.nomore.button=Rejeter et ne plus être solicité par cet utilisateur +vradi.invitation.nomore.confirmation.content=Text explicatif \: +vradi.invitation.nomore.confirmation.content.title=Rejeter la confirmation de l'invitation et ne plus être solicité par cet utilisateur +vradi.invitation.nomore.content=Text explicatif \: +vradi.invitation.nomore.content.title=Rejeter l'invitation et ne plus être solicité par cet utilisateur +vradi.invitation.reject=L'utilisateur %1$s à rejeté la demande de partenaria sur le projet %4$s avec le message \n\n %2$s \n\n parce que \: %3$s\n"\n\nCordialement. +vradi.invitation.reject.button=Rejeter +vradi.invitation.reject.confirmation.content=Text explicatif \: +vradi.invitation.reject.confirmation.content.title=Rejeter la confirmation de l'invitation +vradi.invitation.reject.content=Text explicatif \: +vradi.invitation.reject.content.title=Rejeter l'invitation +vradi.invitation.reject.title=[Vradi web] Une demande de partenaria à été rejeté +vradi.invitation.result.accept=L'utilisateur %1$s à accepté votre partenaria sur le projet %4$s avec le message \n\n %2$s \n\n vous aviez répondu : \n\n : %3$s \n\n parce que \: %4$s\n"\n\nCordialement. +vradi.invitation.result.accept.title=[Vradi web] Une demande de partenaria à été accèpté +vradi.invitation.result.reject=L'utilisateur %1$s à rejeté votre partenaria sur le projet %4$s avec le message \n\n %2$s \n\n vous aviez répondu : \n\n : %3$s \n\n parce que \: %4$s\n"\n\nCordialement. +vradi.invitation.result.reject.title=[Vradi web] Une demande de partenaria à été rejeté +vradi.invitationResult.from=L'invitation provient de \: vradi.login.email=Email vradi.login.password=Mot de passe vradi.login.repeatPassword=Confiramtion @@ -81,11 +105,15 @@ vradi.show=Afficher vradi.showInvitation.accept=Accepter vradi.showInvitation.from=L'invitation provient de \: -vradi.showInvitation.noReceived=Ne plus recevoir d'invitation de cette personne +vradi.showInvitation.noReceivedMore=Ne plus recevoir d'invitation de cette personne vradi.showInvitation.otherPartners=Les autres partenaires sur le projet sont \: vradi.showInvitation.reject=Rejeter vradi.showInvitation.requestMsg=Le message de l'invitation est \: vradi.showInvitation.title=Visualisation de l'invitation +vradi.showInvitationConfirm.from=La confirmation de votre invitation provient de \: +vradi.showInvitationConfirm.requestConfirmMsg=Voici le message de confirmation \: +vradi.showInvitationConfirm.requestMsg=L'invitation avait pour message \: +vradi.showInvitationConfirm.title=Confirmation suite à l'acceptation de votre demande de partonariat vradi.summary=Résumé vradi.template.request=Bonjour,\n\nCeci est une invitation pour participer à la creation commune d'information sur un formulaire Vradi.\n\nCette invitation provient de\:\n%4$s\n\nAvec le message\:\n%2$s\n\nPour répondre à cette demande veuillez aller sur la page\:'%3$s'\n"\n\nCordialement. vradi.template.request.title=[Vradi web] Vradi invitation Modified: trunk/vradi-web/src/main/resources/struts.xml =================================================================== --- trunk/vradi-web/src/main/resources/struts.xml 2011-07-13 15:27:59 UTC (rev 121) +++ trunk/vradi-web/src/main/resources/struts.xml 2011-07-15 11:54:49 UTC (rev 122) @@ -167,6 +167,20 @@ </action> <!-- + | Saved queries panel + +--> + <action name="invitationResultButtons" class="org.chorem.vradi.actions.ShowInvitationAction"> + <result name="success" type="json"/> + </action> + + <!-- + | Saved queries panel + +--> + <action name="invitationResultConfirmButtons" class="org.chorem.vradi.actions.ShowInvitationResultAction"> + <result name="success" type="json"/> + </action> + + <!-- | Affiche le détail du formulaire +--> <action name="formView/*" class="org.chorem.vradi.actions.FormViewAction"> @@ -212,9 +226,27 @@ <!-- | Affiche l'invitation grace au information de l'url (param p) +--> - <action name="showInvitation" class="org.chorem.vradi.actions.ShowInvitationAction"> + <action name="showInvitation" method="decode" class="org.chorem.vradi.actions.ShowInvitationAction"> <result>/WEB-INF/jsp/showInvitation.jsp</result> </action> + <!-- + | Send invitation result + +--> + <action name="sendInvitationResult" method="sendInvitationResult" class="org.chorem.vradi.actions.ShowInvitationAction"> + <result type="redirect">searchView.action</result> + </action> + <!-- + | Affiche l'invitation grace au information de l'url (param p) + +--> + <action name="showInvitationResult" method="decode" class="org.chorem.vradi.actions.ShowInvitationResultAction"> + <result>/WEB-INF/jsp/showInvitationResult.jsp</result> + </action> + <!-- + | Send invitation result confirmation + +--> + <action name="sendInvitationResultConfirm" method="sendInvitationResultConfirm" class="org.chorem.vradi.actions.ShowInvitationResultAction"> + <result type="redirect">searchView.action</result> + </action> </package> <!-- @@ -288,6 +320,22 @@ <result>/WEB-INF/jsp/savedQueries.jsp</result> </action> + <!-- + | Send invitation result + +--> + <action name="invitationResult" class="org.chorem.vradi.actions.ShowInvitationAction"> + <result name="input">/WEB-INF/jsp/invitationResult.jsp</result> + <result>/WEB-INF/jsp/invitationResult.jsp</result> + </action> + + <!-- + | Send invitation result confirmation + +--> + <action name="invitationResultConfirm" class="org.chorem.vradi.actions.ShowInvitationResultAction"> + <result name="input">/WEB-INF/jsp/invitationResult.jsp</result> + <result>/WEB-INF/jsp/invitationResultConfirm.jsp</result> + </action> + </package> <!-- Modified: trunk/vradi-web/src/main/webapp/WEB-INF/jsp/formNote.jsp =================================================================== --- trunk/vradi-web/src/main/webapp/WEB-INF/jsp/formNote.jsp 2011-07-13 15:27:59 UTC (rev 121) +++ trunk/vradi-web/src/main/webapp/WEB-INF/jsp/formNote.jsp 2011-07-15 11:54:49 UTC (rev 122) @@ -162,15 +162,14 @@ <s:text name="vradi.add"/> </s:set> - <sj:tab id="tabFiles" target="files" label="%{filesText}"/> + <sj:tab id="tabFiles" target="updateFilesPanel" label="%{filesText}"/> <sj:tab id="tabAddFiles" target="addFiles" label="%{addText}"/> - <div id="files"> - <sj:div href="/fragment/attachmentList/%{localNoteId}.action" - indicator="indicator-files" - listenTopics="updateFiles"> - <img id="indicator-files" src="/img/indicator.gif" alt="Loading..." style="display:none"/> - </sj:div> - </div> + <sj:div id="updateFilesPanel" + href="/fragment/attachmentList/%{localNoteId}.action" + indicator="indicator-files" + listenTopics="updateFiles"> + <img id="indicator-files" src="/img/indicator.gif" alt="Loading..." style="display:none"/> + </sj:div> <div id="addFiles"> <s:form id="addFilesForm" namespace="/fragment" action="attachmentAdd" method="POST" enctype="multipart/form-data"> <%--<s:form id="addFilesForm" action="attachmentAdd" method="POST" enctype="multipart/form-data">--%> @@ -180,11 +179,11 @@ <s:file name="content" key="vradi.addfiles.content" required="true"/> <sj:submit id="addFilesSubmit" value="%{saveText}" - targets="result" onSuccessTopics="updateFiles" - indicator="indicator-addFiles" + targets="result" + indicator="indicator-result" + onSuccessTopics="updateFiles" button="true" buttonIcon="ui-icon-gear"/> </s:form> - <img id="indicator-addFiles" src="/img/indicator.gif" alt="Loading..." style="display:none"/> </div> </sj:tabbedpanel> </div> Added: trunk/vradi-web/src/main/webapp/WEB-INF/jsp/invitationResult.jsp =================================================================== --- trunk/vradi-web/src/main/webapp/WEB-INF/jsp/invitationResult.jsp (rev 0) +++ trunk/vradi-web/src/main/webapp/WEB-INF/jsp/invitationResult.jsp 2011-07-15 11:54:49 UTC (rev 122) @@ -0,0 +1,28 @@ +<%@page import="com.opensymphony.xwork2.ActionContext"%> +<%@ page import="org.chorem.vradi.actions.ShowInvitationAction" %> +<%@page contentType="text/html" pageEncoding="UTF-8"%> + +<%@taglib prefix="s" uri="/struts-tags"%> + +<% +ShowInvitationAction action = ShowInvitationAction.getAction(); +ActionContext.getContext().put("localNoteId", action.getNoteId()); +ActionContext.getContext().put("localSenderId", action.getSenderId()); +ActionContext.getContext().put("invitationResult", action.getInvitationResult()); +ActionContext.getContext().put("message", action.getMessage()); +%> + +<h1><%=action.getTitle()%></h1> + +<div> + <p><%=action.getContent()%></p> +</div> + +<s:form action="sendInvitationResult" theme="simple"> + <s:hidden name="noteId" value="%{localNoteId}"/> + <s:hidden name="senderId" value="%{localSenderId}"/> + <s:hidden name="invitationResult" value="%{invitationResult}"/> + <s:hidden name="message" value="%{message}"/> + <s:textarea name="messageResult"/> + <s:submit id="acceptButton" key="vradi.send"/> +</s:form> \ No newline at end of file Added: trunk/vradi-web/src/main/webapp/WEB-INF/jsp/invitationResultConfirm.jsp =================================================================== --- trunk/vradi-web/src/main/webapp/WEB-INF/jsp/invitationResultConfirm.jsp (rev 0) +++ trunk/vradi-web/src/main/webapp/WEB-INF/jsp/invitationResultConfirm.jsp 2011-07-15 11:54:49 UTC (rev 122) @@ -0,0 +1,30 @@ +<%@page import="com.opensymphony.xwork2.ActionContext"%> +<%@ page import="org.chorem.vradi.actions.ShowInvitationResultAction" %> +<%@page contentType="text/html" pageEncoding="UTF-8"%> + +<%@taglib prefix="s" uri="/struts-tags"%> + +<% +ShowInvitationResultAction action = ShowInvitationResultAction.getAction(); +ActionContext.getContext().put("localNoteId", action.getNoteId()); +ActionContext.getContext().put("localSenderId", action.getSenderId()); +ActionContext.getContext().put("invitationResult", action.getInvitationResult()); +ActionContext.getContext().put("message", action.getMessage()); +ActionContext.getContext().put("messageResult", action.getMessageResult()); +%> + +<h1><%=action.getTitle()%></h1> + +<div> + <p><%=action.getContent()%></p> +</div> + +<s:form action="sendInvitationResultConfirm" theme="simple"> + <s:hidden name="noteId" value="%{localNoteId}"/> + <s:hidden name="senderId" value="%{localSenderId}"/> + <s:hidden name="invitationResult" value="%{invitationResult}"/> + <s:hidden name="message" value="%{message}"/> + <s:hidden name="messageResult" value="%{messageResult}"/> + <s:textarea name="messageConfirmResult"/> + <s:submit id="acceptButton" key="vradi.send"/> +</s:form> \ No newline at end of file Modified: trunk/vradi-web/src/main/webapp/WEB-INF/jsp/seekPartners.jsp =================================================================== --- trunk/vradi-web/src/main/webapp/WEB-INF/jsp/seekPartners.jsp 2011-07-13 15:27:59 UTC (rev 121) +++ trunk/vradi-web/src/main/webapp/WEB-INF/jsp/seekPartners.jsp 2011-07-15 11:54:49 UTC (rev 122) @@ -30,7 +30,7 @@ <body> <h1><s:text name="vradi.seekingPartners.title" /></h1> - <s:form id="seekingPartnersForm" action="/sendInvitation.action" method="POST"> + <s:form id="seekingPartnersForm" action="sendInvitation" method="POST"> <s:hidden name="noteId" value="%{localNoteId}"/> <s:checkbox name="formReceiver" key="vradi.seekingPartners.formReceiver"/> <s:checkbox name="seeker" key="vradi.seekingPartners.seeker"/> Modified: trunk/vradi-web/src/main/webapp/WEB-INF/jsp/showInvitation.jsp =================================================================== --- trunk/vradi-web/src/main/webapp/WEB-INF/jsp/showInvitation.jsp 2011-07-13 15:27:59 UTC (rev 121) +++ trunk/vradi-web/src/main/webapp/WEB-INF/jsp/showInvitation.jsp 2011-07-15 11:54:49 UTC (rev 122) @@ -15,6 +15,7 @@ ShowInvitationAction action = ShowInvitationAction.getAction(); ActionContext.getContext().put("localNoteId", action.getNoteId()); ActionContext.getContext().put("localSenderId", action.getSender().getWikittyId()); +ActionContext.getContext().put("message", action.getMessage()); %> <!DOCTYPE html> @@ -53,29 +54,39 @@ </div> </div> - <div> <s:text name="vradi.showInvitation.requestMsg"/> - <p><%=action.getMessage()%></p> + <p><%=action.getMessageRST()%></p> </div> <div> - <sj:a id="acceptButton" href="/acceptInvitation/%{localNoteId}.action" - button="true" buttonIcon="ui-icon-gear"> - <s:text name="vradi.showInvitation.accept"/> - </sj:a> + <s:form id="form" namespace="/fragment" action="invitationResult"> + <s:hidden name="noteId" value="%{localNoteId}"/> + <s:hidden name="senderId" value="%{localSenderId}"/> + <s:hidden name="message" value="%{message}"/> + <s:url id="invitationResultUrl" action="invitationResultButtons"/> + <sj:radio + href="%{invitationResultUrl}" + id="invitationResultSet" + list="invitationResultMap" + name="invitationResult" + onChangeTopics="updateInvitationResult" + /> + <sj:submit + targets="invitationResultForms" + value="Submit" + indicator="indicator-invitationResultForms" + button="true" + listenTopics="updateInvitationResult" + cssClass="hidden" + /> + </s:form> - <sj:a id="rejectButton" href="/rejectInvitation/%{localNoteId}.action" - button="true" buttonIcon="ui-icon-gear"> - <s:text name="vradi.showInvitation.reject"/> - </sj:a> + </div> + <div id="invitationResultForms"> + <img id="indicator-invitationResultForms" src="/img/indicator.gif" alt="Loading..." style="display:none"/> + </div> - <sj:a id="noReceivedButton" href="/noReceivedInvitation/%{localSenderId}.action" - button="true" buttonIcon="ui-icon-gear"> - <s:text name="vradi.showInvitation.noReceived"/> - </sj:a> - - </div> </body> </html> Added: trunk/vradi-web/src/main/webapp/WEB-INF/jsp/showInvitationResult.jsp =================================================================== --- trunk/vradi-web/src/main/webapp/WEB-INF/jsp/showInvitationResult.jsp (rev 0) +++ trunk/vradi-web/src/main/webapp/WEB-INF/jsp/showInvitationResult.jsp 2011-07-15 11:54:49 UTC (rev 122) @@ -0,0 +1,82 @@ +<%-- + Document : showInvitation + Created on : 1 juin 2011, 01:42:32 + Author : poussin +--%> + +<%@page import="com.opensymphony.xwork2.ActionContext"%> +<%@ page import="org.chorem.vradi.actions.ShowInvitationResultAction" %> +<%@page contentType="text/html" pageEncoding="UTF-8"%> + +<%@taglib prefix="s" uri="/struts-tags"%> +<%@taglib prefix="sj" uri="/struts-jquery-tags"%> + +<% +ShowInvitationResultAction action = ShowInvitationResultAction.getAction(); +ActionContext.getContext().put("localNoteId", action.getNoteId()); +ActionContext.getContext().put("localSenderId", action.getSender().getWikittyId()); +ActionContext.getContext().put("message", action.getMessage()); +ActionContext.getContext().put("messageResult", action.getMessageResult()); +%> + +<!DOCTYPE html> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title><s:text name="vradi.showInvitationConfirm.title" /></title> + <s:head/> + <sj:head jquerytheme="sunny"/> + </head> + <body> + <h1><s:text name="vradi.showInvitationConfirm.title" /></h1> + + <div> + <s:text name="vradi.showInvitationConfirm.from"/><%=action.getSender().getLogin()%> + <p> + <%=action.getSenderInfo()%> + </p> + </div> + + <div> + <s:text name="vradi.showInvitationConfirm.requestMsg"/> + + <p><%=action.getMessageRST()%></p> + </div> + + <div> + <s:text name="vradi.showInvitationConfirm.requestConfirmMsg"/> + + <p><%=action.getMessageResultRST()%></p> + </div> + + <div> + <s:form id="form" namespace="/fragment" action="invitationResultConfirm"> + <s:hidden name="noteId" value="%{localNoteId}"/> + <s:hidden name="senderId" value="%{localSenderId}"/> + <s:hidden name="message" value="%{message}"/> + <s:hidden name="messageResult" value="%{messageResult}"/> + <s:url id="invitationResultConfirmUrl" action="invitationResultConfirmButtons"/> + <sj:radio + href="%{invitationResultConfirmUrl}" + id="invitationResultSet" + list="invitationResultMap" + name="invitationResult" + onChangeTopics="updateInvitationConfirmResult" + /> + <sj:submit + targets="invitationResultConfirmForms" + value="Submit" + indicator="indicator-invitationResultConfirmForms" + button="true" + listenTopics="updateInvitationConfirmResult" + cssClass="hidden" + /> + </s:form> + + </div> + <div id="invitationResultConfirmForms"> + <img id="indicator-invitationResultConfirmForms" src="/img/indicator.gif" alt="Loading..." style="display:none"/> + </div> + + </body> +</html>