回文章列表
作者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
文章選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