1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   *
13   */
14  
15  package com.liferay.portal.service.impl;
16  
17  import com.liferay.portal.PortalException;
18  import com.liferay.portal.SystemException;
19  import com.liferay.portal.kernel.util.ListUtil;
20  import com.liferay.portal.model.Address;
21  import com.liferay.portal.model.EmailAddress;
22  import com.liferay.portal.model.OrgLabor;
23  import com.liferay.portal.model.Organization;
24  import com.liferay.portal.model.OrganizationConstants;
25  import com.liferay.portal.model.Phone;
26  import com.liferay.portal.model.Website;
27  import com.liferay.portal.security.auth.PrincipalException;
28  import com.liferay.portal.security.permission.ActionKeys;
29  import com.liferay.portal.security.permission.PermissionChecker;
30  import com.liferay.portal.service.ServiceContext;
31  import com.liferay.portal.service.base.OrganizationServiceBaseImpl;
32  import com.liferay.portal.service.permission.GroupPermissionUtil;
33  import com.liferay.portal.service.permission.OrganizationPermissionUtil;
34  import com.liferay.portal.service.permission.PasswordPolicyPermissionUtil;
35  import com.liferay.portal.service.permission.PortalPermissionUtil;
36  import com.liferay.portlet.enterpriseadmin.util.EnterpriseAdminUtil;
37  
38  import java.util.Iterator;
39  import java.util.LinkedHashMap;
40  import java.util.List;
41  
42  /**
43   * <a href="OrganizationServiceImpl.java.html"><b><i>View Source</i></b></a>
44   *
45   * @author Brian Wing Shun Chan
46   * @author Jorge Ferrer
47   * @author Julio Camarero
48   */
49  public class OrganizationServiceImpl extends OrganizationServiceBaseImpl {
50  
51      public void addGroupOrganizations(long groupId, long[] organizationIds)
52          throws PortalException, SystemException {
53  
54          GroupPermissionUtil.check(
55              getPermissionChecker(), groupId, ActionKeys.ASSIGN_MEMBERS);
56  
57          organizationLocalService.addGroupOrganizations(
58              groupId, organizationIds);
59      }
60  
61      public void addPasswordPolicyOrganizations(
62              long passwordPolicyId, long[] organizationIds)
63          throws PortalException, SystemException {
64  
65          PasswordPolicyPermissionUtil.check(
66              getPermissionChecker(), passwordPolicyId, ActionKeys.UPDATE);
67  
68          organizationLocalService.addPasswordPolicyOrganizations(
69              passwordPolicyId, organizationIds);
70      }
71  
72      public Organization addOrganization(
73              long parentOrganizationId, String name, String type,
74              boolean recursable, long regionId, long countryId, int statusId,
75              String comments, ServiceContext serviceContext)
76          throws PortalException, SystemException {
77  
78          if (!OrganizationPermissionUtil.contains(
79                  getPermissionChecker(), parentOrganizationId,
80                  ActionKeys.MANAGE_SUBORGANIZATIONS) &&
81              !PortalPermissionUtil.contains(
82                  getPermissionChecker(), ActionKeys.ADD_ORGANIZATION)) {
83  
84              throw new PrincipalException(
85                  "User " + getUserId() + " does not have permissions to add " +
86                      "an organization with parent " + parentOrganizationId);
87          }
88  
89          return organizationLocalService.addOrganization(
90              getUserId(), parentOrganizationId, name, type, recursable,
91              regionId, countryId, statusId, comments, serviceContext);
92      }
93  
94      public Organization addOrganization(
95              long parentOrganizationId, String name, String type,
96              boolean recursable, long regionId, long countryId, int statusId,
97              String comments, List<Address> addresses,
98              List<EmailAddress> emailAddresses, List<OrgLabor> orgLabors,
99              List<Phone> phones, List<Website> websites,
100             ServiceContext serviceContext)
101         throws PortalException, SystemException {
102 
103         Organization organization = addOrganization(
104             parentOrganizationId, name, type, recursable, regionId, countryId,
105             statusId, comments, serviceContext);
106 
107         EnterpriseAdminUtil.updateAddresses(
108             Organization.class.getName(), organization.getOrganizationId(),
109             addresses);
110 
111         EnterpriseAdminUtil.updateEmailAddresses(
112             Organization.class.getName(), organization.getOrganizationId(),
113             emailAddresses);
114 
115         EnterpriseAdminUtil.updateOrgLabors(organization.getOrganizationId(),
116             orgLabors);
117 
118         EnterpriseAdminUtil.updatePhones(
119             Organization.class.getName(), organization.getOrganizationId(),
120             phones);
121 
122         EnterpriseAdminUtil.updateWebsites(
123             Organization.class.getName(), organization.getOrganizationId(),
124             websites);
125 
126         return organization;
127     }
128 
129     public void deleteLogo(long organizationId)
130         throws PortalException, SystemException {
131 
132         OrganizationPermissionUtil.check(
133             getPermissionChecker(), organizationId, ActionKeys.UPDATE);
134 
135         organizationLocalService.deleteLogo(organizationId);
136     }
137 
138     public void deleteOrganization(long organizationId)
139         throws PortalException, SystemException {
140 
141         OrganizationPermissionUtil.check(
142             getPermissionChecker(), organizationId, ActionKeys.DELETE);
143 
144         organizationLocalService.deleteOrganization(organizationId);
145     }
146 
147     public List<Organization> getManageableOrganizations(
148             String actionId, int max)
149         throws PortalException, SystemException {
150 
151         PermissionChecker permissionChecker = getPermissionChecker();
152 
153         if (permissionChecker.isCompanyAdmin()) {
154             return organizationLocalService.search(
155                 permissionChecker.getCompanyId(),
156                 OrganizationConstants.ANY_PARENT_ORGANIZATION_ID, null, null,
157                 null, null, null, 0, max);
158         }
159 
160         LinkedHashMap<String, Object> params =
161             new LinkedHashMap<String, Object>();
162 
163         List<Organization> userOrganizations =
164             organizationLocalService.getUserOrganizations(
165                 permissionChecker.getUserId());
166 
167         Long[][] leftAndRightOrganizationIds =
168             EnterpriseAdminUtil.getLeftAndRightOrganizationIds(
169                 userOrganizations);
170 
171         params.put("organizationsTree", leftAndRightOrganizationIds);
172 
173         List<Organization> manageableOrganizations =
174             organizationLocalService.search(
175                 permissionChecker.getCompanyId(),
176                 OrganizationConstants.ANY_PARENT_ORGANIZATION_ID, null, null,
177                 null, null, params, 0, max);
178 
179         manageableOrganizations = ListUtil.copy(manageableOrganizations);
180 
181         Iterator<Organization> itr = manageableOrganizations.iterator();
182 
183         while (itr.hasNext()) {
184             Organization organization = itr.next();
185 
186             if (!OrganizationPermissionUtil.contains(
187                     permissionChecker, organization, actionId)) {
188 
189                 itr.remove();
190             }
191         }
192 
193         return manageableOrganizations;
194     }
195 
196     public Organization getOrganization(long organizationId)
197         throws PortalException, SystemException {
198 
199         OrganizationPermissionUtil.check(
200             getPermissionChecker(), organizationId, ActionKeys.VIEW);
201 
202         return organizationLocalService.getOrganization(organizationId);
203     }
204 
205     public long getOrganizationId(long companyId, String name)
206         throws SystemException {
207 
208         return organizationLocalService.getOrganizationId(companyId, name);
209     }
210 
211     public List<Organization> getUserOrganizations(long userId)
212         throws PortalException, SystemException {
213 
214         return organizationLocalService.getUserOrganizations(userId);
215     }
216 
217     public List<Organization> getUserOrganizations(
218             long userId, boolean inheritUserGroups)
219         throws PortalException, SystemException {
220 
221         return organizationLocalService.getUserOrganizations(
222             userId, inheritUserGroups);
223     }
224 
225     public void setGroupOrganizations(long groupId, long[] organizationIds)
226         throws PortalException, SystemException {
227 
228         GroupPermissionUtil.check(
229             getPermissionChecker(), groupId, ActionKeys.ASSIGN_MEMBERS);
230 
231         organizationLocalService.setGroupOrganizations(
232             groupId, organizationIds);
233     }
234 
235     public void unsetGroupOrganizations(long groupId, long[] organizationIds)
236         throws PortalException, SystemException {
237 
238         GroupPermissionUtil.check(
239             getPermissionChecker(), groupId, ActionKeys.ASSIGN_MEMBERS);
240 
241         organizationLocalService.unsetGroupOrganizations(
242             groupId, organizationIds);
243     }
244 
245     public void unsetPasswordPolicyOrganizations(
246             long passwordPolicyId, long[] organizationIds)
247         throws PortalException, SystemException {
248 
249         PasswordPolicyPermissionUtil.check(
250             getPermissionChecker(), passwordPolicyId, ActionKeys.UPDATE);
251 
252         organizationLocalService.unsetPasswordPolicyOrganizations(
253             passwordPolicyId, organizationIds);
254     }
255 
256     public Organization updateOrganization(
257             long organizationId, long parentOrganizationId, String name,
258             String type, boolean recursable, long regionId, long countryId,
259             int statusId, String comments, ServiceContext serviceContext)
260         throws PortalException, SystemException {
261 
262         OrganizationPermissionUtil.check(
263             getPermissionChecker(), organizationId, ActionKeys.UPDATE);
264 
265         return organizationLocalService.updateOrganization(
266             getUser().getCompanyId(), organizationId, parentOrganizationId,
267             name, type, recursable, regionId, countryId, statusId, comments,
268             serviceContext);
269     }
270 
271     public Organization updateOrganization(
272             long organizationId, long parentOrganizationId, String name,
273             String type, boolean recursable, long regionId, long countryId,
274             int statusId, String comments, List<Address> addresses,
275             List<EmailAddress> emailAddresses, List<OrgLabor> orgLabors,
276             List<Phone> phones, List<Website> websites,
277             ServiceContext serviceContext)
278         throws PortalException, SystemException {
279 
280         Organization organization = updateOrganization(
281             organizationId, parentOrganizationId, name, type, recursable,
282             regionId, countryId, statusId, comments, serviceContext);
283 
284         EnterpriseAdminUtil.updateAddresses(
285             Organization.class.getName(), organizationId, addresses);
286 
287         EnterpriseAdminUtil.updateEmailAddresses(
288             Organization.class.getName(), organizationId, emailAddresses);
289 
290         EnterpriseAdminUtil.updateOrgLabors(organizationId, orgLabors);
291 
292         EnterpriseAdminUtil.updatePhones(
293             Organization.class.getName(), organizationId, phones);
294 
295         EnterpriseAdminUtil.updateWebsites(
296             Organization.class.getName(), organizationId, websites);
297 
298         return organization;
299     }
300 
301 }