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 deleteLogo(long organizationId)
138         throws PortalException, SystemException {
139 
140         OrganizationPermissionUtil.check(
141             getPermissionChecker(), organizationId, ActionKeys.UPDATE);
142 
143         organizationLocalService.deleteLogo(organizationId);
144     }
145 
146     public void deleteOrganization(long organizationId)
147         throws PortalException, SystemException {
148 
149         OrganizationPermissionUtil.check(
150             getPermissionChecker(), organizationId, ActionKeys.DELETE);
151 
152         organizationLocalService.deleteOrganization(organizationId);
153     }
154 
155     public List<Organization> getManageableOrganizations(
156             long userId, String actionId)
157         throws PortalException, SystemException {
158 
159         return getManageableOrganizations(userId, actionId, true);
160     }
161 
162     public List<Organization> getManageableOrganizations(
163             long userId, String actionId, boolean recurse)
164         throws PortalException, SystemException {
165 
166         PermissionChecker permissionChecker = getPermissionChecker();
167 
168         if (permissionChecker.isCompanyAdmin()) {
169             return organizationLocalService.search(
170                 permissionChecker.getCompanyId(), 0, null, null, null, null,
171                 null, 0,
172                 PropsValues.CONTROL_PANEL_NAVIGATION_MAX_ORGANIZATIONS);
173         }
174 
175         if (Validator.isNull(actionId)) {
176             return organizationLocalService.getManageableOrganizations(userId);
177         }
178 
179         List<Organization> manageableOrganizations =
180             new UniqueList<Organization>();
181 
182         List<Organization> userOrganizations = userPersistence.getOrganizations(
183             userId);
184 
185         for (Organization userOrganization : userOrganizations) {
186             if (OrganizationPermissionUtil.contains(
187                     permissionChecker, userOrganization.getOrganizationId(),
188                     actionId)) {
189 
190                 manageableOrganizations.add(userOrganization);
191             }
192 
193             if (recurse && OrganizationPermissionUtil.contains(
194                     permissionChecker, userOrganization.getOrganizationId(),
195                     ActionKeys.MANAGE_SUBORGANIZATIONS)) {
196 
197                 manageableOrganizations.addAll(
198                     userOrganization.getSuborganizations());
199             }
200         }
201 
202         return manageableOrganizations;
203     }
204 
205     public Organization getOrganization(long organizationId)
206         throws PortalException, SystemException {
207 
208         OrganizationPermissionUtil.check(
209             getPermissionChecker(), organizationId, ActionKeys.VIEW);
210 
211         return organizationLocalService.getOrganization(organizationId);
212     }
213 
214     public long getOrganizationId(long companyId, String name)
215         throws SystemException {
216 
217         return organizationLocalService.getOrganizationId(companyId, name);
218     }
219 
220     public List<Organization> getUserOrganizations(long userId)
221         throws SystemException {
222 
223         return organizationLocalService.getUserOrganizations(userId);
224     }
225 
226     public void setGroupOrganizations(long groupId, long[] organizationIds)
227         throws PortalException, SystemException {
228 
229         GroupPermissionUtil.check(
230             getPermissionChecker(), groupId, ActionKeys.ASSIGN_MEMBERS);
231 
232         organizationLocalService.setGroupOrganizations(
233             groupId, organizationIds);
234     }
235 
236     public void unsetGroupOrganizations(long groupId, long[] organizationIds)
237         throws PortalException, SystemException {
238 
239         GroupPermissionUtil.check(
240             getPermissionChecker(), groupId, ActionKeys.ASSIGN_MEMBERS);
241 
242         organizationLocalService.unsetGroupOrganizations(
243             groupId, organizationIds);
244     }
245 
246     public void unsetPasswordPolicyOrganizations(
247             long passwordPolicyId, long[] organizationIds)
248         throws PortalException, SystemException {
249 
250         PasswordPolicyPermissionUtil.check(
251             getPermissionChecker(), passwordPolicyId, ActionKeys.UPDATE);
252 
253         organizationLocalService.unsetPasswordPolicyOrganizations(
254             passwordPolicyId, organizationIds);
255     }
256 
257     public Organization updateOrganization(
258             long organizationId, long parentOrganizationId, String name,
259             String type, boolean recursable, long regionId, long countryId,
260             int statusId, String comments, ServiceContext serviceContext)
261         throws PortalException, SystemException {
262 
263         OrganizationPermissionUtil.check(
264             getPermissionChecker(), organizationId, ActionKeys.UPDATE);
265 
266         return organizationLocalService.updateOrganization(
267             getUser().getCompanyId(), organizationId, parentOrganizationId,
268             name, type, recursable, regionId, countryId, statusId, comments,
269             serviceContext);
270     }
271 
272     public Organization updateOrganization(
273             long organizationId, long parentOrganizationId, String name,
274             String type, boolean recursable, long regionId, long countryId,
275             int statusId, String comments, List<Address> addresses,
276             List<EmailAddress> emailAddresses, List<OrgLabor> orgLabors,
277             List<Phone> phones, List<Website> websites,
278             ServiceContext serviceContext)
279         throws PortalException, SystemException {
280 
281         Organization organization = updateOrganization(
282             organizationId, parentOrganizationId, name, type, recursable,
283             regionId, countryId, statusId, comments, serviceContext);
284 
285         EnterpriseAdminUtil.updateAddresses(
286             Organization.class.getName(), organizationId, addresses);
287 
288         EnterpriseAdminUtil.updateEmailAddresses(
289             Organization.class.getName(), organizationId, emailAddresses);
290 
291         EnterpriseAdminUtil.updateOrgLabors(organizationId, orgLabors);
292 
293         EnterpriseAdminUtil.updatePhones(
294             Organization.class.getName(), organizationId, phones);
295 
296         EnterpriseAdminUtil.updateWebsites(
297             Organization.class.getName(), organizationId, websites);
298 
299         return organization;
300     }
301 
302 }