001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portlet.portalsettings.action;
016    
017    import com.liferay.portal.AccountNameException;
018    import com.liferay.portal.AddressCityException;
019    import com.liferay.portal.AddressStreetException;
020    import com.liferay.portal.AddressZipException;
021    import com.liferay.portal.CompanyMxException;
022    import com.liferay.portal.CompanyVirtualHostException;
023    import com.liferay.portal.CompanyWebIdException;
024    import com.liferay.portal.EmailAddressException;
025    import com.liferay.portal.LocaleException;
026    import com.liferay.portal.NoSuchCountryException;
027    import com.liferay.portal.NoSuchListTypeException;
028    import com.liferay.portal.NoSuchRegionException;
029    import com.liferay.portal.PhoneNumberException;
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.ParamUtil;
036    import com.liferay.portal.kernel.util.PropertiesParamUtil;
037    import com.liferay.portal.kernel.util.PropsKeys;
038    import com.liferay.portal.kernel.util.UnicodeProperties;
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.Phone;
043    import com.liferay.portal.model.Website;
044    import com.liferay.portal.security.auth.PrincipalException;
045    import com.liferay.portal.service.CompanyServiceUtil;
046    import com.liferay.portal.struts.PortletAction;
047    import com.liferay.portal.util.PortalUtil;
048    import com.liferay.portal.util.PropsValues;
049    import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil;
050    import com.liferay.portlet.usersadmin.util.UsersAdminUtil;
051    
052    import java.util.List;
053    
054    import javax.portlet.ActionRequest;
055    import javax.portlet.ActionResponse;
056    import javax.portlet.PortletConfig;
057    import javax.portlet.RenderRequest;
058    import javax.portlet.RenderResponse;
059    
060    import org.apache.struts.action.ActionForm;
061    import org.apache.struts.action.ActionForward;
062    import org.apache.struts.action.ActionMapping;
063    
064    /**
065     * @author Brian Wing Shun Chan
066     * @author Julio Camarero
067     */
068    public class EditCompanyAction extends PortletAction {
069    
070            @Override
071            public void processAction(
072                            ActionMapping actionMapping, ActionForm actionForm,
073                            PortletConfig portletConfig, ActionRequest actionRequest,
074                            ActionResponse actionResponse)
075                    throws Exception {
076    
077                    String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
078    
079                    try {
080                            if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
081                                    validateCAS(actionRequest);
082                                    validateLDAP(actionRequest);
083                                    validateSocialInteractions(actionRequest);
084    
085                                    if (!SessionErrors.isEmpty(actionRequest)) {
086                                            setForward(
087                                                    actionRequest, "portlet.portal_settings.edit_company");
088                                    }
089                                    else {
090                                            updateCompany(actionRequest);
091    
092                                            sendRedirect(actionRequest, actionResponse);
093                                    }
094                            }
095                    }
096                    catch (Exception e) {
097                            if (e instanceof PrincipalException) {
098                                    SessionErrors.add(actionRequest, e.getClass());
099    
100                                    setForward(actionRequest, "portlet.portal_settings.error");
101                            }
102                            else if (e instanceof AddressCityException ||
103                                             e instanceof AccountNameException ||
104                                             e instanceof AddressStreetException ||
105                                             e instanceof AddressZipException ||
106                                             e instanceof CompanyMxException ||
107                                             e instanceof CompanyVirtualHostException ||
108                                             e instanceof CompanyWebIdException ||
109                                             e instanceof EmailAddressException ||
110                                             e instanceof LocaleException ||
111                                             e instanceof NoSuchCountryException ||
112                                             e instanceof NoSuchListTypeException ||
113                                             e instanceof NoSuchRegionException ||
114                                             e instanceof PhoneNumberException ||
115                                             e instanceof WebsiteURLException) {
116    
117                                    if (e instanceof NoSuchListTypeException) {
118                                            NoSuchListTypeException nslte = (NoSuchListTypeException)e;
119    
120                                            SessionErrors.add(
121                                                    actionRequest,
122                                                    e.getClass().getName() + nslte.getType());
123                                    }
124                                    else {
125                                            SessionErrors.add(actionRequest, e.getClass(), e);
126                                    }
127    
128                                    setForward(
129                                            actionRequest, "portlet.portal_settings.edit_company");
130                            }
131                            else {
132                                    throw e;
133                            }
134                    }
135            }
136    
137            @Override
138            public ActionForward render(
139                            ActionMapping actionMapping, ActionForm actionForm,
140                            PortletConfig portletConfig, RenderRequest renderRequest,
141                            RenderResponse renderResponse)
142                    throws Exception {
143    
144                    return actionMapping.findForward(
145                            getForward(renderRequest, "portlet.portal_settings.edit_company"));
146            }
147    
148            protected void updateCompany(ActionRequest actionRequest) throws Exception {
149                    long companyId = PortalUtil.getCompanyId(actionRequest);
150    
151                    String virtualHostname = ParamUtil.getString(
152                            actionRequest, "virtualHostname");
153                    String mx = ParamUtil.getString(actionRequest, "mx");
154                    String homeURL = ParamUtil.getString(actionRequest, "homeURL");
155                    boolean deleteLogo = ParamUtil.getBoolean(actionRequest, "deleteLogo");
156    
157                    byte[] logoBytes = null;
158    
159                    long fileEntryId = ParamUtil.getLong(actionRequest, "fileEntryId");
160    
161                    if (fileEntryId > 0) {
162                            FileEntry fileEntry = DLAppLocalServiceUtil.getFileEntry(
163                                    fileEntryId);
164    
165                            logoBytes = FileUtil.getBytes(fileEntry.getContentStream());
166                    }
167    
168                    String name = ParamUtil.getString(actionRequest, "name");
169                    String legalName = ParamUtil.getString(actionRequest, "legalName");
170                    String legalId = ParamUtil.getString(actionRequest, "legalId");
171                    String legalType = ParamUtil.getString(actionRequest, "legalType");
172                    String sicCode = ParamUtil.getString(actionRequest, "sicCode");
173                    String tickerSymbol = ParamUtil.getString(
174                            actionRequest, "tickerSymbol");
175                    String industry = ParamUtil.getString(actionRequest, "industry");
176                    String type = ParamUtil.getString(actionRequest, "type");
177                    String size = ParamUtil.getString(actionRequest, "size");
178                    String languageId = ParamUtil.getString(actionRequest, "languageId");
179                    String timeZoneId = ParamUtil.getString(actionRequest, "timeZoneId");
180                    List<Address> addresses = UsersAdminUtil.getAddresses(actionRequest);
181                    List<EmailAddress> emailAddresses = UsersAdminUtil.getEmailAddresses(
182                            actionRequest);
183                    List<Phone> phones = UsersAdminUtil.getPhones(actionRequest);
184                    List<Website> websites = UsersAdminUtil.getWebsites(actionRequest);
185                    UnicodeProperties properties = PropertiesParamUtil.getProperties(
186                            actionRequest, "settings--");
187    
188                    CompanyServiceUtil.updateCompany(
189                            companyId, virtualHostname, mx, homeURL, !deleteLogo, logoBytes,
190                            name, legalName, legalId, legalType, sicCode, tickerSymbol,
191                            industry, type, size, languageId, timeZoneId, addresses,
192                            emailAddresses, phones, websites, properties);
193    
194                    PortalUtil.resetCDNHosts();
195            }
196    
197            protected void validateCAS(ActionRequest actionRequest) {
198                    boolean casEnabled = ParamUtil.getBoolean(
199                            actionRequest, "settings--" + PropsKeys.CAS_AUTH_ENABLED + "--");
200    
201                    if (!casEnabled) {
202                            return;
203                    }
204    
205                    String casLoginURL = ParamUtil.getString(
206                            actionRequest, "settings--" + PropsKeys.CAS_LOGIN_URL + "--");
207                    String casLogoutURL = ParamUtil.getString(
208                            actionRequest, "settings--" + PropsKeys.CAS_LOGOUT_URL + "--");
209                    String casServerName = ParamUtil.getString(
210                            actionRequest, "settings--" + PropsKeys.CAS_SERVER_NAME + "--");
211                    String casServerURL = ParamUtil.getString(
212                            actionRequest, "settings--" + PropsKeys.CAS_SERVER_URL + "--");
213                    String casServiceURL = ParamUtil.getString(
214                            actionRequest, "settings--" + PropsKeys.CAS_SERVICE_URL + "--");
215                    String casNoSuchUserRedirectURL = ParamUtil.getString(
216                            actionRequest,
217                            "settings--" + PropsKeys.CAS_NO_SUCH_USER_REDIRECT_URL + "--");
218    
219                    if (!Validator.isUrl(casLoginURL)) {
220                            SessionErrors.add(actionRequest, "casLoginURLInvalid");
221                    }
222    
223                    if (!Validator.isUrl(casLogoutURL)) {
224                            SessionErrors.add(actionRequest, "casLogoutURLInvalid");
225                    }
226    
227                    if (Validator.isNull(casServerName)) {
228                            SessionErrors.add(actionRequest, "casServerNameInvalid");
229                    }
230    
231                    if (!Validator.isUrl(casServerURL)) {
232                            SessionErrors.add(actionRequest, "casServerURLInvalid");
233                    }
234    
235                    if (Validator.isNotNull(casServiceURL) &&
236                            !Validator.isUrl(casServiceURL)) {
237    
238                            SessionErrors.add(actionRequest, "casServiceURLInvalid");
239                    }
240    
241                    if (Validator.isNotNull(casNoSuchUserRedirectURL) &&
242                            !Validator.isUrl(casNoSuchUserRedirectURL)) {
243    
244                            SessionErrors.add(actionRequest, "casNoSuchUserURLInvalid");
245                    }
246            }
247    
248            protected void validateLDAP(ActionRequest actionRequest) {
249                    if (!PropsValues.LDAP_IMPORT_USER_PASSWORD_AUTOGENERATED) {
250                            return;
251                    }
252    
253                    boolean ldapExportEnabled = ParamUtil.getBoolean(
254                            actionRequest, "settings--" + PropsKeys.LDAP_EXPORT_ENABLED + "--");
255                    boolean ldapImportEnabled = ParamUtil.getBoolean(
256                            actionRequest, "settings--" + PropsKeys.LDAP_IMPORT_ENABLED + "--");
257    
258                    if (ldapExportEnabled && ldapImportEnabled) {
259                            SessionErrors.add(
260                                    actionRequest, "ldapExportAndImportOnPasswordAutogeneration");
261                    }
262            }
263    
264            protected void validateSocialInteractions(ActionRequest actionRequest) {
265                    boolean socialInteractionsEnabled = ParamUtil.getBoolean(
266                            actionRequest, "settings--socialInteractionsEnabled--");
267    
268                    if (!socialInteractionsEnabled) {
269                            return;
270                    }
271    
272                    boolean socialInteractionsAnyUserEnabled = ParamUtil.getBoolean(
273                            actionRequest, "settings--socialInteractionsAnyUserEnabled--");
274    
275                    if (socialInteractionsAnyUserEnabled) {
276                            return;
277                    }
278    
279                    boolean socialInteractionsSocialRelationTypesEnabled =
280                            ParamUtil.getBoolean(
281                                    actionRequest,
282                                    "settings--socialInteractionsSocialRelationTypesEnabled--");
283                    String socialInteractionsSocialRelationTypes = ParamUtil.getString(
284                            actionRequest, "settings--socialInteractionsSocialRelationTypes--");
285    
286                    if (socialInteractionsSocialRelationTypesEnabled &&
287                            Validator.isNull(socialInteractionsSocialRelationTypes)) {
288    
289                            SessionErrors.add(
290                                    actionRequest, "socialInteractionsSocialRelationTypes");
291                    }
292    
293                    boolean socialInteractionsSitesEnabled = ParamUtil.getBoolean(
294                            actionRequest, "settings--socialInteractionsSitesEnabled--");
295    
296                    if (!socialInteractionsSocialRelationTypesEnabled &&
297                            !socialInteractionsSitesEnabled) {
298    
299                            SessionErrors.add(actionRequest, "socialInteractionsInvalid");
300                    }
301            }
302    
303    }