2 * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.
\r
4 * This library is free software; you can redistribute it and/or modify it under
\r
5 * the terms of the GNU Lesser General Public License as published by the Free
\r
6 * Software Foundation; either version 2.1 of the License, or (at your option)
\r
9 * This library is distributed in the hope that it will be useful, but WITHOUT
\r
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
\r
11 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
\r
15 package com.liferay.portlet.blogs.service.impl;
\r
17 import java.io.IOException;
\r
18 import java.io.InputStream;
\r
19 import java.util.ArrayList;
\r
20 import java.util.Date;
\r
21 import java.util.HashMap;
\r
22 import java.util.HashSet;
\r
23 import java.util.List;
\r
24 import java.util.Locale;
\r
25 import java.util.Map;
\r
26 import java.util.Set;
\r
27 import java.util.regex.Matcher;
\r
28 import java.util.regex.Pattern;
\r
30 import javax.portlet.PortletPreferences;
\r
32 import net.htmlparser.jericho.Source;
\r
33 import net.htmlparser.jericho.StartTag;
\r
35 import com.liferay.portal.kernel.exception.PortalException;
\r
36 import com.liferay.portal.kernel.exception.SystemException;
\r
37 import com.liferay.portal.kernel.json.JSONFactoryUtil;
\r
38 import com.liferay.portal.kernel.json.JSONObject;
\r
39 import com.liferay.portal.kernel.log.Log;
\r
40 import com.liferay.portal.kernel.log.LogFactoryUtil;
\r
41 import com.liferay.portal.kernel.search.BooleanQuery;
\r
42 import com.liferay.portal.kernel.search.BooleanQueryFactoryUtil;
\r
43 import com.liferay.portal.kernel.search.Field;
\r
44 import com.liferay.portal.kernel.search.Hits;
\r
45 import com.liferay.portal.kernel.search.Indexer;
\r
46 import com.liferay.portal.kernel.search.IndexerRegistryUtil;
\r
47 import com.liferay.portal.kernel.search.SearchContext;
\r
48 import com.liferay.portal.kernel.search.SearchEngineUtil;
\r
49 import com.liferay.portal.kernel.search.SolrQueryUtil;
\r
50 import com.liferay.portal.kernel.util.Constants;
\r
51 import com.liferay.portal.kernel.util.ContentTypes;
\r
52 import com.liferay.portal.kernel.util.FileUtil;
\r
53 import com.liferay.portal.kernel.util.GetterUtil;
\r
54 import com.liferay.portal.kernel.util.HtmlUtil;
\r
55 import com.liferay.portal.kernel.util.HttpUtil;
\r
56 import com.liferay.portal.kernel.util.OrderByComparator;
\r
57 import com.liferay.portal.kernel.util.PropsKeys;
\r
58 import com.liferay.portal.kernel.util.SetUtil;
\r
59 import com.liferay.portal.kernel.util.StringBundler;
\r
60 import com.liferay.portal.kernel.util.StringPool;
\r
61 import com.liferay.portal.kernel.util.StringUtil;
\r
62 import com.liferay.portal.kernel.util.Validator;
\r
63 import com.liferay.portal.kernel.workflow.WorkflowConstants;
\r
64 import com.liferay.portal.kernel.workflow.WorkflowHandlerRegistryUtil;
\r
65 import com.liferay.portal.model.Group;
\r
66 import com.liferay.portal.model.Organization;
\r
67 import com.liferay.portal.model.ResourceConstants;
\r
68 import com.liferay.portal.model.Role;
\r
69 import com.liferay.portal.model.User;
\r
70 import com.liferay.portal.service.OrganizationLocalServiceUtil;
\r
71 import com.liferay.portal.service.RoleLocalServiceUtil;
\r
72 import com.liferay.portal.service.ServiceContext;
\r
73 import com.liferay.portal.service.ServiceContextUtil;
\r
74 import com.liferay.portal.service.UserLocalServiceUtil;
\r
75 import com.liferay.portal.util.Portal;
\r
76 import com.liferay.portal.util.PortalUtil;
\r
77 import com.liferay.portal.util.PortletKeys;
\r
78 import com.liferay.portal.util.PrefsPropsUtil;
\r
79 import com.liferay.portal.util.PropsValues;
\r
80 import com.liferay.portal.util.SubscriptionSender;
\r
81 import com.liferay.portlet.asset.model.AssetEntry;
\r
82 import com.liferay.portlet.asset.model.AssetLinkConstants;
\r
83 import com.liferay.portlet.blogs.EntryContentException;
\r
84 import com.liferay.portlet.blogs.EntryDisplayDateException;
\r
85 import com.liferay.portlet.blogs.EntrySmallImageNameException;
\r
86 import com.liferay.portlet.blogs.EntrySmallImageSizeException;
\r
87 import com.liferay.portlet.blogs.EntryTitleException;
\r
88 import com.liferay.portlet.blogs.model.BlogsEntry;
\r
89 import com.liferay.portlet.blogs.service.base.BlogsEntryLocalServiceBaseImpl;
\r
90 import com.liferay.portlet.blogs.service.persistence.BlogsEntryFinderUtil;
\r
91 import com.liferay.portlet.blogs.social.BlogsActivityKeys;
\r
92 import com.liferay.portlet.blogs.util.BlogsIndexer;
\r
93 import com.liferay.portlet.blogs.util.BlogsUtil;
\r
94 import com.liferay.portlet.blogs.util.LinkbackProducerUtil;
\r
95 import com.liferay.portlet.blogs.util.comparator.EntryDisplayDateComparator;
\r
96 import com.pentila.entSavoie.ENTRoleUtilFactory;
\r
97 import com.pentila.entSavoie.ENTRolesConstants;
\r
98 import com.pentila.entSavoie.blogs.BlogsEntryHeader;
\r
99 import com.pentila.entSavoie.directory.OrganizationFinderServiceUtil;
\r
100 import com.pentila.entSavoie.search.util.IndexerUtil;
\r
101 import com.pentila.entSavoie.utils.ENTOrganizationsUtil;
\r
104 * @author Brian Wing Shun Chan
\r
105 * @author Wilson S. Man
\r
106 * @author Raymond Augé
\r
107 * @author Thiago Moreira
\r
108 * @author Juan Fernández
\r
109 * @author Zsolt Berentey
\r
111 public class BlogsEntryLocalServiceImpl extends BlogsEntryLocalServiceBaseImpl {
\r
113 public BlogsEntry addEntry(
\r
114 long userId, long groupId, String title, String description, String content,
\r
115 int displayDateMonth, int displayDateDay, int displayDateYear,
\r
116 int displayDateHour, int displayDateMinute, boolean allowPingbacks,
\r
117 boolean allowTrackbacks, String[] trackbacks, boolean smallImage,
\r
118 String smallImageURL, String smallImageFileName,
\r
119 InputStream smallImageInputStream, ServiceContext serviceContext)
\r
120 throws PortalException, SystemException {
\r
123 User user = userPersistence.findByPrimaryKey(userId);
\r
124 long userGroupId = serviceContext.getScopeGroupId();
\r
125 if(groupId == -1) {
\r
126 groupId = userGroupId;
\r
129 //Date displayDate = new Date(displayDateYear, displayDateMonth, displayDateDay, displayDateHour, displayDateMinute);
\r
130 Date displayDate = PortalUtil.getDate(
\r
131 displayDateMonth, displayDateDay, displayDateYear, displayDateHour,
\r
132 displayDateMinute, user.getTimeZone(),
\r
133 EntryDisplayDateException.class);
\r
135 byte[] smallImageBytes = null;
\r
138 if ((smallImageInputStream != null) && smallImage) {
\r
139 smallImageBytes = FileUtil.getBytes(smallImageInputStream);
\r
142 catch (IOException ioe) {
\r
145 Date now = new Date();
\r
148 title, content, smallImage, smallImageURL, smallImageFileName,
\r
151 long entryId = counterLocalService.increment();
\r
153 BlogsEntry entry = blogsEntryPersistence.create(entryId);
\r
155 entry.setUuid(serviceContext.getUuid());
\r
156 entry.setGroupId(groupId);
\r
157 entry.setCompanyId(user.getCompanyId());
\r
158 entry.setUserId(user.getUserId());
\r
159 entry.setUserName(user.getFullName());
\r
160 entry.setCreateDate(serviceContext.getCreateDate(now));
\r
161 entry.setModifiedDate(serviceContext.getModifiedDate(now));
\r
162 entry.setTitle(title);
\r
163 if(groupId == userGroupId) {
\r
165 getUniqueUrlTitle(entryId, title, null, serviceContext));
\r
169 getUniqueUrlTitle(entryId, groupId, title));
\r
171 entry.setDescription(description);
\r
172 entry.setContent(content);
\r
173 entry.setDisplayDate(displayDate);
\r
174 entry.setAllowPingbacks(allowPingbacks);
\r
175 entry.setAllowTrackbacks(allowTrackbacks);
\r
176 entry.setSmallImage(smallImage);
\r
177 entry.setSmallImageId(counterLocalService.increment());
\r
178 entry.setSmallImageURL(smallImageURL);
\r
179 entry.setStatus(WorkflowConstants.STATUS_DRAFT);
\r
180 entry.setStatusDate(serviceContext.getModifiedDate(now));
\r
181 entry.setExpandoBridgeAttributes(serviceContext);
\r
183 blogsEntryPersistence.update(entry, false);
\r
186 if (serviceContext.isAddGroupPermissions() ||
\r
187 serviceContext.isAddGuestPermissions()) {
\r
190 entry, serviceContext.isAddGroupPermissions(),
\r
191 serviceContext.isAddGuestPermissions());
\r
195 entry, serviceContext.getGroupPermissions(),
\r
196 serviceContext.getGuestPermissions());
\r
200 saveImages(smallImage, entry.getSmallImageId(), smallImageBytes);
\r
204 userId, entry, serviceContext.getAssetCategoryIds(),
\r
205 serviceContext.getAssetTagNames(),
\r
206 serviceContext.getAssetLinkEntryIds());
\r
209 if (PropsValues.BLOGS_ENTRY_COMMENTS_ENABLED) {
\r
210 mbMessageLocalService.addDiscussionMessage(
\r
211 userId, entry.getUserName(), userGroupId,
\r
212 BlogsEntry.class.getName(), entryId,
\r
213 WorkflowConstants.ACTION_PUBLISH);
\r
217 if ((trackbacks != null) && (trackbacks.length > 0)) {
\r
218 serviceContext.setAttribute("trackbacks", trackbacks);
\r
221 serviceContext.setAttribute("trackbacks", null);
\r
224 WorkflowHandlerRegistryUtil.startWorkflowInstance(
\r
225 user.getCompanyId(), userGroupId, userId, BlogsEntry.class.getName(),
\r
226 entry.getEntryId(), entry, serviceContext);
\r
232 public BlogsEntry addEntry(
\r
233 long userId, String title, String description, String content,
\r
234 int displayDateMonth, int displayDateDay, int displayDateYear,
\r
235 int displayDateHour, int displayDateMinute, boolean allowPingbacks,
\r
236 boolean allowTrackbacks, String[] trackbacks, boolean smallImage,
\r
237 String smallImageURL, String smallImageFileName,
\r
238 InputStream smallImageInputStream, ServiceContext serviceContext)
\r
239 throws PortalException, SystemException {
\r
241 userId, -1, title, description, content,
\r
242 displayDateMonth, displayDateDay, displayDateYear,
\r
243 displayDateHour, displayDateMinute, allowPingbacks,
\r
244 allowTrackbacks, trackbacks, smallImage,
\r
245 smallImageURL, smallImageFileName,
\r
246 smallImageInputStream, serviceContext);
\r
249 public void addEntryResources(
\r
250 BlogsEntry entry, boolean addGroupPermissions,
\r
251 boolean addGuestPermissions)
\r
252 throws PortalException, SystemException {
\r
254 resourceLocalService.addResources(
\r
255 entry.getCompanyId(), entry.getGroupId(), entry.getUserId(),
\r
256 BlogsEntry.class.getName(), entry.getEntryId(), false,
\r
257 addGroupPermissions, addGuestPermissions);
\r
260 public void addEntryResources(
\r
261 BlogsEntry entry, String[] groupPermissions,
\r
262 String[] guestPermissions)
\r
263 throws PortalException, SystemException {
\r
265 resourceLocalService.addModelResources(
\r
266 entry.getCompanyId(), entry.getGroupId(), entry.getUserId(),
\r
267 BlogsEntry.class.getName(), entry.getEntryId(), groupPermissions,
\r
271 public void addEntryResources(
\r
272 long entryId, boolean addGroupPermissions,
\r
273 boolean addGuestPermissions)
\r
274 throws PortalException, SystemException {
\r
276 BlogsEntry entry = blogsEntryPersistence.findByPrimaryKey(entryId);
\r
278 addEntryResources(entry, addGroupPermissions, addGuestPermissions);
\r
281 public void addEntryResources(
\r
282 long entryId, String[] groupPermissions, String[] guestPermissions)
\r
283 throws PortalException, SystemException {
\r
285 BlogsEntry entry = blogsEntryPersistence.findByPrimaryKey(entryId);
\r
287 addEntryResources(entry, groupPermissions, guestPermissions);
\r
290 public void checkEntries() throws PortalException, SystemException {
\r
291 Date now = new Date();
\r
293 int count = blogsEntryPersistence.countByLtD_S(
\r
294 now, WorkflowConstants.STATUS_SCHEDULED);
\r
300 List<BlogsEntry> entries = blogsEntryPersistence.findByLtD_S(
\r
301 now, WorkflowConstants.STATUS_SCHEDULED);
\r
303 for (BlogsEntry entry : entries) {
\r
304 ServiceContext serviceContext = new ServiceContext();
\r
306 String[] trackbacks = StringUtil.split(entry.getTrackbacks());
\r
308 serviceContext.setAttribute("trackbacks", trackbacks);
\r
310 serviceContext.setCommand(Constants.UPDATE);
\r
312 String layoutFullURL = PortalUtil.getLayoutFullURL(
\r
313 entry.getGroupId(), PortletKeys.BLOGS);
\r
315 serviceContext.setLayoutFullURL(layoutFullURL);
\r
317 serviceContext.setScopeGroupId(entry.getGroupId());
\r
320 entry.getStatusByUserId(), entry.getEntryId(),
\r
321 WorkflowConstants.STATUS_APPROVED, serviceContext);
\r
325 public void deleteEntries(long groupId)
\r
326 throws PortalException, SystemException {
\r
328 for (BlogsEntry entry : blogsEntryPersistence.findByGroupId(groupId)) {
\r
329 deleteEntry(entry);
\r
333 public void deleteEntry(BlogsEntry entry)
\r
334 throws PortalException, SystemException {
\r
338 blogsEntryPersistence.remove(entry);
\r
342 resourceLocalService.deleteResource(
\r
343 entry.getCompanyId(), BlogsEntry.class.getName(),
\r
344 ResourceConstants.SCOPE_INDIVIDUAL, entry.getEntryId());
\r
348 imageLocalService.deleteImage(entry.getSmallImageId());
\r
352 subscriptionLocalService.deleteSubscriptions(
\r
353 entry.getCompanyId(), BlogsEntry.class.getName(),
\r
354 entry.getEntryId());
\r
358 blogsStatsUserLocalService.updateStatsUser(
\r
359 entry.getGroupId(), entry.getUserId());
\r
363 assetEntryLocalService.deleteEntry(
\r
364 BlogsEntry.class.getName(), entry.getEntryId());
\r
368 expandoValueLocalService.deleteValues(
\r
369 BlogsEntry.class.getName(), entry.getEntryId());
\r
373 mbMessageLocalService.deleteDiscussionMessages(
\r
374 BlogsEntry.class.getName(), entry.getEntryId());
\r
378 ratingsStatsLocalService.deleteStats(
\r
379 BlogsEntry.class.getName(), entry.getEntryId());
\r
383 Indexer indexer = IndexerRegistryUtil.nullSafeGetIndexer(
\r
386 indexer.delete(entry);
\r
390 workflowInstanceLinkLocalService.deleteWorkflowInstanceLinks(
\r
391 entry.getCompanyId(), entry.getGroupId(),
\r
392 BlogsEntry.class.getName(), entry.getEntryId());
\r
395 public void deleteEntry(long entryId)
\r
396 throws PortalException, SystemException {
\r
398 BlogsEntry entry = blogsEntryPersistence.findByPrimaryKey(entryId);
\r
400 deleteEntry(entry);
\r
403 public List<BlogsEntry> getCompanyEntries(
\r
404 long companyId, Date displayDate, int status, int start, int end)
\r
405 throws SystemException {
\r
407 if (status == WorkflowConstants.STATUS_ANY) {
\r
408 return blogsEntryPersistence.findByC_LtD(
\r
409 companyId, displayDate, start, end);
\r
412 return blogsEntryPersistence.findByC_LtD_S(
\r
413 companyId, displayDate, status, start, end);
\r
417 public List<BlogsEntry> getCompanyEntries(
\r
418 long companyId, Date displayDate, int status, int start, int end,
\r
419 OrderByComparator obc)
\r
420 throws SystemException {
\r
422 if (status == WorkflowConstants.STATUS_ANY) {
\r
423 return blogsEntryPersistence.findByC_LtD(
\r
424 companyId, displayDate, start, end, obc);
\r
427 return blogsEntryPersistence.findByC_LtD_S(
\r
428 companyId, displayDate, status, start, end, obc);
\r
432 public int getCompanyEntriesCount(
\r
433 long companyId, Date displayDate, int status)
\r
434 throws SystemException {
\r
436 if (status == WorkflowConstants.STATUS_ANY) {
\r
437 return blogsEntryPersistence.countByC_LtD(companyId, displayDate);
\r
440 return blogsEntryPersistence.countByC_LtD_S(
\r
441 companyId, displayDate, status);
\r
445 public BlogsEntry[] getEntriesPrevAndNext(long entryId)
\r
446 throws PortalException, SystemException {
\r
448 BlogsEntry entry = blogsEntryPersistence.findByPrimaryKey(entryId);
\r
450 return blogsEntryPersistence.findByG_S_PrevAndNext(
\r
451 entry.getEntryId(), entry.getGroupId(),
\r
452 WorkflowConstants.STATUS_APPROVED,
\r
453 new EntryDisplayDateComparator(true));
\r
456 public BlogsEntry getEntry(long entryId)
\r
457 throws PortalException, SystemException {
\r
459 return blogsEntryPersistence.findByPrimaryKey(entryId);
\r
462 public BlogsEntry getEntry(long groupId, String urlTitle)
\r
463 throws PortalException, SystemException {
\r
465 return blogsEntryPersistence.findByG_UT(groupId, urlTitle);
\r
468 public List<BlogsEntry> getGroupEntries(
\r
469 long groupId, Date displayDate, int status, int start, int end)
\r
470 throws SystemException {
\r
472 if (status == WorkflowConstants.STATUS_ANY) {
\r
473 return blogsEntryPersistence.findByG_LtD(
\r
474 groupId, displayDate, start, end);
\r
477 return blogsEntryPersistence.findByG_LtD_S(
\r
478 groupId, displayDate, status, start, end);
\r
482 public List<BlogsEntry> getGroupEntries(
\r
483 long groupId, Date displayDate, int status, int start, int end,
\r
484 OrderByComparator obc)
\r
485 throws SystemException {
\r
487 if (status == WorkflowConstants.STATUS_ANY) {
\r
488 return blogsEntryPersistence.findByG_LtD(
\r
489 groupId, displayDate, start, end, obc);
\r
492 return blogsEntryPersistence.findByG_LtD_S(
\r
493 groupId, displayDate, status, start, end, obc);
\r
497 public List<BlogsEntry> getGroupEntries(
\r
498 long groupId, int status, int start, int end)
\r
499 throws SystemException {
\r
501 if (status == WorkflowConstants.STATUS_ANY) {
\r
502 return blogsEntryPersistence.findByGroupId(groupId, start, end);
\r
505 return blogsEntryPersistence.findByG_S(groupId, status, start, end);
\r
509 public List<BlogsEntry> getGroupEntries(
\r
510 long groupId, int status, int start, int end, OrderByComparator obc)
\r
511 throws SystemException {
\r
513 if (status == WorkflowConstants.STATUS_ANY) {
\r
514 return blogsEntryPersistence.findByGroupId(
\r
515 groupId, start, end, obc);
\r
518 return blogsEntryPersistence.findByG_S(
\r
519 groupId, status, start, end, obc);
\r
523 public int getGroupEntriesCount(long groupId, Date displayDate, int status)
\r
524 throws SystemException {
\r
526 if (status == WorkflowConstants.STATUS_ANY) {
\r
527 return blogsEntryPersistence.countByG_LtD(groupId, displayDate);
\r
530 return blogsEntryPersistence.countByG_LtD_S(
\r
531 groupId, displayDate, status);
\r
535 public int getGroupEntriesCount(long groupId, int status)
\r
536 throws SystemException {
\r
538 if (status == WorkflowConstants.STATUS_ANY) {
\r
539 return blogsEntryPersistence.countByGroupId(groupId);
\r
542 return blogsEntryPersistence.countByG_S(groupId, status);
\r
546 public List<BlogsEntry> getGroupsEntries(
\r
547 long companyId, long groupId, Date displayDate, int status,
\r
548 int start, int end)
\r
549 throws SystemException {
\r
551 return blogsEntryFinder.findByGroupIds(
\r
552 companyId, groupId, displayDate, status, start, end);
\r
555 public List<BlogsEntry> getGroupUserEntries(
\r
556 long groupId, long userId, Date displayDate, int status, int start,
\r
558 throws SystemException {
\r
560 if (status == WorkflowConstants.STATUS_ANY) {
\r
561 return blogsEntryPersistence.findByG_U_LtD(
\r
562 groupId, userId, displayDate, start, end);
\r
565 return blogsEntryPersistence.findByG_U_LtD_S(
\r
566 groupId, userId, displayDate, status, start, end);
\r
570 public List<BlogsEntry> getGroupUserEntries(
\r
571 long groupId, long userId, Date displayDate, int status, int start,
\r
572 int end, OrderByComparator obc)
\r
573 throws SystemException {
\r
575 if (status == WorkflowConstants.STATUS_ANY) {
\r
576 return blogsEntryPersistence.findByG_U_LtD(
\r
577 groupId, userId, displayDate, start, end, obc);
\r
580 return blogsEntryPersistence.findByG_U_LtD_S(
\r
581 groupId, userId, displayDate, status, start, end, obc);
\r
585 public int getGroupUserEntriesCount(
\r
586 long groupId, long userId, Date displayDate, int status)
\r
587 throws SystemException {
\r
589 if (status == WorkflowConstants.STATUS_ANY) {
\r
590 return blogsEntryPersistence.countByG_U_LtD(
\r
591 groupId, userId, displayDate);
\r
594 return blogsEntryPersistence.countByG_U_LtD_S(
\r
595 groupId, userId, displayDate, status);
\r
599 public List<BlogsEntry> getNoAssetEntries() throws SystemException {
\r
600 return blogsEntryFinder.findByNoAssets();
\r
603 public List<BlogsEntry> getOrganizationEntries(
\r
604 long organizationId, Date displayDate, int status, int start,
\r
606 throws SystemException {
\r
608 return blogsEntryFinder.findByOrganizationId(
\r
609 organizationId, displayDate, status, start, end, null);
\r
612 public List<BlogsEntry> getOrganizationEntries(
\r
613 long organizationId, Date displayDate, int status, int start,
\r
614 int end, OrderByComparator obc)
\r
615 throws SystemException {
\r
617 return blogsEntryFinder.findByOrganizationId(
\r
618 organizationId, displayDate, status, start, end, obc);
\r
621 public int getOrganizationEntriesCount(
\r
622 long organizationId, Date displayDate, int status)
\r
623 throws SystemException {
\r
625 return blogsEntryFinder.countByOrganizationId(
\r
626 organizationId, displayDate, status);
\r
629 public void subscribe(long userId, long groupId)
\r
630 throws PortalException, SystemException {
\r
632 subscriptionLocalService.addSubscription(
\r
633 userId, groupId, BlogsEntry.class.getName(), groupId);
\r
636 public void unsubscribe(long userId, long groupId)
\r
637 throws PortalException, SystemException {
\r
639 subscriptionLocalService.deleteSubscription(
\r
640 userId, BlogsEntry.class.getName(), groupId);
\r
643 public void updateAsset(
\r
644 long userId, BlogsEntry entry, long[] assetCategoryIds,
\r
645 String[] assetTagNames, long[] assetLinkEntryIds)
\r
646 throws PortalException, SystemException {
\r
648 boolean visible = false;
\r
650 if (entry.isApproved()) {
\r
654 String summary = HtmlUtil.extractText(
\r
655 StringUtil.shorten(entry.getContent(), 500));
\r
657 AssetEntry assetEntry = assetEntryLocalService.updateEntry(
\r
658 userId, entry.getGroupId(), BlogsEntry.class.getName(),
\r
659 entry.getEntryId(), entry.getUuid(), 0, assetCategoryIds,
\r
660 assetTagNames, visible, null, null, entry.getDisplayDate(), null,
\r
661 ContentTypes.TEXT_HTML, entry.getTitle(), null, summary, null, null,
\r
662 0, 0, null, false);
\r
664 assetLinkLocalService.updateLinks(
\r
665 userId, assetEntry.getEntryId(), assetLinkEntryIds,
\r
666 AssetLinkConstants.TYPE_RELATED);
\r
669 public BlogsEntry updateEntry(
\r
670 long userId, long entryId, String title, String description,
\r
671 String content, int displayDateMonth, int displayDateDay,
\r
672 int displayDateYear, int displayDateHour, int displayDateMinute,
\r
673 boolean allowPingbacks, boolean allowTrackbacks,
\r
674 String[] trackbacks, boolean smallImage, String smallImageURL,
\r
675 String smallImageFileName, InputStream smallImageInputStream,
\r
676 ServiceContext serviceContext)
\r
677 throws PortalException, SystemException {
\r
681 User user = userPersistence.findByPrimaryKey(userId);
\r
683 //Date displayDate = new Date(displayDateYear, displayDateMonth, displayDateDay, displayDateHour, displayDateMinute);
\r
684 Date displayDate = PortalUtil.getDate(
\r
685 displayDateMonth, displayDateDay, displayDateYear, displayDateHour,
\r
686 displayDateMinute, user.getTimeZone(),
\r
687 EntryDisplayDateException.class);
\r
689 byte[] smallImageBytes = null;
\r
692 if ((smallImageInputStream != null) && smallImage) {
\r
693 smallImageBytes = FileUtil.getBytes(smallImageInputStream);
\r
696 catch (IOException ioe) {
\r
700 title, content, smallImage, smallImageURL, smallImageFileName,
\r
703 BlogsEntry entry = blogsEntryPersistence.findByPrimaryKey(entryId);
\r
705 String oldUrlTitle = entry.getUrlTitle();
\r
707 entry.setModifiedDate(serviceContext.getModifiedDate(null));
\r
708 entry.setTitle(title);
\r
710 getUniqueUrlTitle(entryId, title, oldUrlTitle, serviceContext));
\r
711 entry.setDescription(description);
\r
712 entry.setContent(content);
\r
713 entry.setDisplayDate(displayDate);
\r
714 entry.setAllowPingbacks(allowPingbacks);
\r
715 entry.setAllowTrackbacks(allowTrackbacks);
\r
716 entry.setSmallImage(smallImage);
\r
718 if (entry.getSmallImageId() == 0) {
\r
719 entry.setSmallImageId(counterLocalService.increment());
\r
722 entry.setSmallImageURL(smallImageURL);
\r
724 if (entry.isPending() || entry.isDraft()) {
\r
726 else if (entry.isApproved()) {
\r
727 entry.setStatus(WorkflowConstants.STATUS_DRAFT_FROM_APPROVED);
\r
730 entry.setStatus(WorkflowConstants.STATUS_DRAFT);
\r
733 entry.setExpandoBridgeAttributes(serviceContext);
\r
735 blogsEntryPersistence.update(entry, false);
\r
739 if ((serviceContext.getGroupPermissions() != null) ||
\r
740 (serviceContext.getGuestPermissions() != null)) {
\r
742 updateEntryResources(
\r
743 entry, serviceContext.getGroupPermissions(),
\r
744 serviceContext.getGuestPermissions());
\r
749 saveImages(smallImage, entry.getSmallImageId(), smallImageBytes);
\r
754 userId, entry, serviceContext.getAssetCategoryIds(),
\r
755 serviceContext.getAssetTagNames(),
\r
756 serviceContext.getAssetLinkEntryIds());
\r
760 boolean pingOldTrackbacks = false;
\r
762 if (!oldUrlTitle.equals(entry.getUrlTitle())) {
\r
763 pingOldTrackbacks = true;
\r
766 serviceContext.setAttribute(
\r
767 "pingOldTrackbacks", String.valueOf(pingOldTrackbacks));
\r
769 if (Validator.isNotNull(trackbacks)) {
\r
770 serviceContext.setAttribute("trackbacks", trackbacks);
\r
773 serviceContext.setAttribute("trackbacks", null);
\r
776 WorkflowHandlerRegistryUtil.startWorkflowInstance(
\r
777 user.getCompanyId(), entry.getGroupId(), userId,
\r
778 BlogsEntry.class.getName(), entry.getEntryId(), entry,
\r
784 public void updateEntryResources(
\r
785 BlogsEntry entry, String[] groupPermissions,
\r
786 String[] guestPermissions)
\r
787 throws PortalException, SystemException {
\r
789 resourceLocalService.updateResources(
\r
790 entry.getCompanyId(), entry.getGroupId(),
\r
791 BlogsEntry.class.getName(), entry.getEntryId(), groupPermissions,
\r
795 public BlogsEntry updateStatus(
\r
796 long userId, long entryId, int status,
\r
797 ServiceContext serviceContext)
\r
798 throws PortalException, SystemException {
\r
802 User user = userPersistence.findByPrimaryKey(userId);
\r
803 Date now = new Date();
\r
805 BlogsEntry entry = blogsEntryPersistence.findByPrimaryKey(entryId);
\r
807 int oldStatus = entry.getStatus();
\r
809 if (oldStatus == WorkflowConstants.STATUS_DRAFT) {
\r
810 serviceContext.setCommand(Constants.ADD);
\r
813 if ((status == WorkflowConstants.STATUS_APPROVED) &&
\r
814 now.before(entry.getDisplayDate())) {
\r
816 status = WorkflowConstants.STATUS_SCHEDULED;
\r
819 entry.setModifiedDate(serviceContext.getModifiedDate(now));
\r
820 entry.setStatus(status);
\r
821 entry.setStatusByUserId(user.getUserId());
\r
822 entry.setStatusByUserName(user.getFullName());
\r
823 entry.setStatusDate(serviceContext.getModifiedDate(now));
\r
825 blogsEntryPersistence.update(entry, false);
\r
829 blogsStatsUserLocalService.updateStatsUser(
\r
830 entry.getGroupId(), user.getUserId(), entry.getDisplayDate());
\r
832 Indexer indexer = IndexerRegistryUtil.nullSafeGetIndexer(
\r
835 JSONObject extraDataJSONObject = JSONFactoryUtil.createJSONObject();
\r
837 extraDataJSONObject.put("title", entry.getTitle());
\r
839 if (status == WorkflowConstants.STATUS_APPROVED) {
\r
843 assetEntryLocalService.updateVisible(
\r
844 BlogsEntry.class.getName(), entryId, true);
\r
848 if (oldStatus != WorkflowConstants.STATUS_SCHEDULED) {
\r
849 if (serviceContext.isCommandUpdate()) {
\r
850 socialActivityLocalService.addActivity(
\r
851 user.getUserId(), entry.getGroupId(),
\r
852 BlogsEntry.class.getName(), entryId,
\r
853 BlogsActivityKeys.UPDATE_ENTRY,
\r
854 extraDataJSONObject.toString(), 0);
\r
857 socialActivityLocalService.addUniqueActivity(
\r
858 user.getUserId(), entry.getGroupId(),
\r
859 BlogsEntry.class.getName(), entryId,
\r
860 BlogsActivityKeys.ADD_ENTRY,
\r
861 extraDataJSONObject.toString(), 0);
\r
866 // MIGRATION MODIFICATION
\r
867 // indexer.reindex(entry);
\r
871 notifySubscribers(entry, serviceContext);
\r
875 String[] trackbacks = (String[])serviceContext.getAttribute(
\r
877 Boolean pingOldTrackbacks = GetterUtil.getBoolean(
\r
878 (String)serviceContext.getAttribute("pingOldTrackbacks"));
\r
880 pingGoogle(entry, serviceContext);
\r
881 pingPingback(entry, serviceContext);
\r
883 entry, trackbacks, pingOldTrackbacks, serviceContext);
\r
889 assetEntryLocalService.updateVisible(
\r
890 BlogsEntry.class.getName(), entryId, false);
\r
894 if (status == WorkflowConstants.STATUS_SCHEDULED) {
\r
895 if (serviceContext.isCommandUpdate()) {
\r
896 socialActivityLocalService.addActivity(
\r
897 user.getUserId(), entry.getGroupId(),
\r
898 BlogsEntry.class.getName(), entryId,
\r
899 BlogsActivityKeys.UPDATE_ENTRY,
\r
900 extraDataJSONObject.toString(), 0);
\r
903 socialActivityLocalService.addUniqueActivity(
\r
904 user.getUserId(), entry.getGroupId(),
\r
905 BlogsEntry.class.getName(), entryId,
\r
906 BlogsActivityKeys.ADD_ENTRY,
\r
907 extraDataJSONObject.toString(), 0);
\r
912 // MIGRATION MODIFICATION
\r
913 // indexer.delete(entry);
\r
919 public Hits search(
\r
920 long companyId, long groupId, long userId, long ownerUserId,
\r
921 String keywords, int start, int end)
\r
922 throws SystemException {
\r
924 System.out.println("BlogEntryLocalServiceImpl");
\r
927 Indexer indexer = IndexerRegistryUtil.getIndexer(BlogsEntry.class);
\r
928 String searchEngineId = indexer.getSearchEngineId();
\r
930 SearchContext searchContext = new SearchContext();
\r
931 searchContext.setSearchEngineId(searchEngineId);
\r
933 User user = UserLocalServiceUtil.getUser(userId);
\r
935 BooleanQuery contextQuery = BooleanQueryFactoryUtil.create(searchContext);
\r
937 contextQuery.addRequiredTerm(Field.PORTLET_ID, BlogsIndexer.PORTLET_ID);
\r
939 List<String> solrFilters = new ArrayList<String>();
\r
941 if (ownerUserId > 0) {
\r
942 solrFilters.add(Field.USER_ID + ":" + ownerUserId);
\r
946 Role documentaliste = ENTRoleUtilFactory.getInstance(user.getCompanyId()).getRole(ENTRolesConstants.NATIONAL_24);
\r
947 Boolean isDocumentaliste = RoleLocalServiceUtil.hasUserRole(user.getUserId(), documentaliste.getRoleId());
\r
949 Role persoEducation = ENTRoleUtilFactory.getInstance(user.getCompanyId()).getRole(ENTRolesConstants.NATIONAL_25);
\r
950 Boolean isPersoEducation = RoleLocalServiceUtil.hasUserRole(user.getUserId(), persoEducation.getRoleId());
\r
952 Role assistEducation = ENTRoleUtilFactory.getInstance(user.getCompanyId()).getRole(ENTRolesConstants.NATIONAL_21);
\r
953 Boolean isAssistEducation = RoleLocalServiceUtil.hasUserRole(user.getUserId(), assistEducation.getRoleId());
\r
955 Role headmasterRole = ENTRoleUtilFactory.getInstance(user.getCompanyId()).getRole(ENTRolesConstants.NATIONAL_4);
\r
956 Boolean isHeadMaster = RoleLocalServiceUtil.hasUserRole(user.getUserId(), headmasterRole.getRoleId());
\r
959 solrFilters.add(Field.GROUP_ID + ":" + groupId);
\r
960 } else if (isHeadMaster || isDocumentaliste || isAssistEducation || isPersoEducation) {
\r
962 List<Organization> orgaList = OrganizationLocalServiceUtil.getUserOrganizations(user.getUserId());
\r
963 if (orgaList != null && orgaList.size() > 0) {
\r
964 String etabRequiredTerm = "(";
\r
965 for (int i = 0 ; i < orgaList.size() ; i++) {
\r
966 Organization orga = orgaList.get(i);
\r
967 etabRequiredTerm += orga.getGroupId() + " or ";
\r
969 etabRequiredTerm += ENTOrganizationsUtil.getOrCreateRootOrg(companyId).getGroupId() + ")";
\r
970 solrFilters.add(Field.ETAB_ID + ":" + etabRequiredTerm);
\r
972 solrFilters.add(Field.ETAB_ID + ":" + "(" + OrganizationFinderServiceUtil.getEtabRatachement(user).getGroupId() + " OR " + ENTOrganizationsUtil.getOrCreateRootOrg(companyId).getGroupId() + ")");
\r
975 String listGroupId = IndexerUtil.getSearchGroupsQuery(user, true, true, false);
\r
976 solrFilters.add(Field.GROUP_ID + ":" + listGroupId);
\r
979 String query = SolrQueryUtil.getQueryFromKeywords(keywords, true);
\r
980 String queryWithoutFuzzySearch = SolrQueryUtil.getQueryFromKeywords(keywords, false);
\r
982 solrFilters.add("(" + Field.USER_NAME + ":" + query + ") "
\r
983 + "OR (" + Field.TITLE + ":" + query + ") "
\r
984 + "OR (" + Field.CONTENT + ":" + queryWithoutFuzzySearch + ") "
\r
985 + "OR (" + Field.ASSET_TAG_NAMES + ":" + query + ")");
\r
987 BooleanQuery fullQuery = BooleanQueryFactoryUtil.create(searchContext);
\r
989 //userId a 0 car on gere nous meme les permissions
\r
990 return SearchEngineUtil.search(searchEngineId, companyId, fullQuery, solrFilters, start, end);
\r
992 catch (Exception e) {
\r
993 throw new SystemException(e);
\r
997 protected String getUniqueUrlTitle(long entryId, long groupId, String title)
\r
998 throws SystemException {
\r
1000 String urlTitle = BlogsUtil.getUrlTitle(entryId, title);
\r
1002 for (int i = 1;; i++) {
\r
1003 // false pour ne pas utiliser le cache (entryId supprime lors d'une edition)
\r
1004 BlogsEntry entry = blogsEntryPersistence.fetchByG_UT(
\r
1005 groupId, urlTitle, false);
\r
1007 if ((entry == null) || (entryId == entry.getEntryId())) {
\r
1011 String suffix = StringPool.DASH + i;
\r
1013 String prefix = urlTitle;
\r
1015 if (urlTitle.length() > suffix.length()) {
\r
1016 prefix = urlTitle.substring(
\r
1017 0, urlTitle.length() - suffix.length());
\r
1020 urlTitle = prefix + suffix;
\r
1027 protected String getUniqueUrlTitle(
\r
1028 long entryId, String title, String oldUrlTitle,
\r
1029 ServiceContext serviceContext)
\r
1030 throws SystemException {
\r
1032 String serviceContextUrlTitle = GetterUtil.getString(
\r
1033 serviceContext.getAttribute("urlTitle"));
\r
1035 String urlTitle = null;
\r
1037 if (isMatchesServiceContextUrlTitle(serviceContextUrlTitle)) {
\r
1038 urlTitle = BlogsUtil.getUrlTitle(entryId, serviceContextUrlTitle);
\r
1040 BlogsEntry urlTitleEntry = blogsEntryPersistence.fetchByG_UT(
\r
1041 serviceContext.getScopeGroupId(), urlTitle);
\r
1043 if ((urlTitleEntry != null) &&
\r
1044 (urlTitleEntry.getEntryId() != entryId)) {
\r
1046 urlTitle = getUniqueUrlTitle(
\r
1047 entryId, serviceContext.getScopeGroupId(), urlTitle);
\r
1051 if (isMatchesServiceContextUrlTitle(oldUrlTitle)) {
\r
1052 urlTitle = oldUrlTitle;
\r
1055 urlTitle = getUniqueUrlTitle(
\r
1056 entryId, serviceContext.getScopeGroupId(), title);
\r
1063 protected boolean isMatchesServiceContextUrlTitle(String urlTitle) {
\r
1064 if (Validator.isNotNull(urlTitle) &&
\r
1065 Validator.isNotNull(PropsValues.BLOGS_ENTRY_URL_TITLE_REGEXP)) {
\r
1067 Pattern pattern = Pattern.compile(
\r
1068 PropsValues.BLOGS_ENTRY_URL_TITLE_REGEXP);
\r
1070 Matcher matcher = pattern.matcher(urlTitle);
\r
1072 return matcher.matches();
\r
1078 protected void notifySubscribers(
\r
1079 BlogsEntry entry, ServiceContext serviceContext)
\r
1080 throws SystemException {
\r
1082 if (!entry.isApproved()) {
\r
1086 String layoutFullURL = serviceContext.getLayoutFullURL();
\r
1088 if (Validator.isNull(layoutFullURL)) {
\r
1092 PortletPreferences preferences =
\r
1093 ServiceContextUtil.getPortletPreferences(serviceContext);
\r
1095 if (preferences == null) {
\r
1096 long ownerId = entry.getGroupId();
\r
1097 int ownerType = PortletKeys.PREFS_OWNER_TYPE_GROUP;
\r
1098 long plid = PortletKeys.PREFS_PLID_SHARED;
\r
1099 String portletId = PortletKeys.BLOGS;
\r
1100 String defaultPreferences = null;
\r
1102 preferences = portletPreferencesLocalService.getPreferences(
\r
1103 entry.getCompanyId(), ownerId, ownerType, plid, portletId,
\r
1104 defaultPreferences);
\r
1107 if (serviceContext.isCommandAdd() &&
\r
1108 BlogsUtil.getEmailEntryAddedEnabled(preferences)) {
\r
1110 else if (serviceContext.isCommandUpdate() &&
\r
1111 BlogsUtil.getEmailEntryUpdatedEnabled(preferences)) {
\r
1118 layoutFullURL + Portal.FRIENDLY_URL_SEPARATOR + "blogs" +
\r
1119 StringPool.SLASH + entry.getEntryId();
\r
1121 String fromName = BlogsUtil.getEmailFromName(
\r
1122 preferences, entry.getCompanyId());
\r
1123 String fromAddress = BlogsUtil.getEmailFromAddress(
\r
1124 preferences, entry.getCompanyId());
\r
1126 Map<Locale, String> localizedSubjectMap = null;
\r
1127 Map<Locale, String> localizedBodyMap = null;
\r
1129 if (serviceContext.isCommandUpdate()) {
\r
1130 localizedSubjectMap = BlogsUtil.getEmailEntryUpdatedSubjectMap(
\r
1132 localizedBodyMap = BlogsUtil.getEmailEntryUpdatedBodyMap(
\r
1136 localizedSubjectMap = BlogsUtil.getEmailEntryAddedSubjectMap(
\r
1138 localizedBodyMap = BlogsUtil.getEmailEntryAddedBodyMap(preferences);
\r
1141 SubscriptionSender subscriptionSender = new SubscriptionSender();
\r
1143 subscriptionSender.setCompanyId(entry.getCompanyId());
\r
1144 subscriptionSender.setContextAttributes(
\r
1145 "[$BLOGS_ENTRY_STATUS_BY_USER_NAME$]", entry.getStatusByUserName(),
\r
1146 "[$BLOGS_ENTRY_URL$]", entryURL);
\r
1147 subscriptionSender.setContextUserPrefix("BLOGS_ENTRY");
\r
1148 subscriptionSender.setFrom(fromAddress, fromName);
\r
1149 subscriptionSender.setHtmlFormat(true);
\r
1150 subscriptionSender.setLocalizedBodyMap(localizedBodyMap);
\r
1151 subscriptionSender.setLocalizedSubjectMap(localizedSubjectMap);
\r
1152 subscriptionSender.setMailId("blogs_entry", entry.getEntryId());
\r
1153 subscriptionSender.setPortletId(PortletKeys.BLOGS);
\r
1154 subscriptionSender.setReplyToAddress(fromAddress);
\r
1155 subscriptionSender.setScopeGroupId(entry.getGroupId());
\r
1156 subscriptionSender.setServiceContext(serviceContext);
\r
1157 subscriptionSender.setUserId(entry.getUserId());
\r
1159 subscriptionSender.addPersistedSubscribers(
\r
1160 BlogsEntry.class.getName(), entry.getGroupId());
\r
1162 subscriptionSender.flushNotificationsAsync();
\r
1165 protected void pingGoogle(BlogsEntry entry, ServiceContext serviceContext)
\r
1166 throws PortalException, SystemException {
\r
1168 if (!PropsValues.BLOGS_PING_GOOGLE_ENABLED || !entry.isApproved()) {
\r
1172 String layoutFullURL = PortalUtil.getLayoutFullURL(
\r
1173 serviceContext.getScopeGroupId(), PortletKeys.BLOGS);
\r
1175 if (Validator.isNull(layoutFullURL)) {
\r
1179 if (layoutFullURL.contains("://localhost")) {
\r
1180 if (_log.isDebugEnabled()) {
\r
1182 "Not pinging Google because of localhost URL " +
\r
1189 Group group = groupPersistence.findByPrimaryKey(entry.getGroupId());
\r
1191 StringBundler sb = new StringBundler(6);
\r
1193 String name = group.getDescriptiveName();
\r
1194 String url = layoutFullURL + Portal.FRIENDLY_URL_SEPARATOR + "blogs";
\r
1195 String changesURL =
\r
1196 layoutFullURL + Portal.FRIENDLY_URL_SEPARATOR + "blogs/rss";
\r
1198 sb.append("http://blogsearch.google.com/ping?name=");
\r
1199 sb.append(HttpUtil.encodeURL(name));
\r
1200 sb.append("&url=");
\r
1201 sb.append(HttpUtil.encodeURL(url));
\r
1202 sb.append("&changesURL=");
\r
1203 sb.append(HttpUtil.encodeURL(changesURL));
\r
1205 String location = sb.toString();
\r
1207 if (_log.isInfoEnabled()) {
\r
1208 _log.info("Pinging Google at " + location);
\r
1212 String response = HttpUtil.URLtoString(sb.toString());
\r
1214 if (_log.isInfoEnabled()) {
\r
1215 _log.info("Google ping response: " + response);
\r
1218 catch (IOException ioe) {
\r
1219 _log.error("Unable to ping Google at " + location, ioe);
\r
1223 protected void pingPingback(
\r
1224 BlogsEntry entry, ServiceContext serviceContext) {
\r
1226 if (!PropsValues.BLOGS_PINGBACK_ENABLED ||
\r
1227 !entry.isAllowPingbacks() || !entry.isApproved()) {
\r
1232 String layoutFullURL = serviceContext.getLayoutFullURL();
\r
1234 if (Validator.isNull(layoutFullURL)) {
\r
1238 String sourceUri =
\r
1239 layoutFullURL + Portal.FRIENDLY_URL_SEPARATOR + "blogs/" +
\r
1240 entry.getUrlTitle();
\r
1242 Source source = new Source(entry.getContent());
\r
1244 List<StartTag> tags = source.getAllStartTags("a");
\r
1246 for (StartTag tag : tags) {
\r
1247 String targetUri = tag.getAttributeValue("href");
\r
1249 if (Validator.isNotNull(targetUri)) {
\r
1251 LinkbackProducerUtil.sendPingback(sourceUri, targetUri);
\r
1253 catch (Exception e) {
\r
1254 _log.error("Error while sending pingback " + targetUri, e);
\r
1260 protected void pingTrackbacks(
\r
1261 BlogsEntry entry, String[] trackbacks, boolean pingOldTrackbacks,
\r
1262 ServiceContext serviceContext)
\r
1263 throws SystemException {
\r
1265 if (!PropsValues.BLOGS_TRACKBACK_ENABLED ||
\r
1266 !entry.isAllowTrackbacks() || !entry.isApproved()) {
\r
1271 String layoutFullURL = serviceContext.getLayoutFullURL();
\r
1273 if (Validator.isNull(layoutFullURL)) {
\r
1277 Map<String, String> parts = new HashMap<String, String>();
\r
1279 String excerpt = StringUtil.shorten(
\r
1280 HtmlUtil.extractText(entry.getContent()),
\r
1281 PropsValues.BLOGS_LINKBACK_EXCERPT_LENGTH);
\r
1283 layoutFullURL + Portal.FRIENDLY_URL_SEPARATOR + "blogs/" +
\r
1284 entry.getUrlTitle();
\r
1286 parts.put("title", entry.getTitle());
\r
1287 parts.put("excerpt", excerpt);
\r
1288 parts.put("url", url);
\r
1289 parts.put("blog_name", entry.getUserName());
\r
1291 Set<String> trackbacksSet = null;
\r
1293 if (Validator.isNotNull(trackbacks)) {
\r
1294 trackbacksSet = SetUtil.fromArray(trackbacks);
\r
1297 trackbacksSet = new HashSet<String>();
\r
1300 if (pingOldTrackbacks) {
\r
1301 trackbacksSet.addAll(
\r
1302 SetUtil.fromArray(StringUtil.split(entry.getTrackbacks())));
\r
1304 entry.setTrackbacks(StringPool.BLANK);
\r
1306 blogsEntryPersistence.update(entry, false);
\r
1309 Set<String> oldTrackbacks = SetUtil.fromArray(
\r
1310 StringUtil.split(entry.getTrackbacks()));
\r
1312 Set<String> validTrackbacks = new HashSet<String>();
\r
1314 for (String trackback : trackbacksSet) {
\r
1315 if (oldTrackbacks.contains(trackback)) {
\r
1320 if (LinkbackProducerUtil.sendTrackback(trackback, parts)) {
\r
1321 validTrackbacks.add(trackback);
\r
1324 catch (Exception e) {
\r
1325 _log.error("Error while sending trackback at " + trackback, e);
\r
1329 if (!validTrackbacks.isEmpty()) {
\r
1330 String newTrackbacks = StringUtil.merge(validTrackbacks);
\r
1332 if (Validator.isNotNull(entry.getTrackbacks())) {
\r
1333 newTrackbacks += StringPool.COMMA + entry.getTrackbacks();
\r
1336 entry.setTrackbacks(newTrackbacks);
\r
1338 blogsEntryPersistence.update(entry, false);
\r
1342 protected void saveImages(
\r
1343 boolean smallImage, long smallImageId, byte[] smallImageBytes)
\r
1344 throws PortalException, SystemException {
\r
1347 if (smallImageBytes != null) {
\r
1348 imageLocalService.updateImage(smallImageId, smallImageBytes);
\r
1352 imageLocalService.deleteImage(smallImageId);
\r
1356 protected void validate(
\r
1357 String title, String content, boolean smallImage,
\r
1358 String smallImageURL, String smallImageFileName,
\r
1359 byte[] smallImageBytes)
\r
1360 throws PortalException, SystemException {
\r
1362 if (Validator.isNull(title)) {
\r
1363 throw new EntryTitleException();
\r
1365 else if (Validator.isNull(content)) {
\r
1366 throw new EntryContentException();
\r
1369 String[] imageExtensions = PrefsPropsUtil.getStringArray(
\r
1370 PropsKeys.BLOGS_IMAGE_EXTENSIONS, StringPool.COMMA);
\r
1372 if (smallImage && Validator.isNull(smallImageURL) &&
\r
1373 (smallImageBytes != null)) {
\r
1375 if (smallImageFileName != null) {
\r
1376 boolean validSmallImageExtension = false;
\r
1378 for (String _imageExtension : imageExtensions) {
\r
1379 if (StringPool.STAR.equals(_imageExtension) ||
\r
1380 StringUtil.endsWith(
\r
1381 smallImageFileName, _imageExtension)) {
\r
1383 validSmallImageExtension = true;
\r
1389 if (!validSmallImageExtension) {
\r
1390 throw new EntrySmallImageNameException(smallImageFileName);
\r
1394 long smallImageMaxSize = PrefsPropsUtil.getLong(
\r
1395 PropsKeys.BLOGS_IMAGE_SMALL_MAX_SIZE);
\r
1397 if ((smallImageMaxSize > 0) &&
\r
1398 ((smallImageBytes == null) ||
\r
1399 (smallImageBytes.length > smallImageMaxSize))) {
\r
1401 throw new EntrySmallImageSizeException();
\r
1406 public List<BlogsEntryHeader> getBlogsEntryHeadersByGroupIdList(List<Long> groupIdList) {
\r
1408 List<BlogsEntryHeader> blogsEntryHeadersList = new ArrayList<BlogsEntryHeader>();
\r
1410 blogsEntryHeadersList = BlogsEntryFinderUtil.findHeadersByGroupIds(groupIdList);
\r
1411 } catch (Exception e) {
\r
1412 _log.error("Error while fetching BlogsEntryHeaders", e);
\r
1414 return blogsEntryHeadersList;
\r
1417 private static Log _log = LogFactoryUtil.getLog(
\r
1418 BlogsEntryLocalServiceImpl.class);
\r