Search in sources :

Example 1 with CommentRepository

use of org.b3log.solo.repository.CommentRepository in project solo by b3log.

the class ArticleCommentReplyNotifier method action.

@Override
public void action(final Event<JSONObject> event) throws EventException {
    final JSONObject eventData = event.getData();
    final JSONObject comment = eventData.optJSONObject(Comment.COMMENT);
    final JSONObject article = eventData.optJSONObject(Article.ARTICLE);
    LOGGER.log(Level.DEBUG, "Processing an event[type={0}, data={1}] in listener[className={2}]", new Object[] { event.getType(), eventData, ArticleCommentReplyNotifier.class.getName() });
    final String originalCommentId = comment.optString(Comment.COMMENT_ORIGINAL_COMMENT_ID);
    if (Strings.isEmptyOrNull(originalCommentId)) {
        LOGGER.log(Level.DEBUG, "This comment[id={0}] is not a reply", comment.optString(Keys.OBJECT_ID));
        return;
    }
    if (Latkes.getServePath().contains("localhost")) {
        LOGGER.log(Level.INFO, "Solo runs on local server, so should not send mail");
        return;
    }
    final LatkeBeanManager beanManager = Lifecycle.getBeanManager();
    final PreferenceQueryService preferenceQueryService = beanManager.getReference(PreferenceQueryService.class);
    final CommentRepository commentRepository = beanManager.getReference(CommentRepositoryImpl.class);
    try {
        final String commentEmail = comment.getString(Comment.COMMENT_EMAIL);
        final JSONObject originalComment = commentRepository.get(originalCommentId);
        final String originalCommentEmail = originalComment.getString(Comment.COMMENT_EMAIL);
        if (originalCommentEmail.equalsIgnoreCase(commentEmail)) {
            return;
        }
        final JSONObject preference = preferenceQueryService.getPreference();
        if (null == preference) {
            throw new EventException("Not found preference");
        }
        final String blogTitle = preference.getString(Option.ID_C_BLOG_TITLE);
        final String adminEmail = preference.getString(Option.ID_C_ADMIN_EMAIL);
        final String commentContent = comment.getString(Comment.COMMENT_CONTENT);
        final String commentSharpURL = comment.getString(Comment.COMMENT_SHARP_URL);
        final Message message = new Message();
        message.setFrom(adminEmail);
        message.addRecipient(originalCommentEmail);
        final JSONObject replyNotificationTemplate = preferenceQueryService.getReplyNotificationTemplate();
        final String articleTitle = article.getString(Article.ARTICLE_TITLE);
        final String articleLink = Latkes.getServePath() + article.getString(Article.ARTICLE_PERMALINK);
        final String commentName = comment.getString(Comment.COMMENT_NAME);
        final String commentURL = comment.getString(Comment.COMMENT_URL);
        String commenter;
        if (!"http://".equals(commentURL)) {
            commenter = "<a target=\"_blank\" " + "href=\"" + commentURL + "\">" + commentName + "</a>";
        } else {
            commenter = commentName;
        }
        final String mailSubject = replyNotificationTemplate.getString("subject").replace("${postLink}", articleLink).replace("${postTitle}", articleTitle).replace("${replier}", commenter).replace("${blogTitle}", blogTitle).replace("${replyURL}", Latkes.getServePath() + commentSharpURL).replace("${replyContent}", commentContent);
        message.setSubject(mailSubject);
        final String mailBody = replyNotificationTemplate.getString("body").replace("${postLink}", articleLink).replace("${postTitle}", articleTitle).replace("${replier}", commenter).replace("${blogTitle}", blogTitle).replace("${replyURL}", Latkes.getServePath() + commentSharpURL).replace("${replyContent}", commentContent);
        message.setHtmlBody(mailBody);
        LOGGER.log(Level.DEBUG, "Sending a mail[mailSubject={0}, mailBody=[{1}] to [{2}]", new Object[] { mailSubject, mailBody, originalCommentEmail });
        mailService.send(message);
    } catch (final Exception e) {
        LOGGER.log(Level.ERROR, e.getMessage(), e);
        throw new EventException("Reply notifier error!");
    }
}
Also used : PreferenceQueryService(org.b3log.solo.service.PreferenceQueryService) JSONObject(org.json.JSONObject) Message(org.b3log.latke.mail.MailService.Message) EventException(org.b3log.latke.event.EventException) CommentRepository(org.b3log.solo.repository.CommentRepository) EventException(org.b3log.latke.event.EventException) LatkeBeanManager(org.b3log.latke.ioc.LatkeBeanManager)

Example 2 with CommentRepository

use of org.b3log.solo.repository.CommentRepository in project solo by b3log.

the class PageCommentReplyNotifier method action.

