summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/common.h1
-rw-r--r--mbbsd/bbs.c39
-rw-r--r--mbbsd/edit.c14
-rw-r--r--mbbsd/read.c16
-rw-r--r--mbbsd/user.c4
5 files changed, 66 insertions, 8 deletions
diff --git a/include/common.h b/include/common.h
index fb59b749..25ef4185 100644
--- a/include/common.h
+++ b/include/common.h
@@ -240,6 +240,7 @@
#define EDITFLAG_TEXTONLY (0x00000001)
#define EDITFLAG_UPLOAD (0x00000002)
#define EDITFLAG_ALLOWLARGE (0x00000004)
+#define EDITFLAG_ALLOWTITLE (0x00000008)
/* ----------------------------------------------------- */
/* Grayout Levels */
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("輸入的認證碼錯誤或因系統昇級已失效,"