From abadd7b18e7259fcf917d15394b4d221cc0ff927 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Tue, 7 Dec 2004 04:20:58 +0000
Subject: [PATCH] msg_area.sub[].grp_number is now a relative group number into
 msg_area.grp_list (including only the message areas the current user has
 access to). Created sub.grp_name property (name of parent group). Created
 msg_area.grp[], associative array of all message groups.

---
 src/sbbs3/js_msg_area.c | 32 +++++++++++++++++++++++++++++---
 1 file changed, 29 insertions(+), 3 deletions(-)

diff --git a/src/sbbs3/js_msg_area.c b/src/sbbs3/js_msg_area.c
index 1c21e1c788..13a31ee2ec 100644
--- a/src/sbbs3/js_msg_area.c
+++ b/src/sbbs3/js_msg_area.c
@@ -57,6 +57,7 @@ static char* msg_area_prop_desc[] = {
 
 	 "sub-board number"
 	,"group number"
+	,"group name"
 	,"sub-board internal code"
 	,"sub-board name"
 	,"sub-board description"
@@ -109,6 +110,12 @@ BOOL DLLCALL js_CreateMsgAreaProperties(JSContext* cx, scfg_t* cfg, JSObject* su
 		,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY))
 		return(FALSE);
 
+	if((js_str=JS_NewStringCopyZ(cx, cfg->grp[sub->grp]->sname))==NULL)
+		return(FALSE);
+	if(!JS_DefineProperty(cx, subobj, "grp_name", STRING_TO_JSVAL(js_str)
+		,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY))
+		return(FALSE);
+
 	if((js_str=JS_NewStringCopyZ(cx, sub->code))==NULL)
 		return(FALSE);
 	if(!JS_DefineProperty(cx, subobj, "code", STRING_TO_JSVAL(js_str)
@@ -318,6 +325,7 @@ JSObject* DLLCALL js_CreateMsgAreaObject(JSContext* cx, JSObject* parent, scfg_t
 {
 	JSObject*	areaobj;
 	JSObject*	allsubs;
+	JSObject*	allgrps;
 	JSObject*	grpobj;
 	JSObject*	subobj;
 	JSObject*	grp_list;
@@ -325,7 +333,7 @@ JSObject* DLLCALL js_CreateMsgAreaObject(JSContext* cx, JSObject* parent, scfg_t
 	JSString*	js_str;
 	jsval		val;
 	jsuint		index;
-	uint		l,d;
+	uint		l,d,gn;
 
 	/* Return existing object if it's already been created */
 	if(JS_GetProperty(cx,parent,"msg_area",&val) && val!=JSVAL_VOID)
@@ -348,6 +356,13 @@ JSObject* DLLCALL js_CreateMsgAreaObject(JSContext* cx, JSObject* parent, scfg_t
 	if(!JS_SetProperty(cx, areaobj, "sub", &val))
 		return(NULL);
 
+	if((allgrps=JS_NewObject(cx, NULL, NULL, areaobj))==NULL)
+		return(NULL);
+
+	val=OBJECT_TO_JSVAL(allgrps);
+	if(!JS_SetProperty(cx, areaobj, "grp", &val))
+		return(NULL);
+
 	/* grp_list[] */
 	if((grp_list=JS_NewArrayObject(cx, 0, NULL))==NULL) 
 		return(NULL);
@@ -356,7 +371,7 @@ JSObject* DLLCALL js_CreateMsgAreaObject(JSContext* cx, JSObject* parent, scfg_t
 	if(!JS_SetProperty(cx, areaobj, "grp_list", &val)) 
 		return(NULL);
 
-	for(l=0;l<cfg->total_grps;l++) {
+	for(l=gn=0;l<cfg->total_grps;l++) {
 
 #if 0
 		if(user==NULL && (*cfg->grp[l]->ar)!=AR_NULL)
@@ -375,9 +390,15 @@ JSObject* DLLCALL js_CreateMsgAreaObject(JSContext* cx, JSObject* parent, scfg_t
 		if(!JS_SetElement(cx, grp_list, index, &val))
 			return(NULL);
 
-		val=INT_TO_JSVAL(l);
+		/* Add as property (associative array element) */
+		if(!JS_DefineProperty(cx, allgrps, cfg->grp[l]->sname, val
+			,NULL,NULL,JSPROP_READONLY|JSPROP_ENUMERATE))
+			return(NULL);
+
+		val=INT_TO_JSVAL(gn);
 		if(!JS_SetProperty(cx, grpobj, "number", &val))
 			return(NULL);
+		gn++;
 
 		if((js_str=JS_NewStringCopyZ(cx, cfg->grp[l]->sname))==NULL)
 			return(NULL);
@@ -500,6 +521,11 @@ JSObject* DLLCALL js_CreateMsgAreaObject(JSContext* cx, JSObject* parent, scfg_t
 	JS_DefineProperty(cx,allsubs,"_dont_document",JSVAL_TRUE,NULL,NULL,JSPROP_READONLY);
 #endif
 
+#ifdef _DEBUG
+	js_DescribeSyncObject(cx,allsubs,"Associative array of all groups (use name as index)",312);
+	JS_DefineProperty(cx,allgrps,"_dont_document",JSVAL_TRUE,NULL,NULL,JSPROP_READONLY);
+#endif
+
 	return(areaobj);
 }
 
-- 
GitLab