Index: entity/entity-api/api/src/java/org/sakaiproject/entity/api/ResourceProperties.java =================================================================== --- entity/entity-api/api/src/java/org/sakaiproject/entity/api/ResourceProperties.java (revision 38816) +++ entity/entity-api/api/src/java/org/sakaiproject/entity/api/ResourceProperties.java (working copy) @@ -104,6 +104,9 @@ /** Property for a message channel indicating if the channel is 'enabled' (user settable) [Boolean] */ static final String PROP_MAIL_CHANNEL_OPEN = "CHEF:mail-channel-open"; + + /** Property for a mail channel indicating if the channel has replys going back to the list (user settable) [Boolean] */ + static final String PROP_MAIL_CHANNEL_REPLY_LIST = "CHEF:mail-channel-reply-list"; /** Property for a site storing the email notification id associated with the site's mailbox (user settable) [String] */ static final String PROP_SITE_EMAIL_NOTIFICATION_ID = "CHEF:site-email-notification-id"; Index: mailarchive/mailarchive-tool/tool/src/java/org/sakaiproject/mailarchive/tool/MailboxAction.java =================================================================== --- mailarchive/mailarchive-tool/tool/src/java/org/sakaiproject/mailarchive/tool/MailboxAction.java (revision 38816) +++ mailarchive/mailarchive-tool/tool/src/java/org/sakaiproject/mailarchive/tool/MailboxAction.java (working copy) @@ -81,6 +81,8 @@ private static final String FORM_PAGESIZE = "pagesize"; private static final String FORM_OPEN = "open"; + + private static final String FORM_REPLY = "reply"; private static final String FORM_ALIAS = "alias"; @@ -99,6 +101,8 @@ private static final String STATE_OPTION_PAGESIZE = "optSize"; private static final String STATE_OPTION_OPEN = "optOpen"; + + private static final String STATE_OPTION_REPLY = "optReply"; private static final String STATE_OPTION_ALIAS = "optAlias"; @@ -888,6 +892,7 @@ // provide form names context.put("form-pagesize", FORM_PAGESIZE); context.put("form-open", FORM_OPEN); + context.put("form-reply", FORM_REPLY); context.put("form-alias", FORM_ALIAS); context.put("form-submit", BUTTON + "doUpdate"); context.put("form-cancel", BUTTON + "doCancel"); @@ -895,7 +900,10 @@ // in progress values if (state.getAttribute(STATE_OPTION_PAGESIZE) != null) context.put(STATE_OPTION_PAGESIZE, state.getAttribute(STATE_OPTION_PAGESIZE)); - if (state.getAttribute(STATE_OPTION_OPEN) != null) context.put(STATE_OPTION_OPEN, state.getAttribute(STATE_OPTION_OPEN)); + if (state.getAttribute(STATE_OPTION_OPEN) != null) + context.put(STATE_OPTION_OPEN, state.getAttribute(STATE_OPTION_OPEN)); + if (state.getAttribute(STATE_OPTION_REPLY) != null) + context.put(STATE_OPTION_REPLY, state.getAttribute(STATE_OPTION_REPLY)); if (state.getAttribute(STATE_OPTION_ALIAS) != null) context.put(STATE_OPTION_ALIAS, state.getAttribute(STATE_OPTION_ALIAS)); @@ -935,6 +943,8 @@ // state.setAttribute(STATE_OPTION_PAGESIZE, pagesize); String open = data.getParameters().getString(FORM_OPEN); state.setAttribute(STATE_OPTION_OPEN, open); + String replyToList = data.getParameters().getString(FORM_REPLY); + state.setAttribute(STATE_OPTION_REPLY, replyToList); String alias = StringUtil.trimToNull(data.getParameters().getString(FORM_ALIAS)); state.setAttribute(STATE_OPTION_ALIAS, alias); @@ -1045,11 +1055,24 @@ // if the alias saving went well, go on to the rest if (state.getAttribute(STATE_MESSAGE) == null) { + boolean modified = false; // update the channel for open (if changed) boolean ss = new Boolean(open).booleanValue(); if (channel.getOpen() != ss) { edit.setOpen(ss); + modified = true; + } + + ss = new Boolean(replyToList).booleanValue(); + if (channel.getReplyToList() != ss) + { + edit.setReplyToList(ss); + modified = true; + } + + if (modified) + { MailArchiveService.commitChannel(edit); } else @@ -1079,6 +1102,7 @@ // clear state temps. state.removeAttribute(STATE_OPTION_PAGESIZE); state.removeAttribute(STATE_OPTION_OPEN); + state.removeAttribute(STATE_OPTION_REPLY); state.removeAttribute(STATE_OPTION_ALIAS); // re-enable auto-updates when going back to list mode @@ -1113,6 +1137,7 @@ // clear state temps. state.removeAttribute(STATE_OPTION_PAGESIZE); state.removeAttribute(STATE_OPTION_OPEN); + state.removeAttribute(STATE_OPTION_REPLY); state.removeAttribute(STATE_OPTION_ALIAS); // re-enable auto-updates when going back to list mode Index: mailarchive/mailarchive-tool/tool/src/bundle/email.properties =================================================================== --- mailarchive/mailarchive-tool/tool/src/bundle/email.properties (revision 38816) +++ mailarchive/mailarchive-tool/tool/src/bundle/email.properties (working copy) @@ -15,6 +15,9 @@ cus.usethi2 = Site Email Address cus.whoare = Who are messages accepted from? cus.whoare2 = Accept Messages From +cus.replyto = Set the reply to address +cus.replylist = The email archive +cus.replysend = Leave as the original sender gen.alert = Alert: gen.att = Attachments Index: mailarchive/mailarchive-tool/tool/src/webapp/vm/mailarchive/chef_mailbox-customize.vm =================================================================== --- mailarchive/mailarchive-tool/tool/src/webapp/vm/mailarchive/chef_mailbox-customize.vm (revision 38816) +++ mailarchive/mailarchive-tool/tool/src/webapp/vm/mailarchive/chef_mailbox-customize.vm (working copy) @@ -6,6 +6,7 @@ #if($optSize) #set($sizeValue=$optSize) #else #set($sizeValue=$pagesize) #end #if($optOpen) #set($openValue=$optOpen) #else #set($openValue=$channel.Open) #end +#if($optReply) #set($replyValue=$optReply) #else #set($replyValue=$channel.ReplyToList) #end #if($optAlias) #set($aliasValue=$optAlias) #else @@ -51,6 +52,33 @@ $tlang.getString("cus.onluse2")

