001
014
015 package com.liferay.portlet.usersadmin.action;
016
017 import com.liferay.portal.AddressCityException;
018 import com.liferay.portal.AddressStreetException;
019 import com.liferay.portal.AddressZipException;
020 import com.liferay.portal.DuplicateOrganizationException;
021 import com.liferay.portal.EmailAddressException;
022 import com.liferay.portal.NoSuchCountryException;
023 import com.liferay.portal.NoSuchListTypeException;
024 import com.liferay.portal.NoSuchOrganizationException;
025 import com.liferay.portal.NoSuchRegionException;
026 import com.liferay.portal.OrganizationNameException;
027 import com.liferay.portal.OrganizationParentException;
028 import com.liferay.portal.PhoneNumberException;
029 import com.liferay.portal.RequiredOrganizationException;
030 import com.liferay.portal.WebsiteURLException;
031 import com.liferay.portal.kernel.repository.model.FileEntry;
032 import com.liferay.portal.kernel.servlet.SessionErrors;
033 import com.liferay.portal.kernel.util.Constants;
034 import com.liferay.portal.kernel.util.FileUtil;
035 import com.liferay.portal.kernel.util.HttpUtil;
036 import com.liferay.portal.kernel.util.LocalizationUtil;
037 import com.liferay.portal.kernel.util.ParamUtil;
038 import com.liferay.portal.kernel.util.StringUtil;
039 import com.liferay.portal.kernel.util.Validator;
040 import com.liferay.portal.model.Address;
041 import com.liferay.portal.model.EmailAddress;
042 import com.liferay.portal.model.Group;
043 import com.liferay.portal.model.OrgLabor;
044 import com.liferay.portal.model.Organization;
045 import com.liferay.portal.model.OrganizationConstants;
046 import com.liferay.portal.model.Phone;
047 import com.liferay.portal.model.Website;
048 import com.liferay.portal.security.auth.PrincipalException;
049 import com.liferay.portal.security.permission.ActionKeys;
050 import com.liferay.portal.service.OrganizationServiceUtil;
051 import com.liferay.portal.service.ServiceContext;
052 import com.liferay.portal.service.ServiceContextFactory;
053 import com.liferay.portal.service.permission.GroupPermissionUtil;
054 import com.liferay.portal.struts.PortletAction;
055 import com.liferay.portal.theme.ThemeDisplay;
056 import com.liferay.portal.util.PortalUtil;
057 import com.liferay.portal.util.WebKeys;
058 import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil;
059 import com.liferay.portlet.sites.util.SitesUtil;
060 import com.liferay.portlet.usersadmin.util.UsersAdminUtil;
061
062 import java.util.List;
063
064 import javax.portlet.ActionRequest;
065 import javax.portlet.ActionResponse;
066 import javax.portlet.PortletConfig;
067 import javax.portlet.PortletPreferences;
068 import javax.portlet.RenderRequest;
069 import javax.portlet.RenderResponse;
070
071 import org.apache.struts.action.ActionForm;
072 import org.apache.struts.action.ActionForward;
073 import org.apache.struts.action.ActionMapping;
074
075
080 public class EditOrganizationAction extends PortletAction {
081
082 @Override
083 public void processAction(
084 ActionMapping actionMapping, ActionForm actionForm,
085 PortletConfig portletConfig, ActionRequest actionRequest,
086 ActionResponse actionResponse)
087 throws Exception {
088
089 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
090
091 try {
092 Organization organization = null;
093
094 if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
095 organization = updateOrganization(actionRequest);
096 }
097 else if (cmd.equals(Constants.DELETE)) {
098 deleteOrganizations(actionRequest);
099 }
100
101 String redirect = ParamUtil.getString(actionRequest, "redirect");
102
103 if (organization != null) {
104 redirect = HttpUtil.setParameter(
105 redirect, actionResponse.getNamespace() + "organizationId",
106 organization.getOrganizationId());
107 }
108
109 sendRedirect(actionRequest, actionResponse, redirect);
110 }
111 catch (Exception e) {
112 if (e instanceof NoSuchOrganizationException ||
113 e instanceof PrincipalException) {
114
115 SessionErrors.add(actionRequest, e.getClass());
116
117 setForward(actionRequest, "portlet.users_admin.error");
118 }
119 else if (e instanceof AddressCityException ||
120 e instanceof AddressStreetException ||
121 e instanceof AddressZipException ||
122 e instanceof DuplicateOrganizationException ||
123 e instanceof EmailAddressException ||
124 e instanceof NoSuchCountryException ||
125 e instanceof NoSuchListTypeException ||
126 e instanceof NoSuchRegionException ||
127 e instanceof OrganizationNameException ||
128 e instanceof OrganizationParentException ||
129 e instanceof PhoneNumberException ||
130 e instanceof RequiredOrganizationException ||
131 e instanceof WebsiteURLException) {
132
133 if (e instanceof NoSuchListTypeException) {
134 NoSuchListTypeException nslte = (NoSuchListTypeException)e;
135
136 SessionErrors.add(
137 actionRequest,
138 e.getClass().getName() + nslte.getType());
139 }
140 else {
141 SessionErrors.add(actionRequest, e.getClass());
142 }
143
144 if (e instanceof RequiredOrganizationException) {
145 String redirect = PortalUtil.escapeRedirect(
146 ParamUtil.getString(actionRequest, "redirect"));
147
148 long organizationId = ParamUtil.getLong(
149 actionRequest, "organizationId");
150
151 if (organizationId > 0) {
152 redirect = HttpUtil.setParameter(
153 redirect,
154 actionResponse.getNamespace() + "organizationId",
155 organizationId);
156 }
157
158 if (Validator.isNotNull(redirect)) {
159 actionResponse.sendRedirect(redirect);
160 }
161 }
162 }
163 else {
164 throw e;
165 }
166 }
167 }
168
169 @Override
170 public ActionForward render(
171 ActionMapping actionMapping, ActionForm actionForm,
172 PortletConfig portletConfig, RenderRequest renderRequest,
173 RenderResponse renderResponse)
174 throws Exception {
175
176 try {
177 ActionUtil.getOrganization(renderRequest);
178 }
179 catch (Exception e) {
180 if (e instanceof NoSuchOrganizationException ||
181 e instanceof PrincipalException) {
182
183 SessionErrors.add(renderRequest, e.getClass());
184
185 return actionMapping.findForward("portlet.users_admin.error");
186 }
187 else {
188 throw e;
189 }
190 }
191
192 return actionMapping.findForward(
193 getForward(renderRequest, "portlet.users_admin.edit_organization"));
194 }
195
196 protected void deleteOrganizations(ActionRequest actionRequest)
197 throws Exception {
198
199 long[] deleteOrganizationIds = StringUtil.split(
200 ParamUtil.getString(actionRequest, "deleteOrganizationIds"), 0L);
201
202 for (long deleteOrganizationId : deleteOrganizationIds) {
203 OrganizationServiceUtil.deleteOrganization(deleteOrganizationId);
204 }
205 }
206
207 protected Organization updateOrganization(ActionRequest actionRequest)
208 throws Exception {
209
210 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
211 WebKeys.THEME_DISPLAY);
212
213 long organizationId = ParamUtil.getLong(
214 actionRequest, "organizationId");
215
216 long parentOrganizationId = ParamUtil.getLong(
217 actionRequest, "parentOrganizationSearchContainerPrimaryKeys",
218 OrganizationConstants.DEFAULT_PARENT_ORGANIZATION_ID);
219 String name = ParamUtil.getString(actionRequest, "name");
220 long statusId = ParamUtil.getLong(actionRequest, "statusId");
221 String type = ParamUtil.getString(actionRequest, "type");
222 long regionId = ParamUtil.getLong(actionRequest, "regionId");
223 long countryId = ParamUtil.getLong(actionRequest, "countryId");
224 String comments = ParamUtil.getString(actionRequest, "comments");
225 boolean deleteLogo = ParamUtil.getBoolean(actionRequest, "deleteLogo");
226
227 byte[] logoBytes = null;
228
229 long fileEntryId = ParamUtil.getLong(actionRequest, "fileEntryId");
230
231 if (fileEntryId > 0) {
232 FileEntry fileEntry = DLAppLocalServiceUtil.getFileEntry(
233 fileEntryId);
234
235 logoBytes = FileUtil.getBytes(fileEntry.getContentStream());
236 }
237
238 boolean site = ParamUtil.getBoolean(actionRequest, "site");
239 List<Address> addresses = UsersAdminUtil.getAddresses(actionRequest);
240 List<EmailAddress> emailAddresses = UsersAdminUtil.getEmailAddresses(
241 actionRequest);
242 List<OrgLabor> orgLabors = UsersAdminUtil.getOrgLabors(actionRequest);
243 List<Phone> phones = UsersAdminUtil.getPhones(actionRequest);
244 List<Website> websites = UsersAdminUtil.getWebsites(actionRequest);
245
246 ServiceContext serviceContext = ServiceContextFactory.getInstance(
247 Organization.class.getName(), actionRequest);
248
249 Organization organization = null;
250
251 if (organizationId <= 0) {
252
253
254
255 organization = OrganizationServiceUtil.addOrganization(
256 parentOrganizationId, name, type, regionId, countryId, statusId,
257 comments, site, addresses, emailAddresses, orgLabors, phones,
258 websites, serviceContext);
259 }
260 else {
261
262
263
264 organization = OrganizationServiceUtil.updateOrganization(
265 organizationId, parentOrganizationId, name, type, regionId,
266 countryId, statusId, comments, !deleteLogo, logoBytes, site,
267 addresses, emailAddresses, orgLabors, phones, websites,
268 serviceContext);
269 }
270
271
272
273 long publicLayoutSetPrototypeId = ParamUtil.getLong(
274 actionRequest, "publicLayoutSetPrototypeId");
275 long privateLayoutSetPrototypeId = ParamUtil.getLong(
276 actionRequest, "privateLayoutSetPrototypeId");
277 boolean publicLayoutSetPrototypeLinkEnabled = ParamUtil.getBoolean(
278 actionRequest, "publicLayoutSetPrototypeLinkEnabled",
279 (publicLayoutSetPrototypeId > 0));
280 boolean privateLayoutSetPrototypeLinkEnabled = ParamUtil.getBoolean(
281 actionRequest, "privateLayoutSetPrototypeLinkEnabled",
282 (privateLayoutSetPrototypeId > 0));
283
284 Group organizationGroup = organization.getGroup();
285
286 if (GroupPermissionUtil.contains(
287 themeDisplay.getPermissionChecker(), organizationGroup,
288 ActionKeys.UPDATE)) {
289
290 SitesUtil.updateLayoutSetPrototypesLinks(
291 organizationGroup, publicLayoutSetPrototypeId,
292 privateLayoutSetPrototypeId,
293 publicLayoutSetPrototypeLinkEnabled,
294 privateLayoutSetPrototypeLinkEnabled);
295 }
296
297
298
299 String reminderQueries = actionRequest.getParameter("reminderQueries");
300
301 PortletPreferences portletPreferences = organization.getPreferences();
302
303 LocalizationUtil.setLocalizedPreferencesValues(
304 actionRequest, portletPreferences, "reminderQueries");
305
306 portletPreferences.setValue("reminderQueries", reminderQueries);
307
308 portletPreferences.store();
309
310 return organization;
311 }
312
313 }