Discuz!NT 2.5 正式版 下载
beta、RC版升级补丁
中秋模板发布
首届Discuz!NT 模板大赛圆满结束
著名音乐网站SoGua网、分贝网
采用Discuz!NT搭建社区
FIFA Online2官网论坛使用Discuz!NT
游戏城寨论坛使用Discuz!NT搭建
Discuz!NT 2.5正式开源 Discuz!NT文档中心
用户整合说明文档
Discuz!NT亮相微软Tech-Ed 2007
Discuz!NT情景搞笑短片抢先看
 
1/1页1 跳转到查看:4059
发新话题 回复该主题

[经验] 我的源代码修改3:增强版主删除帖子和屏蔽用户等权力

我的源代码修改3:增强版主删除帖子和屏蔽用户等权力

作论坛的最高境界就是:让论坛自生自灭!
我们只是搭好一个舞台,让别人去自娱自乐!
要达到这个境界,首先需要加强用户的管理及屏蔽功能、加强广告贴恶意贴的自动识别屏蔽功能,我前两个帖子都已经实现。
但还有一个很重要的,那就是要物色好的版主,要充分相信他,让他能够代替自己。因此要给版主更多的权力。dnt这方面做得十分不好,绝大部分管理工作都必须进入后台进行。特别是帖子的审核也必须是管理员进入后台进行。一天那么多帖子,哪能都让管理员审核呢?

本贴讨论如何在现有框架下,用最少的改动给版主更多的权力。我的做法是在帖子察看页面中,每个帖子加几个按钮,分别是“删贴”、“禁言”、“屏蔽”。
删贴:删除该用户所有帖子(其实是进入审核)
禁言:把该用户加入禁言用户组(我已改成可以发帖但必须审核)
屏蔽:把该用户加入禁至ip用户组,成为黑名单。

首先修改模板showtopic.htm,在 “if (Utils.StrToInt(ismoder, 0)==1)”段中加入:

    templateBuilder.Append("        <a href=\"javascript:action_onchange('delall',document.moderate,'" + post["pid"].ToString().Trim() + "');\">删贴</a>\r\n");
    templateBuilder.Append("        <a href=\"javascript:action_onchange('stoptalk',document.moderate,'" + post["pid"].ToString().Trim() + "');\">禁言</a>\r\n");
    templateBuilder.Append("        <a href=\"javascript:action_onchange('stopvisit',document.moderate,'" + post["pid"].ToString().Trim() + "');\">屏蔽</a>\r\n");


还要修改模板topicadmin.htm,在“</form>" 之前加入:

<INPUT type="hidden" size="10" name="postid" ID="Hidden1" value="{postidlist}" />


然后修改topicadmin.aspx.cs
在BindTitle中添加代码

            case "report":
                    operationtitle = "举报不良信息";
                    break;
                case "delall":
                    operationtitle = "删除用户所有帖子";
                    break;
                case "stoptalk":
                    operationtitle = "阻止该ip及用户发言";
                    break;
                case "stopvisit":
                    operationtitle = "禁止该ip及用户访问";
                    break;


在DoOperations函数中也要修改下面的相关代码,加入我们自己的操作参数

  if ("delete,move,type,highlight,close,displayorder,digest,copy,split,merge,bump,repair,rate,delposts,report,delall,stoptalk,stopvisit".IndexOf(operation) == -1)
  {
    AddErrLine("未知的操作参数");
    return false;
  }


