⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filters.jsp

📁 一个jive论坛管理的源码 学习Jive源程序
💻 JSP
📖 第 1 页 / 共 2 页
字号:
<%@ page contentType="text/html;charset=GB2312" %>
<%
/**
 *	$RCSfile: filters.jsp,v $
 *	$Revision: 1.1.1.1 $
 *	$Date: 2002/09/09 13:50:12 $
 */
%>

<%@ page import="java.beans.*,
                 java.util.*,
                 com.jivesoftware.util.*,
                 com.jivesoftware.forum.*,
                 com.jivesoftware.forum.database.*,
                 com.jivesoftware.forum.util.*"
    errorPage="error.jsp"
%>

<%@ include file="global.jsp" %>

<%! // Global variables/methods for this page
    private boolean isInstalledFilter(FilterManager filterManager,
            ForumMessageFilter filter)
    {
        try {
            int filterCount = filterManager.getFilterCount();
            if (filter == null) {
                return false;
            }
            if (filterCount < 1) {
                return false;
            }
            String filterClassname = filter.getClass().getName();
            for (int i=0; i<filterCount; i++) {
                ForumMessageFilter installedFilter = filterManager.getFilter(i);
                if (filterClassname.equals(installedFilter.getClass().getName())) {
                    return true;
                }
            }
        } catch (Exception e) {}
        return false;
    }

    private String getHTML(ForumMessageFilter filter, PropertyDescriptor descriptor)
    {
        // HTML of the customizer for this property
        StringBuffer html = new StringBuffer(50);
        // Get the name of the property (this becomes the name of the form element)
        String propName = descriptor.getName();
        // Get the current value of the property
        Object propValue = null;
        try {
            propValue = descriptor.getReadMethod().invoke(filter,null);
        }
        catch (Exception e) {e.printStackTrace();}

        // Get the classname of this property
        String className = descriptor.getPropertyType().getName();

        // HTML form elements for number values (rendered as small textfields)
        if ("int".equals(className)
            || "double".equals(className)
            || "long".equals(className))
        {
            html.append("<input type=\"text\" name=\"").append(propName).append("\" size=\"6\" maxlength=\"10\"");
            if (propValue != null) {
                html.append(" value=\"").append(propValue.toString()).append("\"");
            }
            html.append(">");
        }
        // HTML form elements for boolean values (rendered as Yes/No radio buttons)
        else if ("boolean".equals(className)) {
            boolean value = false;
            if ("true".equals(propValue.toString())) {
                value = true;
            }
            html.append("<input type=\"radio\" name=\"").append(propName).append("\" id=\"rb").append(propName).append("1\" ");
            html.append("value=\"true\"");
            html.append((value)?" checked":"");
            html.append("> <label for=\"rb").append(propName).append("1\">Yes</label> ");
            html.append("<input type=\"radio\" name=\"").append(propName).append("\" id=\"rb").append(propName).append("2\" ");
            html.append("value=\"false\"");
            html.append((!value)?" checked":"");
            html.append("> <label for=\"rb").append(propName).append("2\">No</label> ");
        }
        // HTML elements for a String (rendered as a wide textfield)
        else if ("java.lang.String".equals(className)) {
            if (propName.toLowerCase().equals("password")) {
                html.append("<input type=\"password\"");
            }
            else {
                html.append("<input type=\"text\"");
            }
            html.append(" name=\"").append(propName).append("\" size=\"30\" maxlength=\"150\"");
            if (propValue != null) {
                html.append(" value=\"").append(escapeHTML(propValue.toString())).append("\"");
            }
            html.append(">");
        }
        if (html.length() == 0) {
            html.append("&nbsp;");
        }
        return html.toString();
    }

    private Map getFilterPropertyValues(HttpServletRequest request,
            FilterManager filterManager, ForumMessageFilter filter)
    {
        // Map of filter property name/value pairs
        Map map = new HashMap();
        try {
            // Property descriptors
            PropertyDescriptor[] descriptors = BeanUtils.getPropertyDescriptors(filter.getClass());
            // Loop through the properties, get the value of the property as a
            // parameter from the HttpRequest object
            for (int i=0; i<descriptors.length; i++) {
                String propName = descriptors[i].getName();
                String propValue = ParamUtils.getParameter(request,propName);
                map.put(propName, propValue);
            }
        } catch (Exception e) {}
        return map;
    }

    private String escapeHTML(String html) {
        html = StringUtils.replace(html, "\"", "&quot;");
        return StringUtils.escapeHTMLTags(html);
    }
%>

