Search in sources :

Example 1 with PreferenceQueryService

use of org.b3log.solo.service.PreferenceQueryService in project solo by b3log.

the class SoloServletListener method loadPreference.

/**
     * Loads preference.
     *
     * <p>
     * Loads preference from repository, loads skins from skin directory then sets it into preference if the skins
     * changed.
     * </p>
     */
private void loadPreference() {
    Stopwatchs.start("Load Preference");
    LOGGER.debug("Loading preference....");
    final PreferenceQueryService preferenceQueryService = beanManager.getReference(PreferenceQueryService.class);
    JSONObject preference;
    try {
        preference = preferenceQueryService.getPreference();
        if (null == preference) {
            LOGGER.info("Please open browser and visit [" + Latkes.getServePath() + "] to init your Solo, " + "and then enjoy it :-p");
            return;
        }
        final PreferenceMgmtService preferenceMgmtService = beanManager.getReference(PreferenceMgmtService.class);
        preferenceMgmtService.loadSkins(preference);
    } catch (final Exception e) {
        LOGGER.log(Level.ERROR, e.getMessage(), e);
        throw new IllegalStateException(e);
    }
    Stopwatchs.end();
}
Also used : PreferenceQueryService(org.b3log.solo.service.PreferenceQueryService) JSONObject(org.json.JSONObject) PreferenceMgmtService(org.b3log.solo.service.PreferenceMgmtService)

Example 2 with PreferenceQueryService

use of org.b3log.solo.service.PreferenceQueryService in project solo by b3log.

the class SoloServletListener method resolveSkinDir.

/**
     * Resolve skin (template) for the specified HTTP servlet request.
     *
     * @param httpServletRequest the specified HTTP servlet request
     */
private void resolveSkinDir(final HttpServletRequest httpServletRequest) {
    // https://github.com/b3log/solo/issues/12060
    final Cookie[] cookies = httpServletRequest.getCookies();
    if (null != cookies) {
        for (final Cookie cookie : cookies) {
            if (Skin.SKIN.equals(cookie.getName())) {
                final String skin = cookie.getValue();
                final Set<String> skinDirNames = Skins.getSkinDirNames();
                if (skinDirNames.contains(skin)) {
                    Templates.MAIN_CFG.setServletContextForTemplateLoading(SoloServletListener.getServletContext(), "/skins/" + skin);
                    httpServletRequest.setAttribute(Keys.TEMAPLTE_DIR_NAME, skin);
                    return;
                }
            }
        }
    }
    try {
        final PreferenceQueryService preferenceQueryService = beanManager.getReference(PreferenceQueryService.class);
        final JSONObject preference = preferenceQueryService.getPreference();
        if (null == preference) {
            // Did not initialize yet
            return;
        }
        final String requestURI = httpServletRequest.getRequestURI();
        String desiredView = Requests.mobileSwitchToggle(httpServletRequest);
        if (desiredView == null && !Requests.mobileRequest(httpServletRequest) || desiredView != null && desiredView.equals("normal")) {
            desiredView = preference.getString(Skin.SKIN_DIR_NAME);
        } else {
            desiredView = "mobile";
            LOGGER.log(Level.DEBUG, "The request [URI={0}] comes frome mobile device", requestURI);
        }
        Templates.MAIN_CFG.setServletContextForTemplateLoading(SoloServletListener.getServletContext(), "/skins/" + desiredView);
        httpServletRequest.setAttribute(Keys.TEMAPLTE_DIR_NAME, desiredView);
    } catch (final Exception e) {
        LOGGER.log(Level.ERROR, "Resolves skin failed", e);
    }
}
Also used : Cookie(javax.servlet.http.Cookie) PreferenceQueryService(org.b3log.solo.service.PreferenceQueryService) JSONObject(org.json.JSONObject)

Example 3 with PreferenceQueryService

use of org.b3log.solo.service.PreferenceQueryService 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 4 with PreferenceQueryService

