diff options
Diffstat (limited to 'mbbsd/voteboard.c')
-rw-r--r-- | mbbsd/voteboard.c | 302 |
1 files changed, 151 insertions, 151 deletions
diff --git a/mbbsd/voteboard.c b/mbbsd/voteboard.c index 3d35cead..e720d920 100644 --- a/mbbsd/voteboard.c +++ b/mbbsd/voteboard.c @@ -1,83 +1,84 @@ -/* $Id: voteboard.c,v 1.8 2002/06/19 13:32:23 lwms Exp $ */ +/* $Id: voteboard.c,v 1.9 2002/07/05 17:10:28 in2 Exp $ */ #include "bbs.h" #define VOTEBOARD "NewBoard" -void do_voteboardreply(fileheader_t *fhdr){ - char genbuf[1024]; - char reason[50]; - char fpath[80]; - char oldfpath[80]; - char opnion[10]; - char *ptr; - FILE *fo, *fp; - fileheader_t votefile; - int len; - int i, j; - int fd; - time_t endtime; - int hastime = 0; - +void +do_voteboardreply(fileheader_t * fhdr) +{ + char genbuf[1024]; + char reason[50]; + char fpath[80]; + char oldfpath[80]; + char opnion[10]; + char *ptr; + FILE *fo, *fp; + fileheader_t votefile; + int len; + int i, j; + int fd; + time_t endtime; + int hastime = 0; + clear(); - if(!(currmode & MODE_POST)) { + if (!(currmode & MODE_POST)) { move(5, 10); outs("對不起,您目前無法在此發表文章!"); pressanykey(); return; - } - + } setbpath(fpath, currboard); stampfile(fpath, &votefile); setbpath(oldfpath, currboard); - + strcat(oldfpath, "/"); strcat(oldfpath, fhdr->filename); - + fp = fopen(oldfpath, "r"); - + len = strlen(cuser.userid); - - while(fgets(genbuf, 1024, fp)){ - if (!strncmp(genbuf, "連署結束時間", 12)){ + + while (fgets(genbuf, 1024, fp)) { + if (!strncmp(genbuf, "連署結束時間", 12)) { hastime = 1; ptr = strchr(genbuf, '('); - sscanf(ptr+1, "%ld", &endtime); - if (endtime < now){ + sscanf(ptr + 1, "%ld", &endtime); + if (endtime < now) { prints("連署時間已過"); pressanykey(); fclose(fp); return; } } - if (!strncmp(genbuf+4, cuser.userid, len)){ + if (!strncmp(genbuf + 4, cuser.userid, len)) { move(5, 10); prints("您已經連署過本篇了"); opnion[0] = 'n'; getdata(7, 0, "要修改您之前的連署嗎?(Y/N) [N]", opnion, 3, LCECHO); - if (opnion[0] != 'y'){ + if (opnion[0] != 'y') { fclose(fp); return; } - strcpy(reason, genbuf+19); + strcpy(reason, genbuf + 19); } } - fclose(fp); - - if((fd = open(oldfpath, O_RDONLY)) == -1) + fclose(fp); + + if ((fd = open(oldfpath, O_RDONLY)) == -1) return; flock(fd, LOCK_EX); - + fo = fopen(fpath, "w"); - + if (!fo) return; i = 0; - while(fo){ + while (fo) { j = 0; - do{ - if (read(fd, genbuf+j, 1)<=0){ + do { + if (read(fd, genbuf + j, 1) <= 0) { flock(fd, LOCK_UN); close(fd); fclose(fo); @@ -85,114 +86,113 @@ void do_voteboardreply(fileheader_t *fhdr){ return; } j++; - }while(genbuf[j-1] !='\n'); - genbuf[j] = '\0'; + } while (genbuf[j - 1] != '\n'); + genbuf[j] = '\0'; i++; if (!strncmp("----------", genbuf, 10)) break; if (i > 3) prints(genbuf); - fprintf(fo, "%s", genbuf); + fprintf(fo, "%s", genbuf); } - if (!hastime){ - now += 14*24*60*60; + if (!hastime) { + now += 14 * 24 * 60 * 60; fprintf(fo, "連署結束時間: (%ld)%s", now, ctime(&now)); - now -= 14*24*60*60; + now -= 14 * 24 * 60 * 60; } - fprintf(fo, "%s", genbuf); - do{ - if (!getdata(18, 0, "請問您 (Y)支持 (N)反對 這個議題:", opnion, 3, LCECHO)){ + do { + if (!getdata(18, 0, "請問您 (Y)支持 (N)反對 這個議題:", opnion, 3, LCECHO)) { flock(fd, LOCK_UN); - close(fd); + close(fd); fclose(fo); unlink(fpath); return; } - }while(opnion[0] != 'y' && opnion[0] != 'n'); - + } while (opnion[0] != 'y' && opnion[0] != 'n'); + if (!getdata(20, 0, "請問您與這個議題的關係或連署理由為何:", - reason, sizeof(reason), DOECHO)){ + reason, sizeof(reason), DOECHO)) { flock(fd, LOCK_UN); - close(fd); + close(fd); fclose(fo); unlink(fpath); - return; + return; } - i = 0; - - while(fo){ + + while (fo) { i++; j = 0; - do{ - if (read(fd, genbuf+j, 1)<=0){ + do { + if (read(fd, genbuf + j, 1) <= 0) { flock(fd, LOCK_UN); close(fd); fclose(fo); unlink(fpath); return; - } + } j++; - }while(genbuf[j-1] !='\n'); + } while (genbuf[j - 1] != '\n'); genbuf[j] = '\0'; if (!strncmp("----------", genbuf, 10)) break; - if (strncmp(genbuf+4, cuser.userid, len)) - fprintf(fo, "%3d.%s", i, genbuf+4); + if (strncmp(genbuf + 4, cuser.userid, len)) + fprintf(fo, "%3d.%s", i, genbuf + 4); else i--; } if (opnion[0] == 'y') - fprintf(fo, "%3d.%-15s%-34s 來源:%s\n", i, cuser.userid, reason,cuser.lasthost); + fprintf(fo, "%3d.%-15s%-34s 來源:%s\n", i, cuser.userid, reason, cuser.lasthost); i = 0; fprintf(fo, "%s", genbuf); - while(fo){ + while (fo) { i++; j = 0; - do{ - if (!read(fd, genbuf+j, 1)) + do { + if (!read(fd, genbuf + j, 1)) break; j++; - }while(genbuf[j-1] !='\n'); + } while (genbuf[j - 1] != '\n'); genbuf[j] = '\0'; if (j <= 3) - break; - if (strncmp(genbuf+4, cuser.userid, len)) - fprintf(fo, "%3d.%s", i, genbuf+4); + break; + if (strncmp(genbuf + 4, cuser.userid, len)) + fprintf(fo, "%3d.%s", i, genbuf + 4); else i--; } if (opnion[0] == 'n') - fprintf(fo, "%3d.%-15s%-34s 來源:%s\n", i, cuser.userid, reason,cuser.lasthost); - flock(fd, LOCK_UN); + fprintf(fo, "%3d.%-15s%-34s 來源:%s\n", i, cuser.userid, reason, cuser.lasthost); + flock(fd, LOCK_UN); close(fd); fclose(fo); unlink(oldfpath); rename(fpath, oldfpath); #ifdef MDCACHE close(updatemdcache(NULL, oldfpath)); -#endif +#endif } -int do_voteboard() { - fileheader_t votefile; - char topic[100]; - char title[80]; - char genbuf[1024]; - char fpath[80]; - FILE* fp; - int temp, i; +int +do_voteboard() +{ + fileheader_t votefile; + char topic[100]; + char title[80]; + char genbuf[1024]; + char fpath[80]; + FILE *fp; + int temp, i; clear(); - if(!(currmode & MODE_POST)) { + if (!(currmode & MODE_POST)) { move(5, 10); outs("對不起,您目前無法在此發表文章!"); pressanykey(); return FULLUPDATE; - } - + } move(0, 0); clrtobot(); prints("您正在使用 PTT 的連署系統\n"); @@ -200,23 +200,23 @@ int do_voteboard() { prints("任意提出連署案者,將被列入本系統不受歡迎使用者喔\n"); pressanykey(); move(0, 0); - clrtobot(); + clrtobot(); prints("(1)申請新板 (2)廢除舊板 (3)連署板主 (4)罷免板主\n"); if (!strcmp(currboard, VOTEBOARD)) prints("(5)連署小組長 (6)罷免小組長 "); if (!strcmp(currboard, VOTEBOARD) && HAS_PERM(PERM_SYSOP)) prints("(7)站民公投"); prints("(8)申請新群組"); - - do{ + + do { getdata(3, 0, "請輸入連署類別:", topic, 3, DOECHO); temp = atoi(topic); - }while(temp <= 0 && temp >= 9); - - switch(temp){ - case 1: - do{ - if (!getdata(4, 0, "請輸入看板英文名稱:", topic, IDLEN+1, DOECHO)) + } while (temp <= 0 && temp >= 9); + + switch (temp) { + case 1: + do { + if (!getdata(4, 0, "請輸入看板英文名稱:", topic, IDLEN + 1, DOECHO)) return FULLUPDATE; else if (invalid_brdname(topic)) outs("不是正確的看板名稱"); @@ -224,198 +224,198 @@ int do_voteboard() { outs("本名稱已經存在"); else break; - }while(temp > 0); + } while (temp > 0); sprintf(title, "[申請新板] %s", topic); - sprintf(genbuf, "%s\n\n%s%s\n%s","申請新板", "英文名稱: ", topic, "中文名稱: "); - + sprintf(genbuf, "%s\n\n%s%s\n%s", "申請新板", "英文名稱: ", topic, "中文名稱: "); + if (!getdata(5, 0, "請輸入看板中文名稱:", topic, 20, DOECHO)) return FULLUPDATE; strcat(genbuf, topic); strcat(genbuf, "\n看板類別: "); if (!getdata(6, 0, "請輸入看板類別:", topic, 20, DOECHO)) return FULLUPDATE; - strcat(genbuf, topic); + strcat(genbuf, topic); strcat(genbuf, "\n板主名單: "); getdata(7, 0, "請輸入板主名單:", topic, IDLEN * 3 + 3, DOECHO); strcat(genbuf, topic); strcat(genbuf, "\n申請原因: \n"); outs("請輸入申請原因(至多五行),要清楚填寫不然不會核准喔"); - for(i= 8;i<13;i++){ + for (i = 8; i < 13; i++) { if (!getdata(i, 0, ":", topic, 60, DOECHO)) break; strcat(genbuf, topic); strcat(genbuf, "\n"); } - if (i==8) + if (i == 8) return FULLUPDATE; break; case 2: - do{ - if (!getdata(4, 0, "請輸入看板英文名稱:", topic, IDLEN+1, DOECHO)) + do { + if (!getdata(4, 0, "請輸入看板英文名稱:", topic, IDLEN + 1, DOECHO)) return FULLUPDATE; else if (getbnum(topic) <= 0) outs("本名稱並不存在"); else break; - }while(temp > 0); + } while (temp > 0); sprintf(title, "[廢除舊板] %s", topic); - sprintf(genbuf, "%s\n\n%s%s\n","廢除舊板", "英文名稱: ", topic); + sprintf(genbuf, "%s\n\n%s%s\n", "廢除舊板", "英文名稱: ", topic); strcat(genbuf, "\n廢除原因: \n"); outs("請輸入廢除原因(至多五行),要清楚填寫不然不會核准喔"); - for(i= 8;i<13;i++){ + for (i = 8; i < 13; i++) { if (!getdata(i, 0, ":", topic, 60, DOECHO)) break; strcat(genbuf, topic); strcat(genbuf, "\n"); } - if (i==8) + if (i == 8) return FULLUPDATE; - + break; - case 3: - do{ - if (!getdata(4, 0, "請輸入看板英文名稱:", topic, IDLEN+1, DOECHO)) + case 3: + do { + if (!getdata(4, 0, "請輸入看板英文名稱:", topic, IDLEN + 1, DOECHO)) return FULLUPDATE; else if (getbnum(topic) <= 0) outs("本名稱並不存在"); else break; - }while(temp > 0); + } while (temp > 0); sprintf(title, "[連署板主] %s", topic); - sprintf(genbuf, "%s\n\n%s%s\n%s%s","連署板主", "英文名稱: ", topic, "申請 ID : ", cuser.userid); + sprintf(genbuf, "%s\n\n%s%s\n%s%s", "連署板主", "英文名稱: ", topic, "申請 ID : ", cuser.userid); strcat(genbuf, "\n申請政見: \n"); outs("請輸入申請政見(至多五行),要清楚填寫不然不會核准喔"); - for(i= 8;i<13;i++){ + for (i = 8; i < 13; i++) { if (!getdata(i, 0, ":", topic, 60, DOECHO)) break; strcat(genbuf, topic); strcat(genbuf, "\n"); } - if (i==8) - return FULLUPDATE; - break; - case 4: - do{ - if (!getdata(4, 0, "請輸入看板英文名稱:", topic, IDLEN+1, DOECHO)) + if (i == 8) + return FULLUPDATE; + break; + case 4: + do { + if (!getdata(4, 0, "請輸入看板英文名稱:", topic, IDLEN + 1, DOECHO)) return FULLUPDATE; else if ((i = getbnum(topic)) <= 0) outs("本名稱並不存在"); else break; - }while(temp > 0); + } while (temp > 0); sprintf(title, "[罷免板主] %s", topic); - sprintf(genbuf, "%s\n\n%s%s\n%s","罷免板主", "英文名稱: ", topic, "板主 ID : "); - do{ + sprintf(genbuf, "%s\n\n%s%s\n%s", "罷免板主", "英文名稱: ", topic, "板主 ID : "); + do { if (!getdata(6, 0, "請輸入板主ID:", topic, IDLEN + 1, DOECHO)) return FULLUPDATE; - else if (!userid_is_BM(topic, bcache[i-1].BM)) + else if (!userid_is_BM(topic, bcache[i - 1].BM)) outs("不是該板的板主"); else break; - }while(temp > 0); + } while (temp > 0); strcat(genbuf, topic); strcat(genbuf, "\n罷免原因: \n"); outs("請輸入罷免原因(至多五行),要清楚填寫不然不會核准喔"); - for(i= 8;i<13;i++){ + for (i = 8; i < 13; i++) { if (!getdata(i, 0, ":", topic, 60, DOECHO)) break; strcat(genbuf, topic); strcat(genbuf, "\n"); } - if (i==8) + if (i == 8) return FULLUPDATE; - break; - case 5: + break; + case 5: if (!getdata(4, 0, "請輸入小組中英文名稱:", topic, 30, DOECHO)) return FULLUPDATE; sprintf(title, "[連署小組長] %s", topic); - sprintf(genbuf, "%s\n\n%s%s\n%s%s","連署小組長", "小組名稱: ", topic, "申請 ID : ", cuser.userid); + sprintf(genbuf, "%s\n\n%s%s\n%s%s", "連署小組長", "小組名稱: ", topic, "申請 ID : ", cuser.userid); strcat(genbuf, "\n申請政見: \n"); outs("請輸入申請政見(至多五行),要清楚填寫不然不會核准喔"); - for(i= 8;i<13;i++){ + for (i = 8; i < 13; i++) { if (!getdata(i, 0, ":", topic, 60, DOECHO)) break; strcat(genbuf, topic); strcat(genbuf, "\n"); } - if (i==8) + if (i == 8) return FULLUPDATE; break; case 6: - + if (!getdata(4, 0, "請輸入小組中英文名稱:", topic, 30, DOECHO)) return FULLUPDATE; sprintf(title, "[罷免小組長] %s", topic); - sprintf(genbuf, "%s\n\n%s%s\n%s","罷免小組長", "小組名稱: ", topic, "小組長 ID : "); + sprintf(genbuf, "%s\n\n%s%s\n%s", "罷免小組長", "小組名稱: ", topic, "小組長 ID : "); if (!getdata(6, 0, "請輸入小組長ID:", topic, IDLEN + 1, DOECHO)) return FULLUPDATE; strcat(genbuf, topic); strcat(genbuf, "\n罷免原因: \n"); outs("請輸入罷免原因(至多五行),要清楚填寫不然不會核准喔"); - for(i= 8;i<13;i++){ + for (i = 8; i < 13; i++) { if (!getdata(i, 0, ":", topic, 60, DOECHO)) break; strcat(genbuf, topic); strcat(genbuf, "\n"); } - if (i==8) + if (i == 8) return FULLUPDATE; - break; - case 7: + break; + case 7: if (!HAS_PERM(PERM_SYSOP)) return FULLUPDATE; if (!getdata(4, 0, "請輸入公投主題:", topic, 30, DOECHO)) return FULLUPDATE; sprintf(title, "%s %s", "[站民公投]", topic); - sprintf(genbuf, "%s\n\n%s%s\n","站民公投", "公投主題: ", topic); + sprintf(genbuf, "%s\n\n%s%s\n", "站民公投", "公投主題: ", topic); strcat(genbuf, "\n公投原因: \n"); outs("請輸入公投原因(至多五行),要清楚填寫不然不會核准喔"); - for(i= 8;i<13;i++){ + for (i = 8; i < 13; i++) { if (!getdata(i, 0, ":", topic, 60, DOECHO)) break; strcat(genbuf, topic); strcat(genbuf, "\n"); } - if (i==8) + if (i == 8) return FULLUPDATE; - break; + break; case 8: - if(!getdata(4, 0, "請輸入群組中英文名稱:", topic, 30, DOECHO)) + if (!getdata(4, 0, "請輸入群組中英文名稱:", topic, 30, DOECHO)) return FULLUPDATE; sprintf(title, "[申請新群組] %s", topic); - sprintf(genbuf, "%s\n\n%s%s\n%s%s","申請群組", "群組名稱: ", topic, "申請 ID : ", cuser.userid); + sprintf(genbuf, "%s\n\n%s%s\n%s%s", "申請群組", "群組名稱: ", topic, "申請 ID : ", cuser.userid); strcat(genbuf, "\n申請政見: \n"); outs("請輸入申請政見(至多五行),要清楚填寫不然不會核准喔"); - for(i= 8;i<13;i++){ + for (i = 8; i < 13; i++) { if (!getdata(i, 0, ":", topic, 60, DOECHO)) break; strcat(genbuf, topic); strcat(genbuf, "\n"); } - if (i==8) + if (i == 8) return FULLUPDATE; break; default: return FULLUPDATE; } strcat(genbuf, "連署結束時間: "); - now += 14*24*60*60; + now += 14 * 24 * 60 * 60; sprintf(topic, "(%ld)", now); strcat(genbuf, topic); strcat(genbuf, ctime(&now)); - now -= 14*24*60*60; + now -= 14 * 24 * 60 * 60; strcat(genbuf, "----------支持----------\n"); - strcat(genbuf, "----------反對----------\n"); + strcat(genbuf, "----------反對----------\n"); outs("開始連署嘍"); setbpath(fpath, currboard); stampfile(fpath, &votefile); - - if (!(fp = fopen(fpath, "w"))){ + + if (!(fp = fopen(fpath, "w"))) { outs("開檔失敗,請稍候重來一次"); return FULLUPDATE; } fprintf(fp, "%s%s %s%s\n%s%s\n%s%s", "作者: ", cuser.userid, - "看板: ", currboard, + "看板: ", currboard, "標題: ", title, "時間: ", ctime(&now)); fprintf(fp, "%s\n", genbuf); @@ -423,7 +423,7 @@ int do_voteboard() { strcpy(votefile.owner, cuser.userid); strcpy(votefile.title, title); setbdir(genbuf, currboard); - if(append_record(genbuf, &votefile, sizeof(votefile)) != -1) + if (append_record(genbuf, &votefile, sizeof(votefile)) != -1) setbtotal(currbid); do_voteboardreply(&votefile); return FULLUPDATE; |