作者hpo14.bbs@ntust.org (陌生) 看板: itoc
標題[功能] post.c 文章鎖定
時間資工清流站 (2007/05/13 Sun 04:40:20)
做這個的原因是,站上有人需求..xD
不過關於扯到置底的部份 ↓
先置底,再鎖定 或是 先鎖定、置底後,再解除
這邊我不太會寫,有沒有人可指導一下.....xD
還請各位幫測試看看囉..
功能:
提供板主或是站長將文章鎖定,類似 ptt 那種一樣被鎖定之文章
除了板主與有看板總管權限的人以外無法刪除、評分、編輯(包含改標題)。
注意:我個人認為,鎖定文應為公開之重要文章。
故,已加密文章無法鎖定,已鎖定文章無法加密。
> include/config.h
#define HAVE_REFUSEMARK /* itoc.010602: 提供看板文章加密 */
+#define HAVE_LOCKEDMARK /* hpo14.20070513: 提供看板文章鎖定 */
> maple/post.c: post_attr()
+#ifdef HAVE_LOCKEDMARK
+ if (mode & POST_LOCKED)
+ attr |= '!';
+ else
+#endif
#ifdef HAVE_LABELMARK
…
#endif
> maple/post.c: 以下程式整隻新增於 post_lable() 以上
#ifdef HAVE_LOCKEDMARK
static int
post_locked(xo) /* hpo14.20070513: 文章鎖定。除站長/板主外無法刪除/編輯 */
XO *xo;
{
if (bbstate & STAT_BOARD)
{
HDR *hdr;
int pos, cur, xmode;
pos = xo->pos;
cur = pos - xo->top;
hdr = (HDR *) xo_pool + cur;
xmode = hdr->xmode;
#ifdef HAVE_LABELMARK
if (xmode & POST_DELETE) /* 待砍文章不能鎖定 */
return XO_NONE;
#endif
#ifdef HAVE_REFUSEMARK
if (xmode & POST_RESTRICT) /* 加密文章不能鎖定 */
return XO_NONE; /* 若要加密文可鎖定,這段就不要加 */
#endif
if (vans(xmode & POST_LOCKED ? "解除文章鎖定 [y/N]? [N] " : "鎖定此篇文章
[y/N]? [N] ") != 'y')
return XO_FOOT;
if (xmode & POST_LOCKED)
{
hdr->xmode &= ~POST_LOCKED;
}
else
{
xmode |= POST_MARKED; /* 鎖定的文章,通常很重要,所以加 POST_MARKED */
hdr->xmode = xmode ^ POST_LOCKED;
}
currchrono = hdr->chrono;
rec_put(xo->dir, hdr, sizeof(HDR), xo->key == XZ_XPOST ? hdr->xid : pos,
cmpchrono);
move(3 + cur, 7);
outc(post_attr(hdr));
}
return XO_LOAD;
}
#endif
> maple/post.c: post_refuse()
hdr = (HDR *) xo_pool + cur;
+#ifdef HAVE_LOCKEDMARK
+ if (xmode & POST_LOCKED) /* 鎖定文章不能加密 */
+ return XO_NONE; /* 若要已鎖定文可加密,這段就不要加 */
+#endif
> maple/post.c: post_score()
hdr = (HDR *) xo_pool + cur;
#ifdef HAVE_REFUSEMARK
……
#endif
+#ifdef HAVE_LOCKEDMARK
+ if((hdr->xmode & POST_LOCKED) && !(bbstate & STAT_BM)) /* 鎖定文章不能評分 */
+ return XO_NONE;
+#endif
> maple/post.c; post_edit()
hdr_fpath(fpath, xo->dir, hdr);
+#ifdef HAVE_LOCKEDMARK
+ if(!(bbstate & STAT_BOARD))
+ {
+ vmsg("文章已鎖定,僅供瀏覽");
+ return XO_NONE ;
+ }
+#endif
> maple/post.c; post_item()
#ifdef HAVE_SCORE
if (hdr->xmode & POST_BOTTOM2) /* 謄本才需要標「重要」 */
/* 若置底文被鎖定,則在★後面顯示 !,反之顯示 ' ' */
/* hpo14 : 置底文的顯示方式自行修改 */
! prints(" \033[1;32m%5s\033[m%c%c", "★", tag_char(hdr->chrono), hdr->xmode
& POST_LOCKED ? '!' : ' ');
else
……
#else
……
if (hdr->xmode & POST_BOTTOM2)
! prints(" \033[1;32m%5s\033[m%c%c", "★", tag_char(hdr->chrono), hdr->xmode
& POST_LOCKED ? '!' : ' ');
else
prints("%6d%c%c", num, tag_char(hdr->chrono), post_attr(hdr));
#endif
--
>> 台灣科技大學 資工清流站 # ntust.org #
>> Author: 61-59-78-243.adsl.static.seed.net.tw