/* * Copyright (c) JForum Team * All rights reserved. * * Redistribution and use in source and binary forms, * with or without modification, are permitted provided * that the following conditions are met: * * 1) Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * 2) Redistributions in binary form must reproduce the * above copyright notice, this list of conditions and * the following disclaimer in the documentation and/or * other materials provided with the distribution. * 3) Neither the name of "Rafael Steil" nor * the names of its contributors may be used to endorse * or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER * IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE * * Created on 09/08/2007 09:31:17 * * The JForum Project * http://www.jforum.net */ package net.jforum.view.forum; import com.trydone.forum.action.ajax.PostAjaxAction; import freemarker.template.SimpleHash; import net.jforum.Command; import net.jforum.SessionFacade; import net.jforum.dao.DataAccessDriver; import net.jforum.dao.PostDAO; import net.jforum.entities.ModerationLog; import net.jforum.entities.Post; import net.jforum.entities.User; import net.jforum.repository.PostRepository; import net.jforum.repository.SecurityRepository; import net.jforum.search.LuceneManager; import net.jforum.search.SearchFacade; import net.jforum.security.SecurityConstants; import net.jforum.util.SafeHtml; import net.jforum.util.mail.Spammer; import net.jforum.util.preferences.ConfigKeys; import net.jforum.util.preferences.SystemGlobals; import net.jforum.util.preferences.TemplateKeys; import net.jforum.view.forum.common.PostCommon; import org.apache.commons.lang.StringEscapeUtils; import org.apache.log4j.Logger; import org.apache.lucene.document.Document; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @author Rafael Steil * @version $Id: AjaxAction.java,v 1.7 2007/09/21 15:54:31 rafaelsteil Exp $ */ public class AjaxAction extends Command { private static Logger logger = Logger.getLogger(AjaxAction.class); /** * Sends a test message * @param sender The sender's email address * @param host the smtp host * @param auth if need authorization or not * @param username the smtp server username, if auth is needed * @param password the smtp server password, if auth is needed * @param to the recipient * @return The status message */ public void sendTestMail() { String sender = this.request.getParameter("sender"); String host = this.request.getParameter("host"); String port = this.request.getParameter("port"); String auth = this.request.getParameter("auth"); String ssl = this.request.getParameter("ssl"); String username = this.request.getParameter("username"); String password = this.request.getParameter("password"); String to = this.request.getParameter("to"); // Save the current values String originalHost = SystemGlobals.getValue(ConfigKeys.MAIL_SMTP_HOST); String originalAuth = SystemGlobals.getValue(ConfigKeys.MAIL_SMTP_AUTH); String originalUsername = SystemGlobals.getValue(ConfigKeys.MAIL_SMTP_USERNAME); String originalPassword = SystemGlobals.getValue(ConfigKeys.MAIL_SMTP_PASSWORD); String originalSender = SystemGlobals.getValue(ConfigKeys.MAIL_SENDER); String originalSSL = SystemGlobals.getValue(ConfigKeys.MAIL_SMTP_SSL); String originalPort = SystemGlobals.getValue(ConfigKeys.MAIL_SMTP_PORT); // Now put the new ones SystemGlobals.setValue(ConfigKeys.MAIL_SMTP_HOST, host); SystemGlobals.setValue(ConfigKeys.MAIL_SMTP_AUTH, auth); SystemGlobals.setValue(ConfigKeys.MAIL_SMTP_USERNAME, username); SystemGlobals.setValue(ConfigKeys.MAIL_SMTP_PASSWORD, password); SystemGlobals.setValue(ConfigKeys.MAIL_SENDER, sender); SystemGlobals.setValue(ConfigKeys.MAIL_SMTP_SSL, ssl); SystemGlobals.setValue(ConfigKeys.MAIL_SMTP_PORT, port); String status = "OK"; // Send the test mail class TestSpammer extends Spammer { public TestSpammer(String to) { List l = new ArrayList(); User user = new User(); user.setEmail(to); l.add(user); this.setUsers(l); this.setTemplateParams(new SimpleHash()); this.prepareMessage("JForum Test Mail", null); } protected String processTemplate() throws Exception { return ("Test mail from JForum Admin Panel. Sent at " + new Date()); } protected void createTemplate(String messageFile) throws Exception {} } Spammer s = new TestSpammer(to); try { s.dispatchMessages(); } catch (Exception e) { status = StringEscapeUtils.escapeJavaScript(e.toString()); logger.error(e.toString(), e); } finally { // Restore the original values SystemGlobals.setValue(ConfigKeys.MAIL_SMTP_HOST, originalHost); SystemGlobals.setValue(ConfigKeys.MAIL_SMTP_AUTH, originalAuth); SystemGlobals.setValue(ConfigKeys.MAIL_SMTP_USERNAME, originalUsername); SystemGlobals.setValue(ConfigKeys.MAIL_SMTP_PASSWORD, originalPassword); SystemGlobals.setValue(ConfigKeys.MAIL_SENDER, originalSender); SystemGlobals.setValue(ConfigKeys.MAIL_SMTP_SSL, originalSSL); SystemGlobals.setValue(ConfigKeys.MAIL_SMTP_PORT, originalPort); } this.setTemplateName(TemplateKeys.AJAX_TEST_MAIL); this.context.put("status", status); } public void isPostIndexed() { int postId = this.request.getIntParameter("post_id"); this.setTemplateName(TemplateKeys.AJAX_IS_POST_INDEXED); LuceneManager manager = (LuceneManager)SearchFacade.manager(); Document doc = manager.luceneSearch().findDocumentByPostId(postId); this.context.put("doc", doc); } public void loadPostContents() { int postId = this.request.getIntParameter("id"); PostDAO dao = DataAccessDriver.getInstance().newPostDAO(); Post post = dao.selectById(postId); this.setTemplateName(TemplateKeys.AJAX_LOAD_POST); this.context.put("post", post); } public void savePost() { PostDAO postDao = DataAccessDriver.getInstance().newPostDAO(); Post post = postDao.selectById(this.request.getIntParameter("id")); String originalMessage = post.getText(); if (!PostCommon.canEditPost(post)) { post = PostCommon.preparePostForDisplay(post); } else { post.setText(this.request.getParameter("value")); postDao.update(post); SearchFacade.update(post); post = PostCommon.preparePostForDisplay(post); } boolean isModerator = SecurityRepository.canAccess(SecurityConstants.PERM_MODERATION_POST_EDIT); if (SystemGlobals.getBoolValue(ConfigKeys.MODERATION_LOGGING_ENABLED) && isModerator && post.getUserId() != SessionFacade.getUserSession().getUserId()) { ModerationHelper helper = new ModerationHelper(); this.request.addParameter("log_original_message", originalMessage); this.request.addParameter("post_id", String.valueOf(post.getId())); this.request.addParameter("topic_id", String.valueOf(post.getTopicId())); ModerationLog log = helper.buildModerationLogFromRequest(); log.getPosterUser().setId(post.getUserId()); helper.saveModerationLog(log); } if (SystemGlobals.getBoolValue(ConfigKeys.POSTS_CACHE_ENABLED)) { PostRepository.update(post.getTopicId(), PostCommon.preparePostForDisplay(post)); } this.setTemplateName(TemplateKeys.AJAX_LOAD_POST); this.context.put("post", post); } public void previewPost() { Post post = new Post(); post.setText(this.request.getParameter("text")); post.setSubject(this.request.getParameter("subject")); post.setHtmlEnabled("true".equals(this.request.getParameter("html"))); post.setBbCodeEnabled("true".equals(this.request.getParameter("bbcode"))); post.setSmiliesEnabled("true".equals(this.request.getParameter("smilies"))); if (post.isHtmlEnabled()) { post.setText(new SafeHtml().makeSafe(post.getText())); } post = PostCommon.preparePostForDisplay(post); post.setSubject(StringEscapeUtils.escapeJavaScript(post.getSubject())); post.setText(StringEscapeUtils.escapeJavaScript(post.getText())); this.setTemplateName(TemplateKeys.AJAX_PREVIEW_POST); this.context.put("post", post); } /** * @see net.jforum.Command#list() */ public void list() { this.ignoreAction(); } //trydone addtions pinke 20071017 private PostAjaxAction paa = new PostAjaxAction(); public void getPostsByTopicId() { String topicIdStr=request.getParameter("topicId"); String startStr=request.getParameter("start"); int topicId,start; try { topicId=Integer.parseInt(topicIdStr); } catch (NumberFormatException e) { topicId=0; } try { start=Integer.parseInt(startStr); } catch (NumberFormatException e) { start=0; } List list = paa.getPosts(topicId, start,false); this.setTemplateName(TemplateKeys.AJAX_JSON_FORMAT); this.context.put("posts", list); this.context.put("show_posts",Boolean.TRUE); } public void getTopicByForumId() { String forumIdStr=request.getParameter("forumId"); String startStr=request.getParameter("start"); int forumId,start; try { forumId =Integer.parseInt(forumIdStr); } catch (NumberFormatException e) { forumId =0; } try { start=Integer.parseInt(startStr); } catch (NumberFormatException e) { start=0; } List list = paa.getPostsByForumId(forumId, start,false); this.setTemplateName(TemplateKeys.AJAX_JSON_FORMAT); this.context.put("topics", list); this.context.put("show_topics",Boolean.TRUE); } }