From 27bac7a9c7f06cd78ac48aa04c7260f4543c9473 Mon Sep 17 00:00:00 2001
From: deuce <>
Date: Wed, 11 Jul 2012 22:25:46 +0000
Subject: [PATCH] Add a warning whenever a moderator is reading a message past
 the first unmoderated message in a sub.

---
 src/sbbs3/pack_qwk.cpp    |  2 +-
 src/sbbs3/pack_rep.cpp    |  2 +-
 src/sbbs3/readmsgs.cpp    | 29 +++++++++++++++++++----------
 src/sbbs3/sbbs.h          |  2 +-
 src/sbbs3/text.h          |  1 +
 src/sbbs3/text_defaults.c |  8 +++++---
 6 files changed, 28 insertions(+), 16 deletions(-)

diff --git a/src/sbbs3/pack_qwk.cpp b/src/sbbs3/pack_qwk.cpp
index f45b931c58..4aa377136a 100644
--- a/src/sbbs3/pack_qwk.cpp
+++ b/src/sbbs3/pack_qwk.cpp
@@ -449,7 +449,7 @@ bool sbbs_t::pack_qwk(char *packet, ulong *msgcnt, bool prepack)
 					k|=LP_BYSELF;
 				if(useron.rest&FLAG('Q') || !(subscan[usrsub[i][j]].cfg&SUB_CFG_YSCAN))
 					k|=LP_OTHERS;
-				post=loadposts(&posts,usrsub[i][j],subscan[usrsub[i][j]].ptr,k);
+				post=loadposts(&posts,usrsub[i][j],subscan[usrsub[i][j]].ptr,k,NULL);
 
 				bprintf(text[NScanStatusFmt]
 					,cfg.grp[cfg.sub[usrsub[i][j]]->grp]->sname
diff --git a/src/sbbs3/pack_rep.cpp b/src/sbbs3/pack_rep.cpp
index 8d16182885..677a825f5b 100644
--- a/src/sbbs3/pack_rep.cpp
+++ b/src/sbbs3/pack_rep.cpp
@@ -177,7 +177,7 @@ bool sbbs_t::pack_rep(uint hubnum)
 			continue; 
 		}
 
-		post=loadposts(&posts,j,subscan[j].ptr,LP_BYSELF|LP_OTHERS|LP_PRIVATE|LP_REP);
+		post=loadposts(&posts,j,subscan[j].ptr,LP_BYSELF|LP_OTHERS|LP_PRIVATE|LP_REP,NULL);
 		eprintf(LOG_INFO,remove_ctrl_a(text[NScanStatusFmt],tmp)
 			,cfg.grp[cfg.sub[j]->grp]->sname
 			,cfg.sub[j]->lname,posts,msgs);
diff --git a/src/sbbs3/readmsgs.cpp b/src/sbbs3/readmsgs.cpp
index 1024db5e81..583581dffd 100644
--- a/src/sbbs3/readmsgs.cpp
+++ b/src/sbbs3/readmsgs.cpp
@@ -175,7 +175,7 @@ void sbbs_t::msghdr(smbmsg_t* msg)
 
 /****************************************************************************/
 /****************************************************************************/
-post_t * sbbs_t::loadposts(int32_t *posts, uint subnum, ulong ptr, long mode)
+post_t * sbbs_t::loadposts(int32_t *posts, uint subnum, ulong ptr, long mode, ulong *unvalidated_num)
 {
 	char name[128];
 	ushort aliascrc,namecrc,sysop;
@@ -222,6 +222,10 @@ post_t * sbbs_t::loadposts(int32_t *posts, uint subnum, ulong ptr, long mode)
 		errormsg(WHERE,ERR_ALLOC,smb.file,sizeof(post_t *)*cfg.sub[subnum]->maxmsgs);
 		return(NULL); 
 	}
+
+	if(unvalidated_num)
+		*unvalidated_num=ULONG_MAX;
+
 	while(!feof(smb.sid_fp)) {
 		skip=0;
 		if(smb_fread(&smb, &idx,sizeof(idx),smb.sid_fp) != sizeof(idx))
@@ -249,9 +253,12 @@ post_t * sbbs_t::loadposts(int32_t *posts, uint subnum, ulong ptr, long mode)
 				continue; 
 		}
 
