/*
Copyright (C) 2016 maik.jablonski@jease.org
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package jease.site;
import jease.cmf.service.Nodes;
import jease.cms.domain.Discussion;
import jease.cms.service.Mails;
import jfix.util.I18N;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
/**
* Service for handling Discussions and Comments.
*/
public class Discussions {
public static int MAX_SUBJECT_LENGTH = 64;
public static int MAX_AUTHOR_LENGTH = 64;
public static int MAX_COMMENT_LENGTH = 1024;
/**
* Adds a comment with given values to given Discussion. Visible flag
* indicates if added comment should be visible or not.
*
* Returns null on success, otherwise an error message.
*/
public static String addComment(Discussion discussion, String author,
String subject, String comment, boolean visible) {
if (StringUtils.isBlank(subject) || StringUtils.isBlank(author) || StringUtils.isBlank(comment)) {
return I18N.get("All_fields_are_required");
}
if (subject.length() > MAX_SUBJECT_LENGTH || author.length() > MAX_AUTHOR_LENGTH || comment.length() > MAX_COMMENT_LENGTH) {
return I18N.get("Input_is_too_long");
}
// Escape all user input
subject = StringEscapeUtils.escapeHtml4(subject);
author = StringEscapeUtils.escapeHtml4(author);
comment = StringEscapeUtils.escapeHtml4(comment);
// Save comment to database.
discussion.addComment(subject, author, comment, visible);
Nodes.save(discussion);
// Send email for review to editor in charge.
String recipient = discussion.getEditor().getEmail();
if (StringUtils.isNotBlank(recipient)) {
Mails.dispatch(recipient, recipient,
String.format("%s (%s)", subject, author), comment);
}
return null;
}
}