作者itoc.bbs@xeon.tfcis.org (看了題目就知道該放棄) 看板: plan
標題[功能] 使用者自己開板
時間動力核心 (Fri, 15 Aug 2003 01:24:54 +0800 (CST)) Updated: 2005/05/19
如果站真的是小到允許隨便玩的話...:p
那麼就可以讓使用者自己開板了
這裡限制了開板的條件,你可以隨便改或是拿掉
1) 用 @xxxx.edu.tw 認證的使用者
2) 上站次數超過 100 次
3) 發表文章超過 100 篇
: admutil.c 最後加入這幾個函式
static int /* 1:是本校的 email */
is_school_email()
{
char *host;
char foo[80];
if (HAS_PERM(PERM_VALID)) /* 避免用別的信箱認證再改成學校信箱但沒認證 */
{
str_lower(foo, cuser.email);
host = (char *) strchr(foo, '@');
*host++ = '\0';
if (acl_has("run/personal_board", foo, host) > 0) /* 此信箱已經開過板 */
return 0;
if (!strcmp(host, "xxxx.edu.tw")) // 各校的 email 自定
return 1;
}
return 0;
}
static int
hdr_cmp(a, b)
HDR *a;
HDR *b;
{
/* 先比對分類,再比對板名 */
int k = strncmp(a->title + BNLEN + 1, b->title + BNLEN + 1, BCLEN);
return k ? k : str_cmp(a->xname, b->xname);
}
int
a_personal_board()
{
BRD newboard;
int bno;
char fpath[64], brdname[BNLEN + 1];
HDR hdr;
ACCT acct;
FILE *fp;
char *fname = "gem/@/@Personal"; // 分類自定
#if 1 // 這一段是條件的檢查,可以隨便改或是拿掉
if (!is_school_email())
{
vmsg("這功\能僅限本校同學使用");
return XEASY;
}
if (cuser.numlogins < 100)
{
vmsg("您上站次數那麼少,不能擁有個人板");
return XEASY;
}
if (cuser.numposts < 100)
{
vmsg("您發表文章那麼少,不能擁有個人板");
return XEASY;
}
#endif
// 這裡是想讓個人板有什麼板名,下面二行只能選一行
sprintf(brdname, "P_%.10s", cuser.userid); /* 板名為 P_userid */
strcpy(brdname, cuser.userid); /* 板名即為 userid */
if (brd_bno(brdname) >= 0)
{
vmsg("您已經有板了!");
return XEASY;
}
if (vans("要申請個人板(Y/N)?[N] ") != 'y')
return XEASY;
memset(&newboard, 0, sizeof(newboard));
newboard.battr = BRD_NOTRAN;
newboard.postlevel = PERM_POST;
strcpy(newboard.brdname, brdname);
strcpy(newboard.class, "個人");
strcpy(newboard.title, "板名在看板裡按 B 自己改");
strcpy(newboard.BM, cuser.userid);
/* 加板主權限 */
cuser.userlevel |= PERM_BM;
if (acct_load(&acct, cuser.userid) >= 0)
acct_setperm(&acct, PERM_BM, 0);
time(&newboard.bstamp);
if ((bno = brd_bno("")) >= 0)
{
rec_put(FN_BRD, &newboard, sizeof(newboard), bno, NULL);
}
/* Thor.981102: 防止超過shm看板個數 */
else if (bshm->number >= MAXBOARD)
{
vmsg("超過系統所能容納看板個數,請調整系統參數");
return XEASY;
}
else if (rec_add(FN_BRD, &newboard, sizeof(newboard)) < 0)
{
vmsg("無法建立新板");
return XEASY;
}
sprintf(fpath, "gem/brd/%s", brdname);
mak_dirs(fpath);
mak_dirs(fpath + 4);
brd2gem(&newboard, &hdr);
rec_add(fname, &hdr, sizeof(HDR));
rec_sync(fname, sizeof(HDR), hdr_cmp, NULL);
bshm_reload(); /* force reload of bcache */
system("bin/account -nokeeplog");
brh_save();
board_main(); /* reload brd_bits[] */
#if 1
/* 記錄已經開個板的 E-mail */
if (fp = fopen("run/personal_board", "a"))
{
fprintf(fp, "%s\n", cuser.email);
fclose(fp);
}
#endif
vmsg("新板成立,請在看板裡按 B 做進階設定");
return 0;
}
: menu.c 適當的選單加入
"bin/admutil.so:a_personal_board", PERM_VALID, - M_XMODE,
"Board 【 開個人板 】",
--
不僅開板免連署,現在連等待都免了!
--
=[﹎:�摃�◣��:﹎ Origin ]|[ �吨O�痐� processor.tfcis.org ]|[�搟說�﹎:]=
=[﹊:�摃�╱��:﹊ Author ]|[ itoc.Dorm11.NCTU.edu.tw ]|[���插�﹊:]=