+

+ $tlang.getString("cus.replyto") +

+

+ + +

+

+ + +

+

+

$tlang.getString("gen.maiali2")

Index: mailarchive/mailarchive-james/james/src/java/org/sakaiproject/james/SakaiMailet.java =================================================================== --- mailarchive/mailarchive-james/james/src/java/org/sakaiproject/james/SakaiMailet.java (revision 38816) +++ mailarchive/mailarchive-james/james/src/java/org/sakaiproject/james/SakaiMailet.java (working copy) @@ -336,10 +336,30 @@ M_log.warn("service(): msg.getContent() threw: " + e); } } + + if (channel.getReplyToList()) + { + List modifiedHeaders = new Vector(); + for (String header: (List)mailHeaders) + { + if (header != null && !header.startsWith("Reply-To:")) + { + modifiedHeaders.add(header); + } + } + M_log.debug("Set Reply-To address to "+ recipient.toString()); + modifiedHeaders.add("Reply-To: "+ recipient.toString()); - // post the message to the group's channel - channel.addMailArchiveMessage(subject, from.toString(), TimeService.newTime(sent.getTime()), mailHeaders, - attachments, body); + // post the message to the group's channel + channel.addMailArchiveMessage(subject, from.toString(), TimeService.newTime(sent.getTime()), modifiedHeaders, + attachments, body); + } + else + { + // post the message to the group's channel + channel.addMailArchiveMessage(subject, from.toString(), TimeService.newTime(sent.getTime()), mailHeaders, + attachments, body); + } M_log.info(id + " : delivered to:" + mailId); Index: mailarchive/mailarchive-impl/impl/src/java/org/sakaiproject/mailarchive/impl/BaseMailArchiveService.java =================================================================== --- mailarchive/mailarchive-impl/impl/src/java/org/sakaiproject/mailarchive/impl/BaseMailArchiveService.java (revision 38816) +++ mailarchive/mailarchive-impl/impl/src/java/org/sakaiproject/mailarchive/impl/BaseMailArchiveService.java (working copy) @@ -823,14 +823,16 @@ List attachments, String body) throws PermissionException { MailArchiveMessageEdit edit = (MailArchiveMessageEdit) addMessage(); - MailArchiveMessageHeaderEdit header = edit.getMailArchiveHeaderEdit(); + MailArchiveMessageHeaderEdit archiveHeaders = edit.getMailArchiveHeaderEdit(); edit.setBody(body); - header.replaceAttachments(attachments); - header.setSubject(subject); - header.setFromAddress(fromAddress); - header.setDateSent(dateSent); - header.setMailHeaders(mailHeaders); + + archiveHeaders.replaceAttachments(attachments); + archiveHeaders.setSubject(subject); + archiveHeaders.setFromAddress(fromAddress); + archiveHeaders.setDateSent(dateSent); + archiveHeaders.setMailHeaders(mailHeaders); + // lets make sure that folks who have signed up for email get it commitMessage(edit, NotificationService.NOTI_OPTIONAL); @@ -925,6 +927,40 @@ } + /* + * (non-Javadoc) + * @see org.sakaiproject.mailarchive.api.MailArchiveChannelEdit#setReplyToList(boolean) + */ + public void setReplyToList(boolean replyToList) + { + if (replyToList) + { + getPropertiesEdit().addProperty(ResourceProperties.PROP_MAIL_CHANNEL_REPLY_LIST, "true"); + } + else + { + getPropertiesEdit().removeProperty(ResourceProperties.PROP_MAIL_CHANNEL_REPLY_LIST); + } + } + + /* + * (non-Javadoc) + * @see org.sakaiproject.mailarchive.api.MailArchiveChannel#getReplyToList() + */ + public boolean getReplyToList() + { + boolean open = false; + try + { + open = getProperties().getBooleanProperty(ResourceProperties.PROP_MAIL_CHANNEL_REPLY_LIST); + } + catch (Exception ignore) + { + } + + return open; + } + } // class BaseMailArchiveChannelEdit /********************************************************************************************************************************************************************************************************************************************************** Index: mailarchive/mailarchive-api/api/src/java/org/sakaiproject/mailarchive/api/MailArchiveChannelEdit.java =================================================================== --- mailarchive/mailarchive-api/api/src/java/org/sakaiproject/mailarchive/api/MailArchiveChannelEdit.java (revision 38816) +++ mailarchive/mailarchive-api/api/src/java/org/sakaiproject/mailarchive/api/MailArchiveChannelEdit.java (working copy) @@ -45,4 +45,12 @@ * The new setting. */ public void setOpen(boolean setting); + + /** + * Set the reply status of the channel. Reply to list channels will have the replys go back to the list. + * + * @param setting + * The new setting. + */ + public void setReplyToList(boolean replyToList); } Index: mailarchive/mailarchive-api/api/src/java/org/sakaiproject/mailarchive/api/MailArchiveChannel.java =================================================================== --- mailarchive/mailarchive-api/api/src/java/org/sakaiproject/mailarchive/api/MailArchiveChannel.java (revision 38816) +++ mailarchive/mailarchive-api/api/src/java/org/sakaiproject/mailarchive/api/MailArchiveChannel.java (working copy) @@ -98,7 +98,10 @@ /** @return true if the channel is open to messages from outside the membership, false if not. */ public boolean getOpen(); - + + /** @return true if the channel sets the reply to address back to the channel */ + public boolean getReplyToList(); + /** * check permissions for addMessage() for the given user. *