com.liferay.knowledgebase.admin.util.AdminSubscriptionSender.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.knowledgebase.admin.util.AdminSubscriptionSender.java

Source

/**
 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library 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 Lesser General Public License for more
 * details.
 */

package com.liferay.knowledgebase.admin.util;

import com.liferay.knowledgebase.model.KBArticle;
import com.liferay.knowledgebase.service.KBArticleLocalServiceUtil;
import com.liferay.knowledgebase.service.permission.KBArticlePermission;
import com.liferay.knowledgebase.util.ActionKeys;
import com.liferay.knowledgebase.util.KnowledgeBaseUtil;
import com.liferay.portal.kernel.language.LanguageUtil;
import com.liferay.portal.kernel.repository.model.FileEntry;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.TextFormatter;
import com.liferay.portal.model.Subscription;
import com.liferay.portal.model.User;
import com.liferay.portal.security.auth.PrincipalThreadLocal;
import com.liferay.portal.security.permission.PermissionChecker;
import com.liferay.portal.security.permission.PermissionCheckerFactoryUtil;
import com.liferay.portal.security.permission.PermissionThreadLocal;
import com.liferay.portal.service.ServiceContext;
import com.liferay.portal.util.SubscriptionSender;

import java.util.List;
import java.util.Locale;

/**
 * @author Peter Shin
 * @author Brian Wing Shun Chan
 */
public class AdminSubscriptionSender extends SubscriptionSender {

    public AdminSubscriptionSender(KBArticle kbArticle, ServiceContext serviceContext) {

        _kbArticle = kbArticle;
        _serviceContext = serviceContext;
    }

    @Override
    protected void deleteSubscription(Subscription subscription) throws Exception {

        // KB article subscription

        if (subscription.getClassPK() == _kbArticle.getResourcePrimKey()) {
            KBArticleLocalServiceUtil.unsubscribeKBArticle(subscription.getUserId(),
                    _kbArticle.getResourcePrimKey());
        }

        // Group subscription

        if (subscription.getClassPK() == _kbArticle.getGroupId()) {
            KBArticleLocalServiceUtil.unsubscribeGroupKBArticles(subscription.getUserId(), _kbArticle.getGroupId());
        }
    }

    protected String getEmailKBArticleAttachments(Locale locale) throws Exception {

        List<FileEntry> attachmentsFileEntries = _kbArticle.getAttachmentsFileEntries();

        if (attachmentsFileEntries.isEmpty()) {
            return StringPool.BLANK;
        }

        StringBundler sb = new StringBundler(attachmentsFileEntries.size() * 5);

        for (FileEntry fileEntry : attachmentsFileEntries) {
            sb.append(fileEntry.getTitle());
            sb.append(" (");
            sb.append(TextFormatter.formatStorageSize(fileEntry.getSize(), locale));
            sb.append(")");
            sb.append("<br />");
        }

        return sb.toString();
    }

    @Override
    protected boolean hasPermission(Subscription subscription, String inferredClassName, long inferredClassPK,
            User user) throws Exception {

        String name = PrincipalThreadLocal.getName();

        PermissionChecker contextPermissionChecker = PermissionThreadLocal.getPermissionChecker();

        try {
            PrincipalThreadLocal.setName(user.getUserId());

            PermissionChecker permissionChecker = PermissionCheckerFactoryUtil.create(user);

            PermissionThreadLocal.setPermissionChecker(permissionChecker);

            return KBArticlePermission.contains(permissionChecker, _kbArticle, ActionKeys.VIEW);
        } finally {
            PrincipalThreadLocal.setName(name);

            PermissionThreadLocal.setPermissionChecker(contextPermissionChecker);
        }
    }

    @Override
    protected String replaceContent(String content, Locale locale) throws Exception {

        String kbArticleAttachments = getEmailKBArticleAttachments(locale);
        String kbArticleURL = KnowledgeBaseUtil.getKBArticleURL(_serviceContext.getPlid(),
                _kbArticle.getResourcePrimKey(), _kbArticle.getStatus(), _serviceContext.getPortalURL(), false);
        String kbArticleVersion = LanguageUtil.format(locale, "version-x", String.valueOf(_kbArticle.getVersion()),
                false);
        String categoryTitle = LanguageUtil.get(locale, "category.kb");

        setContextAttribute("[$ARTICLE_ATTACHMENTS$]", kbArticleAttachments);
        setContextAttribute("[$ARTICLE_URL$]", kbArticleURL);
        setContextAttribute("[$ARTICLE_VERSION$]", kbArticleVersion);
        setContextAttribute("[$CATEGORY_TITLE$]", categoryTitle);

        return super.replaceContent(content, locale);
    }

    private KBArticle _kbArticle;
    private ServiceContext _serviceContext;

}