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