作论坛的最高境界就是:让论坛自生自灭!
我们只是搭好一个舞台,让别人去自娱自乐!
要达到这个境界,首先需要加强用户的管理及屏蔽功能、加强广告贴恶意贴的自动识别屏蔽功能,我前两个帖子都已经实现。
但还有一个很重要的,那就是要物色好的版主,要充分相信他,让他能够代替自己。因此要给版主更多的权力。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个帖子的修改,一个安全性比较高、管理简单方便的论坛也就创立起来了。当然也会造成一些错杀,导致一些损失,就看创始人建立论坛的初衷来进行取舍了。