From 747104a997297c7531d5e2aa637125836e28d2c8 Mon Sep 17 00:00:00 2001 From: piaip Date: Wed, 13 Feb 2008 15:43:44 +0000 Subject: - SRexpire: enable expiring search cache records - EDITFLAG_ALLOWTITLE: prevent editor to prompt for non-changable titles - user: general message fix git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3912 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/bbs.c | 39 +++++++++++++++++++++++++++++++++++++-- mbbsd/edit.c | 14 ++++++++++---- mbbsd/read.c | 16 ++++++++++++++++ mbbsd/user.c | 4 ++-- 4 files changed, 65 insertions(+), 8 deletions(-) (limited to 'mbbsd') diff --git a/mbbsd/bbs.c b/mbbsd/bbs.c index fc468237..bfdb48ff 100644 --- a/mbbsd/bbs.c +++ b/mbbsd/bbs.c @@ -108,6 +108,26 @@ modify_dir_lite( return 0; } +static void +check_locked(fileheader_t *fhdr) +{ + boardheader_t *bp = NULL; + + if (currstat == RMAIL) + return; + if (!currboard[0] || currbid <= 0) + return; + bp = getbcache(currbid); + if (!bp) + return; + if (!(fhdr->filemode & FILE_SOLVED)) + return; + if (!(fhdr->filemode & FILE_MARKED)) + return; + syncnow(); + bp->SRexpire = now; +} + /* hack for listing modes */ enum LISTMODES { LISTMODE_DATE = 0, @@ -510,10 +530,10 @@ readdoent(int num, fileheader_t * ent) else // LISTMODE_DATE { #ifdef COLORDATE - prints(ANSI_COLOR(%d) "%-6s" ANSI_RESET, + prints(ANSI_COLOR(%d) "%-6.5s" ANSI_RESET, (ent->date[3] + ent->date[4]) % 7 + 31, ent->date); #else - prints("%-6s", ent->date); + prints("%-6.5s", ent->date); #endif } @@ -990,6 +1010,7 @@ do_general(int isbid) Copy(genbuf, fpath); } + edflags = EDITFLAG_ALLOWTITLE; edflags = solveEdFlagByBoard(currboard, edflags); aborted = vedit2(fpath, YEA, &islocal, edflags); @@ -1421,6 +1442,7 @@ edit_post(int ent, fileheader_t * fhdr, const char *direct) (int)now, ctime4(&now), getpid(), cuser.userid, fpath); } + edflags = EDITFLAG_ALLOWTITLE; edflags = solveEdFlagByBoard(bp->brdname, edflags); setutmpmode(REEDIT); @@ -2324,6 +2346,7 @@ solve_post(int ent, fileheader_t * fhdr, const char *direct) if ((currmode & MODE_BOARD)) { fhdr->filemode ^= FILE_SOLVED; substitute_ref_record(direct, fhdr, ent); + check_locked(fhdr); return PART_REDRAW; } return DONOTHING; @@ -2938,6 +2961,7 @@ mark_post(int ent, fileheader_t * fhdr, const char *direct) #endif substitute_ref_record(direct, fhdr, ent); + check_locked(fhdr); return PART_REDRAW; } @@ -3176,10 +3200,17 @@ lock_post(int ent, fileheader_t * fhdr, const char *direct) char fn1[MAXPATHLEN]; char genbuf[256] = {'\0'}; int i; + boardheader_t *bp = NULL; + + if (currstat == RMAIL) + return DONOTHING; if (!(currmode & MODE_BOARD) && !HasUserPerm(PERM_SYSOP | PERM_POLICE)) return DONOTHING; + bp = getbcache(currbid); + assert(bp); + if (fhdr->filename[0]=='M') { if (!HasUserPerm(PERM_SYSOP | PERM_POLICE)) return DONOTHING; @@ -3190,12 +3221,16 @@ lock_post(int ent, fileheader_t * fhdr, const char *direct) return FULLUPDATE; setbfile(fn1, currboard, fhdr->filename); fhdr->filename[0] = 'L'; + syncnow(); + bp->SRexpire = now; } else if (fhdr->filename[0]=='L') { if (getans("要將文章鎖定解除嗎(y/N)?") != 'y') return FULLUPDATE; fhdr->filename[0] = 'M'; setbfile(fn1, currboard, fhdr->filename); + syncnow(); + bp->SRexpire = now; } substitute_ref_record(direct, fhdr, ent); post_policelog(currboard, fhdr->title, "鎖文", genbuf, fhdr->filename[0] == 'L' ? 1 : 0); diff --git a/mbbsd/edit.c b/mbbsd/edit.c index fad822d5..c6b3a544 100644 --- a/mbbsd/edit.c +++ b/mbbsd/edit.c @@ -1658,7 +1658,7 @@ static void upload_file(void); #endif // EXP_EDIT_UPLOAD static int -write_file(char *fpath, int saveheader, int *islocal, char *mytitle, int upload) +write_file(char *fpath, int saveheader, int *islocal, char *mytitle, int upload, int chtitle) { struct tm *ptime; FILE *fp = NULL; @@ -1687,7 +1687,10 @@ write_file(char *fpath, int saveheader, int *islocal, char *mytitle, int upload) outs(" (U)上傳資料"); #endif // EXP_EDIT_UPLOAD - outs(" (A)放棄 (T)改標題 (E)繼續 (R/W/D)讀寫刪暫存檔"); + if (chtitle) + outs(" (T)改標題"); + + outs(" (A)放棄 (E)繼續 (R/W/D)讀寫刪暫存檔"); getdata(2, 0, "確定要儲存檔案嗎? ", ans, 2, LCECHO); @@ -1717,6 +1720,8 @@ write_file(char *fpath, int saveheader, int *islocal, char *mytitle, int upload) erase_tmpbuf(); return KEEP_EDITING; case 't': + if (!chtitle) + return KEEP_EDITING; move(3, 0); prints("舊標題:%s", mytitle); strlcpy(ans, mytitle, sizeof(ans)); @@ -3389,7 +3394,8 @@ vedit2(char *fpath, int saveheader, int *islocal, int flags) case KEY_F10: case Ctrl('X'): /* Save and exit */ tmp = write_file(fpath, saveheader, islocal, mytitle, - (flags & EDITFLAG_UPLOAD) ? 1 : 0); + (flags & EDITFLAG_UPLOAD) ? 1 : 0, + (flags & EDITFLAG_ALLOWTITLE) ? 1 : 0); if (tmp != KEEP_EDITING) { strlcpy(save_title, mytitle, sizeof(save_title)); save_title[STRLEN-1] = 0; @@ -3873,7 +3879,7 @@ vedit2(char *fpath, int saveheader, int *islocal, int flags) int vedit(char *fpath, int saveheader, int *islocal) { - return vedit2(fpath, saveheader, islocal, 0); + return vedit2(fpath, saveheader, islocal, EDITFLAG_ALLOWTITLE); } /* vim:sw=4:nofoldenable diff --git a/mbbsd/read.c b/mbbsd/read.c index 73cf2b90..694eee82 100644 --- a/mbbsd/read.c +++ b/mbbsd/read.c @@ -574,6 +574,22 @@ select_read(const keeploc_t * locmem, int sr_mode) filetime = dasht(newdirect); count = dashs(newdirect) / sizeof(fileheader_t); + if (currstat != RMAIL && currboard[0] && currbid > 0) + { + time4_t filecreate = dashc(newdirect); + boardheader_t *bp = getbcache(currbid); + assert(bp); + + if (bp->SRexpire) + { + if (bp->SRexpire > now) // invalid expire time. + bp->SRexpire = now; + + if (bp->SRexpire > filecreate) + filetime = -1; + } + } + if(filetime<0 || now-filetime>60*60) { reload = 1; inc = 0; diff --git a/mbbsd/user.c b/mbbsd/user.c index fd8dfdd2..cfe9b998 100644 --- a/mbbsd/user.c +++ b/mbbsd/user.c @@ -1783,8 +1783,8 @@ u_register(void) inregcode, sizeof(inregcode), DOECHO); if( strcmp(inregcode, "x") == 0 || strcmp(inregcode, "X") == 0 ) break; - if( strlen(inregcode) != 13 ) - vmsg("認證碼輸入不完整,應該一共有十三碼。"); + if( strlen(inregcode) != 13 || inregcode[0] == ' ') + vmsg("認證碼輸入不完整,總共應有十三碼,沒有空白字元。"); else if( inregcode[0] != 'v' || inregcode[1] != '6' ) { /* old regcode */ vmsg("輸入的認證碼錯誤或因系統昇級已失效," -- cgit v1.2.3