Search in sources :

Example 6 with PostDAO

use of net.jforum.dao.PostDAO in project jforum2 by rafaelsteil.

the class PostAction method downloadAttach.

public void downloadAttach() {
    int id = this.request.getIntParameter("attach_id");
    if (!SessionFacade.isLogged() && !SystemGlobals.getBoolValue(ConfigKeys.ATTACHMENTS_ANONYMOUS)) {
        String referer = this.request.getHeader("Referer");
        if (referer != null) {
            this.setTemplateName(ViewCommon.contextToLogin(referer));
        } else {
            this.setTemplateName(ViewCommon.contextToLogin());
        }
        return;
    }
    AttachmentDAO am = DataAccessDriver.getInstance().newAttachmentDAO();
    Attachment a = am.selectAttachmentById(id);
    PostDAO postDao = DataAccessDriver.getInstance().newPostDAO();
    Post post = postDao.selectById(a.getPostId());
    String forumId = Integer.toString(post.getForumId());
    boolean attachmentsEnabled = SecurityRepository.canAccess(SecurityConstants.PERM_ATTACHMENTS_ENABLED, forumId);
    boolean attachmentsDownload = SecurityRepository.canAccess(SecurityConstants.PERM_ATTACHMENTS_DOWNLOAD, forumId);
    if (!attachmentsEnabled && !attachmentsDownload) {
        this.setTemplateName(TemplateKeys.POSTS_CANNOT_DOWNLOAD);
        this.context.put("message", I18n.getMessage("Attachments.featureDisabled"));
        return;
    }
    String filename = SystemGlobals.getValue(ConfigKeys.ATTACHMENTS_STORE_DIR) + "/" + a.getInfo().getPhysicalFilename();
    if (!new File(filename).exists()) {
        this.setTemplateName(TemplateKeys.POSTS_ATTACH_NOTFOUND);
        this.context.put("message", I18n.getMessage("Attachments.notFound"));
        return;
    }
    FileInputStream fis = null;
    OutputStream os = null;
    try {
        a.getInfo().setDownloadCount(a.getInfo().getDownloadCount() + 1);
        am.updateAttachment(a);
        fis = new FileInputStream(filename);
        os = response.getOutputStream();
        if (am.isPhysicalDownloadMode(a.getInfo().getExtension().getExtensionGroupId())) {
            this.response.setContentType("application/octet-stream");
        } else {
            this.response.setContentType(a.getInfo().getMimetype());
        }
        if (this.request.getHeader("User-Agent").indexOf("Firefox") != -1) {
            this.response.setHeader("Content-Disposition", "attachment; filename=\"" + new String(a.getInfo().getRealFilename().getBytes(SystemGlobals.getValue(ConfigKeys.ENCODING)), SystemGlobals.getValue(ConfigKeys.DEFAULT_CONTAINER_ENCODING)) + "\";");
        } else {
            this.response.setHeader("Content-Disposition", "attachment; filename=\"" + ViewCommon.toUtf8String(a.getInfo().getRealFilename()) + "\";");
        }
        this.response.setContentLength((int) a.getInfo().getFilesize());
        int c;
        byte[] b = new byte[4096];
        while ((c = fis.read(b)) != -1) {
            os.write(b, 0, c);
        }
        JForumExecutionContext.enableCustomContent(true);
    } catch (IOException e) {
        throw new ForumException(e);
    } finally {
        if (fis != null) {
            try {
                fis.close();
            } catch (Exception e) {
            }
        }
        if (os != null) {
            try {
                os.close();
            } catch (Exception e) {
            }
        }
    }
}
Also used : AttachmentDAO(net.jforum.dao.AttachmentDAO) Post(net.jforum.entities.Post) OutputStream(java.io.OutputStream) Attachment(net.jforum.entities.Attachment) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) AttachmentException(net.jforum.exceptions.AttachmentException) ForumException(net.jforum.exceptions.ForumException) IOException(java.io.IOException) ForumException(net.jforum.exceptions.ForumException) PostDAO(net.jforum.dao.PostDAO) File(java.io.File)

Example 7 with PostDAO

use of net.jforum.dao.PostDAO in project jforum2 by rafaelsteil.

the class PostAction method editSave.

