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
50 public class RandomLookAndFeelAction extends Action {
51
52 public void run(HttpServletRequest request, HttpServletResponse response)
53 throws ActionException {
54
55 try {
56
57
59 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
60 WebKeys.THEME_DISPLAY);
61
62 if (!themeDisplay.isSignedIn()) {
63 return;
64 }
65
66
69 String requestURI = GetterUtil.getString(request.getRequestURI());
70
71 if (!requestURI.endsWith("/portal/layout")) {
72 return;
73 }
74
75
78 Layout layout = themeDisplay.getLayout();
79
80 if (layout == null) {
81 return;
82 }
83
84 Randomizer randomizer = Randomizer.getInstance();
85
86 boolean wapTheme = BrowserSnifferUtil.isWap(request);
87
88 List<Theme> themes = ThemeLocalServiceUtil.getThemes(
89 themeDisplay.getCompanyId(), themeDisplay.getScopeGroupId(),
90 themeDisplay.getUserId(), wapTheme);
91
92 if (themes.size() > 0) {
93 Theme theme = themes.get(randomizer.nextInt(themes.size()));
94
95 List<ColorScheme> colorSchemes = theme.getColorSchemes();
96
97 ColorScheme colorScheme = colorSchemes.get(
98 randomizer.nextInt(colorSchemes.size()));
99
100 LayoutServiceUtil.updateLookAndFeel(
101 layout.getGroupId(), layout.isPrivateLayout(),
102 layout.getPlid(), theme.getThemeId(),
103 colorScheme.getColorSchemeId(), layout.getCss(), wapTheme);
104
105 themeDisplay.setLookAndFeel(theme, colorScheme);
106
107 request.setAttribute(WebKeys.THEME, theme);
108 request.setAttribute(WebKeys.COLOR_SCHEME, colorScheme);
109 }
110 }
111 catch (Exception e) {
112 _log.error(e, e);
113
114 throw new ActionException(e);
115 }
116 }
117
118 private static Log _log =
119 LogFactoryUtil.getLog(RandomLookAndFeelAction.class);
120
121 }