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