1
22
23 package com.liferay.portal.events;
24
25 import com.liferay.portal.kernel.events.Action;
26 import com.liferay.portal.kernel.events.ActionException;
27 import com.liferay.portal.kernel.log.Log;
28 import com.liferay.portal.kernel.log.LogFactoryUtil;
29 import com.liferay.portal.kernel.servlet.BrowserSnifferUtil;
30 import com.liferay.portal.kernel.util.GetterUtil;
31 import com.liferay.portal.kernel.util.Randomizer;
32 import com.liferay.portal.model.ColorScheme;
33 import com.liferay.portal.model.Layout;
34 import com.liferay.portal.model.Theme;
35 import com.liferay.portal.service.LayoutServiceUtil;
36 import com.liferay.portal.service.ThemeLocalServiceUtil;
37 import com.liferay.portal.theme.ThemeDisplay;
38 import com.liferay.portal.util.WebKeys;
39
40 import java.util.List;
41
42 import javax.servlet.http.HttpServletRequest;
43 import javax.servlet.http.HttpServletResponse;
44
45
51 public class RandomLookAndFeelAction extends Action {
52
53 public void run(HttpServletRequest request, HttpServletResponse response)
54 throws ActionException {
55
56 try {
57
58
60 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
61 WebKeys.THEME_DISPLAY);
62
63 if (!themeDisplay.isSignedIn()) {
64 return;
65 }
66
67
70 String requestURI = GetterUtil.getString(request.getRequestURI());
71
72 if (!requestURI.endsWith("/portal/layout")) {
73 return;
74 }
75
76
79 Layout layout = themeDisplay.getLayout();
80
81 if (layout == null) {
82 return;
83 }
84
85 Randomizer randomizer = Randomizer.getInstance();
86
87 boolean wapTheme = BrowserSnifferUtil.isWap(request);
88
89 List<Theme> themes = ThemeLocalServiceUtil.getThemes(
90 themeDisplay.getCompanyId(), themeDisplay.getScopeGroupId(),
91 themeDisplay.getUserId(), wapTheme);
92
93 if (themes.size() > 0) {
94 Theme theme = themes.get(randomizer.nextInt(themes.size()));
95
96 List<ColorScheme> colorSchemes = theme.getColorSchemes();
97
98 ColorScheme colorScheme = colorSchemes.get(
99 randomizer.nextInt(colorSchemes.size()));
100
101 LayoutServiceUtil.updateLookAndFeel(
102 layout.getGroupId(), layout.isPrivateLayout(),
103 layout.getPlid(), theme.getThemeId(),
104 colorScheme.getColorSchemeId(), layout.getCss(), wapTheme);
105
106 themeDisplay.setLookAndFeel(theme, colorScheme);
107
108 request.setAttribute(WebKeys.THEME, theme);
109 request.setAttribute(WebKeys.COLOR_SCHEME, colorScheme);
110 }
111 }
112 catch (Exception e) {
113 _log.error(e, e);
114
115 throw new ActionException(e);
116 }
117 }
118
119 private static Log _log =
120 LogFactoryUtil.getLog(RandomLookAndFeelAction.class);
121
122 }