use of org.b3log.solo.service.PreferenceQueryService in project solo by b3log.

the class AddArticleGoogleBlogSearchPinger method action.

@Override
public void action(final Event<JSONObject> event) throws EventException {
    final JSONObject eventData = event.getData();
    String articleTitle = null;
    final LatkeBeanManager beanManager = Lifecycle.getBeanManager();
    final PreferenceQueryService preferenceQueryService = beanManager.getReference(PreferenceQueryService.class);
    try {
        final JSONObject article = eventData.getJSONObject(Article.ARTICLE);
        articleTitle = article.getString(Article.ARTICLE_TITLE);
        final JSONObject preference = preferenceQueryService.getPreference();
        final String blogTitle = preference.getString(Option.ID_C_BLOG_TITLE);
        if (Latkes.getServePath().contains("localhost")) {
            LOGGER.log(Level.TRACE, "Solo runs on local server, so should not ping " + "Google Blog Search Service for the article[title={0}]", new Object[] { article.getString(Article.ARTICLE_TITLE) });
            return;
        }
        final String articlePermalink = Latkes.getServePath() + article.getString(Article.ARTICLE_PERMALINK);
        final String spec = "http://blogsearch.google.com/ping?name=" + URLEncoder.encode(blogTitle, "UTF-8") + "&url=" + URLEncoder.encode(Latkes.getServePath(), "UTF-8") + "&changesURL=" + URLEncoder.encode(articlePermalink, "UTF-8");
        LOGGER.log(Level.DEBUG, "Request Google Blog Search Service API[{0}] while adding an " + "article[title=" + articleTitle + "]", spec);
        final HTTPRequest request = new HTTPRequest();
        request.setURL(new URL(spec));
        URL_FETCH_SERVICE.fetchAsync(request);
    } catch (final Exception e) {
        LOGGER.log(Level.ERROR, "Ping Google Blog Search Service fail while adding an article[title=" + articleTitle + "]", e);
    }
}
Also used : PreferenceQueryService(org.b3log.solo.service.PreferenceQueryService) HTTPRequest(org.b3log.latke.urlfetch.HTTPRequest) JSONObject(org.json.JSONObject) URL(java.net.URL) EventException(org.b3log.latke.event.EventException) LatkeBeanManager(org.b3log.latke.ioc.LatkeBeanManager)

Example 5 with PreferenceQueryService

use of org.b3log.solo.service.PreferenceQueryService in project solo by b3log.

the class ArticleSender method action.

