+void tmplput_RoomName(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ StrBuf *tmp;
+ tmp = NewStrBufPlain(WC->wc_roomname, -1);;
+ StrBufAppendTemplate(Target, nArgs, Tokens, Context, ContextType, tmp, 0);
+ FreeStrBuf(&tmp);
+}
+
+void _gotonext(void) { slrp_highest(); gotonext(); }
+void dotskip(void) {smart_goto(bstr("room"));}
+void _display_private(void) { display_private("", 0); }
+void dotgoto(void) {
+ if (WC->wc_view != VIEW_MAILBOX) { /* dotgoto acts like dotskip when we're in a mailbox view */
+ slrp_highest();
+ }
+ smart_goto(bstr("room"));
+}
+
+void tmplput_roombanner(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wprintf("<div id=\"banner\">\n");
+ embed_room_banner(NULL, navbar_default);
+ wprintf("</div>\n");
+}
+
+
+void tmplput_ungoto(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ if ((WCC!=NULL) &&
+ (!IsEmptyStr(WCC->ugname)))
+ StrBufAppendBufPlain(Target, WCC->ugname, -1, 0);
+}
+
+
+int ConditionalHaveUngoto(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ (!IsEmptyStr(WCC->ugname)) &&
+ (strcasecmp(WCC->ugname, WCC->wc_roomname) == 0));
+}
+
+
+
+
+int ConditionalRoomHas_QR_PERMANENT(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_PERMANENT) != 0));
+}
+
+int ConditionalRoomHas_QR_INUSE(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_INUSE) != 0));
+}
+
+int ConditionalRoomHas_QR_PRIVATE(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_PRIVATE) != 0));
+}
+
+int ConditionalRoomHas_QR_PASSWORDED(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_PASSWORDED) != 0));
+}
+
+int ConditionalRoomHas_QR_GUESSNAME(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_GUESSNAME) != 0));
+}
+
+int ConditionalRoomHas_QR_DIRECTORY(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_DIRECTORY) != 0));
+}
+
+int ConditionalRoomHas_QR_UPLOAD(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_UPLOAD) != 0));
+}
+
+int ConditionalRoomHas_QR_DOWNLOAD(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_DOWNLOAD) != 0));
+}
+
+int ConditionalRoomHas_QR_VISDIR(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_VISDIR) != 0));
+}
+
+int ConditionalRoomHas_QR_ANONONLY(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_ANONONLY) != 0));
+}
+
+int ConditionalRoomHas_QR_ANONOPT(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_ANONOPT) != 0));
+}
+
+int ConditionalRoomHas_QR_NETWORK(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_NETWORK) != 0));
+}
+
+int ConditionalRoomHas_QR_PREFONLY(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_PREFONLY) != 0));
+}
+
+int ConditionalRoomHas_QR_READONLY(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_READONLY) != 0));
+}
+
+int ConditionalRoomHas_QR_MAILBOX(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_MAILBOX) != 0));
+}
+
+
+
+
+
+
+int ConditionalHaveRoomeditRights(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ( (WCC!= NULL) &&
+ ((WCC->axlevel >= 6) ||
+ (WCC->is_room_aide) ||
+ (WCC->is_mailbox) ));
+}
+
+void
+InitModule_ROOMOPS
+(void)
+{
+ RegisterNamespace("ROOMNAME", 0, 1, tmplput_RoomName, 0);
+
+ WebcitAddUrlHandler(HKEY("knrooms"), knrooms, 0);
+ WebcitAddUrlHandler(HKEY("gotonext"), _gotonext, 0);
+ WebcitAddUrlHandler(HKEY("skip"), gotonext, 0);
+ WebcitAddUrlHandler(HKEY("ungoto"), ungoto, 0);
+ WebcitAddUrlHandler(HKEY("dotgoto"), dotgoto, 0);
+ WebcitAddUrlHandler(HKEY("dotskip"), dotskip, 0);
+ WebcitAddUrlHandler(HKEY("display_private"), _display_private, 0);
+ WebcitAddUrlHandler(HKEY("goto_private"), goto_private, 0);
+ 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("set_floordiv_expanded"), set_floordiv_expanded, NEED_URL|AJAX);
+ WebcitAddUrlHandler(HKEY("changeview"), change_view, 0);
+ WebcitAddUrlHandler(HKEY("toggle_self_service"), toggle_self_service, 0);
+ RegisterNamespace("ROOMBANNER", 0, 1, tmplput_roombanner, 0);
+
+ 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:UNGOTO"), 0, ConditionalHaveUngoto, CTX_NONE);
+ RegisterConditional(HKEY("COND:ROOM:EDITACCESS"), 0, ConditionalHaveRoomeditRights, CTX_NONE);
+
+ RegisterNamespace("ROOM:UNGOTO", 0, 0, tmplput_ungoto, 0);
+}
+