回精華區
作者itoc, 信區: itoc
標題[功能] manage.c 板主自行改變分類 (一)
時間04/01/02
作者: itoc (League) 看板: plan
標題: [功能] 板主自行改變分類
時間: 2004/01/02 Fri 22:40:21                           Updated: 2005/05/26

  板主可以自由地在站長限定的分類中跳來跳去
  且改分類也會順便改 (A)nnounce→Class 裡面的位置

: manage.c 新增這一段於 post_manage() 前面

/* ----------------------------------------------------- */
/* 板主功能 : 修改分類                                   */
/* ----------------------------------------------------- */


static int
cmphdr(hdr)
  HDR *hdr;
{
  return !strcmp(hdr->xname, currboard);
}


static int
post_brdclass(xo)
  XO *xo;
{
#define NUM_CLASS   3   /* 個人分類有三種 */    // 要幾個,自己改 
  int rc, i;
  BRD *brd;
  HDR gem;
  char *path[NUM_CLASS] =       // 分類自定,記得要在站上開相對應的分類 
  {
    "gem/@/@Apple", "gem/@/@Banana", "gem/@/@Orange"
  };

  brd = bshm->bcache + currbno;

  // 限制的規則自定 
  if (strcmp(brd->class, "個人"))
  {
    vmsg("只有個人板才能改變分類");
    return XO_FOOT;
  }

  if (vans("是否修改看板分類(Y/N)?[N] ") == 'y')
  {
    // 分類名字自定 
    rc = vans("看板分類:(1)蘋果 (2)香蕉 (3)橘子?[Q] ") - '1';
    if (rc < 0 || rc >= NUM_CLASS)
      return XO_FOOT;

    if (vans(msg_sure_ny) == 'y')
    {
      /* 刪除舊的分類 */
      for (i = 0; i < NUM_CLASS; i++)
      {
        /* 已找到舊分類,就不需要繼續找其他分類 */
        if (!rec_del(path[i], sizeof(HDR), 0, cmphdr))
          break;
      }

      /* 加入新的分類並排序 */
      brd2gem(brd, &gem);
      rec_add(path[rc], &gem, sizeof(HDR));
      rec_sync(path[rc], sizeof(HDR), cmphdr, NULL);

      vmsg("看板分類已修改成功\,一小時後將於分類群組中更新");
    }
  }

  return XO_FOOT;
}

: manage.c:post_manage()

    "Manager 增減副板主",
+   "Class   改變分類",

  ...

- char *menu = "◎ 板主選單 (B)主題 (W)進板 (M)副板"
+ char *menu = "◎ 板主選單 (B)主題 (W)進板 (M)副板 (C)分類"

  ...

  case 'm':
    return post_changeBM(xo);

+ case 'c':
+   return post_brdclass(xo);

--
□ 本文章由 itocitoc.Dorm11.NCTU.edu.tw 發表
精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