/**
* 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.portal.kernel.model.Group;
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.GroupLocalServiceUtil;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.service.UserLocalServiceUtil;
import com.liferay.portal.kernel.util.FastDateFormatFactoryUtil;
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;
import com.liferay.tasks.model.TasksEntry;
import com.liferay.tasks.service.TasksEntryLocalServiceUtil;
import com.liferay.tasks.service.permission.TasksEntryPermission;
import java.text.Format;
import java.util.List;
/**
* @author Matthew Kong
*/
public class TasksActivityInterpreter extends SOSocialActivityInterpreter {
public String[] getClassNames() {
return _CLASS_NAMES;
}
@Override
protected long getActivitySetId(long activityId) {
try {
SocialActivitySet activitySet = null;
SocialActivity activity =
SocialActivityLocalServiceUtil.getActivity(activityId);
if (activity.getType() ==
SocialActivityKeyConstants.TASKS_UPDATE_ENTRY) {
activitySet =
SocialActivitySetLocalServiceUtil.getClassActivitySet(
activity.getUserId(), activity.getClassNameId(),
activity.getClassPK(), activity.getType());
}
if ((activitySet != null) && !isExpired(activitySet, false)) {
return activitySet.getActivitySetId();
}
}
catch (Exception e) {
}
return 0;
}
@Override
protected String getBody(
SocialActivity activity, ServiceContext serviceContext)
throws Exception {
return getBody(
activity.getClassName(), activity.getClassPK(), serviceContext);
}
@Override
protected String getBody(
SocialActivitySet activitySet, ServiceContext serviceContext)
throws Exception {
if (activitySet.getType() ==
SocialActivityKeyConstants.TASKS_UPDATE_ENTRY) {
return getBody(
activitySet.getClassName(), activitySet.getClassPK(),
serviceContext);
}
StringBundler sb = new StringBundler();
sb.append("<div class=\"grouped-activity-body-container\">");
sb.append("<div class=\"grouped-activity-body\">");
List<SocialActivity> activities = getViewableActivities(
activitySet, serviceContext);
for (SocialActivity activity : activities) {
sb.append("<div class=\"activity-subentry tasks\">");
sb.append(
getBody(
activity.getClassName(), activity.getClassPK(),
serviceContext));
sb.append("</div>");
}
sb.append("</div></div>");
return sb.toString();
}
protected String getBody(
String className, long classPK, ServiceContext serviceContext)
throws Exception {
StringBundler sb = new StringBundler(14);
sb.append("<div class=\"activity-body-container ");
TasksEntry tasksEntry = TasksEntryLocalServiceUtil.getTasksEntry(
classPK);
sb.append(tasksEntry.getPriorityLabel());
sb.append("\"><div class=\"activity-body\"><div class=\"title\">");
sb.append(getPageTitle(className, classPK, serviceContext));
sb.append("</div><div class=\"tasks-entry-content\">");
sb.append("<span class=\"tasks-entry-status\"><strong>");
sb.append(serviceContext.translate("assigned-to"));
sb.append(": </strong>");
if (tasksEntry.getAssigneeUserId() > 0) {
String assigneeDisplayURL = null;
User assigneeUser = UserLocalServiceUtil.fetchUser(
tasksEntry.getAssigneeUserId());
if (assigneeUser != null) {
assigneeDisplayURL = assigneeUser.getDisplayURL(
serviceContext.getThemeDisplay());
}
String assigneeUserLink = wrapLink(
assigneeDisplayURL, tasksEntry.getAssigneeFullName());
sb.append(assigneeUserLink);
}
else {
sb.append(serviceContext.translate("unassigned"));
}
sb.append("</span><span class=\"tasks-entry-due-date\"><strong>");
sb.append(serviceContext.translate("due-date"));
sb.append(": </strong>");
if (tasksEntry.getDueDate() != null) {
Format dateFormatDateTime = FastDateFormatFactoryUtil.getDateTime(
serviceContext.getLocale(), serviceContext.getTimeZone());
sb.append(dateFormatDateTime.format(tasksEntry.getDueDate()));
}
else {
sb.append(serviceContext.translate("none"));
}
sb.append("</span></div></div></div>");
return sb.toString();
}
@Override
protected Object[] getTitleArguments(
String groupName, SocialActivity activity, String link,
String title, ServiceContext serviceContext)
throws Exception {
if ((activity.getReceiverUserId() <= 0) ||
(activity.getUserId() == activity.getReceiverUserId())) {
return null;
}
String receiverUserName = getUserName(
activity.getReceiverUserId(), serviceContext);
return new Object[] {receiverUserName};
}
@Override
protected String getTitlePattern(
String groupName, SocialActivity activity) {
String titlePattern = null;
if (activity.getType() == SocialActivityKeyConstants.TASKS_ADD_ENTRY) {
titlePattern = "created-a-new-task";
}
else if (activity.getType() ==
SocialActivityKeyConstants.TASKS_REOPEN_ENTRY) {
titlePattern = "reopened-a-task";
}
else if (activity.getType() ==
SocialActivityKeyConstants.TASKS_RESOLVE_ENTRY) {
titlePattern = "resolved-a-task";
}
else if (activity.getType() ==
SocialActivityKeyConstants.TASKS_UPDATE_ENTRY) {
titlePattern = "updated-a-task";
}
else {
return StringPool.BLANK;
}
if ((activity.getReceiverUserId() > 0) &&
(activity.getUserId() != activity.getReceiverUserId())) {
titlePattern = titlePattern.concat("-for");
}
return titlePattern;
}
@Override
protected String getTitlePattern(
String groupName, SocialActivitySet activitySet) {
if (activitySet.getType() ==
SocialActivityKeyConstants.TASKS_ADD_ENTRY) {
return "created-x-new-tasks";
}
else if (activitySet.getType() ==
SocialActivityKeyConstants.TASKS_REOPEN_ENTRY) {
return "reopened-x-tasks";
}
else if (activitySet.getType() ==
SocialActivityKeyConstants.TASKS_RESOLVE_ENTRY) {
return "resolved-x-tasks";
}
else if (activitySet.getType() ==
SocialActivityKeyConstants.TASKS_UPDATE_ENTRY) {
return "made-x-updates-to-a-task";
}
return StringPool.BLANK;
}
@Override
protected boolean hasPermissions(
PermissionChecker permissionChecker, SocialActivity activity,
String actionId, ServiceContext serviceContext)
throws Exception {
Group group = GroupLocalServiceUtil.fetchGroup(activity.getGroupId());
if ((group != null) && group.isUser()) {
return false;
}
TasksEntry tasksEntry = TasksEntryLocalServiceUtil.fetchTasksEntry(
activity.getClassPK());
if (tasksEntry == null) {
return false;
}
return TasksEntryPermission.contains(
permissionChecker, tasksEntry, ActionKeys.VIEW);
}
private static final String[] _CLASS_NAMES = {TasksEntry.class.getName()};
}