\n");
- wprintf(_("If you select this option,
%s will "
+ wc_printf(_("If you select this option,
%s will "
"disappear from your room list. Is this what you wish "
- "to do?
\n"), ChrPtr(WC->wc_roomname));
-
- wprintf("
\n");
+ "to do?
\n"), ChrPtr(WC->CurRoom.name));
+
+ wc_printf("
\n");
wDumpContent(1);
}
@@ -2651,10 +2955,10 @@ void zap(void)
* If the forget-room routine fails for any reason, we fall back
* to the current room; otherwise, we go to the Lobby
*/
- final_destination = NewStrBufDup(WC->wc_roomname);
+ final_destination = NewStrBufDup(WC->CurRoom.name);
if (havebstr("ok_button")) {
- serv_printf("GOTO %s", ChrPtr(WC->wc_roomname));
+ serv_printf("GOTO %s", ChrPtr(WC->CurRoom.name));
serv_getln(buf, sizeof buf);
if (buf[0] == '2') {
serv_puts("FORG");
@@ -2852,8 +3156,8 @@ void do_change_view(int newview) {
serv_printf("VIEW %d", newview);
serv_getln(buf, sizeof buf);
- WC->wc_view = newview;
- smart_goto(WC->wc_roomname);
+ WC->CurRoom.view = newview;
+ smart_goto(WC->CurRoom.name);
}
@@ -2900,19 +3204,22 @@ void knrooms(void)
set_preference("roomlistview", ListView, 1);
}
/** Sanitize the input so its safe */
- if(!get_preference("roomlistview", &ListView) ||
+ if((get_preference("roomlistview", &ListView) != 0)||
((strcasecmp(ChrPtr(ListView), "folders") != 0) &&
(strcasecmp(ChrPtr(ListView), "table") != 0)))
{
if (ListView == NULL) {
ListView = NewStrBufPlain(HKEY("rooms"));
set_preference("roomlistview", ListView, 0);
+ ListView = NULL;
}
else {
- StrBufPlain(ListView, HKEY("rooms"));
- save_preferences();
+ ListView = NewStrBufPlain(HKEY("rooms"));
+ set_preference("roomlistview", ListView, 0);
+ ListView = NULL;
}
}
+ FreeStrBuf(&ListView);
url_do_template();
}
@@ -2947,7 +3254,7 @@ void set_room_policy(void) {
void tmplput_RoomName(StrBuf *Target, WCTemplputParams *TP)
{
- StrBufAppendTemplate(Target, TP, WC->wc_roomname, 0);
+ StrBufAppendTemplate(Target, TP, WC->CurRoom.name, 0);
}
@@ -2957,20 +3264,32 @@ void _display_private(void) {
void dotgoto(void) {
if (!havebstr("room")) {
- readloop(readnew);
+ readloop(readnew, eUseDefault);
return;
}
- if (WC->wc_view != VIEW_MAILBOX) { /* dotgoto acts like dotskip when we're in a mailbox view */
+ if (WC->CurRoom.view != VIEW_MAILBOX) { /* dotgoto acts like dotskip when we're in a mailbox view */
slrp_highest();
}
smart_goto(sbstr("room"));
}
+
+
+void tmplput_current_room(StrBuf *Target, WCTemplputParams *TP)
+{
+ wcsession *WCC = WC;
+
+ if (WCC != NULL)
+ StrBufAppendTemplate(Target, TP,
+ WCC->CurRoom.name,
+ 0);
+}
+
void tmplput_roombanner(StrBuf *Target, WCTemplputParams *TP)
{
- wprintf("
\n");
- embed_room_banner(NULL, navbar_default);
- wprintf("
\n");
+ wc_printf("
\n");
+ embed_room_banner(NULL);
+ wc_printf("
\n");
}
@@ -2983,138 +3302,99 @@ void tmplput_ungoto(StrBuf *Target, WCTemplputParams *TP)
StrBufAppendBufPlain(Target, WCC->ugname, -1, 0);
}
-
-int ConditionalHaveUngoto(StrBuf *Target, WCTemplputParams *TP)
+int ConditionalRoomAide(StrBuf *Target, WCTemplputParams *TP)
{
wcsession *WCC = WC;
-
- return ((WCC!=NULL) &&
- (!IsEmptyStr(WCC->ugname)) &&
- (strcasecmp(WCC->ugname, ChrPtr(WCC->wc_roomname)) == 0));
+ return (WCC != NULL)?
+ ((WCC->CurRoom.RAFlags & UA_ADMINALLOWED) != 0) : 0;
}
-int ConditionalRoomHas_QR_PERMANENT(StrBuf *Target, WCTemplputParams *TP)
+int ConditionalRoomAcessDelete(StrBuf *Target, WCTemplputParams *TP)
{
wcsession *WCC = WC;
-
- return ((WCC!=NULL) &&
- ((WCC->room_flags & QR_PERMANENT) != 0));
+ return (WCC == NULL)? 0 :
+ ( ((WCC->CurRoom.RAFlags & UA_ADMINALLOWED) != 0) ||
+ (WCC->CurRoom.is_inbox) ||
+ (WCC->CurRoom.QRFlags2 & QR2_COLLABDEL) );
}
-int ConditionalRoomHas_QR_INUSE(StrBuf *Target, WCTemplputParams *TP)
+int ConditionalHaveUngoto(StrBuf *Target, WCTemplputParams *TP)
{
wcsession *WCC = WC;
- return ((WCC!=NULL) &&
- ((WCC->room_flags & QR_INUSE) != 0));
+ return ((WCC!=NULL) &&
+ (!IsEmptyStr(WCC->ugname)) &&
+ (strcasecmp(WCC->ugname, ChrPtr(WCC->CurRoom.name)) == 0));
}
-int ConditionalRoomHas_QR_PRIVATE(StrBuf *Target, WCTemplputParams *TP)
-{
- wcsession *WCC = WC;
-
- return ((WCC!=NULL) &&
- ((WCC->room_flags & QR_PRIVATE) != 0));
-}
-int ConditionalRoomHas_QR_PASSWORDED(StrBuf *Target, WCTemplputParams *TP)
+int ConditionalRoomHas_UAFlag(StrBuf *Target, WCTemplputParams *TP)
{
- wcsession *WCC = WC;
-
- return ((WCC!=NULL) &&
- ((WCC->room_flags & QR_PASSWORDED) != 0));
-}
+ folder *Folder = (folder *)(TP->Context);
+ long UA_CheckFlag;
+
+ UA_CheckFlag = GetTemplateTokenNumber(Target, TP, 2, 0);
+ if (UA_CheckFlag == 0)
+ LogTemplateError(Target, "Conditional", ERR_PARM1, TP,
+ "requires one of the #\"UA_*\"- defines or an integer flag 0 is invalid!");
-int ConditionalRoomHas_QR_GUESSNAME(StrBuf *Target, WCTemplputParams *TP)
-{
- wcsession *WCC = WC;
-
- return ((WCC!=NULL) &&
- ((WCC->room_flags & QR_GUESSNAME) != 0));
+ return ((Folder->RAFlags & UA_CheckFlag) != 0);
}
-int ConditionalRoomHas_QR_DIRECTORY(StrBuf *Target, WCTemplputParams *TP)
-{
- wcsession *WCC = WC;
-
- return ((WCC!=NULL) &&
- ((WCC->room_flags & QR_DIRECTORY) != 0));
-}
-int ConditionalRoomHas_QR_UPLOAD(StrBuf *Target, WCTemplputParams *TP)
-{
- wcsession *WCC = WC;
-
- return ((WCC!=NULL) &&
- ((WCC->room_flags & QR_UPLOAD) != 0));
-}
-int ConditionalRoomHas_QR_DOWNLOAD(StrBuf *Target, WCTemplputParams *TP)
+int ConditionalCurrentRoomHas_QRFlag(StrBuf *Target, WCTemplputParams *TP)
{
+ long QR_CheckFlag;
wcsession *WCC = WC;
- return ((WCC!=NULL) &&
- ((WCC->room_flags & QR_DOWNLOAD) != 0));
-}
+ QR_CheckFlag = GetTemplateTokenNumber(Target, TP, 2, 0);
+ if (QR_CheckFlag == 0)
+ LogTemplateError(Target, "Conditional", ERR_PARM1, TP,
+ "requires one of the #\"QR*\"- defines or an integer flag 0 is invalid!");
-int ConditionalRoomHas_QR_VISDIR(StrBuf *Target, WCTemplputParams *TP)
-{
- wcsession *WCC = WC;
-
return ((WCC!=NULL) &&
- ((WCC->room_flags & QR_VISDIR) != 0));
+ ((WCC->CurRoom.QRFlags & QR_CheckFlag) != 0));
}
-int ConditionalRoomHas_QR_ANONONLY(StrBuf *Target, WCTemplputParams *TP)
+int ConditionalRoomHas_QRFlag(StrBuf *Target, WCTemplputParams *TP)
{
- wcsession *WCC = WC;
-
- return ((WCC!=NULL) &&
- ((WCC->room_flags & QR_ANONONLY) != 0));
-}
+ long QR_CheckFlag;
+ folder *Folder = (folder *)(TP->Context);
-int ConditionalRoomHas_QR_ANONOPT(StrBuf *Target, WCTemplputParams *TP)
-{
- wcsession *WCC = WC;
-
- return ((WCC!=NULL) &&
- ((WCC->room_flags & QR_ANONOPT) != 0));
+ QR_CheckFlag = GetTemplateTokenNumber(Target, TP, 2, 0);
+ if (QR_CheckFlag == 0)
+ LogTemplateError(Target, "Conditional", ERR_PARM1, TP,
+ "requires one of the #\"QR*\"- defines or an integer flag 0 is invalid!");
+ return ((Folder->QRFlags & QR_CheckFlag) != 0);
}
-int ConditionalRoomHas_QR_NETWORK(StrBuf *Target, WCTemplputParams *TP)
-{
- wcsession *WCC = WC;
-
- return ((WCC!=NULL) &&
- ((WCC->room_flags & QR_NETWORK) != 0));
-}
-int ConditionalRoomHas_QR_PREFONLY(StrBuf *Target, WCTemplputParams *TP)
+int ConditionalCurrentRoomHas_QRFlag2(StrBuf *Target, WCTemplputParams *TP)
{
+ long QR2_CheckFlag;
wcsession *WCC = WC;
- return ((WCC!=NULL) &&
- ((WCC->room_flags & QR_PREFONLY) != 0));
-}
+ QR2_CheckFlag = GetTemplateTokenNumber(Target, TP, 2, 0);
+ if (QR2_CheckFlag == 0)
+ LogTemplateError(Target, "Conditional", ERR_PARM1, TP,
+ "requires one of the #\"QR2*\"- defines or an integer flag 0 is invalid!");
-int ConditionalRoomHas_QR_READONLY(StrBuf *Target, WCTemplputParams *TP)
-{
- wcsession *WCC = WC;
-
return ((WCC!=NULL) &&
- ((WCC->room_flags & QR_READONLY) != 0));
+ ((WCC->CurRoom.QRFlags2 & QR2_CheckFlag) != 0));
}
-int ConditionalRoomHas_QR_MAILBOX(StrBuf *Target, WCTemplputParams *TP)
+int ConditionalRoomHas_QRFlag2(StrBuf *Target, WCTemplputParams *TP)
{
- wcsession *WCC = WC;
-
- return ((WCC!=NULL) &&
- ((WCC->room_flags & QR_MAILBOX) != 0));
-}
-
-
+ long QR2_CheckFlag;
+ folder *Folder = (folder *)(TP->Context);
+ QR2_CheckFlag = GetTemplateTokenNumber(Target, TP, 2, 0);
+ if (QR2_CheckFlag == 0)
+ LogTemplateError(Target, "Conditional", ERR_PARM1, TP,
+ "requires one of the #\"QR2*\"- defines or an integer flag 0 is invalid!");
+ return ((Folder->QRFlags2 & QR2_CheckFlag) != 0);
+}
int ConditionalHaveRoomeditRights(StrBuf *Target, WCTemplputParams *TP)
@@ -3123,8 +3403,8 @@ int ConditionalHaveRoomeditRights(StrBuf *Target, WCTemplputParams *TP)
return ( (WCC!= NULL) &&
((WCC->axlevel >= 6) ||
- (WCC->is_room_aide) ||
- (WCC->is_mailbox) ));
+ ((WCC->CurRoom.RAFlags & UA_ADMINALLOWED) != 0) ||
+ (WCC->CurRoom.is_inbox) ));
}
int ConditionalIsRoomtype(StrBuf *Target, WCTemplputParams *TP)
@@ -3132,89 +3412,208 @@ int ConditionalIsRoomtype(StrBuf *Target, WCTemplputParams *TP)
wcsession *WCC = WC;
if ((WCC == NULL) ||
- (TP->Tokens->nParameters < 3) ||
- (TP->Tokens->Params[2]->Type != TYPE_STR)||
- (TP->Tokens->Params[2]->len < 7))
- return 0;
+ (TP->Tokens->nParameters < 3))
+ {
+ return ((WCC->CurRoom.view < VIEW_BBS) ||
+ (WCC->CurRoom.view > VIEW_MAX));
+ }
- switch(WCC->wc_view) {
- case VIEW_BBS:
- return (!strcasecmp(TP->Tokens->Params[2]->Start, "VIEW_BBS"));
- case VIEW_MAILBOX:
- return (!strcasecmp(TP->Tokens->Params[2]->Start, "VIEW_MAILBOX"));
- case VIEW_ADDRESSBOOK:
- return (!strcasecmp(TP->Tokens->Params[2]->Start, "VIEW_ADDRESSBOOK"));
- case VIEW_TASKS:
- return (!strcasecmp(TP->Tokens->Params[2]->Start, "VIEW_TASKS"));
- case VIEW_NOTES:
- return (!strcasecmp(TP->Tokens->Params[2]->Start, "VIEW_NOTES"));
- case VIEW_WIKI:
- return (!strcasecmp(TP->Tokens->Params[2]->Start, "VIEW_WIKI"));
- case VIEW_JOURNAL:
- return (!strcasecmp(TP->Tokens->Params[2]->Start, "VIEW_JOURNAL"));
- case VIEW_CALENDAR:
- return (!strcasecmp(TP->Tokens->Params[2]->Start, "VIEW_CALENDAR"));
- case VIEW_CALBRIEF:
- return (!strcasecmp(TP->Tokens->Params[2]->Start, "VIEW_CALBRIEF"));
- default:
- return 0;
+ return WCC->CurRoom.view == GetTemplateTokenNumber(Target, TP, 2, VIEW_BBS);
+}
+
+
+HashList *GetWhoKnowsHash(StrBuf *Target, WCTemplputParams *TP)
+{
+ wcsession *WCC = WC;
+ StrBuf *Line;
+ StrBuf *Token;
+ long State;
+ HashList *Whok = NULL;
+ int Done = 0;
+ int n;
+
+ serv_puts("WHOK");
+ Line = NewStrBuf();
+ Token = NewStrBuf();
+ StrBuf_ServGetln(Line);
+ if (GetServerStatus(Line, &State) == 1)
+ {
+ Whok = NewHash(1, Flathash);
+ while(!Done && StrBuf_ServGetln(Line))
+ if ( (StrLength(Line)==3) &&
+ !strcmp(ChrPtr(Line), "000"))
+ {
+ Done = 1;
+ }
+ else
+ {
+
+ const char *Pos = NULL;
+ Token = NewStrBufPlain (NULL, StrLength(Line));
+ StrBufExtract_NextToken(Token, Line, &Pos, '|');
+
+ Put(Whok,
+ IKEY(n),
+ Token,
+ HFreeStrBuf);
+ }
}
+ else if (State == 550)
+ StrBufAppendBufPlain(WCC->ImportantMsg,
+ _("Higher access is required to access this function."), -1, 0);
+
+
+ return Whok;
}
void
InitModule_ROOMOPS
(void)
{
+ initialize_viewdefs();
RegisterPreference("roomlistview",
_("Room list view"),
PRF_STRING,
NULL);
RegisterPreference("emptyfloors", _("Show empty floors"), PRF_YESNO, NULL);
- RegisterNamespace("ROOMNAME", 0, 1, tmplput_RoomName, 0);
-
- WebcitAddUrlHandler(HKEY("knrooms"), knrooms, 0);
- WebcitAddUrlHandler(HKEY("dotgoto"), dotgoto, NEED_URL);
- WebcitAddUrlHandler(HKEY("dotskip"), dotskip, NEED_URL);
- WebcitAddUrlHandler(HKEY("display_private"), _display_private, 0);
- WebcitAddUrlHandler(HKEY("goto_private"), goto_private, NEED_URL);
- WebcitAddUrlHandler(HKEY("zapped_list"), zapped_list, 0);
- WebcitAddUrlHandler(HKEY("display_zap"), display_zap, 0);
- WebcitAddUrlHandler(HKEY("zap"), zap, 0);
- WebcitAddUrlHandler(HKEY("display_entroom"), display_entroom, 0);
- WebcitAddUrlHandler(HKEY("entroom"), entroom, 0);
- WebcitAddUrlHandler(HKEY("display_whok"), display_whok, 0);
- WebcitAddUrlHandler(HKEY("do_invt_kick"), do_invt_kick, 0);
- WebcitAddUrlHandler(HKEY("display_editroom"), display_editroom, 0);
- WebcitAddUrlHandler(HKEY("netedit"), netedit, 0);
- WebcitAddUrlHandler(HKEY("editroom"), editroom, 0);
- WebcitAddUrlHandler(HKEY("delete_room"), delete_room, 0);
- WebcitAddUrlHandler(HKEY("set_room_policy"), set_room_policy, 0);
- WebcitAddUrlHandler(HKEY("changeview"), change_view, 0);
- WebcitAddUrlHandler(HKEY("toggle_self_service"), toggle_self_service, 0);
- RegisterNamespace("ROOMBANNER", 0, 1, tmplput_roombanner, 0);
+ RegisterNamespace("ROOMNAME", 0, 1, tmplput_RoomName, NULL, CTX_NONE);
+
+
+ WebcitAddUrlHandler(HKEY("knrooms"), "", 0, knrooms, 0);
+ WebcitAddUrlHandler(HKEY("dotgoto"), "", 0, dotgoto, NEED_URL);
+ WebcitAddUrlHandler(HKEY("dotskip"), "", 0, dotskip, NEED_URL);
+ WebcitAddUrlHandler(HKEY("display_private"), "", 0, _display_private, 0);
+ WebcitAddUrlHandler(HKEY("goto_private"), "", 0, goto_private, NEED_URL);
+ WebcitAddUrlHandler(HKEY("zapped_list"), "", 0, zapped_list, 0);
+ WebcitAddUrlHandler(HKEY("display_zap"), "", 0, display_zap, 0);
+ WebcitAddUrlHandler(HKEY("zap"), "", 0, zap, 0);
+ WebcitAddUrlHandler(HKEY("display_entroom"), "", 0, display_entroom, 0);
+ WebcitAddUrlHandler(HKEY("entroom"), "", 0, entroom, 0);
+ WebcitAddUrlHandler(HKEY("display_whok"), "", 0, display_whok, 0);
+ WebcitAddUrlHandler(HKEY("do_invt_kick"), "", 0, do_invt_kick, 0);
+ WebcitAddUrlHandler(HKEY("display_editroom"), "", 0, display_editroom, 0);
+ WebcitAddUrlHandler(HKEY("netedit"), "", 0, netedit, 0);
+ WebcitAddUrlHandler(HKEY("editroom"), "", 0, editroom, 0);
+ WebcitAddUrlHandler(HKEY("delete_room"), "", 0, delete_room, 0);
+ WebcitAddUrlHandler(HKEY("set_room_policy"), "", 0, set_room_policy, 0);
+ WebcitAddUrlHandler(HKEY("changeview"), "", 0, change_view, 0);
+ WebcitAddUrlHandler(HKEY("toggle_self_service"), "", 0, toggle_self_service, 0);
+ RegisterNamespace("ROOMBANNER", 0, 1, tmplput_roombanner, NULL, CTX_NONE);
RegisterConditional(HKEY("COND:ROOM:TYPE_IS"), 0, ConditionalIsRoomtype, CTX_NONE);
- RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_PERMANENT"), 0, ConditionalRoomHas_QR_PERMANENT, CTX_NONE);
- RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_INUSE"), 0, ConditionalRoomHas_QR_INUSE, CTX_NONE);
- RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_PRIVATE"), 0, ConditionalRoomHas_QR_PRIVATE, CTX_NONE);
- RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_PASSWORDED"), 0, ConditionalRoomHas_QR_PASSWORDED, CTX_NONE);
- RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_GUESSNAME"), 0, ConditionalRoomHas_QR_GUESSNAME, CTX_NONE);
- RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_DIRECTORY"), 0, ConditionalRoomHas_QR_DIRECTORY, CTX_NONE);
- RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_UPLOAD"), 0, ConditionalRoomHas_QR_UPLOAD, CTX_NONE);
- RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_DOWNLOAD"), 0, ConditionalRoomHas_QR_DOWNLOAD, CTX_NONE);
- RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_VISIDIR"), 0, ConditionalRoomHas_QR_VISDIR, CTX_NONE);
- RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_ANONONLY"), 0, ConditionalRoomHas_QR_ANONONLY, CTX_NONE);
- RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_ANONOPT"), 0, ConditionalRoomHas_QR_ANONOPT, CTX_NONE);
- RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_NETWORK"), 0, ConditionalRoomHas_QR_NETWORK, CTX_NONE);
- RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_PREFONLY"), 0, ConditionalRoomHas_QR_PREFONLY, CTX_NONE);
- RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_READONLY"), 0, ConditionalRoomHas_QR_READONLY, CTX_NONE);
- RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_MAILBOX"), 0, ConditionalRoomHas_QR_MAILBOX, CTX_NONE);
+ RegisterConditional(HKEY("COND:THISROOM:FLAG:QR"), 0, ConditionalCurrentRoomHas_QRFlag, CTX_NONE);
+ RegisterConditional(HKEY("COND:ROOM:FLAG:QR"), 0, ConditionalRoomHas_QRFlag, CTX_ROOMS);
+
+ RegisterConditional(HKEY("COND:THISROOM:FLAG:QR2"), 0, ConditionalCurrentRoomHas_QRFlag2, CTX_NONE);
+ RegisterConditional(HKEY("COND:ROOM:FLAG:QR2"), 0, ConditionalRoomHas_QRFlag2, CTX_ROOMS);
+ RegisterConditional(HKEY("COND:ROOM:FLAG:UA"), 0, ConditionalRoomHas_UAFlag, CTX_ROOMS);
+
+ RegisterIterator("ITERATE:THISROOM:WHO_KNOWS", 0, NULL, GetWhoKnowsHash, NULL, DeleteHash, CTX_STRBUF, CTX_NONE, IT_NOFLAG);
+ RegisterNamespace("THISROOM:MSGS:NEW", 0, 0, tmplput_CurrentRoom_nNewMessages, NULL, CTX_NONE);
+ RegisterNamespace("THISROOM:MSGS:TOTAL", 0, 0, tmplput_CurrentRoom_nTotalMessages, NULL, CTX_NONE);
+
+ RegisterNamespace("THISROOM:FLOOR:NAME", 0, 1, tmplput_CurrentRoomFloorName, NULL, CTX_NONE);
+ RegisterNamespace("THISROOM:AIDE", 0, 1, tmplput_CurrentRoomAide, NULL, CTX_NONE);
+ RegisterNamespace("THISROOM:PASS", 0, 1, tmplput_CurrentRoomPass, NULL, CTX_NONE);
+ RegisterNamespace("THISROOM:DIRECTORY", 0, 1, tmplput_CurrentRoomDirectory, NULL, CTX_NONE);
+ RegisterNamespace("THISROOM:ORDER", 0, 0, tmplput_CurrentRoomOrder, NULL, CTX_NONE);
+ RegisterNamespace("THISROOM:DEFAULT_VIEW", 0, 0, tmplput_CurrentRoomDefView, NULL, CTX_NONE);
+ RegisterConditional(HKEY("COND:THISROOM:HAVE_VIEW"), 0, ConditionalThisRoomHaveView, CTX_NONE);
+ RegisterNamespace("THISROOM:VIEW_STRING", 0, 1, tmplput_CurrentRoomViewString, NULL, CTX_NONE);
+ RegisterNamespace("ROOM:VIEW_STRING", 1, 2, tmplput_RoomViewString, NULL, CTX_NONE);
+
+ RegisterNamespace("THISROOM:INFOTEXT", 1, 2, tmplput_CurrentRoomInfoText, NULL, CTX_NONE);
+ RegisterConditional(HKEY("COND:THISROOM:ORDER"), 0, ConditionalThisRoomOrder, CTX_NONE);
+ RegisterConditional(HKEY("COND:THISROOM:DEFAULT_VIEW"), 0, ConditionalThisRoomDefView, CTX_NONE);
+ RegisterConditional(HKEY("COND:THISROOM:HAVE_PIC"), 0, ConditionalThisRoomXHavePic, CTX_NONE);
+ RegisterConditional(HKEY("COND:THISROOM:HAVE_INFOTEXT"), 0, ConditionalThisRoomXHaveInfoText, CTX_NONE);
+ RegisterNamespace("THISROOM:FILES:N", 0, 1, tmplput_CurrentRoomXNFiles, NULL, CTX_NONE);
+ RegisterNamespace("THISROOM:FILES:STR", 0, 1, tmplput_CurrentRoomX_FileString, NULL, CTX_NONE);
+
+ REGISTERTokenParamDefine(QR_PERMANENT);
+ REGISTERTokenParamDefine(QR_INUSE);
+ REGISTERTokenParamDefine(QR_PRIVATE);
+ REGISTERTokenParamDefine(QR_PASSWORDED);
+ REGISTERTokenParamDefine(QR_GUESSNAME);
+ REGISTERTokenParamDefine(QR_DIRECTORY);
+ REGISTERTokenParamDefine(QR_UPLOAD);
+ REGISTERTokenParamDefine(QR_DOWNLOAD);
+ REGISTERTokenParamDefine(QR_VISDIR);
+ REGISTERTokenParamDefine(QR_ANONONLY);
+ REGISTERTokenParamDefine(QR_ANONOPT);
+ REGISTERTokenParamDefine(QR_NETWORK);
+ REGISTERTokenParamDefine(QR_PREFONLY);
+ REGISTERTokenParamDefine(QR_READONLY);
+ REGISTERTokenParamDefine(QR_MAILBOX);
+ REGISTERTokenParamDefine(QR2_SYSTEM);
+ REGISTERTokenParamDefine(QR2_SELFLIST);
+ REGISTERTokenParamDefine(QR2_COLLABDEL);
+ REGISTERTokenParamDefine(QR2_SUBJECTREQ);
+ REGISTERTokenParamDefine(QR2_SMTP_PUBLIC);
+ REGISTERTokenParamDefine(QR2_MODERATED);
+
+ REGISTERTokenParamDefine(UA_KNOWN);
+ REGISTERTokenParamDefine(UA_GOTOALLOWED);
+ REGISTERTokenParamDefine(UA_HASNEWMSGS);
+ REGISTERTokenParamDefine(UA_ZAPPED);
+ REGISTERTokenParamDefine(UA_POSTALLOWED);
+ REGISTERTokenParamDefine(UA_ADMINALLOWED);
+ REGISTERTokenParamDefine(UA_DELETEALLOWED);
+ REGISTERTokenParamDefine(UA_ISTRASH);
+
+ REGISTERTokenParamDefine(US_NEEDVALID);
+ REGISTERTokenParamDefine(US_PERM);
+ REGISTERTokenParamDefine(US_LASTOLD);
+ REGISTERTokenParamDefine(US_EXPERT);
+ REGISTERTokenParamDefine(US_UNLISTED);
+ REGISTERTokenParamDefine(US_NOPROMPT);
+ REGISTERTokenParamDefine(US_PROMPTCTL);
+ REGISTERTokenParamDefine(US_DISAPPEAR);
+ REGISTERTokenParamDefine(US_REGIS);
+ REGISTERTokenParamDefine(US_PAGINATOR);
+ REGISTERTokenParamDefine(US_INTERNET);
+ REGISTERTokenParamDefine(US_FLOORS);
+ REGISTERTokenParamDefine(US_COLOR);
+ REGISTERTokenParamDefine(US_USER_SET);
+
+ REGISTERTokenParamDefine(VIEW_BBS);
+ REGISTERTokenParamDefine(VIEW_MAILBOX);
+ REGISTERTokenParamDefine(VIEW_ADDRESSBOOK);
+ REGISTERTokenParamDefine(VIEW_CALENDAR);
+ REGISTERTokenParamDefine(VIEW_TASKS);
+ REGISTERTokenParamDefine(VIEW_NOTES);
+ REGISTERTokenParamDefine(VIEW_WIKI);
+ REGISTERTokenParamDefine(VIEW_CALBRIEF);
+ REGISTERTokenParamDefine(VIEW_JOURNAL);
+ REGISTERTokenParamDefine(VIEW_BLOG);
+
+ /* GNET types: */
+ REGISTERTokenParamDefine(ignet_push_share);
+ { /* these are the parts of an IGNET push config */
+ REGISTERTokenParamDefine(GNET_IGNET_NODE);
+ REGISTERTokenParamDefine(GNET_IGNET_ROOM);
+ }
+ REGISTERTokenParamDefine(listrecp);
+ REGISTERTokenParamDefine(digestrecp);
+ REGISTERTokenParamDefine(pop3client);
+ { /* These are the parts of a pop3 client line... */
+ REGISTERTokenParamDefine(GNET_POP3_HOST);
+ REGISTERTokenParamDefine(GNET_POP3_USER);
+ REGISTERTokenParamDefine(GNET_POP3_DONT_DELETE_REMOTE);
+ REGISTERTokenParamDefine(GNET_POP3_INTERVAL);
+ }
+ REGISTERTokenParamDefine(rssclient);
+ REGISTERTokenParamDefine(participate);
+
+ RegisterConditional(HKEY("COND:ROOMAIDE"), 2, ConditionalRoomAide, CTX_NONE);
+ RegisterConditional(HKEY("COND:ACCESS:DELETE"), 2, ConditionalRoomAcessDelete, CTX_NONE);
RegisterConditional(HKEY("COND:UNGOTO"), 0, ConditionalHaveUngoto, CTX_NONE);
RegisterConditional(HKEY("COND:ROOM:EDITACCESS"), 0, ConditionalHaveRoomeditRights, CTX_NONE);
- RegisterNamespace("ROOM:UNGOTO", 0, 0, tmplput_ungoto, 0);
+ RegisterNamespace("CURRENT_ROOM", 0, 1, tmplput_current_room, NULL, CTX_NONE);
+ RegisterNamespace("ROOM:UNGOTO", 0, 0, tmplput_ungoto, NULL, CTX_NONE);
RegisterIterator("FLOORS", 0, NULL, GetFloorListHash, NULL, NULL, CTX_FLOORS, CTX_NONE, IT_NOFLAG);
@@ -3225,11 +3624,16 @@ void
SessionDestroyModule_ROOMOPS
(wcsession *sess)
{
+ FlushFolder(&sess->CurRoom);
if (sess->cache_fold != NULL) {
free(sess->cache_fold);
}
free_march_list(sess);
DeleteHash(&sess->Floors);
+ DeleteHash(&sess->Rooms);
+ DeleteHash(&sess->FloorsByName);
}
+
+
/*@}*/