001    /**
002     * Copyright (c) 2000-2012 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.servlet.SessionErrors;
032    import com.liferay.portal.kernel.util.Constants;
033    import com.liferay.portal.kernel.util.ParamUtil;
034    import com.liferay.portal.kernel.util.PropertiesParamUtil;
035    import com.liferay.portal.kernel.util.PropsKeys;
036    import com.liferay.portal.kernel.util.UnicodeProperties;
037    import com.liferay.portal.kernel.util.Validator;
038    import com.liferay.portal.model.Address;
039    import com.liferay.portal.model.Company;
040    import com.liferay.portal.model.EmailAddress;
041    import com.liferay.portal.model.Phone;
042    import com.liferay.portal.model.Website;
043    import com.liferay.portal.security.auth.PrincipalException;
044    import com.liferay.portal.service.CompanyServiceUtil;
045    import com.liferay.portal.struts.PortletAction;
046    import com.liferay.portal.util.PortalUtil;
047    import com.liferay.portlet.usersadmin.util.UsersAdminUtil;
048    
049    import java.util.List;
050    
051    import javax.portlet.ActionRequest;
052    import javax.portlet.ActionResponse;
053    import javax.portlet.PortletConfig;
054    import javax.portlet.RenderRequest;
055    import javax.portlet.RenderResponse;
056    
057    import org.apache.struts.action.ActionForm;
058    import org.apache.struts.action.ActionForward;
059    import org.apache.struts.action.ActionMapping;
060    
061    /**
062     * @author Brian Wing Shun Chan
063     * @author Julio Camarero
064     */
065    public class EditCompanyAction extends PortletAction {
066    
067            @Override
068            public void processAction(
069                            ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
070                            ActionRequest actionRequest, ActionResponse actionResponse)
071                    throws Exception {
072    
073                    String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
074    
075                    try {
076                            if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
077                                    validateCAS(actionRequest);
078    
079                                    if (!SessionErrors.isEmpty(actionRequest)) {
080                                            setForward(
081                                                    actionRequest, "portlet.portal_settings.edit_company");
082                                    }
083                                    else {
084                                            updateCompany(actionRequest);
085                                            updateDisplay(actionRequest);
086    
087                                            sendRedirect(actionRequest, actionResponse);
088                                    }
089                            }
090                    }
091                    catch (Exception e) {
092                            if (e instanceof PrincipalException) {
093                                    SessionErrors.add(actionRequest, e.getClass().getName());
094    
095                                    setForward(actionRequest, "portlet.portal_settings.error");
096                            }
097                            else if (e instanceof AddressCityException ||
098                                             e instanceof AccountNameException ||
099                                             e instanceof AddressStreetException ||
100                                             e instanceof AddressZipException ||
101                                             e instanceof CompanyMxException ||
102                                             e instanceof CompanyVirtualHostException ||
103                                             e instanceof CompanyWebIdException ||
104                                             e instanceof EmailAddressException ||
105                                             e instanceof LocaleException ||
106                                             e instanceof NoSuchCountryException ||
107                                             e instanceof NoSuchListTypeException ||
108                                             e instanceof NoSuchRegionException ||
109                                             e instanceof PhoneNumberException ||
110                                             e instanceof WebsiteURLException) {
111    
112                                    if (e instanceof NoSuchListTypeException) {
113                                            NoSuchListTypeException nslte = (NoSuchListTypeException)e;
114    
115                                            SessionErrors.add(
116                                                    actionRequest,
117                                                    e.getClass().getName() + nslte.getType());
118                                    }
119                                    else {
120                                            SessionErrors.add(actionRequest, e.getClass().getName(), e);
121                                    }
122    
123                                    setForward(
124                                            actionRequest, "portlet.portal_settings.edit_company");
125                            }
126                            else {
127                                    throw e;
128                            }
129                    }
130            }
131    
132            @Override
133            public ActionForward render(
134                            ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
135                            RenderRequest renderRequest, RenderResponse renderResponse)
136                    throws Exception {
137    
138                    return mapping.findForward(
139                            getForward(renderRequest, "portlet.portal_settings.edit_company"));
140            }
141    
142            protected void updateCompany(ActionRequest actionRequest) throws Exception {
143                    long companyId = PortalUtil.getCompanyId(actionRequest);
144    
145                    String virtualHostname = ParamUtil.getString(
146                            actionRequest, "virtualHostname");
147                    String mx = ParamUtil.getString(actionRequest, "mx");
148                    String homeURL = ParamUtil.getString(actionRequest, "homeURL");
149                    String name = ParamUtil.getString(actionRequest, "name");
150                    String legalName = ParamUtil.getString(actionRequest, "legalName");
151                    String legalId = ParamUtil.getString(actionRequest, "legalId");
152                    String legalType = ParamUtil.getString(actionRequest, "legalType");
153                    String sicCode = ParamUtil.getString(actionRequest, "sicCode");
154                    String tickerSymbol = ParamUtil.getString(
155                            actionRequest, "tickerSymbol");
156                    String industry = ParamUtil.getString(actionRequest, "industry");
157                    String type = ParamUtil.getString(actionRequest, "type");
158                    String size = ParamUtil.getString(actionRequest, "size");
159                    String languageId = ParamUtil.getString(actionRequest, "languageId");
160                    String timeZoneId = ParamUtil.getString(actionRequest, "timeZoneId");
161                    List<Address> addresses = UsersAdminUtil.getAddresses(actionRequest);
162                    List<EmailAddress> emailAddresses = UsersAdminUtil.getEmailAddresses(
163                            actionRequest);
164                    List<Phone> phones = UsersAdminUtil.getPhones(actionRequest);
165                    List<Website> websites = UsersAdminUtil.getWebsites(actionRequest);
166                    UnicodeProperties properties = PropertiesParamUtil.getProperties(
167                            actionRequest, "settings--");
168    
169                    CompanyServiceUtil.updateCompany(
170                            companyId, virtualHostname, mx, homeURL, name, legalName, legalId,
171                            legalType, sicCode, tickerSymbol, industry, type, size, languageId,
172                            timeZoneId, addresses, emailAddresses, phones, websites,
173                            properties);
174    
175                    PortalUtil.resetCDNHosts();
176            }
177    
178            protected void updateDisplay(ActionRequest actionRequest) throws Exception {
179                    Company company = PortalUtil.getCompany(actionRequest);
180    
181                    String languageId = ParamUtil.getString(actionRequest, "languageId");
182                    String timeZoneId = ParamUtil.getString(actionRequest, "timeZoneId");
183    
184                    CompanyServiceUtil.updateDisplay(
185                            company.getCompanyId(), languageId, timeZoneId);
186    
187                    boolean siteLogo = ParamUtil.getBoolean(
188                            actionRequest,
189                            "settings--" + PropsKeys.COMPANY_SECURITY_SITE_LOGO + "--");
190    
191                    CompanyServiceUtil.updateSecurity(
192                            company.getCompanyId(), company.getAuthType(),
193                            company.isAutoLogin(), company.isSendPassword(),
194                            company.isStrangers(), company.isStrangersWithMx(),
195                            company.isStrangersVerify(), siteLogo);
196    
197                    boolean deleteLogo = ParamUtil.getBoolean(actionRequest, "deleteLogo");
198    
199                    if (deleteLogo) {
200                            CompanyServiceUtil.deleteLogo(company.getCompanyId());
201                    }
202            }
203    
204            protected void validateCAS(ActionRequest actionRequest) throws Exception {
205                    boolean casEnabled = ParamUtil.getBoolean(
206                            actionRequest, "settings--" + PropsKeys.CAS_AUTH_ENABLED + "--");
207    
208                    if (!casEnabled) {
209                            return;
210                    }
211    
212                    String casLoginURL = ParamUtil.getString(
213                            actionRequest, "settings--" + PropsKeys.CAS_LOGIN_URL + "--");
214                    String casLogoutURL = ParamUtil.getString(
215                            actionRequest, "settings--" + PropsKeys.CAS_LOGOUT_URL + "--");
216                    String casServerName = ParamUtil.getString(
217                            actionRequest, "settings--" + PropsKeys.CAS_SERVER_NAME + "--");
218                    String casServerURL = ParamUtil.getString(
219                            actionRequest, "settings--" + PropsKeys.CAS_SERVER_URL + "--");
220                    String casServiceURL = ParamUtil.getString(
221                            actionRequest, "settings--" + PropsKeys.CAS_SERVICE_URL + "--");
222                    String casNoSuchUserRedirectURL = ParamUtil.getString(
223                            actionRequest, "settings--" +
224                            PropsKeys.CAS_NO_SUCH_USER_REDIRECT_URL + "--");
225    
226                    if (!Validator.isUrl(casLoginURL)) {
227                            SessionErrors.add(actionRequest, "casLoginURLInvalid");
228                    }
229    
230                    if (!Validator.isUrl(casLogoutURL)) {
231                            SessionErrors.add(actionRequest, "casLogoutURLInvalid");
232                    }
233    
234                    if (Validator.isNull(casServerName)) {
235                            SessionErrors.add(actionRequest, "casServerNameInvalid");
236                    }
237    
238                    if (Validator.isNotNull(casServerURL) &&
239                            Validator.isNotNull(casServiceURL)) {
240    
241                            SessionErrors.add(
242                                    actionRequest, "casServerURLAndServiceURLConflict");
243                    }
244                    else if (Validator.isNull(casServerURL) &&
245                                     Validator.isNull(casServiceURL)) {
246    
247                            SessionErrors.add(actionRequest, "casServerURLAndServiceURLNotSet");
248                    }
249                    else {
250                            if (Validator.isNotNull(casServerURL) &&
251                                    !Validator.isUrl(casServerURL)) {
252    
253                                    SessionErrors.add(actionRequest, "casServerURLInvalid");
254                            }
255    
256                            if (Validator.isNotNull(casServiceURL) &&
257                                    !Validator.isUrl(casServiceURL)) {
258    
259                                    SessionErrors.add(actionRequest, "casServiceURLInvalid");
260                            }
261                    }
262    
263                    if (Validator.isNotNull(casNoSuchUserRedirectURL) &&
264                            !Validator.isUrl(casNoSuchUserRedirectURL)) {
265    
266                            SessionErrors.add(actionRequest, "casNoSuchUserURLInvalid");
267                    }
268            }
269    
270    }