- 浏览: 47428 次
- 性别:
- 来自: 无锡
最新评论
-
RainWu:
...
chx 学习jForum笔记十四 数据表四 jforum_groups及jforum_user_groups -
c_huabo:
这都被你发现了!!!
chx 学习jForum笔记十七 实现中文搜索 -
beermonkey:
感谢啊。。。。
chx 学习jForum笔记十七 实现中文搜索
==背景==
原先有一个随时维护的用户表rswk、权限表cibrole、对应表cibuserrole。现准备将JFORUM的用户表与原用户表同步,将用户组表与原权限表同步。
==总体设想==
用户导入部分见学习笔记十一(http://caihexi.iteye.com/blog/901876)
组功能从cibrole数据表获取.增加手动同步/导入功能,从管理界面增加一个按钮。
组与用户关系表的同步功能可以在对cibuserrole在手动同步/导入功能中实现。从管理界面中,每个组的信息行中增加一个按钮。
后期,还可增加一个定时作业。
===具体操作===
1、在generic_queries.sql 中增加
UserState.getAllGroup = SELECT role_name,role_chin FROM cibrole WHERE role_name not in (SELECT group_name FROM jforum_groups)
供同步组时调用。
2、在GroupDAO.java中增加
String SynchronizationGroup(); //同步组 String SynchronizationGroupUsers(int groupId); //同步某个组的用户
3、在GenericGroupDAO.java中增加
public String SynchronizationGroup() { //组同步 StringBuffer result = new StringBuffer("新增组:"); PreparedStatement pstmt = null; ResultSet resultSet = null; try { pstmt = JForumExecutionContext.getConnection().prepareStatement(SystemGlobals.getSql("UserState.getAllNewGroup")); resultSet = pstmt.executeQuery(); while (resultSet.next()) { Group newgroup = new Group(); newgroup.setName(resultSet.getString("role_name")); newgroup.setDescription(resultSet.getString("role_chin")); addNew(newgroup); result.append(newgroup.getName() + ':' + newgroup.getDescription() + ';'); } } catch (SQLException e) { throw new DatabaseException(e); } finally { DbUtils.close(resultSet, pstmt); } return result.toString(); }
public String SynchronizationGroupUsers(int groupId) { StringBuffer result = new StringBuffer("同步组成员,组ID=" + groupId); String rolename = null; String s_userid; int userId; final UserDAO userDao = DataAccessDriver.getInstance().newUserDAO(); PreparedStatement pstmt = null; ResultSet resultSet = null; try { pstmt = JForumExecutionContext.getConnection().prepareStatement(SystemGlobals.getSql("UserState.getGroupName")); pstmt.setInt(1, groupId); resultSet = pstmt.executeQuery(); if (resultSet.next()) { rolename = resultSet.getString("role_name"); result.append("组名称=" + rolename); } pstmt.close(); result.append("删除用户:"); pstmt = JForumExecutionContext.getConnection().prepareStatement(SystemGlobals.getSql("UserState.SyncGroupManDelete")); pstmt.setInt(1, groupId); pstmt.setString(2, rolename); resultSet = pstmt.executeQuery(); if (resultSet.next()) { result.append(resultSet.getInt(1) + "名。"); } pstmt.close(); result.append("添加用户:"); pstmt = JForumExecutionContext.getConnection().prepareStatement(SystemGlobals.getSql("UserState.SyncGroupManAppend")); pstmt.setString(1, rolename); pstmt.setInt(2, groupId); resultSet = pstmt.executeQuery(); while (resultSet.next()) { s_userid = resultSet.getString(1); try { userId = Integer.parseInt(s_userid); userDao.addToGroup(userId, groupId); result.append(userId); } catch (Exception e) { result.append(e); } } } catch (SQLException e) { throw new DatabaseException(e); } finally { DbUtils.close(resultSet, pstmt); } return result.toString(); }
4、在UserDAO.java中增加
void addToGroup(int userId, int groupId);
在GenericUserDAO.java中增加与上面相应的子程序。主要是根据原两个子程序改写,供SynchronizationGroupUsers调用。删除功能直接由SQL语句完成。而添加功能未由SQL语句完成,主要是由于ex_user中的值可能会有'admin'等不能转成INT值的字符,如有的话会造成SQL语句执行中断。否则的话,原句SELECT ex_user 可以改成SELECT Cast(ex_user to int)
5、在generic_queries.sql中增加
UserState.SyncGroupManDelete = DELETE FROM jforum_user_groups where group_id = ? and (LTRIM(STR(user_id)) NOT IN (SELECT LTRIM(ex_user) FROM cibuserrole WHERE LOWER(ex_role) = LOWER(?) )) UserState.SyncGroupManAppend = SELECT ex_user FROM cibuserrole WHERE LOWER(ex_role) = LOWER(?) AND ltrim(ex_user) NOT IN (SELECT LTRIM(STR(user_id)) FROM jforum_user_groups WHERE group_id = ?) and ex_user <> 'admin'
6、在GroupAction.java中增加
public void SyncGroup() //组同步 { DataAccessDriver.getInstance().newGroupDAO().SynchronizationGroup(); this.list(); }
public void SyncGroupUsers() //组用户同步 { final int id = this.request.getIntParameter(GROUP_ID); DataAccessDriver.getInstance().newGroupDAO().SynchronizationGroupUsers(id); this.list(); }
以上两个增加的是点击按钮后的动作,下面是增加VIEW中的按钮。
7、在group_list.htm中增加
<td class="row2" align="center"><span class="gen"><b>sync users</b></span></td> <td class="row1" align="center"><span class="gen"> <a href="${JForumContext.encodeURL("/${moduleName}/SyncGroupUsers/${node.id}")}">sync users</a></span></td> <input class="mainoption" type="button" value="SyncGroup" name="button" onclick="document.location = '${JForumContext.encodeURL("/${moduleName}/SyncGroup")}';" />
其中,第一句是增加标题栏
第二句是在每一行(组信息)增加一个同步组用户的按钮。点击后会调用步骤6中的
public void SyncGroupUsers() //组用户同步
第三句是在未尾增加一个同步组的按钮。点击后会调用步骤6中的
public void SyncGroup() //组同步
8、在\templates\default\admin\macros\group_macros.ftl中新增
<td class="row2" align="center"><span class="gen"> <a href="${contextPath}/${moduleName}/SyncGroupUsers/${node.id}${extension}")}">sync users</a> </span></td>
如果不增加上面的语句,子属组后面不会显示同步按钮。
9、在urlPattern.properties文件中新增
adminGroups.SyncGroupUsers.1 = group_id adminGroups.SyncGroup.0 =
第9步骤相当关键。做到第8步骤后,我原以为程序能够正常运行了,结果死活出不了结果,一直在右侧栏显示论坛内容。
查了两天,不停的调试才查到,新增的动作(action)都必须在urlPattern.properties这个文件中进行配置。
所以,以上整个过程其实只是向程序中增加了两个动作(action),一个是SyncGroup,另一个是SyncGroupUsers。
一个是同步组信息,另一个是同步组内用户信息。
发表评论
-
chx 学习jForum笔记十九 jForum定时作业
2011-02-25 15:43 1013参照jforum原有的两个定时作业SummarySchedul ... -
chx 学习jForum笔记十八 jForum与ms sqlserver
2011-02-23 16:39 7832jForum的原生数据库是mysql,但对sqlserver也 ... -
chx 学习jForum笔记十七 实现中文搜索
2011-02-23 16:04 1921最初测试的时候中文搜索一直都不成功。所以以为要对源程序进行大幅 ... -
chx 学习jForum笔记十六 实现附件移植,添加附件时按钮无效的问题解决
2011-02-23 15:59 3158==背景== 原论坛附件存放于d:\res\cibfo ... -
chx 学习jForum笔记十四 数据表四 jforum_groups及jforum_user_groups
2011-02-14 14:07 1483jforum_groups group_id ... -
chx 学习jForum笔记十三 数据表三 jforum_roles及jforum_role_values
2011-02-12 16:19 1310jforum_roles 权限表。是一张组与基本权限的对应表。 ... -
chx 学习jForum笔记十二 数据表二 jforum_categories及jforum_forums
2011-02-12 15:05 1428jforum_categories是子论坛的分类以下称为栏目。 ... -
chx 学习jForum笔记十一 实现单点登录SSO
2011-02-09 11:55 2004分为三部分: 1.导入原用户数据库. 2.修改SSO模块, ... -
chx 学习jForum笔记十 数据表一 jforum_users
2011-02-09 10:35 1277user_id bigint ... -
chx 学习jForum笔记九-ForumAction四,发现用户注册模块
2010-12-09 14:27 19952010.12.9接上午。继续看net.jforum.view ... -
chx 学习jForum笔记八-ForumAction三,发现用户认证模块。
2010-12-09 11:15 17182010.12.9。接昨天 在net.jforum.view ... -
chx 学习jForum笔记七-ForumAction二
2010-12-08 17:24 11672010.12.8 接昨天。 下面这句是存在于net.jfo ... -
chx 学习jForum笔记六-MostUsersEverOnline的结束及ForumAction-list的开始
2010-12-07 15:54 22942010.12.7 继续查找关键字MostUsersEverO ... -
chx 学习jForum笔记五-参数表的操作
2010-12-07 15:05 9972010.12.7 继续查找关键字MostUsersEverO ... -
chx 学习jForum笔记四
2010-12-06 15:21 10102010.12.6 接上午。在net.jforum.repos ... -
chx 学习jForum笔记三
2010-12-06 14:05 10402010.12.6 接上周日,继续。PermissionCon ... -
chx 学习jForum笔记二
2010-12-05 10:26 1245我的源程序是安道森练 ... -
chx 学习jForum笔记一
2010-12-05 09:37 1679目标:jForum二次开发,读懂源程序。 修改权限管理模块, ...
相关推荐
《jForum与MS SQLServer整合学习笔记》 jForum是一款基于Java的开源论坛系统,它以其高度可定制性、灵活性和强大的功能深受开发者喜爱。在本文中,我们将深入探讨如何将jForum与Microsoft SQL Server(简称MS SQL...
【标题】"chx99个人主页源码_chx99.zip" 提供的是一个名为 chx99 的个人主页的源代码。源码通常包含了网站设计、布局、功能实现等核心部分,对于开发者而言是了解网站工作原理、学习前端技术或者进行二次开发的重要...
标题与描述中的关键词“CHX TNF JNK”揭示了在细胞凋亡机制中的相互作用,尤其是关于人类肝癌细胞对肿瘤坏死因子α(TNFα)诱导的凋亡反应。这一研究聚焦于理解CHX(环己亚胺)、TNFα以及JNK(c-Jun N端激酶)三者...
根据给定的文件信息,我们可以提炼出以下关于CHX2095的详细IT知识: ### CHX2095概述 **CHX2095**是一款由United Monolithic Semiconductors S.A.S.制造的频率倍增器集成电路(IC),其工作频率范围在7.5至30GHz...
总之,通过对【CMS程序]chx99个人主页源码_chx99(ASP.NET源码)的深入研究,我们可以学习到ASP.NET Web Forms的开发技术,数据绑定,用户认证,配置管理,以及前端交互等多个方面,这将对提升我们的ASP.NET开发技能...
CHX 是一个轻量级的终端十六进制编辑器,专为那些需要在命令行环境中进行低级别数据操作的用户设计。它提供了直观的界面和功能,允许用户查看和编辑二进制文件的内容,这对于软件开发者、系统管理员以及对底层计算机...
CHX-I防火墙官方教程-附带翻译终稿.pdf
4. **后端集成**:如果源码包含后端部分,可能涉及服务器端编程语言,如PHP、Node.js或Python,用于处理用户数据、实现用户登录等功能。 5. **数据库连接**:如果需要存储和展示用户数据,如博客文章、作品集,源码...
通过分析源码,开发者可以学习到如何实现用户登录、内容发布、权限控制等功能,以及如何优化性能和提高代码的可维护性。 总的来说,"ASP.NET源码——[CMS程序]chx99个人主页源码.zip"是一个宝贵的学习资源,不仅...
本软件是一个模似网卡和集线器的工具,可以模似集线器功能,实现VPN的功能。使得系统把此软件识别成一块网卡,有了这个东西,只要可以访问外网,都可以连接到虚拟HUB上与其他电脑组成局域网,在此虚拟的局域...
这篇文章将详细讲解与"CHX612.zip"压缩包相关的知识点,主要涉及HX612触摸IC、STC15W408AS微控制器以及相关编程与接口技术。 首先,我们关注的是HX612,这是一款触摸传感器集成电路。不同于常见的I2C接口,HX612...
HA-SoftEther-CHX虚拟专网HA-SoftEther-CHX虚拟专网HA-SoftEther-CHX虚拟专网HA-SoftEther-CHX虚拟专网
2. **后端逻辑**:这部分主要是处理用户请求、执行业务逻辑和数据库操作的代码,通常由ASP.NET Web Forms或MVC架构实现。开发者可能使用C#或VB.NET编写这些代码,它们存在于`.cs`或`.vb`文件中。 3. **前端界面**:...
这是一种用于求解线性方程组的算法,特别适用于大型稀疏矩阵问题,常用于最优化问题的求解。与普通的梯度下降法相比,共轭梯度法在迭代过程中可以更快地收敛到最优解,因为它考虑了梯度的共轭性质,避免了过多的正交...
标题中的“计算机专业英语学习软件”表明这是一款专为学习计算机领域英语词汇和术语设计的工具。这样的软件通常包含大量的专业词汇库,涵盖操作系统、编程语言、网络技术、数据库、硬件设备等多个方面,帮助用户扩展...
CHX-3大手臂大法兰.SLDDRW
[CMS程序]chx99个人主页源码_chx99.zip源码ASP.NET网站源码打包下载[CMS程序]chx99个人主页源码_chx99.zip源码ASP.NET网站源码打包下载[CMS程序]chx99个人主页源码_chx99.zip源码ASP.NET网站源码打包下载[CMS程序]...
这个项目的核心是一个源代码转换器,它能够将CHX语法的源代码转化为可执行的C++程序,从而实现动态生成网页的目的。 在C++世界中,CHX Hyper eXpressor 的出现弥补了Web开发领域的一个空白。通常,C++程序员需要...
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...