作者lihgong (Q.Q)
看板PttCurrent
标题Re: [请益] 锁文的功能
时间Sun Dec 19 11:49:35 2004
前面那篇是基本建设
不管怎样
阁下弄出了一个flag叫 FILE_HIDE
接下的任务是把这个flag放在适当的地方...
1. lock起来的文章, 前面打个x
816 x
12/11 jongyann □
[问题] ㄉㄉ
817
12/11 lihgong □ 寒假单车计画
修改 bbs.c readdoentry()
else if (currmode & MODE_BOARD || HAS_PERM(PERM_LOGINOK))
{
if (ent->filemode & FILE_HIDE)
type = (type == ' ') ? 'x' : 'X';
else if (ent->filemode & FILE_MARKED)
type = (type == ' ') ? 'm' : 'M';
else if (TagNum && !Tagger(atoi(ent->filename + 2), 0, TAG_NIN))
type = 'D';
else if (ent->filemode & FILE_SOLVED)
type = (type == ' ') ? 's': 'S';
}
2. 其次是让文章可以上锁的按钮
修改 bbs.c, read_comms[], 我选Ctrl + Y 来设定加密
article_encrypt, // Ctrl('Y')
在bbs.c加入article_encrypt()
/* 文章加密 */
static int
article_encrypt(int ent, fileheader_t * fhdr, char *direct)
{
char buf[STRLEN], fpath[STRLEN];
boardheader_t *bp;
bp = getbcache(currbid);
if ((!HAS_PERM(PERM_SYSOP)) &&
strcmp(fhdr->owner, cuser.userid) &&
(!(currmode & MODE_BOARD)))
{
vmsg("要文章的作者或板主才可以加密文章啦 =.=");
return FULLUPDATE;
}
if ((!(currbrdattr & BRD_HIDE)) &&
(!bp->level || (currbrdattr & BRD_POSTMASK))) {
vmsg("本看板文章会转到ALLPOST板, 不适合使用文章加密");
return FULLUPDATE;
}
setbpath(fpath, currboard);
sprintf(buf, "%s/%s", fpath, fhdr->filename);
if(access(buf, F_OK) < 0)
return DONOTHING;
fhdr->filemode ^= FILE_HIDE;
substitute_ref_record(direct, fhdr, ent);
return PART_REDRAW;
}
这样就看得到 x 了
article_encrypt() 务必看懂他在做什麽
因为後面的实作一堆都是直接从里面抄程式码出来用
3. 加密起来的文章, 闲杂人等看不到
修改bbs.c read_post()
static int
read_post(int ent, fileheader_t * fhdr, char *direct)
{
char genbuf[200];
int more_result;
if (fhdr->owner[0] == '-')
return READ_SKIP;
/* lihgong: add for 文章加密 */
if (fhdr->filemode & FILE_HIDE)
{
if(strcmp(cuser.userid, fhdr->owner) && //作者本人
!(currmode & MODE_BOARD))
{
brc_addlist(fhdr->filename); //把上锁的文章变已读
return FULLUPDATE;
}
}
--------
以下是曾经出现过的bug @@
4. 所有加密的文章禁止 reply
static int
reply_post(int ent, fileheader_t * fhdr, char *direct)
{
if (!CheckPostPerm())
return DONOTHING;
/* lihgong: add for 文章加密 */
if (fhdr->filemode & FILE_HIDE)
return DONOTHING;
5. 所有加密文章只准版主和作者转录 (也可以修改成禁止转录)
修改 cross_post()
/* lihgong: add for 文章加密 */
if (fhdr->filemode & FILE_HIDE)
{
if(strcmp(cuser.userid, fhdr->owner) && //作者本人
!(currmode & MODE_BOARD))
return DONOTHING;
}
6. read_post()还隐藏了一个bug... 所有加密的文章禁止reply !!
brc_addlist(fhdr->filename);
strncpy(currtitle, subject(fhdr->title), TTLEN);
if (more_result)
{
if(more_result == 999)
{
if (CheckPostPerm()
&& !(fhdr->filemode & FILE_HIDE))
{
strlcpy(quote_file, genbuf, sizeof(quote_file));
do_reply(fhdr);
*quote_file = 0;
}
return FULLUPDATE;
}
7. 转录bug @@ 修改 cite_post()
/* lihgong: add for 文章加密 */
if (fhdr->filemode & FILE_HIDE)
{
if(strcmp(cuser.userid, fhdr->owner) && //作者本人
!(currmode & MODE_BOARD))
return DONOTHING;
}
--------
下面是自己决定要不要开放
* 隐藏的文章要不要给推荐? 给作者和版主推荐? 还是禁止推荐?
修改 recommend()
--------
另外还有个功能搭配文章锁定 -- 超级板友
就是锁定的文章除了版主和本人看得到
还可以设定16个超级板友
这些人也看得到
我站上user蛮喜欢这功能的
话说当初写的时候不小心
全站所有隐藏文公开一个多小时 @@
--------
其实我自己也不是很清楚这样有没有改掉所有bug
我站上这功能从去年8月写好
到现在可以说漏洞连连 @@
程式写得不好觉得很对不起站上user
版上其他先进如果也开发这个功能
麻烦告诉我哪些地方还要考虑
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.140.120
※ 编辑: lihgong 来自: 140.113.140.120 (12/19 12:29)
※ 编辑: lihgong 来自: 140.113.140.120 (12/19 12:30)
1F:→ frankiori:感谢您的分享^^~ 163.21.254.249 12/20