001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.layoutconfiguration.util.velocity;
016    
017    import com.liferay.portal.kernel.servlet.JSPSupportServlet;
018    import com.liferay.portal.kernel.util.GetterUtil;
019    import com.liferay.portal.kernel.util.StringPool;
020    import com.liferay.portal.kernel.util.UnicodeProperties;
021    import com.liferay.portal.model.CustomizedPages;
022    import com.liferay.portal.model.Layout;
023    import com.liferay.portlet.layoutsadmin.context.LayoutsAdminDisplayContext;
024    import com.liferay.portlet.sites.util.SitesUtil;
025    import com.liferay.taglib.aui.InputTag;
026    
027    import java.io.Writer;
028    
029    import java.util.Map;
030    
031    import javax.servlet.http.HttpServletRequest;
032    import javax.servlet.http.HttpServletResponse;
033    import javax.servlet.jsp.JspFactory;
034    import javax.servlet.jsp.PageContext;
035    import javax.servlet.jsp.tagext.Tag;
036    
037    /**
038     * @author Raymond Aug??
039     * @author Oliver Teichmann
040     */
041    public class CustomizationSettingsProcessor implements ColumnProcessor {
042    
043            public CustomizationSettingsProcessor(
044                    HttpServletRequest request, HttpServletResponse response) {
045    
046                    JspFactory jspFactory = JspFactory.getDefaultFactory();
047    
048                    _pageContext = jspFactory.getPageContext(
049                            new JSPSupportServlet(request.getServletContext()), request,
050                            response, null, false, 0, false);
051    
052                    _writer = _pageContext.getOut();
053    
054                    LayoutsAdminDisplayContext layoutsAdminDisplayContext =
055                            new LayoutsAdminDisplayContext(request, null);
056    
057                    Layout selLayout = layoutsAdminDisplayContext.getSelLayout();
058    
059                    _layoutTypeSettings = selLayout.getTypeSettingsProperties();
060    
061                    _customizationEnabled = true;
062    
063                    if (!SitesUtil.isLayoutUpdateable(selLayout)) {
064                            _customizationEnabled = false;
065                    }
066    
067                    if (selLayout.isLayoutPrototypeLinkActive()) {
068                            _customizationEnabled = false;
069                    }
070            }
071    
072            @Override
073            public String processColumn(String columnId) throws Exception {
074                    return processColumn(columnId, StringPool.BLANK);
075            }
076    
077            @Override
078            public String processColumn(String columnId, String classNames)
079                    throws Exception {
080    
081                    String customizableKey = CustomizedPages.namespaceColumnId(columnId);
082    
083                    boolean customizable = false;
084    
085                    if (_customizationEnabled) {
086                            customizable = GetterUtil.getBoolean(
087                                    _layoutTypeSettings.getProperty(
088                                            customizableKey, String.valueOf(false)));
089                    }
090    
091                    _writer.append("<div class=\"");
092                    _writer.append(classNames);
093                    _writer.append("\">");
094    
095                    _writer.append("<h1>");
096                    _writer.append(columnId);
097                    _writer.append("</h1>");
098    
099                    InputTag inputTag = new InputTag();
100    
101                    inputTag.setDisabled(!_customizationEnabled);
102                    inputTag.setLabel("customizable");
103                    inputTag.setName(
104                            "TypeSettingsProperties--".concat(customizableKey).concat("--"));
105                    inputTag.setPageContext(_pageContext);
106                    inputTag.setType("checkbox");
107                    inputTag.setValue(customizable);
108    
109                    int result = inputTag.doStartTag();
110    
111                    if (result == Tag.EVAL_BODY_INCLUDE) {
112                            inputTag.doEndTag();
113                    }
114    
115                    _writer.append("</div>");
116    
117                    return StringPool.BLANK;
118            }
119    
120            @Override
121            public String processMax() throws Exception {
122                    return StringPool.BLANK;
123            }
124    
125            /**
126             * @deprecated As of 6.2.0, replaced by {@link #processMax()}
127             */
128            @Deprecated
129            @Override
130            public String processMax(String classNames) throws Exception {
131                    return processMax();
132            }
133    
134            @Override
135            public String processPortlet(String portletId) throws Exception {
136                    _writer.append("<div class=\"portlet\">");
137                    _writer.append(portletId);
138                    _writer.append("</div>");
139    
140                    return StringPool.BLANK;
141            }
142    
143            @Override
144            public String processPortlet(
145                            String portletId, Map<String, ?> defaultSettingsMap)
146                    throws Exception {
147    
148                    return processPortlet(portletId);
149            }
150    
151            private boolean _customizationEnabled;
152            private UnicodeProperties _layoutTypeSettings;
153            private PageContext _pageContext;
154            private Writer _writer;
155    
156    }