@Override protected void doReindex(Object obj) throws Exception { KBArticle kbArticle = (KBArticle) obj; SearchEngineUtil.updateDocument( getSearchEngineId(), kbArticle.getCompanyId(), getDocument(kbArticle)); }
protected void deleteSubscriptions(KBArticle kbArticle) throws PortalException, SystemException { List<Subscription> subscriptions = subscriptionLocalService.getSubscriptions( kbArticle.getCompanyId(), KBArticle.class.getName(), kbArticle.getResourcePrimKey()); for (Subscription subscription : subscriptions) { unsubscribeKBArticle(subscription.getUserId(), subscription.getClassPK()); } }
public void updateKBArticleResources( KBArticle kbArticle, String[] groupPermissions, String[] guestPermissions) throws PortalException, SystemException { resourceLocalService.updateResources( kbArticle.getCompanyId(), kbArticle.getGroupId(), KBArticle.class.getName(), kbArticle.getResourcePrimKey(), groupPermissions, guestPermissions); }
protected void deleteKBArticleAttachments(KBArticle kbArticle, long folderId) throws PortalException, SystemException { try { DLStoreUtil.deleteDirectory( kbArticle.getCompanyId(), CompanyConstants.SYSTEM, KBArticleConstants.DIR_NAME_PREFIX + folderId); } catch (NoSuchDirectoryException nsde) { _log.error("No directory found for " + nsde.getMessage()); } }
protected void reindexKBArticles(KBArticle kbArticle) throws Exception { // See KBArticlePermission#contains List<KBArticle> kbArticles = KBArticleLocalServiceUtil.getKBArticleAndAllDescendants( kbArticle.getResourcePrimKey(), WorkflowConstants.STATUS_APPROVED, null); Collection<Document> documents = new ArrayList<Document>(); for (KBArticle curKBArticle : kbArticles) { documents.add(getDocument(curKBArticle)); } SearchEngineUtil.updateDocuments(kbArticle.getCompanyId(), documents); }
public static void updateAttachments(KBArticle kbArticle) { try { long folderId = kbArticle.getClassPK(); String oldDirName = "knowledgebase/articles/" + folderId; String newDirName = "knowledgebase/kbarticles/" + folderId; DLLocalServiceUtil.addDirectory( kbArticle.getCompanyId(), CompanyConstants.SYSTEM, newDirName); String[] fileNames = DLLocalServiceUtil.getFileNames( kbArticle.getCompanyId(), CompanyConstants.SYSTEM, oldDirName); ServiceContext serviceContext = new ServiceContext(); serviceContext.setCompanyId(kbArticle.getCompanyId()); serviceContext.setScopeGroupId(kbArticle.getGroupId()); for (String fileName : fileNames) { String shortFileName = FileUtil.getShortFileName(fileName); byte[] bytes = DLLocalServiceUtil.getFile(kbArticle.getCompanyId(), CompanyConstants.SYSTEM, fileName); DLLocalServiceUtil.addFile( kbArticle.getCompanyId(), CompanyConstants.SYSTEM_STRING, GroupConstants.DEFAULT_PARENT_GROUP_ID, CompanyConstants.SYSTEM, newDirName + StringPool.SLASH + shortFileName, 0, StringPool.BLANK, serviceContext.getModifiedDate(null), serviceContext, bytes); } DLLocalServiceUtil.deleteDirectory( kbArticle.getCompanyId(), CompanyConstants.SYSTEM_STRING, CompanyConstants.SYSTEM, oldDirName); if (_log.isInfoEnabled()) { _log.info("Added attachments for " + folderId); } } catch (Exception e) { _log.error(e.getMessage()); } }
public String updateAttachments( long resourcePrimKey, String dirName, ServiceContext serviceContext) throws PortalException, SystemException { if (Validator.isNotNull(dirName)) { return dirName; } dirName = "knowledgebase/temp/attachments/" + counterLocalService.increment(); DLStoreUtil.addDirectory(serviceContext.getCompanyId(), CompanyConstants.SYSTEM, dirName); if (resourcePrimKey <= 0) { return dirName; } KBArticle kbArticle = getLatestKBArticle(resourcePrimKey, WorkflowConstants.STATUS_ANY); for (String fileName : kbArticle.getAttachmentsFileNames()) { String shortFileName = FileUtil.getShortFileName(fileName); InputStream inputStream = null; try { inputStream = DLStoreUtil.getFileAsStream( kbArticle.getCompanyId(), CompanyConstants.SYSTEM, fileName); addAttachment(dirName, shortFileName, inputStream, serviceContext); } finally { StreamUtil.cleanUp(inputStream); } } return dirName; }
@Override public void deleteKBArticle(KBArticle kbArticle) throws PortalException, SystemException { // Child kb articles List<KBArticle> siblingKBArticles = getSiblingKBArticles( kbArticle.getGroupId(), kbArticle.getResourcePrimKey(), WorkflowConstants.STATUS_ANY, QueryUtil.ALL_POS, QueryUtil.ALL_POS, new KBArticlePriorityComparator()); for (KBArticle siblingKBArticle : siblingKBArticles) { deleteKBArticle(siblingKBArticle); } // Resources resourceLocalService.deleteResource( kbArticle.getCompanyId(), KBArticle.class.getName(), ResourceConstants.SCOPE_INDIVIDUAL, kbArticle.getResourcePrimKey()); // KB articles kbArticlePersistence.removeByResourcePrimKey(kbArticle.getResourcePrimKey()); // KB comments kbCommentLocalService.deleteKBComments( KBArticle.class.getName(), kbArticle.getResourcePrimKey()); // Asset deleteAssets(kbArticle); // Ratings ratingsStatsLocalService.deleteStats(KBArticle.class.getName(), kbArticle.getResourcePrimKey()); // Social socialActivityLocalService.deleteActivities( KBArticle.class.getName(), kbArticle.getResourcePrimKey()); // Indexer Indexer indexer = IndexerRegistryUtil.getIndexer(KBArticle.class); indexer.delete(kbArticle); // Attachments deleteKBArticleAttachments(kbArticle); // Subscriptions deleteSubscriptions(kbArticle); // Workflow workflowInstanceLinkLocalService.deleteWorkflowInstanceLinks( kbArticle.getCompanyId(), kbArticle.getGroupId(), KBArticle.class.getName(), kbArticle.getResourcePrimKey()); }
protected void notifySubscribers(KBArticle kbArticle, ServiceContext serviceContext) throws PortalException, SystemException { if (Validator.isNull(serviceContext.getLayoutFullURL())) { return; } PortletPreferences preferences = ServiceContextUtil.getPortletPreferences(serviceContext); if (preferences == null) { long ownerId = kbArticle.getGroupId(); int ownerType = PortletKeys.PREFS_OWNER_TYPE_GROUP; long plid = PortletKeys.PREFS_PLID_SHARED; String portletId = PortletKeys.KNOWLEDGE_BASE_ADMIN; String defaultPreferences = null; preferences = portletPreferencesLocalService.getPreferences( kbArticle.getCompanyId(), ownerId, ownerType, plid, portletId, defaultPreferences); } if (serviceContext.isCommandAdd() && !AdminUtil.getEmailKBArticleAddedEnabled(preferences)) { return; } if (serviceContext.isCommandUpdate() && !AdminUtil.getEmailKBArticleUpdatedEnabled(preferences)) { return; } String fromName = AdminUtil.getEmailFromName(preferences); String fromAddress = AdminUtil.getEmailFromAddress(preferences); String kbArticleContent = StringUtil.replace( kbArticle.getContent(), new String[] {"href=\"/", "src=\"/"}, new String[] { "href=\"" + serviceContext.getPortalURL() + "/", "src=\"" + serviceContext.getPortalURL() + "/" }); Map<String, String> kbArticleDiffs = getEmailKBArticleDiffs(kbArticle); for (String key : kbArticleDiffs.keySet()) { String value = StringUtil.replace( kbArticleDiffs.get(key), new String[] {"href=\"/", "src=\"/"}, new String[] { "href=\"" + serviceContext.getPortalURL() + "/", "src=\"" + serviceContext.getPortalURL() + "/" }); kbArticleDiffs.put(key, value); } String subject = null; String body = null; if (serviceContext.isCommandAdd()) { subject = AdminUtil.getEmailKBArticleAddedSubject(preferences); body = AdminUtil.getEmailKBArticleUpdatedBody(preferences); } else { subject = AdminUtil.getEmailKBArticleUpdatedSubject(preferences); body = AdminUtil.getEmailKBArticleUpdatedBody(preferences); } SubscriptionSender subscriptionSender = new AdminSubscriptionSender(kbArticle, serviceContext); subscriptionSender.setBody(body); subscriptionSender.setCompanyId(kbArticle.getCompanyId()); subscriptionSender.setContextAttributes( "[$ARTICLE_CONTENT$]", kbArticleContent, "[$ARTICLE_CONTENT_DIFF$]", kbArticleDiffs.get("content"), "[$ARTICLE_TITLE$]", kbArticle.getTitle(), "[$ARTICLE_TITLE_DIFF$]", kbArticleDiffs.get("title")); subscriptionSender.setContextUserPrefix("ARTICLE"); subscriptionSender.setFrom(fromAddress, fromName); subscriptionSender.setHtmlFormat(true); subscriptionSender.setMailId("kb_article", kbArticle.getKbArticleId()); subscriptionSender.setPortletId(serviceContext.getPortletId()); subscriptionSender.setReplyToAddress(fromAddress); subscriptionSender.setScopeGroupId(kbArticle.getGroupId()); subscriptionSender.setSubject(subject); subscriptionSender.setUserId(kbArticle.getUserId()); subscriptionSender.addPersistedSubscribers(KBArticle.class.getName(), kbArticle.getGroupId()); subscriptionSender.addPersistedSubscribers( KBArticle.class.getName(), kbArticle.getResourcePrimKey()); while (!kbArticle.isRoot()) { kbArticle = getLatestKBArticle( kbArticle.getParentResourcePrimKey(), WorkflowConstants.STATUS_APPROVED); subscriptionSender.addPersistedSubscribers( KBArticle.class.getName(), kbArticle.getResourcePrimKey()); } subscriptionSender.flushNotificationsAsync(); }
@Override protected void doDelete(Object obj) throws Exception { KBArticle kbArticle = (KBArticle) obj; deleteDocument(kbArticle.getCompanyId(), kbArticle.getResourcePrimKey()); }
protected void notifySubscribers(KBComment kbComment, ServiceContext serviceContext) throws PortalException { PortletPreferences preferences = portletPreferencesLocalService.getPreferences( kbComment.getCompanyId(), kbComment.getGroupId(), PortletKeys.PREFS_OWNER_TYPE_GROUP, PortletKeys.PREFS_PLID_SHARED, PortletKeys.KNOWLEDGE_BASE_ADMIN, null); if (!AdminUtil.isSuggestionStatusChangeNotificationEnabled( kbComment.getStatus(), preferences)) { return; } String fromName = AdminUtil.getEmailFromName(preferences, serviceContext.getCompanyId()); String fromAddress = AdminUtil.getEmailFromAddress(preferences, kbComment.getCompanyId()); String subject = AdminUtil.getEmailKBArticleSuggestionNotificationSubject( kbComment.getStatus(), preferences); String body = AdminUtil.getEmailKBArticleSuggestionNotificationBody(kbComment.getStatus(), preferences); KBArticle kbArticle = kbArticleLocalService.getLatestKBArticle( kbComment.getClassPK(), WorkflowConstants.STATUS_APPROVED); String kbArticleContent = StringUtil.replace( kbArticle.getContent(), new String[] {"href=\"/", "src=\"/"}, new String[] { "href=\"" + serviceContext.getPortalURL() + "/", "src=\"" + serviceContext.getPortalURL() + "/" }); SubscriptionSender subscriptionSender = new AdminSubscriptionSender(kbArticle, serviceContext); subscriptionSender.setBody(body); subscriptionSender.setCompanyId(kbArticle.getCompanyId()); subscriptionSender.setContextAttribute("[$ARTICLE_CONTENT$]", kbArticleContent, false); subscriptionSender.setContextAttribute("[$ARTICLE_TITLE$]", kbArticle.getTitle(), false); subscriptionSender.setContextAttribute("[$COMMENT_CONTENT$]", kbComment.getContent(), false); subscriptionSender.setContextUserPrefix("ARTICLE"); subscriptionSender.setFrom(fromAddress, fromName); subscriptionSender.setHtmlFormat(true); subscriptionSender.setMailId("kb_article", kbArticle.getKbArticleId()); subscriptionSender.setPortletId(serviceContext.getPortletId()); subscriptionSender.setReplyToAddress(fromAddress); subscriptionSender.setScopeGroupId(kbArticle.getGroupId()); subscriptionSender.setSubject(subject); subscriptionSender.setUserId(kbArticle.getUserId()); User user = userLocalService.getUser(kbComment.getUserId()); subscriptionSender.addRuntimeSubscribers(user.getEmailAddress(), user.getFullName()); subscriptionSender.flushNotificationsAsync(); }