@Override
public void action(final Event<JSONObject> event) throws EventException {
    final JSONObject eventData = event.getData();
    final JSONObject comment = eventData.optJSONObject(Comment.COMMENT);
    final JSONObject page = eventData.optJSONObject(Page.PAGE);
    LOGGER.log(Level.DEBUG, "Processing an event[type={0}, data={1}] in listener[className={2}]", new Object[] { event.getType(), eventData, PageCommentReplyNotifier.class.getName() });
    final String originalCommentId = comment.optString(Comment.COMMENT_ORIGINAL_COMMENT_ID);
    if (Strings.isEmptyOrNull(originalCommentId)) {
        LOGGER.log(Level.DEBUG, "This comment[id={0}] is not a reply", comment.optString(Keys.OBJECT_ID));
        return;
    }
    final LatkeBeanManager beanManager = Lifecycle.getBeanManager();
    final PreferenceQueryService preferenceQueryService = beanManager.getReference(PreferenceQueryService.class);
    final CommentRepository commentRepository = beanManager.getReference(CommentRepositoryImpl.class);
    try {
        final String commentEmail = comment.getString(Comment.COMMENT_EMAIL);
        final JSONObject originalComment = commentRepository.get(originalCommentId);
        final String originalCommentEmail = originalComment.getString(Comment.COMMENT_EMAIL);
        if (originalCommentEmail.equalsIgnoreCase(commentEmail)) {
            return;
        }
        final JSONObject preference = preferenceQueryService.getPreference();
        if (null == preference) {
            throw new EventException("Not found preference");
        }
        final String blogTitle = preference.getString(Option.ID_C_BLOG_TITLE);
        final String adminEmail = preference.getString(Option.ID_C_ADMIN_EMAIL);
        final String commentContent = comment.getString(Comment.COMMENT_CONTENT);
        final String commentSharpURL = comment.getString(Comment.COMMENT_SHARP_URL);
        final Message message = new Message();
        message.setFrom(adminEmail);
        message.addRecipient(originalCommentEmail);
        final JSONObject replyNotificationTemplate = preferenceQueryService.getReplyNotificationTemplate();
        final String mailSubject = replyNotificationTemplate.getString("subject").replace("${blogTitle}", blogTitle);
        message.setSubject(mailSubject);
        final String pageTitle = page.getString(Page.PAGE_TITLE);
        final String pageLink = Latkes.getServePath() + page.getString(Page.PAGE_PERMALINK);
        final String commentName = comment.getString(Comment.COMMENT_NAME);
        final String commentURL = comment.getString(Comment.COMMENT_URL);
        String commenter;
        if (!"http://".equals(commentURL)) {
            commenter = "<a target=\"_blank\" " + "href=\"" + commentURL + "\">" + commentName + "</a>";
        } else {
            commenter = commentName;
        }
        final String mailBody = replyNotificationTemplate.getString("body").replace("${postLink}", pageLink).replace("${postTitle}", pageTitle).replace("${replier}", commenter).replace("${replyURL}", Latkes.getServePath() + commentSharpURL).replace("${replyContent}", commentContent);
        message.setHtmlBody(mailBody);
        LOGGER.log(Level.DEBUG, "Sending a mail[mailSubject={0}, mailBody=[{1}] to [{2}]", new Object[] { mailSubject, mailBody, originalCommentEmail });
        mailService.send(message);
    } catch (final Exception e) {
        LOGGER.log(Level.ERROR, e.getMessage(), e);
        throw new EventException("Reply notifier error!");
    }
}
Also used : PreferenceQueryService(org.b3log.solo.service.PreferenceQueryService) JSONObject(org.json.JSONObject) Message(org.b3log.latke.mail.MailService.Message) EventException(org.b3log.latke.event.EventException) CommentRepository(org.b3log.solo.repository.CommentRepository) EventException(org.b3log.latke.event.EventException) LatkeBeanManager(org.b3log.latke.ioc.LatkeBeanManager)

Example 3 with CommentRepository

use of org.b3log.solo.repository.CommentRepository in project solo by b3log.

the class CommentRepositoryImplTestCase method add.

/**
     * Adds successfully.
     * 
     * @throws Exception exception
     */
@Test
public void add() throws Exception {
    final CommentRepository commentRepository = getCommentRepository();
    final JSONObject comment = new JSONObject();
    comment.put(Comment.COMMENT_CONTENT, "comment1 content");
    comment.put(Comment.COMMENT_DATE, new Date());
    comment.put(Comment.COMMENT_EMAIL, "test@gmail.com");
    comment.put(Comment.COMMENT_NAME, "comment1 name");
    comment.put(Comment.COMMENT_ON_ID, "comment1 on id");
    comment.put(Comment.COMMENT_ON_TYPE, "comment1 on type");
    comment.put(Comment.COMMENT_ORIGINAL_COMMENT_ID, "");
    comment.put(Comment.COMMENT_ORIGINAL_COMMENT_NAME, "");
    comment.put(Comment.COMMENT_SHARP_URL, "comment1 sharp url");
    comment.put(Comment.COMMENT_URL, "comment1 url");
    comment.put(Comment.COMMENT_THUMBNAIL_URL, "comment1 thumbnail url");
    final Transaction transaction = commentRepository.beginTransaction();
    commentRepository.add(comment);
    transaction.commit();
    final List<JSONObject> comments = commentRepository.getComments("comment1 on id", 1, Integer.MAX_VALUE);
    Assert.assertNotNull(comments);
    Assert.assertEquals(comments.size(), 1);
    Assert.assertEquals(commentRepository.getComments("not found", 1, Integer.MAX_VALUE).size(), 0);
    Assert.assertEquals(commentRepository.getRecentComments(3).size(), 1);
}
Also used : JSONObject(org.json.JSONObject) Transaction(org.b3log.latke.repository.Transaction) CommentRepository(org.b3log.solo.repository.CommentRepository) Date(java.util.Date) Test(org.testng.annotations.Test)

Aggregations

CommentRepository (org.b3log.solo.repository.CommentRepository)3 JSONObject (org.json.JSONObject)3 EventException (org.b3log.latke.event.EventException)2 LatkeBeanManager (org.b3log.latke.ioc.LatkeBeanManager)2 Message (org.b3log.latke.mail.MailService.Message)2 PreferenceQueryService (org.b3log.solo.service.PreferenceQueryService)2 Date (java.util.Date)1 Transaction (org.b3log.latke.repository.Transaction)1 Test (org.testng.annotations.Test)1