libreccm-legacy/ccm-forum/src/com/arsdigita/forum/ForumSubscription.java

181 lines
5.7 KiB
Java
Executable File

/*
* Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package com.arsdigita.forum;
import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.kernel.permissions.PermissionService;
import com.arsdigita.kernel.permissions.PrivilegeDescriptor;
import com.arsdigita.mail.Mail;
import com.arsdigita.messaging.ThreadedMessage;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.DataObject;
import com.arsdigita.persistence.OID;
import com.arsdigita.persistence.SessionManager;
import com.arsdigita.util.Assert;
import java.math.BigDecimal;
import org.apache.log4j.Logger;
/**
* The ForumSubscription class provides notification capabilities on a Forum.
*
* Note that ForumSubscriptions should not be retrieved directly using the
* contructors, but rather by calling DomainObjectFactory.newInstance().
*
* @author Kevin Scaldeferri (kevin@arsdigita.com)
*
* @version $Revision: 1.3 $ $Author: chrisg23 $ $DateTime: 2004/08/17 23:26:27 $
*/
public class ForumSubscription extends Subscription {
private static final Logger s_log =
Logger.getLogger(ForumSubscription.class);
public static final String BASE_DATA_OBJECT_TYPE =
"com.arsdigita.forum.ForumSubscription";
public static final String IS_MODERATION_ALERT =
"isModerationAlert";
public static final String FORUM = "forum";
private Forum m_forum;
public ForumSubscription(Forum forum) {
this(BASE_DATA_OBJECT_TYPE, forum);
setIsModerationAlert(false);
}
public ForumSubscription(String typeName, Forum forum) {
super(typeName);
Assert.exists(typeName, String.class);
Assert.exists(forum, Forum.class);
setForum(forum);
}
protected ForumSubscription(OID oid) throws DataObjectNotFoundException {
super(oid);
}
protected ForumSubscription(BigDecimal id)
throws DataObjectNotFoundException {
super(new OID(BASE_DATA_OBJECT_TYPE, id));
}
protected ForumSubscription(DataObject data) {
super(data);
}
protected String getBaseDataObjectType() {
return BASE_DATA_OBJECT_TYPE;
}
public String getSubscriptionGroupName() {
return "Instant Alert Subscription Group";
}
public Forum getForum() {
if (m_forum == null) {
DataObject forumData = (DataObject) get(FORUM);
if (forumData != null) {
m_forum = (Forum)DomainObjectFactory.newInstance(forumData);
}
}
return m_forum;
}
public void doWriteCheck() {
getForum().assertPrivilege(PrivilegeDescriptor.READ);
}
private void setForum(Forum forum) {
m_forum = forum;
setAssociation(FORUM, m_forum);
if (getGroup() != null) {
// in the case of moderation alert this is null - good, because
// mod group has already been placed in the group hierarchy
getGroup().setName(getGroupName(forum));
forum.getGroup().addSubgroup(getGroup());
}
}
public String getGroupName(Forum forum) {
return forum.getTitle() + " " + getSubscriptionGroupName();
}
protected void afterSave() {
PermissionService.setContext(this, getForum());
super.afterSave();
}
/**
* Returns a signature with information about replying to the
* message.
*/
public String getSignature(ThreadedMessage post) {
StringBuffer sb = new StringBuffer();
if (Mail.getConfig().sendHTMLMessageAsHTMLEmail()) {
sb.append(HTML_SEPARATOR);
sb.append(getReturnURLMessage((Post)post));
sb.append(HTML_SEPARATOR);
sb.append(ALERT_BLURB);
sb.append("You are receiving this email because you subscribed to ");
sb.append("alerts on this forum. To unsubscribe, follow the link above, return to the thread list and change the settings under the alerts tab.\n");
sb.append("</font>");
} else {
sb.append(getReturnURLMessage((Post)post));
}
return sb.toString();
}
/**
* gets the ForumSubscription associated with the provided Forum
*/
public static ForumSubscription getFromForum(Forum forum) {
DataCollection subs = SessionManager.getSession()
.retrieve(ForumSubscription.BASE_DATA_OBJECT_TYPE);
subs.addEqualsFilter("forum.id", forum.getID());
subs.addEqualsFilter("digest.id", null);
if (subs.next()) {
ForumSubscription sub =
new ForumSubscription(subs.getDataObject());
subs.close();
return sub;
}
return null;
}
public void setIsModerationAlert(boolean isModerationAlert) {
set(IS_MODERATION_ALERT, new Boolean(isModerationAlert));
}
public void setIsModerationAlert(Boolean isModerationAlert) {
set(IS_MODERATION_ALERT, isModerationAlert);
}
}