public void editSave() {
    PostDAO postDao = DataAccessDriver.getInstance().newPostDAO();
    PollDAO pollDao = DataAccessDriver.getInstance().newPollDAO();
    TopicDAO topicDao = DataAccessDriver.getInstance().newTopicDAO();
    Post post = postDao.selectById(this.request.getIntParameter("post_id"));
    if (!PostCommon.canEditPost(post)) {
        this.cannotEdit();
        return;
    }
    boolean isModerator = SecurityRepository.canAccess(SecurityConstants.PERM_MODERATION_POST_EDIT);
    String originalMessage = post.getText();
    post = PostCommon.fillPostFromRequest(post, true);
    // The user wants to preview the message before posting it?
    if ("1".equals(this.request.getParameter("preview"))) {
        this.context.put("preview", true);
        Post postPreview = new Post(post);
        this.context.put("postPreview", PostCommon.preparePostForDisplay(postPreview));
        this.edit(true, post);
    } else {
        AttachmentCommon attachments = new AttachmentCommon(this.request, post.getForumId());
        try {
            attachments.preProcess();
        } catch (AttachmentException e) {
            JForumExecutionContext.enableRollback();
            post.setText(this.request.getParameter("message"));
            this.context.put("errorMessage", e.getMessage());
            this.context.put("post", post);
            this.edit(false, post);
            return;
        }
        Topic t = TopicRepository.getTopic(new Topic(post.getTopicId()));
        if (t == null) {
            t = topicDao.selectById(post.getTopicId());
        }
        if (!TopicsCommon.isTopicAccessible(t.getForumId())) {
            return;
        }
        if (t.getStatus() == Topic.STATUS_LOCKED && !SecurityRepository.canAccess(SecurityConstants.PERM_MODERATION_POST_EDIT)) {
            this.topicLocked();
            return;
        }
        postDao.update(post);
        // Attachments
        attachments.editAttachments(post.getId(), post.getForumId());
        attachments.insertAttachments(post);
        // The first message (the one which originated the topic) was changed
        if (t.getFirstPostId() == post.getId()) {
            t.setTitle(post.getSubject());
            int newType = this.request.getIntParameter("topic_type");
            boolean changeType = SecurityRepository.canAccess(SecurityConstants.PERM_CREATE_STICKY_ANNOUNCEMENT_TOPICS) && newType != t.getType();
            if (changeType) {
                t.setType(newType);
            }
            // Poll
            Poll poll = PollCommon.fillPollFromRequest();
            if (poll != null && !t.isVote()) {
                // They added a poll
                poll.setTopicId(t.getId());
                if (!this.ensurePollMinimumOptions(post, poll)) {
                    return;
                }
                pollDao.addNew(poll);
                t.setVoteId(poll.getId());
            } else if (poll != null) {
                if (!this.ensurePollMinimumOptions(post, poll)) {
                    return;
                }
                // They edited the poll in the topic
                Poll existing = pollDao.selectById(t.getVoteId());
                PollChanges changes = new PollChanges(existing, poll);
                if (changes.hasChanges()) {
                    poll.setId(existing.getId());
                    poll.setChanges(changes);
                    pollDao.update(poll);
                }
            } else if (t.isVote()) {
                // They deleted the poll from the topic
                pollDao.delete(t.getVoteId());
                t.setVoteId(0);
            }
            topicDao.update(t);
            if (changeType) {
                TopicRepository.addTopic(t);
            } else {
                TopicRepository.updateTopic(t);
            }
        }
        if (SystemGlobals.getBoolValue(ConfigKeys.MODERATION_LOGGING_ENABLED) && isModerator && post.getUserId() != SessionFacade.getUserSession().getUserId()) {
            ModerationHelper helper = new ModerationHelper();
            this.request.addParameter("log_original_message", originalMessage);
            ModerationLog log = helper.buildModerationLogFromRequest();
            log.getPosterUser().setId(post.getUserId());
            helper.saveModerationLog(log);
        }
        if (this.request.getParameter("notify") == null) {
            topicDao.removeSubscription(post.getTopicId(), SessionFacade.getUserSession().getUserId());
        }
        String path = this.request.getContextPath() + "/posts/list/";
        int start = ViewCommon.getStartPage();
        if (start > 0) {
            path += start + "/";
        }
        path += post.getTopicId() + SystemGlobals.getValue(ConfigKeys.SERVLET_EXTENSION) + "#" + post.getId();
        JForumExecutionContext.setRedirect(path);
        if (SystemGlobals.getBoolValue(ConfigKeys.POSTS_CACHE_ENABLED)) {
            PostRepository.update(post.getTopicId(), PostCommon.preparePostForDisplay(post));
        }
    }
}
Also used : Post(net.jforum.entities.Post) ModerationLog(net.jforum.entities.ModerationLog) TopicDAO(net.jforum.dao.TopicDAO) AttachmentException(net.jforum.exceptions.AttachmentException) PollDAO(net.jforum.dao.PollDAO) PostDAO(net.jforum.dao.PostDAO) PollChanges(net.jforum.entities.PollChanges) Poll(net.jforum.entities.Poll) Topic(net.jforum.entities.Topic) AttachmentCommon(net.jforum.view.forum.common.AttachmentCommon)