<%	// Get parameters
	long forumID = ParamUtils.getLongParameter(request,"forum",-1);
    String classname = ParamUtils.getParameter(request,"filters");
    boolean install = ParamUtils.getBooleanParameter(request,"install");
    boolean remove = ParamUtils.getBooleanParameter(request,"remove");
    int position = ParamUtils.getIntParameter(request,"pos",-1);
    boolean edit = ParamUtils.getBooleanParameter(request,"edit");
    boolean addFilter = ParamUtils.getBooleanParameter(request,"addFilter");
    String newClassname = ParamUtils.getParameter(request,"newClassname");
    boolean saveProperties = ParamUtils.getBooleanParameter(request,"saveProperties");
    int filterIndex = ParamUtils.getIntParameter(request,"filterIndex",-1);
    boolean changePosition = ParamUtils.getBooleanParameter(request,"changePos");
    boolean up = ParamUtils.getBooleanParameter(request,"up");
    boolean down = ParamUtils.getBooleanParameter(request,"down");

    // Indicate if we're doing global filters
    boolean isGlobal = (forumID == -1L);

    // Load the forum
    Forum forum = null;
    if (forumID > 0L) {
        forum = forumFactory.getForum(forumID);
    }

    // Get the filter manager
    FilterManager filterManager = null;
    if (forum != null) {
        filterManager = forum.getFilterManager();
    }
    else {
        filterManager = forumFactory.getFilterManager();
    }

    // Check for the case that there is a global, uncacheable filter.
    boolean globalHasUncacheableFilters = false;
    if (!isGlobal) {
        // Get the global filter manager
        FilterManager globalFilterManager = forumFactory.getFilterManager();
        globalHasUncacheableFilters = globalFilterManager.hasUncacheableFilters();
    }

    // Save filter properties
    if (saveProperties) {
        if (filterIndex >= 0) {
            // The filter we're working with
            ForumMessageFilter filter = filterManager.getFilter(filterIndex);
            // A map of name/value pairs. The names are the names of the bean
            // properties and the values come as parameters to this page
            Map properties = getFilterPropertyValues(request, filterManager, filter);
            // Set the properties
            BeanUtils.setProperties(filter, properties);
            // Save the filters
            filterManager.saveFilters();
            // Done, so redirect to this page
            response.sendRedirect("filters.jsp?forum=" + forumID);
            return;
        }
    }

    // Add a new filter to the list of installable filters
    if (addFilter) {
        try {
            if (newClassname == null) {
                throw new ClassNotFoundException("没有指定类名。");
            }
            DbFilterManager.addFilterClass(newClassname.trim());
        }
        catch (ClassNotFoundException cnfe) {
            setOneTimeMessage(session, "message",
                "\"" + newClassname + "\" 不是一个合法的类名。");
        }
        response.sendRedirect("filters.jsp?forum=" + forumID);
        return;
    }

    // Change the position of a filter
    if (changePosition) {
        if (filterIndex >= 0) {
            // Get the filter at the specified filter position
            ForumMessageFilter filter = filterManager.getFilter(filterIndex);
            // Remove it
            filterManager.removeFilter(filterIndex);
            // Re-add it based on the "direction" we're doing
            if (up) {
                filterManager.addFilter(filter, filterIndex-1);
            }
            if (down) {
                filterManager.addFilter(filter, filterIndex+1);
            }
            // done, so redirect
            response.sendRedirect("filters.jsp?forum=" + forumID);
            return;
        }
    }

    // Number of installed filters
    int filterCount = filterManager.getFilterCount();
    // All filter classes
    ForumMessageFilter[] filters = forumFactory.getAvailableFilters();

    if (install && classname != null) {
        try {
            ForumMessageFilter newFilter
                = (ForumMessageFilter)(Class.forName(classname)).newInstance();
            filterManager.addFilter(newFilter);
            String redirect = "filters.jsp";
            if (forumID > -1L) {
                redirect += "?forum=" + forumID;
            }
            response.sendRedirect(redirect);
            return;
        }
        catch (Exception e) {}
    }

    if (remove && position > -1) {
        filterManager.removeFilter(position);
        String redirect = "filters.jsp";
        if (forumID > -1L) {
            redirect += "?forum=" + forumID;
        }
        response.sendRedirect(redirect);
        return;
    }
%>

<%@ include file="header.jsp" %>

<%  // Title of this page and breadcrumbs
    String title = "";
    if (isGlobal) {
        title = "全局消息过虑";
    } else {
        title = "消息过虑";
    }

    String[][] breadcrumbs = null;
    if (isGlobal) {
        breadcrumbs = new String[][] {
            {"主页面", "main.jsp"},
            {title, "filters.jsp"}
        };
    }
    else {
        breadcrumbs = new String[][] {
            {"主页面", "main.jsp"},
            {"论坛", "forums.jsp"},
            {"编辑论坛", "editForum.jsp?forum="+forumID},
            {title, "filters.jsp?forum="+forumID}
        };
    }
%>
<%@ include file="title.jsp" %>

<span>
<font size="-1">
<%  if (isGlobal) { %>
    过滤器动态的重新格式化消息内容。使用下面的表单安装和自定义过滤器。
<%  } else { %>
    过滤器动态的重新格式化消息内容。使用下面的表单安装和自定义论坛的过滤器。请注意全局消息过滤器总在论坛消息过滤器前应用。
<%  } %>
</font>
</span>

<p>

<script language="JavaScript" type="text/javascript">
var filterInfo = new Array(
<%	for (int i=0; i<filters.length; i++) {
        BeanDescriptor descriptor = (Introspector.getBeanInfo(filters[i].getClass())).getBeanDescriptor();
%>
    new Array(
    "<%= descriptor.getBeanClass().getName() %>",
    "<%= descriptor.getValue("version") %>",
    "<%= descriptor.getValue("author") %>",
    "<%= descriptor.getShortDescription() %>",
    "<%= filters[i].isCacheable() %>"
    )
<%      if ((filters.length-i) > 1) { %>
		,
<%	    }
    }
%>
);
function properties(theForm) {
    var className = theForm.filters.options[theForm.filters.selectedIndex].value;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -