/** * 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.so.activities.hook.social; import com.liferay.microblogs.model.MicroblogsEntry; import com.liferay.microblogs.model.MicroblogsEntryConstants; import com.liferay.microblogs.service.MicroblogsEntryLocalServiceUtil; import com.liferay.microblogs.service.permission.MicroblogsEntryPermission; import com.liferay.microblogs.util.MicroblogsUtil; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.json.JSONFactoryUtil; import com.liferay.portal.kernel.json.JSONObject; import com.liferay.portal.kernel.model.User; import com.liferay.portal.kernel.security.permission.ActionKeys; import com.liferay.portal.kernel.security.permission.PermissionChecker; import com.liferay.portal.kernel.service.ServiceContext; import com.liferay.portal.kernel.service.UserLocalServiceUtil; import com.liferay.portal.kernel.util.HtmlUtil; import com.liferay.portal.kernel.util.StringBundler; import com.liferay.portal.kernel.util.StringPool; import com.liferay.so.activities.util.SocialActivityKeyConstants; import com.liferay.social.kernel.model.SocialActivity; import com.liferay.social.kernel.model.SocialActivitySet; import com.liferay.social.kernel.service.SocialActivityLocalServiceUtil; import com.liferay.social.kernel.service.SocialActivitySetLocalServiceUtil; /** * @author Matthew Kong */ public class MicroblogsActivityInterpreter extends SOSocialActivityInterpreter { public String[] getClassNames() { return _CLASS_NAMES; } @Override public void updateActivitySet(long activityId) throws PortalException { SocialActivity activity = SocialActivityLocalServiceUtil.fetchSocialActivity(activityId); if ((activity == null) || (activity.getActivitySetId() > 0)) { return; } JSONObject extraDataJSONObject = JSONFactoryUtil.createJSONObject( activity.getExtraData()); long parentMicroblogsEntryId = extraDataJSONObject.getLong( "parentMicroblogsEntryId"); long activitySetId = getActivitySetId( activityId, parentMicroblogsEntryId); if (activitySetId > 0) { SocialActivitySetLocalServiceUtil.incrementActivityCount( activitySetId, activityId); } else { SocialActivitySet activitySet = SocialActivitySetLocalServiceUtil.addActivitySet(activityId); if (activity.getType() == SocialActivityKeyConstants.MICROBLOGS_REPLY_ENTRY) { activitySet.setClassPK(parentMicroblogsEntryId); SocialActivitySetLocalServiceUtil.updateSocialActivitySet( activitySet); } } } protected long getActivitySetId( long activityId, long parentMicroblogsEntryId) { try { SocialActivitySet activitySet = null; SocialActivity activity = SocialActivityLocalServiceUtil.getActivity(activityId); if (activity.getType() == SocialActivityKeyConstants.MICROBLOGS_REPLY_ENTRY) { activitySet = SocialActivitySetLocalServiceUtil.getClassActivitySet( activity.getClassNameId(), parentMicroblogsEntryId, activity.getType()); } if ((activitySet != null) && !isExpired(activitySet, true)) { return activitySet.getActivitySetId(); } } catch (Exception e) { } return 0; } protected String getBody( long classPK, int type, ServiceContext serviceContext) throws Exception { if (type == SocialActivityKeyConstants.MICROBLOGS_ADD_ENTRY) { return StringPool.BLANK; } MicroblogsEntry microblogsEntry = MicroblogsEntryLocalServiceUtil.fetchMicroblogsEntry(classPK); if (microblogsEntry == null) { return StringPool.BLANK; } if (microblogsEntry.getParentMicroblogsEntryId() > 0) { microblogsEntry = MicroblogsEntryLocalServiceUtil.fetchMicroblogsEntry( microblogsEntry.getParentMicroblogsEntryId()); if (microblogsEntry == null) { return StringPool.BLANK; } } StringBundler sb = new StringBundler(12); sb.append("<div class=\"activity-body-container\">"); sb.append("<div class=\"activity-body\">"); sb.append("<div class=\"user-portrait\"><span class=\"avatar\">"); sb.append("<a href=\""); User user = UserLocalServiceUtil.fetchUser(microblogsEntry.getUserId()); if (user != null) { sb.append(user.getDisplayURL(serviceContext.getThemeDisplay())); } sb.append("\"><img alt=\""); if (user != null) { sb.append(HtmlUtil.escapeAttribute(user.getFullName())); } sb.append("\" src="); if (user != null) { sb.append(user.getPortraitURL(serviceContext.getThemeDisplay())); } sb.append("\"/></a></span></div><span class=\"microblog-content\">"); sb.append( MicroblogsUtil.getProcessedContent( microblogsEntry, serviceContext)); sb.append("</span></div></div>"); return sb.toString(); } @Override protected String getBody( SocialActivity activity, ServiceContext serviceContext) throws Exception { return getBody( activity.getClassPK(), activity.getType(), serviceContext); } @Override protected String getBody( SocialActivitySet activitySet, ServiceContext serviceContext) throws Exception { return getBody( activitySet.getClassPK(), activitySet.getType(), serviceContext); } @Override protected String getLink( SocialActivity activity, ServiceContext serviceContext) throws Exception { return wrapLink( getLinkURL( activity.getClassName(), activity.getClassPK(), serviceContext), serviceContext.translate("view-microblogs")); } @Override protected String getLink( SocialActivitySet activitySet, ServiceContext serviceContext) throws Exception { return wrapLink( getLinkURL( activitySet.getClassName(), activitySet.getClassPK(), serviceContext), serviceContext.translate("view-microblogs")); } protected String getTitle( long activitySetId, long classPK, long groupId, long userId, long displayDate, int activityType, ServiceContext serviceContext) throws Exception { StringBundler sb = new StringBundler(4); sb.append( getTitle( activitySetId, groupId, userId, displayDate, serviceContext)); sb.append("<div class=\"activity-action\">"); if (activityType == SocialActivityKeyConstants.MICROBLOGS_REPLY_ENTRY) { sb.append( serviceContext.translate("commented-on-a-microblog-entry")); } else { MicroblogsEntry microblogsEntry = MicroblogsEntryLocalServiceUtil.fetchMicroblogsEntry(classPK); if (microblogsEntry == null) { return StringPool.BLANK; } if (activityType == SocialActivityKeyConstants.MICROBLOGS_ADD_ENTRY) { sb.append( MicroblogsUtil.getProcessedContent( microblogsEntry, serviceContext)); } else if (activityType == SocialActivityKeyConstants.MICROBLOGS_REPOST_ENTRY) { sb.append( serviceContext.translate( "reposted-a-microblog-entry-from-x", getUserName( microblogsEntry.getParentMicroblogsEntryUserId(), serviceContext))); } else { return StringPool.BLANK; } } sb.append("</div>"); return sb.toString(); } @Override protected String getTitle( SocialActivity activity, ServiceContext serviceContext) throws Exception { return getTitle( 0, activity.getClassPK(), activity.getGroupId(), activity.getUserId(), activity.getCreateDate(), activity.getType(), serviceContext); } @Override protected String getTitle( SocialActivitySet activitySet, ServiceContext serviceContext) throws Exception { return getTitle( activitySet.getActivitySetId(), activitySet.getClassPK(), activitySet.getGroupId(), activitySet.getUserId(), activitySet.getModifiedDate(), activitySet.getType(), serviceContext); } @Override protected boolean hasPermissions( PermissionChecker permissionChecker, SocialActivity activity, String actionId, ServiceContext serviceContext) throws Exception { MicroblogsEntry microblogsEntry = MicroblogsEntryLocalServiceUtil.getMicroblogsEntry( activity.getClassPK()); if (microblogsEntry.getType() == MicroblogsEntryConstants.TYPE_REPLY) { MicroblogsEntry parentMicroblogsEntry = MicroblogsEntryLocalServiceUtil.fetchMicroblogsEntry( microblogsEntry.getParentMicroblogsEntryId()); if ((parentMicroblogsEntry == null) || !MicroblogsEntryPermission.contains( permissionChecker, parentMicroblogsEntry, ActionKeys.VIEW)) { return false; } } return MicroblogsEntryPermission.contains( permissionChecker, microblogsEntry, ActionKeys.VIEW); } private static final String[] _CLASS_NAMES = {MicroblogsEntry.class.getName()}; }