Example 8 with PostDAO

use of net.jforum.dao.PostDAO in project jforum2 by rafaelsteil.

the class PostAction method edit.

private void edit(boolean preview, Post p) {
    int userId = SessionFacade.getUserSession().getUserId();
    if (!preview) {
        PostDAO pm = DataAccessDriver.getInstance().newPostDAO();
        p = pm.selectById(this.request.getIntParameter("post_id"));
        // The post exist?
        if (p.getId() == 0) {
            this.postNotFound();
            return;
        }
    }
    boolean isModerator = SecurityRepository.canAccess(SecurityConstants.PERM_MODERATION_POST_EDIT);
    boolean canEdit = SessionFacade.isLogged() && (isModerator || p.getUserId() == userId);
    if (!canEdit) {
        this.setTemplateName(TemplateKeys.POSTS_EDIT_CANNOTEDIT);
        this.context.put("message", I18n.getMessage("CannotEditPost"));
    } else {
        Topic topic = TopicRepository.getTopic(new Topic(p.getTopicId()));
        if (topic == null) {
            topic = DataAccessDriver.getInstance().newTopicDAO().selectRaw(p.getTopicId());
        }
        if (!TopicsCommon.isTopicAccessible(topic.getForumId())) {
            return;
        }
        if (topic.getStatus() == Topic.STATUS_LOCKED && !isModerator) {
            this.topicLocked();
            return;
        }
        if (preview && this.request.getParameter("topic_type") != null) {
            topic.setType(this.request.getIntParameter("topic_type"));
        }
        if (p.hasAttachments()) {
            this.context.put("attachments", DataAccessDriver.getInstance().newAttachmentDAO().selectAttachments(p.getId()));
        }
        Poll poll = null;
        if (topic.isVote() && topic.getFirstPostId() == p.getId()) {
            // It has a poll associated with the topic
            PollDAO poolDao = DataAccessDriver.getInstance().newPollDAO();
            poll = poolDao.selectById(topic.getVoteId());
        }
        this.setTemplateName(TemplateKeys.POSTS_EDIT);
        this.context.put("attachmentsEnabled", SecurityRepository.canAccess(SecurityConstants.PERM_ATTACHMENTS_ENABLED, Integer.toString(p.getForumId())));
        this.context.put("moderationLoggingEnabled", SystemGlobals.getBoolValue(ConfigKeys.MODERATION_LOGGING_ENABLED));
        QuotaLimit ql = new AttachmentCommon(this.request, p.getForumId()).getQuotaLimit(userId);
        this.context.put("maxAttachmentsSize", new Long(ql != null ? ql.getSizeInBytes() : 1));
        this.context.put("isEdit", true);
        this.context.put("maxAttachments", SystemGlobals.getValue(ConfigKeys.ATTACHMENTS_MAX_POST));
        this.context.put("smilies", SmiliesRepository.getSmilies());
        this.context.put("forum", ForumRepository.getForum(p.getForumId()));
        this.context.put("action", "editSave");
        this.context.put("post", p);
        this.context.put("setType", p.getId() == topic.getFirstPostId());
        this.context.put("topic", topic);
        this.context.put("poll", poll);
        this.context.put("pageTitle", I18n.getMessage("PostShow.messageTitle") + " " + p.getSubject());
        this.context.put("isModerator", isModerator);
        this.context.put("start", this.request.getParameter("start"));
        this.context.put("htmlAllowed", SecurityRepository.canAccess(SecurityConstants.PERM_HTML_DISABLED, Integer.toString(topic.getForumId())));
        this.context.put("canCreateStickyOrAnnouncementTopics", SecurityRepository.canAccess(SecurityConstants.PERM_CREATE_STICKY_ANNOUNCEMENT_TOPICS));
        this.context.put("canCreatePolls", SecurityRepository.canAccess(SecurityConstants.PERM_CREATE_POLL));
    }
    UserDAO udao = DataAccessDriver.getInstance().newUserDAO();
    User u = udao.selectById(userId);
    ViewCommon.prepareUserSignature(u);
    if (preview) {
        u.setNotifyOnMessagesEnabled(this.request.getParameter("notify") != null);
        if (u.getId() != p.getUserId()) {
            // Probably a moderator is editing the message
            User previewUser = udao.selectById(p.getUserId());
            ViewCommon.prepareUserSignature(previewUser);
            this.context.put("previewUser", previewUser);
        }
    }
    this.context.put("user", u);
}
Also used : PollDAO(net.jforum.dao.PollDAO) User(net.jforum.entities.User) PostDAO(net.jforum.dao.PostDAO) UserDAO(net.jforum.dao.UserDAO) Poll(net.jforum.entities.Poll) Topic(net.jforum.entities.Topic) QuotaLimit(net.jforum.entities.QuotaLimit) AttachmentCommon(net.jforum.view.forum.common.AttachmentCommon)