-		if(idx.attr&MSG_MODERATED && !(idx.attr&MSG_VALIDATED)
-			&& (mode&LP_REP || !sub_op(subnum)))
-			break;
+		if(idx.attr&MSG_MODERATED && !(idx.attr&MSG_VALIDATED)) {
+			if(mode&LP_REP || !sub_op(subnum))
+				break;
+			if(unvalidated_num && *unvalidated_num > idx.number)
+				*unvalidated_num=idx.number;
+		}
 
 		if(idx.attr&MSG_PRIVATE && !(mode&LP_PRIVATE)
 			&& !sub_op(subnum) && !(useron.rest&FLAG('Q'))) {
@@ -356,7 +363,7 @@ int sbbs_t::scanposts(uint subnum, long mode, const char *find)
 	uint 	usub,ugrp,reads=0;
 	uint	lp=0;
 	long	org_mode=mode;
-	ulong	msgs,l;
+	ulong	msgs,l,unvalidated;
 	uint32_t last;
 	post_t	*post;
 	smbmsg_t	msg;
@@ -406,7 +413,7 @@ int sbbs_t::scanposts(uint subnum, long mode, const char *find)
 		lp=LP_BYSELF|LP_OTHERS;
 	if(mode&SCAN_TOYOU)
 		lp|=LP_UNREAD;
-	post=loadposts(&smb.msgs,subnum,0,lp);
+	post=loadposts(&smb.msgs,subnum,0,lp,&unvalidated);
 	if(mode&SCAN_NEW) { 		  /* Scanning for new messages */
 		for(smb.curmsg=0;smb.curmsg<smb.msgs;smb.curmsg++)
 			if(subscan[subnum].ptr<post[smb.curmsg].number)
@@ -492,7 +499,7 @@ int sbbs_t::scanposts(uint subnum, long mode, const char *find)
 			break;
 
 		if(post==NULL)	/* Been unloaded */
-			post=loadposts(&smb.msgs,subnum,0,lp);   /* So re-load */
+			post=loadposts(&smb.msgs,subnum,0,lp,&unvalidated);   /* So re-load */
 
 		if(!smb.msgs) {
 			done=1;
@@ -532,7 +539,7 @@ int sbbs_t::scanposts(uint subnum, long mode, const char *find)
 			if(post) {
 				free((void *)post); 
 			}
-			post=loadposts(&smb.msgs,subnum,0,lp);   /* So re-load */
+			post=loadposts(&smb.msgs,subnum,0,lp,&unvalidated);   /* So re-load */
 			if(!smb.msgs)
 				break;
 			for(smb.curmsg=0;smb.curmsg<smb.msgs;smb.curmsg++)
@@ -554,7 +561,7 @@ int sbbs_t::scanposts(uint subnum, long mode, const char *find)
 			}
 			if(post)
 				free(post);
-			post=loadposts(&smb.msgs,subnum,0,lp);
+			post=loadposts(&smb.msgs,subnum,0,lp,&unvalidated);
 			if(!smb.msgs)
 				break;
 			if(smb.curmsg>(smb.msgs-1))
@@ -681,6 +688,8 @@ int sbbs_t::scanposts(uint subnum, long mode, const char *find)
 		if(useron.misc&WIP)
 			menu("msgscan");
 		ASYNC;
+		if(unvalidated < smb.curmsg+1)
+			bprintf(text[UnvalidatedWarning],unvalidated);
 		bprintf(text[ReadingSub],ugrp,cfg.grp[cfg.sub[subnum]->grp]->sname
 			,usub,cfg.sub[subnum]->sname,smb.curmsg+1,smb.msgs);
 		sprintf(str,"ABCDEFILMPQRTY?<>[]{}-+.,");
@@ -1187,7 +1196,7 @@ long sbbs_t::listsub(uint subnum, long mode, long start, const char* search)
 		smb_stack(&smb,SMB_STACK_POP);
 		return(0); 
 	}
-	post=loadposts(&posts,subnum,0,LP_BYSELF|LP_OTHERS);
+	post=loadposts(&posts,subnum,0,LP_BYSELF|LP_OTHERS,NULL);
 	bprintf(text[SearchSubFmt]
 		,cfg.grp[cfg.sub[subnum]->grp]->sname,cfg.sub[subnum]->lname,posts /* total? */);
 	if(mode&SCAN_FIND)
diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index 63799aea93..d9d5d8ca06 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -534,7 +534,7 @@ public:
 	void	delallmail(uint usernumber, int which, bool permanent=true);
 
 	/* getmsg.cpp */
-	post_t* loadposts(int32_t *posts, uint subnum, ulong ptr, long mode);
+	post_t* loadposts(int32_t *posts, uint subnum, ulong ptr, long mode, ulong *unvalidated_num);
 
 	/* readmail.cpp */
 	void	readmail(uint usernumber, int sent);
diff --git a/src/sbbs3/text.h b/src/sbbs3/text.h
index ebe84a54f5..447d6ecb7e 100644
--- a/src/sbbs3/text.h
+++ b/src/sbbs3/text.h
@@ -806,6 +806,7 @@ enum {
 	,CantPostMsg
 	,OperatorPrompt
 	,AddSubToNewScanQ
+	,UnvalidatedWarning
 
 	,TOTAL_TEXT
 };
diff --git a/src/sbbs3/text_defaults.c b/src/sbbs3/text_defaults.c
index 70cd5bd096..cd47db35d2 100644
--- a/src/sbbs3/text_defaults.c
+++ b/src/sbbs3/text_defaults.c
@@ -48,9 +48,8 @@ const char * const text_defaults[TOTAL_TEXT]={
 		"\x67\x20\x62\x79\x74\x65\x73\x20\x6d\x61\x78\x29\x2e\x20\x01\x68\x43\x74\x72\x6c\x2d\x5a\x01\x6e\x01\x67\x20\x74\x6f\x20\x73\x61"
 		"\x76\x65\x2c\x20\x01\x68\x43\x74\x72\x6c\x2d\x43\x01\x6e\x01\x67\x20\x74\x6f\x20\x61\x62\x6f\x72\x74\x2e\x01\x6e\x0d\x0a\x0d\x0a"
 		""
-	,"\x4e\x6f\x20\x6d\x6f\x72\x65\x20\x6c\x69\x6e\x65\x73\x2e\x20\x54\x79\x70\x65\x20\x2f\x3f\x20\x66\x6f\x72\x20\x6d\x65\x6e\x75\x2e"
-		"\x0d\x0a"
-	,"\x4f\x6e\x6c\x79\x20\x25\x64\x20\x6c\x69\x6e\x65\x73\x20\x6c\x65\x66\x74\x2e\x0d\x0a"
+	,"\x4c\x69\x6e\x65\x20\x6c\x69\x6d\x69\x74\x20\x28\x25\x75\x29\x20\x72\x65\x61\x63\x68\x65\x64\x2e\x0d\x0a"
+	,"\x4f\x6e\x6c\x79\x20\x25\x75\x20\x6c\x69\x6e\x65\x73\x20\x6c\x65\x66\x74\x2e\x0d\x0a"
 	,"\x0d\x0a\x0d\x0a\x01\x6e\x01\x72\x01\x68\x01\x69\x4f\x75\x74\x20\x6f\x66\x20\x62\x79\x74\x65\x73\x2e\x01\x6e\x0d\x0a"
 	,"\x49\x6e\x76\x61\x6c\x69\x64\x20\x6c\x69\x6e\x65\x20\x6e\x75\x6d\x62\x65\x72\x0d\x0a"
 	,"\x01\x6e\x4d\x65\x73\x73\x61\x67\x65\x20\x63\x6c\x65\x61\x72\x65\x64\x2e\x0d\x0a"
@@ -1227,4 +1226,7 @@ const char * const text_defaults[TOTAL_TEXT]={
 	,"\x0d\x0a\x01\x79\x01\x68\x4f\x70\x65\x72\x61\x74\x6f\x72\x3a\x20\x01\x77"
 	,"\x41\x64\x64\x20\x74\x68\x69\x73\x20\x73\x75\x62\x2d\x62\x6f\x61\x72\x64\x20\x74\x6f\x20\x79\x6f\x75\x72\x20\x6e\x65\x77\x2d\x73"
 		"\x63\x61\x6e\x20\x6c\x69\x73\x74"
+	,"\x01\x6e\x01\x72\x01\x69\x57\x41\x52\x4e\x49\x4e\x47\x3a\x20\x59\x6f\x75\x20\x61\x72\x65\x20\x72\x65\x61\x64\x69\x6e\x67\x20\x6d"
+		"\x65\x73\x73\x61\x67\x65\x73\x20\x70\x61\x73\x74\x20\x74\x68\x65\x20\x6c\x61\x73\x74\x20\x75\x6e\x76\x61\x6c\x69\x64\x61\x74\x65"
+		"\x64\x20\x6d\x65\x73\x73\x61\x67\x65\x20\x28\x25\x75\x29"
 };
-- 
GitLab