作者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