Example 9 with PostDAO

use of net.jforum.dao.PostDAO in project jforum2 by rafaelsteil.

the class PostAction method review.

public void review() {
    PostDAO postDao = DataAccessDriver.getInstance().newPostDAO();
    TopicDAO topicDao = DataAccessDriver.getInstance().newTopicDAO();
    int userId = SessionFacade.getUserSession().getUserId();
    int topicId = this.request.getIntParameter("topic_id");
    Topic topic = TopicRepository.getTopic(new Topic(topicId));
    if (topic == null) {
        topic = topicDao.selectById(topicId);
    }
    if (!TopicsCommon.isTopicAccessible(topic.getForumId())) {
        return;
    }
    int count = SystemGlobals.getIntValue(ConfigKeys.POSTS_PER_PAGE);
    int start = ViewCommon.getStartPage();
    Map usersMap = topicDao.topicPosters(topic.getId());
    List helperList = PostCommon.topicPosts(postDao, false, userId, topic.getId(), start, count);
    Collections.reverse(helperList);
    this.setTemplateName(SystemGlobals.getValue(ConfigKeys.TEMPLATE_DIR) + "/empty.htm");
    this.setTemplateName(TemplateKeys.POSTS_REVIEW);
    this.context.put("posts", helperList);
    this.context.put("users", usersMap);
}
Also used : PostDAO(net.jforum.dao.PostDAO) TopicDAO(net.jforum.dao.TopicDAO) List(java.util.List) Topic(net.jforum.entities.Topic) Map(java.util.Map) HashMap(java.util.HashMap)

Example 10 with PostDAO

use of net.jforum.dao.PostDAO in project jforum2 by rafaelsteil.

the class PostAction method delete.