@Override
public void action(final Event<JSONObject> event) throws EventException {
    final JSONObject data = event.getData();
    LOGGER.log(Level.DEBUG, "Processing an event[type={0}, data={1}] in listener[className={2}]", new Object[] { event.getType(), data, ArticleSender.class.getName() });
    try {
        final JSONObject originalArticle = data.getJSONObject(Article.ARTICLE);
        if (!originalArticle.getBoolean(Article.ARTICLE_IS_PUBLISHED)) {
            LOGGER.log(Level.DEBUG, "Ignores post article[title={0}] to Rhythm", originalArticle.getString(Article.ARTICLE_TITLE));
            return;
        }
        final LatkeBeanManager beanManager = Lifecycle.getBeanManager();
        final PreferenceQueryService preferenceQueryService = beanManager.getReference(PreferenceQueryService.class);
        final JSONObject preference = preferenceQueryService.getPreference();
        if (null == preference) {
            throw new EventException("Not found preference");
        }
        if (!Strings.isEmptyOrNull(originalArticle.optString(Article.ARTICLE_VIEW_PWD))) {
            return;
        }
        if (Latkes.getServePath().contains("localhost")) {
            LOGGER.log(Level.INFO, "Solo runs on local server, so should not send this article[id={0}, title={1}] to Rhythm", new Object[] { originalArticle.getString(Keys.OBJECT_ID), originalArticle.getString(Article.ARTICLE_TITLE) });
            return;
        }
        final HTTPRequest httpRequest = new HTTPRequest();
        httpRequest.setURL(ADD_ARTICLE_URL);
        httpRequest.setRequestMethod(HTTPRequestMethod.POST);
        final JSONObject requestJSONObject = new JSONObject();
        final JSONObject article = new JSONObject();
        article.put(Keys.OBJECT_ID, originalArticle.getString(Keys.OBJECT_ID));
        article.put(Article.ARTICLE_TITLE, originalArticle.getString(Article.ARTICLE_TITLE));
        article.put(Article.ARTICLE_PERMALINK, originalArticle.getString(Article.ARTICLE_PERMALINK));
        article.put(Article.ARTICLE_TAGS_REF, originalArticle.getString(Article.ARTICLE_TAGS_REF));
        article.put(Article.ARTICLE_AUTHOR_EMAIL, originalArticle.getString(Article.ARTICLE_AUTHOR_EMAIL));
        article.put(Article.ARTICLE_CONTENT, originalArticle.getString(Article.ARTICLE_CONTENT));
        article.put(Article.ARTICLE_CREATE_DATE, ((Date) originalArticle.get(Article.ARTICLE_CREATE_DATE)).getTime());
        article.put(Common.POST_TO_COMMUNITY, originalArticle.getBoolean(Common.POST_TO_COMMUNITY));
        // Removes this property avoid to persist
        originalArticle.remove(Common.POST_TO_COMMUNITY);
        requestJSONObject.put(Article.ARTICLE, article);
        requestJSONObject.put(Common.BLOG_VERSION, SoloServletListener.VERSION);
        requestJSONObject.put(Common.BLOG, "B3log Solo");
        requestJSONObject.put(Option.ID_C_BLOG_TITLE, preference.getString(Option.ID_C_BLOG_TITLE));
        requestJSONObject.put("blogHost", Latkes.getServePath());
        requestJSONObject.put("userB3Key", preference.optString(Option.ID_C_KEY_OF_SOLO));
        requestJSONObject.put("clientAdminEmail", preference.optString(Option.ID_C_ADMIN_EMAIL));
        requestJSONObject.put("clientRuntimeEnv", Latkes.getRuntimeEnv().name());
        httpRequest.setPayload(requestJSONObject.toString().getBytes("UTF-8"));
        urlFetchService.fetchAsync(httpRequest);
    } catch (final Exception e) {
        LOGGER.log(Level.ERROR, "Sends an article to Rhythm error: {0}", e.getMessage());
    }
    LOGGER.log(Level.DEBUG, "Sent an article to Rhythm");
}
Also used : PreferenceQueryService(org.b3log.solo.service.PreferenceQueryService) HTTPRequest(org.b3log.latke.urlfetch.HTTPRequest) JSONObject(org.json.JSONObject) EventException(org.b3log.latke.event.EventException) MalformedURLException(java.net.MalformedURLException) EventException(org.b3log.latke.event.EventException) LatkeBeanManager(org.b3log.latke.ioc.LatkeBeanManager)

Aggregations

PreferenceQueryService (org.b3log.solo.service.PreferenceQueryService)9 JSONObject (org.json.JSONObject)9 EventException (org.b3log.latke.event.EventException)7 LatkeBeanManager (org.b3log.latke.ioc.LatkeBeanManager)7 HTTPRequest (org.b3log.latke.urlfetch.HTTPRequest)5 MalformedURLException (java.net.MalformedURLException)3 URL (java.net.URL)2 Message (org.b3log.latke.mail.MailService.Message)2 CommentRepository (org.b3log.solo.repository.CommentRepository)2 Cookie (javax.servlet.http.Cookie)1 ArticleSender (org.b3log.solo.event.rhythm.ArticleSender)1 PreferenceMgmtService (org.b3log.solo.service.PreferenceMgmtService)1