1   /**
2    * Copyright (c) 2000-2009 Liferay, Inc. All rights reserved.
3    *
4    * Permission is hereby granted, free of charge, to any person obtaining a copy
5    * of this software and associated documentation files (the "Software"), to deal
6    * in the Software without restriction, including without limitation the rights
7    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8    * copies of the Software, and to permit persons to whom the Software is
9    * furnished to do so, subject to the following conditions:
10   *
11   * The above copyright notice and this permission notice shall be included in
12   * all copies or substantial portions of the Software.
13   *
14   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20   * SOFTWARE.
21   */
22  
23  package com.liferay.portal.service.impl;
24  
25  import com.liferay.portal.PortalException;
26  import com.liferay.portal.SystemException;
27  import com.liferay.portal.kernel.util.Validator;
28  import com.liferay.portal.model.Address;
29  import com.liferay.portal.model.EmailAddress;
30  import com.liferay.portal.model.OrgLabor;
31  import com.liferay.portal.model.Organization;
32  import com.liferay.portal.model.Phone;
33  import com.liferay.portal.model.Website;
34  import com.liferay.portal.security.auth.PrincipalException;
35  import com.liferay.portal.security.permission.ActionKeys;
36  import com.liferay.portal.security.permission.PermissionChecker;
37  import com.liferay.portal.service.ServiceContext;
38  import com.liferay.portal.service.base.OrganizationServiceBaseImpl;
39  import com.liferay.portal.service.permission.GroupPermissionUtil;
40  import com.liferay.portal.service.permission.OrganizationPermissionUtil;
41  import com.liferay.portal.service.permission.PasswordPolicyPermissionUtil;
42  import com.liferay.portal.service.permission.PortalPermissionUtil;
43  import com.liferay.portal.util.PropsValues;
44  import com.liferay.portlet.enterpriseadmin.util.EnterpriseAdminUtil;
45  import com.liferay.util.UniqueList;
46  
47  import java.util.List;
48  
49  /**
50   * <a href="OrganizationServiceImpl.java.html"><b><i>View Source</i></b></a>
51   *
52   * @author Brian Wing Shun Chan
53   * @author Jorge Ferrer
54   * @author Julio Camarero
55   *
56   */
57  public class OrganizationServiceImpl extends OrganizationServiceBaseImpl {
58  
59      public void addGroupOrganizations(long groupId, long[] organizationIds)
60          throws PortalException, SystemException {
61  
62          GroupPermissionUtil.check(
63              getPermissionChecker(), groupId, ActionKeys.ASSIGN_MEMBERS);
64  
65          organizationLocalService.addGroupOrganizations(
66              groupId, organizationIds);
67      }
68  
69      public void addPasswordPolicyOrganizations(
70              long passwordPolicyId, long[] organizationIds)
71          throws PortalException, SystemException {
72  
73          PasswordPolicyPermissionUtil.check(
74              getPermissionChecker(), passwordPolicyId, ActionKeys.UPDATE);
75  
76          organizationLocalService.addPasswordPolicyOrganizations(
77              passwordPolicyId, organizationIds);
78      }
79  
80      public Organization addOrganization(
81              long parentOrganizationId, String name, String type,
82              boolean recursable, long regionId, long countryId, int statusId,
83              String comments, ServiceContext serviceContext)
84          throws PortalException, SystemException {
85  
86          if (!OrganizationPermissionUtil.contains(
87                  getPermissionChecker(), parentOrganizationId,
88                  ActionKeys.MANAGE_SUBORGANIZATIONS) &&
89              !PortalPermissionUtil.contains(
90                  getPermissionChecker(), ActionKeys.ADD_ORGANIZATION)) {
91  
92              throw new PrincipalException(
93                  "User " + getUserId() + " does not have permissions to add " +
94                      "an organization with parent " + parentOrganizationId);
95          }
96  
97          return organizationLocalService.addOrganization(
98              getUserId(), parentOrganizationId, name, type, recursable,
99              regionId, countryId, statusId, comments, serviceContext);
100     }
101 
102     public Organization addOrganization(
103             long parentOrganizationId, String name, String type,
104             boolean recursable, long regionId, long countryId, int statusId,
105             String comments, List<Address> addresses,
106             List<EmailAddress> emailAddresses, List<OrgLabor> orgLabors,
107             List<Phone> phones, List<Website> websites,
108             ServiceContext serviceContext)
109         throws PortalException, SystemException {
110 
111         Organization organization = addOrganization(
112             parentOrganizationId, name, type, recursable, regionId, countryId,
113             statusId, comments, serviceContext);
114 
115         EnterpriseAdminUtil.updateAddresses(
116             Organization.class.getName(), organization.getOrganizationId(),
117             addresses);
118 
119         EnterpriseAdminUtil.updateEmailAddresses(
120             Organization.class.getName(), organization.getOrganizationId(),
121             emailAddresses);
122 
123         EnterpriseAdminUtil.updateOrgLabors(organization.getOrganizationId(),
124             orgLabors);
125 
126         EnterpriseAdminUtil.updatePhones(
127             Organization.class.getName(), organization.getOrganizationId(),
128             phones);
129 
130         EnterpriseAdminUtil.updateWebsites(
131             Organization.class.getName(), organization.getOrganizationId(),
132             websites);
133 
134         return organization;
135     }
136 
137     public void deleteOrganization(long organizationId)
138         throws PortalException, SystemException {
139 
140         OrganizationPermissionUtil.check(
141             getPermissionChecker(), organizationId, ActionKeys.DELETE);
142 
143         organizationLocalService.deleteOrganization(organizationId);
144     }
145 
146     public List<Organization> getManageableOrganizations(
147             long userId, String actionId)
148         throws PortalException, SystemException {
149 
150         return getManageableOrganizations(userId, actionId, true);
151     }
152 
153     public List<Organization> getManageableOrganizations(
154             long userId, String actionId, boolean recurse)
155         throws PortalException, SystemException {
156 
157         PermissionChecker permissionChecker = getPermissionChecker();
158 
159         if (permissionChecker.isCompanyAdmin()) {
160             return organizationLocalService.search(
161                 permissionChecker.getCompanyId(), 0, null, null, null, null,
162                 null, 0,
163                 PropsValues.CONTROL_PANEL_NAVIGATION_MAX_ORGANIZATIONS);
164         }
165 
166         if (Validator.isNull(actionId)) {
167             return organizationLocalService.getManageableOrganizations(userId);
168         }
169 
170         List<Organization> manageableOrganizations =
171             new UniqueList<Organization>();
172 
173         List<Organization> userOrganizations = userPersistence.getOrganizations(
174             userId);
175 
176         for (Organization userOrganization : userOrganizations) {
177             if (OrganizationPermissionUtil.contains(
178                     permissionChecker, userOrganization.getOrganizationId(),
179                     actionId)) {
180 
181                 manageableOrganizations.add(userOrganization);
182             }
183 
184             if (recurse && OrganizationPermissionUtil.contains(
185                     permissionChecker, userOrganization.getOrganizationId(),
186                     ActionKeys.MANAGE_SUBORGANIZATIONS)) {
187 
188                 manageableOrganizations.addAll(
189                     userOrganization.getSuborganizations());
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 SystemException {
213 
214         return organizationLocalService.getUserOrganizations(userId);
215     }
216 
217     public void setGroupOrganizations(long groupId, long[] organizationIds)
218         throws PortalException, SystemException {
219 
220         GroupPermissionUtil.check(
221             getPermissionChecker(), groupId, ActionKeys.ASSIGN_MEMBERS);
222 
223         organizationLocalService.setGroupOrganizations(
224             groupId, organizationIds);
225     }
226 
227     public void unsetGroupOrganizations(long groupId, long[] organizationIds)
228         throws PortalException, SystemException {
229 
230         GroupPermissionUtil.check(
231             getPermissionChecker(), groupId, ActionKeys.ASSIGN_MEMBERS);
232 
233         organizationLocalService.unsetGroupOrganizations(
234             groupId, organizationIds);
235     }
236 
237     public void unsetPasswordPolicyOrganizations(
238             long passwordPolicyId, long[] organizationIds)
239         throws PortalException, SystemException {
240 
241         PasswordPolicyPermissionUtil.check(
242             getPermissionChecker(), passwordPolicyId, ActionKeys.UPDATE);
243 
244         organizationLocalService.unsetPasswordPolicyOrganizations(
245             passwordPolicyId, organizationIds);
246     }
247 
248     public Organization updateOrganization(
249             long organizationId, long parentOrganizationId, String name,
250             String type, boolean recursable, long regionId, long countryId,
251             int statusId, String comments, ServiceContext serviceContext)
252         throws PortalException, SystemException {
253 
254         OrganizationPermissionUtil.check(
255             getPermissionChecker(), organizationId, ActionKeys.UPDATE);
256 
257         return organizationLocalService.updateOrganization(
258             getUser().getCompanyId(), organizationId, parentOrganizationId,
259             name, type, recursable, regionId, countryId, statusId, comments,
260             serviceContext);
261     }
262 
263     public Organization updateOrganization(
264             long organizationId, long parentOrganizationId, String name,
265             String type, boolean recursable, long regionId, long countryId,
266             int statusId, String comments, List<Address> addresses,
267             List<EmailAddress> emailAddresses, List<OrgLabor> orgLabors,
268             List<Phone> phones, List<Website> websites,
269             ServiceContext serviceContext)
270         throws PortalException, SystemException {
271 
272         Organization organization = updateOrganization(
273             organizationId, parentOrganizationId, name, type, recursable,
274             regionId, countryId, statusId, comments, serviceContext);
275 
276         EnterpriseAdminUtil.updateAddresses(
277             Organization.class.getName(), organizationId, addresses);
278 
279         EnterpriseAdminUtil.updateEmailAddresses(
280             Organization.class.getName(), organizationId, emailAddresses);
281 
282         EnterpriseAdminUtil.updateOrgLabors(organizationId, orgLabors);
283 
284         EnterpriseAdminUtil.updatePhones(
285             Organization.class.getName(), organizationId, phones);
286 
287         EnterpriseAdminUtil.updateWebsites(
288             Organization.class.getName(), organizationId, websites);
289 
290         return organization;
291     }
292 
293 }