001
014
015 package com.liferay.portal.events;
016
017 import com.liferay.portal.kernel.events.Action;
018 import com.liferay.portal.kernel.events.ActionException;
019 import com.liferay.portal.kernel.log.Log;
020 import com.liferay.portal.kernel.log.LogFactoryUtil;
021 import com.liferay.portal.kernel.servlet.BrowserSnifferUtil;
022 import com.liferay.portal.kernel.util.GetterUtil;
023 import com.liferay.portal.kernel.util.Randomizer;
024 import com.liferay.portal.model.ColorScheme;
025 import com.liferay.portal.model.Layout;
026 import com.liferay.portal.model.Theme;
027 import com.liferay.portal.service.LayoutServiceUtil;
028 import com.liferay.portal.service.ThemeLocalServiceUtil;
029 import com.liferay.portal.theme.ThemeDisplay;
030 import com.liferay.portal.util.WebKeys;
031
032 import java.util.List;
033
034 import javax.servlet.http.HttpServletRequest;
035 import javax.servlet.http.HttpServletResponse;
036
037
040 public class RandomLookAndFeelAction extends Action {
041
042 @Override
043 public void run(HttpServletRequest request, HttpServletResponse response)
044 throws ActionException {
045
046 try {
047
048
049
050 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
051 WebKeys.THEME_DISPLAY);
052
053 if (!themeDisplay.isSignedIn()) {
054 return;
055 }
056
057
058
059
060 String requestURI = GetterUtil.getString(request.getRequestURI());
061
062 if (!requestURI.endsWith("/portal/layout")) {
063 return;
064 }
065
066
067
068
069 Layout layout = themeDisplay.getLayout();
070
071 if (layout == null) {
072 return;
073 }
074
075 Randomizer randomizer = Randomizer.getInstance();
076
077 boolean wapTheme = BrowserSnifferUtil.isWap(request);
078
079 List<Theme> themes = ThemeLocalServiceUtil.getThemes(
080 themeDisplay.getCompanyId(), themeDisplay.getScopeGroupId(),
081 themeDisplay.getUserId(), wapTheme);
082
083 if (themes.size() > 0) {
084 Theme theme = themes.get(randomizer.nextInt(themes.size()));
085
086 List<ColorScheme> colorSchemes = theme.getColorSchemes();
087
088 ColorScheme colorScheme = colorSchemes.get(
089 randomizer.nextInt(colorSchemes.size()));
090
091 LayoutServiceUtil.updateLookAndFeel(
092 layout.getGroupId(), layout.isPrivateLayout(),
093 layout.getPlid(), theme.getThemeId(),
094 colorScheme.getColorSchemeId(), layout.getCss(), wapTheme);
095
096 themeDisplay.setLookAndFeel(theme, colorScheme);
097
098 request.setAttribute(WebKeys.THEME, theme);
099 request.setAttribute(WebKeys.COLOR_SCHEME, colorScheme);
100 }
101 }
102 catch (Exception e) {
103 _log.error(e, e);
104
105 throw new ActionException(e);
106 }
107 }
108
109 private static Log _log = LogFactoryUtil.getLog(
110 RandomLookAndFeelAction.class);
111
112 }