/**
* 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_TITLE$]", _kbArticle.getTitle());
setContextAttribute("[$ARTICLE_URL$]", kbArticleURL);
setContextAttribute("[$ARTICLE_VERSION$]", kbArticleVersion);
setContextAttribute("[$CATEGORY_TITLE$]", categoryTitle);
return super.replaceContent(content, locale);
}
private KBArticle _kbArticle;
private ServiceContext _serviceContext;
}