作者amaki.bbs@luna.twbbs.org (仙草小羊) 看板: plan
標題[功能]進階版主功能
時間月下夜想 (Fri, 18 Apr 2003 11:27:23 +0800 (CST)) Updated: 2005/05/19
WD有進階板主功能,M3當然也可以有。
> config.h
#define HAVE_ADVANCE_BMPERM /* amaki.030418: 進階板主功能 */
> post.c
把itoc之前寫的post_prefix抄下來用。
放在do_post前即可。
#ifdef HAVE_ADVANCE_BMPERM
static int
post_prefix(xo)
XO *xo;
{
char fpath[64], buf[80];
FILE *fp;
if (!(bbstate & STAT_BOARD))
return XO_NONE;
brd_fpath(fpath, currboard, "prefix");
if (dashf(fpath))
{
switch (vans("1)刪除類別 2)設定新的類別?[Q] "))
{
case '1':
if (vans(msg_sure_ny) == 'y')
unlink(fpath);
break;
case '2':
if (vget(b_lines, 0, "類別:", buf, 60, DOECHO) && (vans(msg_sure_ny) == 'y'))
{
if (fp = fopen(fpath, "w"))
{
fprintf(fp, "%s", buf);
fclose(fp);
}
}
break;
}
}
else if (vget(b_lines, 0, "類別:", buf, 60, DOECHO) && vans(msg_sure_ny) == 'y')
{
if (fp = fopen(fpath, "w"))
{
fprintf(fp, "%s", buf);
fclose(fp);
}
}
return XO_FOOT;
}
#endif /* HAVE_ADVANCE_BMPERM */
修改do_post
!#ifdef HAVE_ADVANCE_BMPERM /* 小心修改下面這一段,自己比對小心改 */
if (title)
{
rcpt = NULL;
}
else /* itoc.020113: 新文章選擇標題分類 */
/* amaki.030418: 板主不設標題就直接post,不顯示預設標題 */
{
#define NUM_PREFIX 6
FILE *fp;
char prefix[NUM_PREFIX][10];
brd_fpath(fpath, currboard, "prefix");
if (fp = fopen(fpath, "r"))
{
move(21, 0);
outs("類別:");
for (mode = 0; mode < NUM_PREFIX; mode++)
{
if (fscanf(fp, "%s", fpath) != 1)
break;
sprintf(prefix[mode], "%s", fpath);
prints("%d.%s ", mode + 1, fpath);
}
fclose(fp);
mode = vget(20, 0, "請選擇文章類別(按 Enter 跳過):", fpath, 3, DOECHO) - '1';
if (mode >= 0 && mode < NUM_PREFIX) /* 輸入數字選項 */
rcpt = prefix[mode];
else /* 空白跳過 */
rcpt = NULL;
}
在原來的post_brdtitle前面新增一支函式
#ifdef HAVE_ADVANCE_BMPERM /* amaki.030418: 抄一支新的吧,這樣才不會用#ifdef醜醜的 */
static int
post_brdtitle(xo)
XO *xo;
{
int bno, ch;
BRD *oldbrd, newbrd;
if (!(bbstate & STAT_BOARD))
return XO_NONE;
bno = brd_bno(currboard);
oldbrd = bshm->bcache + bno;
memcpy(&newbrd, oldbrd, sizeof(BRD));
switch (vans("◎修改看板資料 1)修改板名/主題 2)看板屬性 3)文章標題?[Q] "))
{
case '1':
vget(b_lines, 0, "看板名稱:", newbrd.title + BCLEN, BTLEN + 1 - BCLEN, GCARRY);
vget(b_lines, 0, "看板主題:", newbrd.title, BCLEN, GCARRY);
break;
case '2':
switch (vans("您想設定的看板類型? A)公開 B)秘密 C)好友?[Q] "))
{
case 'a':
newbrd.readlevel = 0;
newbrd.postlevel = PERM_POST; /* 一般看板發表權限為 PERM_POST */
break;
case 'b':
newbrd.readlevel = PERM_SYSOP; /* 秘密看板 */
newbrd.postlevel = 0;
break;
case 'c':
newbrd.readlevel = PERM_BOARD; /* 好友看板 */
newbrd.postlevel = 0;
break;
}
break;
case '3':
post_prefix(xo);
break;
}
if (memcmp(&newbrd, oldbrd, sizeof(BRD)))
{
if (vans(msg_sure_ny) == 'y')
{
memcpy(oldbrd, &newbrd, sizeof(BRD));
rec_put(FN_BRD, &newbrd, sizeof(BRD), bno, NULL);
return XO_HEAD; /* itoc.011125: 要重繪中文板名 */
}
}
return XO_FOOT;
}
#else
最後在舊的post_brdtitle尾巴加一個#endif就OK。
> acct.c
在brd_title前新增一支函式
#ifdef HAVE_ADVANCE_BMPERM
/* amaki.030418: 把原來的brd_title加進一堆#ifdef醜爆了,乾脆抄一支新的比較美觀:) */
void
brd_title(bno)
int bno;
{
BRD *bhdr, newbh;
char *blist;
int ch;
bhdr = bshm->bcache + bno;
memcpy(&newbh, bhdr, sizeof(BRD));
blist = bhdr->BM;
if (blist[0] > ' ' && is_bm(blist))
{
switch (vans("◎修改看板資料 1)修改板名 2)修改類別 3)看板屬性?[Q] "))
{
case '1':
vget(1, 0, "看板名稱:", newbh.title + BCLEN , BTLEN + 1 - BCLEN, GCARRY);
break;
case '2':
vget(1, 0, "看板主題:", newbh.title, BCLEN, GCARRY);
break;
case '3':
switch (vans("您想設定的看板類型 A)公開 B)秘密 C)好友?[Q] "))
{
case 'a':
newbh.readlevel = 0;
newbh.postlevel = PERM_POST; /* 一般看板發表權限為 PERM_POST */
break;
case 'b':
newbh.readlevel = PERM_SYSOP; /* 秘密看板 */
newbh.postlevel = 0;
break;
case 'c':
newbh.readlevel = PERM_BOARD; /* 好友看板 */
newbh.postlevel = 0;
break;
}
break;
}
if (memcmp(&newbh, bhdr, sizeof(BRD)))
{
if (vans(msg_sure_ny) == 'y')
{
memcpy(bhdr, &newbh, sizeof(BRD));
rec_put(FN_BRD, &newbh, sizeof(BRD), bno, NULL);
}
}
}
}
#else
最後在舊的brd_title尾巴加一個#endif就OK。
修改brd_edit
void
brd_edit(bno)
int bno;
{
BRD *bhdr, newbh;
char buf[80], data[3];
vs_bar("看板設定");
......(略)
case 'e': /* 下面的部分請仔細比對修改 */
move(9, 0);
outs("直接按 [Return] 不修改該項設定");
if (!m_setbrd(&newbh))
{
if (vans(msg_sure_ny) == 'y')
{
if (strcmp(bhdr->brdname, newbh.brdname))
{
char src[80], dst[80];
/* Thor.980806: 特別注意如果 board不在同一partition裏的話會有問題 */
sprintf(src, "gem/brd/%s", bhdr->brdname);
sprintf(dst, "gem/brd/%s", newbh.brdname);
rename(src, dst);
rename(src + 4, dst + 4);
vmsg("您更改了板名,請務必去Announce的Class分類裡加入新看板!");
}
if (memcmp(&newbh, bhdr, sizeof(newbh)))
{
memcpy(bhdr, &newbh, sizeof(BRD));
rec_put(FN_BRD, &newbh, sizeof(BRD), bno, NULL);
}
}
}
vmsg("設定完畢");
break;
}
}
--
覺得把看板主題讓板主改不喜歡的話,也可以從switch裡拿掉。
最好還是不要讓板主有變更看板屬性的權限,給這樣的權限應該算是差不多極限了。
--
花俏的功能真是浪費系統資源的罪惡根源-_-;;;
--
Origin: luna.twbbs.org精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