switch (operation)代码段中加入具体操作:

                case "delall":
                    //清除用户所发的帖子
                    PostInfo __postinfo1 = PostFactory.GetPostInfo(Utils.StrToInt(topiclist, 0), Utils.StrToInt(postidlist, 0));
                    if (__postinfo1 == null)
                    {
                        AddErrLine("您没有选择要操作的用户, 请返回修改.");
                        return false;
                    }
                    foreach (DataRow dr in AdminDatabase.ExecuteDataset("SELECT * FROM [" + BaseConfigFactory.GetTablePrefix + "tablelist]").Tables[0].Rows)
                    {
                        if (dr["id"].ToString() != "")
                        {
                            AdminDatabase.ExecuteNonQuery("UPDATE [" + BaseConfigFactory.GetTablePrefix + "posts" + dr["id"].ToString() + "] set  [invisible]=1 WHERE  [layer]>0 and [posterid]=" + __postinfo1.Posterid.ToString());
                        }
                    }
                    AdminDatabase.ExecuteNonQuery("update [" + BaseConfigFactory.GetTablePrefix + "topics] set [displayorder]=-2 WHERE [posterid]=" +  __postinfo1.Posterid.ToString());
                    break;
                   
                   
                case "stoptalk":
                case "stopvisit":
                   
                    PostInfo __postinfo2 = PostFactory.GetPostInfo(Utils.StrToInt(topiclist, 0), Utils.StrToInt(postidlist, 0));
                    if (__postinfo2 == null)
                    {
                        AddErrLine("您没有选择要操作的用户, 请返回修改.");
                        return false;
                    }
                    UserInfo __userinfo = new UserInfo();
                    __userinfo = UserFactoryAdmin.GetUserInfo(__postinfo2.Posterid);
                    if (__userinfo.Uid > 1) //判断是不是当前uid是不是系统初始化时生成的uid
                    {
                        if (operation == "stoptalk")
                        {
                            operationName = "禁言用户-" + __userinfo.Username;
                            AdminDatabase.ExecuteNonQuery("UPDATE [" + BaseConfigFactory.GetTablePrefix + "users] SET [groupid]=4, [adminid]=0  WHERE [uid] = " + __userinfo.Uid);
                        }
                        else
                        {
                            operationName = "屏蔽用户-" + __userinfo.Username;
                            AdminDatabase.ExecuteNonQuery("UPDATE [" + BaseConfigFactory.GetTablePrefix + "users] SET [groupid]=6, [adminid]=0  WHERE [uid] = " + __userinfo.Uid);
                        }
                    }
                    else
                    {
                        AddErrLine("系统用户不能禁言。");
                        return false;
                    }
                    break;


上面代码中多次出现“举报”功能,因为我在论坛里增加了一个会员和游客都可以举报不良信息的功能,不影响其它。

以上功能需配合我前面两个帖子中说到了增强用户屏蔽等功能一起使用,效果最佳。

通过我这3个帖子的修改,一个安全性比较高、管理简单方便的论坛也就创立起来了。当然也会造成一些错杀,导致一些损失,就看创始人建立论坛的初衷来进行取舍了。
本帖被评分 1 次

TOP

 

回复:我的源代码修改3:增强版主删除帖子和屏蔽用户等权力

沙发第一次,支持楼主的作品.期待楼主的作品.
定制,仿制各行各业NT模板。如有需要请联系qq:395189600

TOP

 

回复:我的源代码修改3:增强版主删除帖子和屏蔽用户等权力

作论坛的最高境界就是:让论坛自生自灭!
我们只是搭好一个舞台,让别人去自娱自乐!


====
并同楼上
生命不止,BT不休.浮生如梦,夜夜南柯.

TOP

 

回复:我的源代码修改3:增强版主删除帖子和屏蔽用户等权力

nion68: 期待楼主更多的好帖

TOP

 

回复:我的源代码修改3:增强版主删除帖子和屏蔽用户等权力

作论坛的最高境界就是:让论坛自生自灭!
我们只是搭好一个舞台,让别人去自娱自乐!

~~~~~~~~~~~~~~

是做论坛管理员的境界!呵呵

TOP

 

回复:我的源代码修改3:增强版主删除帖子和屏蔽用户等权力

找不到*.CS的文件,是在源码上修改然后重新编译吗,有没有更直接的不用重新编译的方法吗

TOP

 

回复:我的源代码修改3:增强版主删除帖子和屏蔽用户等权力

论坛创始人应该多给版主一些功能 的确是让论坛自生自灭
呵呵

TOP

 

回复: 我的源代码修改3:增强版主删除帖子和屏蔽用户等权力



引用:
原帖由 oupj 于 2007-6-19 13:490 发表
找不到*.CS的文件,是在源码上修改然后重新编译吗,有没有更直接的不用重新编译的方法吗


多谢楼主啊,但这样有点麻烦,有没有更简单的方法啊

TOP

 
1/1页1 跳转到
发表新主题 回复该主题