1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * This library is free software; you can redistribute it and/or modify it under
5    * the terms of the GNU Lesser General Public License as published by the Free
6    * Software Foundation; either version 2.1 of the License, or (at your option)
7    * any later version.
8    *
9    * This library is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12   * details.
13   */
14  
15  package com.liferay.portlet.tasks.service.impl;
16  
17  import com.liferay.portal.kernel.exception.PortalException;
18  import com.liferay.portal.kernel.exception.SystemException;
19  import com.liferay.portal.kernel.util.GetterUtil;
20  import com.liferay.portal.model.Layout;
21  import com.liferay.portal.security.auth.PrincipalException;
22  import com.liferay.portal.security.permission.ActionKeys;
23  import com.liferay.portal.security.permission.PermissionChecker;
24  import com.liferay.portal.service.permission.GroupPermissionUtil;
25  import com.liferay.portal.service.permission.LayoutPermissionUtil;
26  import com.liferay.portlet.tasks.model.TasksProposal;
27  import com.liferay.portlet.tasks.service.base.TasksProposalServiceBaseImpl;
28  import com.liferay.portlet.tasks.service.permission.TasksProposalPermission;
29  
30  /**
31   * <a href="TasksProposalServiceImpl.java.html"><b><i>View Source</i></b></a>
32   *
33   * @author Raymond Augé
34   * @author Brian Wing Shun Chan
35   */
36  public class TasksProposalServiceImpl extends TasksProposalServiceBaseImpl {
37  
38      public TasksProposal addProposal(
39              long groupId, String className, String classPK, String name,
40              String description, long reviewUserId,
41              boolean addCommunityPermissions, boolean addGuestPermissions)
42          throws PortalException, SystemException{
43  
44          PermissionChecker permissionChecker = getPermissionChecker();
45  
46          if (!GroupPermissionUtil.contains(
47                  permissionChecker, groupId, ActionKeys.MANAGE_LAYOUTS) &&
48              (name.equals(Layout.class.getName()) &&
49               !LayoutPermissionUtil.contains(
50                  permissionChecker, GetterUtil.getLong(classPK),
51                  ActionKeys.UPDATE))) {
52  
53              throw new PrincipalException();
54          }
55  
56          return tasksProposalLocalService.addProposal(
57              getUserId(), groupId, className, classPK, name, description,
58              reviewUserId, addCommunityPermissions, addGuestPermissions);
59      }
60  
61      public TasksProposal addProposal(
62              long groupId, String className, String classPK, String name,
63              String description, long reviewUserId,
64              String[] communityPermissions, String[] guestPermissions)
65          throws PortalException, SystemException{
66  
67          PermissionChecker permissionChecker = getPermissionChecker();
68  
69          if (!GroupPermissionUtil.contains(
70                  permissionChecker, groupId, ActionKeys.MANAGE_LAYOUTS) &&
71              (name.equals(Layout.class.getName()) &&
72               !LayoutPermissionUtil.contains(
73                  permissionChecker, GetterUtil.getLong(classPK),
74                  ActionKeys.UPDATE))) {
75  
76              throw new PrincipalException();
77          }
78  
79          return tasksProposalLocalService.addProposal(
80              getUserId(), groupId, className, classPK, name, description,
81              reviewUserId, communityPermissions, guestPermissions);
82      }
83  
84      public void deleteProposal(long proposalId)
85          throws PortalException, SystemException{
86  
87          PermissionChecker permissionChecker = getPermissionChecker();
88  
89          TasksProposal proposal = tasksProposalPersistence.findByPrimaryKey(
90              proposalId);
91  
92          long groupId = proposal.getGroupId();
93  
94          if (!GroupPermissionUtil.contains(
95                  permissionChecker, groupId, ActionKeys.ASSIGN_REVIEWER) &&
96              !GroupPermissionUtil.contains(
97                  permissionChecker, groupId, ActionKeys.MANAGE_STAGING) &&
98              !GroupPermissionUtil.contains(
99                  permissionChecker, groupId, ActionKeys.PUBLISH_STAGING) &&
100             !TasksProposalPermission.contains(
101                 permissionChecker, proposalId, ActionKeys.DELETE)) {
102 
103             throw new PrincipalException();
104         }
105 
106         tasksProposalLocalService.deleteProposal(proposalId);
107     }
108 
109     public TasksProposal updateProposal(
110             long proposalId, String description, int dueDateMonth,
111             int dueDateDay, int dueDateYear, int dueDateHour, int dueDateMinute)
112         throws PortalException, SystemException{
113 
114         PermissionChecker permissionChecker = getPermissionChecker();
115 
116         TasksProposal proposal = tasksProposalPersistence.findByPrimaryKey(
117             proposalId);
118 
119         long groupId = proposal.getGroupId();
120 
121         if (!GroupPermissionUtil.contains(
122                 permissionChecker, groupId, ActionKeys.ASSIGN_REVIEWER) &&
123             !GroupPermissionUtil.contains(
124                 permissionChecker, groupId, ActionKeys.MANAGE_STAGING) &&
125             !GroupPermissionUtil.contains(
126                 permissionChecker, groupId, ActionKeys.PUBLISH_STAGING) &&
127             !TasksProposalPermission.contains(
128                 permissionChecker, proposalId, ActionKeys.UPDATE)) {
129 
130             throw new PrincipalException();
131         }
132 
133         return tasksProposalLocalService.updateProposal(
134             getUserId(), proposalId, description, dueDateMonth, dueDateDay,
135             dueDateYear, dueDateHour, dueDateMinute);
136     }
137 
138 }