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