public void delete() {
    if (!SecurityRepository.canAccess(SecurityConstants.PERM_MODERATION_POST_REMOVE)) {
        this.setTemplateName(TemplateKeys.POSTS_CANNOT_DELETE);
        this.context.put("message", I18n.getMessage("CannotRemovePost"));
        return;
    }
    // Post
    PostDAO postDao = DataAccessDriver.getInstance().newPostDAO();
    Post p = postDao.selectById(this.request.getIntParameter("post_id"));
    if (p.getId() == 0) {
        this.postNotFound();
        return;
    }
    TopicDAO topicDao = DataAccessDriver.getInstance().newTopicDAO();
    Topic t = topicDao.selectRaw(p.getTopicId());
    if (!TopicsCommon.isTopicAccessible(t.getForumId())) {
        return;
    }
    postDao.delete(p);
    DataAccessDriver.getInstance().newUserDAO().decrementPosts(p.getUserId());
    // Karma
    KarmaDAO karmaDao = DataAccessDriver.getInstance().newKarmaDAO();
    karmaDao.updateUserKarma(p.getUserId());
    // Attachments
    new AttachmentCommon(this.request, p.getForumId()).deleteAttachments(p.getId(), p.getForumId());
    // It was the last remaining post in the topic?
    int totalPosts = topicDao.getTotalPosts(p.getTopicId());
    if (totalPosts > 0) {
        // Topic
        topicDao.decrementTotalReplies(p.getTopicId());
        int maxPostId = topicDao.getMaxPostId(p.getTopicId());
        if (maxPostId > -1) {
            topicDao.setLastPostId(p.getTopicId(), maxPostId);
        }
        int minPostId = topicDao.getMinPostId(p.getTopicId());
        if (minPostId > -1) {
            topicDao.setFirstPostId(p.getTopicId(), minPostId);
        }
        // Forum
        ForumDAO fm = DataAccessDriver.getInstance().newForumDAO();
        maxPostId = fm.getMaxPostId(p.getForumId());
        if (maxPostId > -1) {
            fm.setLastPost(p.getForumId(), maxPostId);
        }
        String returnPath = this.request.getContextPath() + "/posts/list/";
        int page = ViewCommon.getStartPage();
        if (page > 0) {
            int postsPerPage = SystemGlobals.getIntValue(ConfigKeys.POSTS_PER_PAGE);
            if (totalPosts % postsPerPage == 0) {
                page -= postsPerPage;
            }
            returnPath += page + "/";
        }
        JForumExecutionContext.setRedirect(returnPath + p.getTopicId() + SystemGlobals.getValue(ConfigKeys.SERVLET_EXTENSION));
        // Update the cache
        if (TopicRepository.isTopicCached(t)) {
            t = topicDao.selectById(t.getId());
            TopicRepository.updateTopic(t);
        }
    } else {
        // Ok, all posts were removed. Time to say goodbye
        TopicsCommon.deleteTopic(p.getTopicId(), p.getForumId(), false);
        JForumExecutionContext.setRedirect(this.request.getContextPath() + "/forums/show/" + p.getForumId() + SystemGlobals.getValue(ConfigKeys.SERVLET_EXTENSION));
    }
    this.request.addOrReplaceParameter("log_original_message", p.getText());
    ModerationHelper moderationHelper = new ModerationHelper();
    ModerationLog moderationLog = moderationHelper.buildModerationLogFromRequest();
    moderationLog.getPosterUser().setId(p.getUserId());
    moderationHelper.saveModerationLog(moderationLog);
    PostRepository.remove(t.getId(), p.getId());
    TopicRepository.loadMostRecentTopics();
    TopicRepository.loadHottestTopics();
    ForumRepository.reloadForum(p.getForumId());
}
Also used : ForumDAO(net.jforum.dao.ForumDAO) PostDAO(net.jforum.dao.PostDAO) Post(net.jforum.entities.Post) ModerationLog(net.jforum.entities.ModerationLog) KarmaDAO(net.jforum.dao.KarmaDAO) TopicDAO(net.jforum.dao.TopicDAO) Topic(net.jforum.entities.Topic) AttachmentCommon(net.jforum.view.forum.common.AttachmentCommon)

Aggregations

PostDAO (net.jforum.dao.PostDAO)21 Post (net.jforum.entities.Post)15 Topic (net.jforum.entities.Topic)13 TopicDAO (net.jforum.dao.TopicDAO)10 List (java.util.List)8 User (net.jforum.entities.User)8 AttachmentCommon (net.jforum.view.forum.common.AttachmentCommon)8 Iterator (java.util.Iterator)5 PollDAO (net.jforum.dao.PollDAO)5 Map (java.util.Map)4 ForumDAO (net.jforum.dao.ForumDAO)4 UserDAO (net.jforum.dao.UserDAO)4 ModerationLog (net.jforum.entities.ModerationLog)4 Poll (net.jforum.entities.Poll)4 Date (java.util.Date)3 HashMap (java.util.HashMap)3 Forum (net.jforum.entities.Forum)3 AttachmentException (net.jforum.exceptions.AttachmentException)3 KarmaDAO (net.jforum.dao.KarmaDAO)2 QuotaLimit (net.jforum.entities.QuotaLimit)2