回精華區
作者itoc, 信區: itoc
標題[功能] board.c 分類小組長
時間04/04/05
作者: itoc (網路上的芳鄰) 看板: plan
標題: [功能] 分類小組長
時間: 2004/04/05 Mon 11:07:00                           Updated: 2005/05/19

※ 引述《Efen.bbs@backwind.g1.dorm.ncku.edu.tw (every  day...)》之銘言:
> ptt2的小組長功能有沒有辦法弄呢
> 假設你是某一分類的小組長,
> 小組長就可以自行開版,
> 並且把版放入自己分類下面的子分類…
> 並且能設定版的權限,版主…等
> 嗯,就是只要在該分類下,
> 他就等於是一個看版總管,
> 出了該分類,他就是個一般使用者了!

: ─────────────────────────────────────

  這是如何設定小組長的說明

  在 (A)nnouce 裡面的 Class 加上他的 ID,他就變成小組長了
  例如原本標題是
  Personal/    分類 □ 個人小天堂
  改成
  Personal/    個人 □ 個人小天堂                       itoc/sysop
  那麼 itoc 和 sysop 就變成 Personal/ 的小組長了
  而「個人」就是本子目錄下,小組長所能開設的看板分類名稱
     是一串空白,空白個數不限,至少要一個

  小組長沒有子目錄繼承
  例如有樹狀結構
  Personal/    個人 □ 個人小天堂                       itoc
  ├ PersonalA/   個人 □ 個人小天堂 (A)
  └ PersonalB/   個人 □ 個人小天堂 (B)
  那麼 itoc 是 Personal/ 的小組長
  但是不是 PersonalA/ PersonalB/ 的小組長

  所以如果希望 itoc 也是 PersonalA/ PersonalB/ 的小組長,則必須
  Personal/    個人 □ 個人小天堂                       itoc
  ├ PersonalA/   個人 □ 個人小天堂 (A)                itoc
  └ PersonalB/   個人 □ 個人小天堂 (B)                itoc

  小組長在其管理的分類群組中可以按 ^P 新增看板,按 E 修改看板

  小組長只能在該子目錄開新看板,不能開新目錄
  若要開新目錄,要站長從 (A)nnounce 裡面開

  小組長也看不到隱藏板,即使是自己所管理的分類群組下

  如果小組長改了板名,那麼得由站長去 (A)nnounce->Class 裡面改

: ─────────────────────────────────────

: board.c:class_newbrd()

- if (!HAS_PERM(PERM_ALLBOARD))
+ if (!is_class_manager(xo))
    return XO_NONE;

: board.c:class_edit()

static int
class_edit(xo)
  XO *xo;
{
+ int manager;

+ manager = is_class_manager(xo);
+ if (manager || HAS_PERM(PERM_BM))
- if (HAS_PERM(PERM_ALLBOARD | PERM_BM))
  {
    ...
    ...
-     if (!HAS_PERM(PERM_ALLBOARD))
+     if (!manager)
        brd_title(chn);         /* itoc.000312: 板主修改中文敘述 */
      else
        brd_edit(chn);

: board.c:is_class_manager() 新增此函式在 class_edit() 前面

static int                    /* 1:是此分類群組的小組長 */
is_class_manager(xo)
  XO *xo;
{
  if (HAS_PERM(PERM_ALLBOARD))
    return 1;

  /* 只有看板總管可以在看板列表及分類群組第一層開新板 */
  if (xo->key < CH_END)         /* 在分類群組第二層以下 */
  {
    short *chx;
    char *img, *str, *list;

    img = class_img;
    chx = (short *) img + (CH_END - xo->key);
    str = img + *chx;

    /* 檢查是不是此分類群組的小組長 */
    if (list = strrchr(str + BNLEN + 1 + BCLEN + 1, ' '))
    {
      list++;
      if (is_bm(list, cuser.userid))
        return 1;
    }
  }

  return 0;
}

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