From 0a500b1b26b09d12049014e0d71da62030ae66bc Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Wed, 5 Sep 2001 17:51:16 +0000
Subject: [PATCH] Created logoffuserdat() function to handle common logoff user
 record updates.

---
 src/sbbs3/userdat.c | 36 ++++++++++++++++++++++++++++++++++++
 src/sbbs3/userdat.h |  1 +
 2 files changed, 37 insertions(+)

diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c
index 7764cabe22..b9e1f23326 100644
--- a/src/sbbs3/userdat.c
+++ b/src/sbbs3/userdat.c
@@ -1285,3 +1285,39 @@ void DLLCALL subtract_cdt(scfg_t* cfg, user_t* user, long amt)
 	else    /* no free credits */
 		user->cdt=adjustuserrec(cfg, user->number,U_CDT,10,-amt);
 }
+
+BOOL DLLCALL logoffuserdat(scfg_t* cfg, user_t* user, time_t now, time_t logontime)
+{
+	char str[128];
+	struct tm* tm, tm_now;
+
+	user->tlast=(now-logontime)/60;
+
+	putuserrec(cfg,user->number,U_LASTON,8,ultoa(now,str,16));
+	putuserrec(cfg,user->number,U_TLAST,5,ultoa(user->tlast,str,10));
+	adjustuserrec(cfg,user->number,U_TIMEON,5,user->tlast);
+	adjustuserrec(cfg,user->number,U_TTODAY,5,user->tlast);
+
+	/* Convert time_t to struct tm */
+	tm=gmtime(&now);
+	if(tm==NULL)
+		return(FALSE);
+	tm_now=*tm;
+
+	tm=gmtime(&logontime);
+	if(tm==NULL)
+		return(FALSE);
+
+	/* Reset daily stats if new day */
+	if(tm->tm_mday!=tm_now.tm_mday) {					/* date has changed while online */
+		putuserrec(cfg,user->number,U_LTODAY,5,"0");	/* so zero logons today */
+		putuserrec(cfg,user->number,U_ETODAY,5,"0");	/* and e-mails today */
+		putuserrec(cfg,user->number,U_PTODAY,5,"0");	/* and posts today */
+		putuserrec(cfg,user->number,U_FREECDT,10		/* and free credits per day */
+			,ultoa(cfg->level_freecdtperday[user->level],str,10));
+		putuserrec(cfg,user->number,U_TTODAY,5,"0");	/* and time on today */
+		putuserrec(cfg,user->number,U_TEXTRA,5,"0");	/* and extra time */
+	}
+
+	return(TRUE);
+}
diff --git a/src/sbbs3/userdat.h b/src/sbbs3/userdat.h
index 954b9386e7..453691bdbf 100644
--- a/src/sbbs3/userdat.h
+++ b/src/sbbs3/userdat.h
@@ -89,6 +89,7 @@ DLLEXPORT BOOL	DLLCALL chk_ar(scfg_t* cfg, uchar* str, user_t* user); /* checks
 DLLEXPORT int	DLLCALL getuserrec(scfg_t*, int usernumber, int start, int length, char *str);
 DLLEXPORT int	DLLCALL putuserrec(scfg_t*, int usernumber, int start, uint length, char *str);
 DLLEXPORT ulong	DLLCALL adjustuserrec(scfg_t*, int usernumber, int start, int length, long adj);
+DLLEXPORT BOOL	DLLCALL logoffuserdat(scfg_t*, user_t*, time_t now, time_t logontime);
 DLLEXPORT void	DLLCALL subtract_cdt(scfg_t*, user_t*, long amt);
 
 #ifdef __cplusplus
-- 
GitLab