001
014
015 package com.liferay.portal.layoutconfiguration.util.velocity;
016
017 import com.liferay.portal.kernel.model.CustomizedPages;
018 import com.liferay.portal.kernel.model.Layout;
019 import com.liferay.portal.kernel.model.LayoutConstants;
020 import com.liferay.portal.kernel.portlet.PortletProvider;
021 import com.liferay.portal.kernel.portlet.PortletProviderUtil;
022 import com.liferay.portal.kernel.service.LayoutLocalServiceUtil;
023 import com.liferay.portal.kernel.servlet.JSPSupportServlet;
024 import com.liferay.portal.kernel.util.GetterUtil;
025 import com.liferay.portal.kernel.util.ParamUtil;
026 import com.liferay.portal.kernel.util.StringPool;
027 import com.liferay.portal.kernel.util.UnicodeProperties;
028 import com.liferay.sites.kernel.util.SitesUtil;
029 import com.liferay.taglib.aui.InputTag;
030
031 import java.io.Writer;
032
033 import java.util.Map;
034
035 import javax.servlet.http.HttpServletRequest;
036 import javax.servlet.http.HttpServletResponse;
037 import javax.servlet.jsp.JspFactory;
038 import javax.servlet.jsp.PageContext;
039 import javax.servlet.jsp.tagext.Tag;
040
041
045 public class CustomizationSettingsProcessor implements ColumnProcessor {
046
047 public CustomizationSettingsProcessor(
048 HttpServletRequest request, HttpServletResponse response) {
049
050 JspFactory jspFactory = JspFactory.getDefaultFactory();
051
052 _pageContext = jspFactory.getPageContext(
053 new JSPSupportServlet(request.getServletContext()), request,
054 response, null, false, 0, false);
055
056 _writer = _pageContext.getOut();
057
058 Layout selLayout = null;
059
060 long selPlid = ParamUtil.getLong(
061 request, "selPlid", LayoutConstants.DEFAULT_PLID);
062
063 if (selPlid != LayoutConstants.DEFAULT_PLID) {
064 selLayout = LayoutLocalServiceUtil.fetchLayout(selPlid);
065 }
066
067 _layoutTypeSettings = selLayout.getTypeSettingsProperties();
068
069 if (!SitesUtil.isLayoutUpdateable(selLayout) ||
070 selLayout.isLayoutPrototypeLinkActive()) {
071
072 _customizationEnabled = false;
073 }
074 else {
075 _customizationEnabled = true;
076 }
077 }
078
079 @Override
080 public String processColumn(String columnId) throws Exception {
081 return processColumn(columnId, StringPool.BLANK);
082 }
083
084 @Override
085 public String processColumn(String columnId, String classNames)
086 throws Exception {
087
088 String customizableKey = CustomizedPages.namespaceColumnId(columnId);
089
090 boolean customizable = false;
091
092 if (_customizationEnabled) {
093 customizable = GetterUtil.getBoolean(
094 _layoutTypeSettings.getProperty(
095 customizableKey, String.valueOf(false)));
096 }
097
098 _writer.append("<div class=\"");
099 _writer.append(classNames);
100 _writer.append("\">");
101
102 _writer.append("<h1>");
103 _writer.append(columnId);
104 _writer.append("</h1>");
105
106 InputTag inputTag = new InputTag();
107
108 inputTag.setDisabled(!_customizationEnabled);
109 inputTag.setDynamicAttribute(
110 StringPool.BLANK, "labelOff", "no-customizable");
111 inputTag.setDynamicAttribute(
112 StringPool.BLANK, "labelOn", "customizable");
113 inputTag.setLabel(StringPool.BLANK);
114 inputTag.setName(
115 "TypeSettingsProperties--".concat(customizableKey).concat("--"));
116 inputTag.setPageContext(_pageContext);
117 inputTag.setType("toggle-switch");
118 inputTag.setValue(customizable);
119
120 int result = inputTag.doStartTag();
121
122 if (result == Tag.EVAL_BODY_INCLUDE) {
123 inputTag.doEndTag();
124 }
125
126 _writer.append("</div>");
127
128 return StringPool.BLANK;
129 }
130
131 @Override
132 public String processMax() throws Exception {
133 return StringPool.BLANK;
134 }
135
136
139 @Deprecated
140 @Override
141 public String processMax(String classNames) throws Exception {
142 return processMax();
143 }
144
145 @Override
146 public String processPortlet(String portletId) throws Exception {
147 _writer.append("<div class=\"portlet\">");
148 _writer.append(portletId);
149 _writer.append("</div>");
150
151 return StringPool.BLANK;
152 }
153
154 @Override
155 public String processPortlet(
156 String portletId, Map<String, ?> defaultSettingsMap)
157 throws Exception {
158
159 return processPortlet(portletId);
160 }
161
162 @Override
163 public String processPortlet(
164 String portletProviderClassName,
165 PortletProvider.Action portletProviderAction)
166 throws Exception {
167
168 String portletId = PortletProviderUtil.getPortletId(
169 portletProviderClassName, portletProviderAction);
170
171 return processPortlet(portletId);
172 }
173
174 private final boolean _customizationEnabled;
175 private final UnicodeProperties _layoutTypeSettings;
176 private final PageContext _pageContext;
177 private final Writer _writer;
178
179 }