* --pedantic cleanup.
[citadel.git] / webcit / roomops.c
index 5869173a55153f2eb5b36fda03122cf4215dc193..4c47999e4b85a2ac08a28491f2bfb2c218701617 100644 (file)
@@ -79,7 +79,7 @@ void load_floorlist(void)
 /*
  * Free a session's march list
  */
-void free_march_list(struct wcsession *wcf)
+void free_march_list(wcsession *wcf)
 {
        struct march *mptr;
 
@@ -256,10 +256,13 @@ void listrms(char *variety)
  */
 void zapped_list(void)
 {
+       StrBuf *Buf;
        output_headers(1, 1, 1, 0, 0, 0);
 
-       svput("BOXTITLE", WCS_STRING, _("Zapped (forgotten) rooms"));
-       do_template("beginbox", NULL);
+       Buf = NewStrBufPlain(_("Zapped (forgotten) rooms"), -1);
+       DoTemplate(HKEY("beginbox"), NULL, Buf, CTX_STRBUF);
+
+       FreeStrBuf(&Buf);
 
        listrms("LZRM -1");
 
@@ -273,7 +276,7 @@ void zapped_list(void)
 /**
  * \brief read this room's info file (set v to 1 for verbose mode)
  */
-void readinfo(void)
+void readinfo(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
 {
        char buf[256];
        char briefinfo[128];
@@ -322,7 +325,7 @@ void readinfo(void)
  * keep the browser from using a cached icon from 
  * another room.
  */
-void embed_room_graphic(void) {
+void embed_room_graphic(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType) {
        char buf[SIZ];
 
        serv_puts("OIMG _roompic_");
@@ -378,7 +381,7 @@ void embed_room_graphic(void) {
 /**
  * \brief Display the current view and offer an option to change it
  */
-void embed_view_o_matic(void) {
+void embed_view_o_matic(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType) {
        int i;
 
        wprintf("<form name=\"viewomatic\" action=\"changeview\">\n");
@@ -419,7 +422,7 @@ void embed_view_o_matic(void) {
 /**
  * \brief Display a search box
  */
-void embed_search_o_matic(void) {
+void embed_search_o_matic(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType) {
        wprintf("<form name=\"searchomatic\" action=\"do_search\">\n");
        wprintf("<div style=\"display: inline;\"><input type=\"hidden\" name=\"nonce\" value=\"%d\">\n", WC->nonce);
        wprintf("<label for=\"search_name\">");
@@ -506,7 +509,7 @@ void embed_room_banner(char *got, int navbar_style) {
        svcallback("START", offer_start_page); 
  
        do_template("roombanner", NULL);
-       // roombanner contains this for mobile
+       /* roombanner contains this for mobile */
        if (navbar_style != navbar_none && !WC->is_mobile) { 
 
                wprintf("<div id=\"navbar\"><ul>");
@@ -924,7 +927,7 @@ void gotonext(void)
  */
 void smart_goto(char *next_room) {
        gotoroom(next_room);
-       readloop("readnew");
+       readloop(readnew);
 }
 
 
@@ -1111,7 +1114,7 @@ void display_editroom(void)
        char node[256];
        char remote_room[128];
        char recp[1024];
-       char er_name[128];
+       char er_name[128] = "";
        char er_password[10];
        char er_dirname[15];
        char er_roomaide[26];
@@ -1935,7 +1938,7 @@ void display_editroom(void)
 
                                wprintf("<td>%s</td>", extract_int(buf, 4) ? _("Yes") : _("No"));
 
-                               wprintf("<td>%ld</td>", extract_long(buf, 5));  // Fetching interval
+                               wprintf("<td>%ld</td>", extract_long(buf, 5));  /* Fetching interval */
                        
                                wprintf("<td class=\"button_link\">");
                                wprintf(" <a href=\"netedit&cmd=remove&tab=feeds&line=pop3client|");
@@ -2631,10 +2634,13 @@ void entroom(void)
  */
 void display_private(char *rname, int req_pass)
 {
+       StrBuf *Buf;
        output_headers(1, 1, 1, 0, 0, 0);
 
-       svprintf(HKEY("BOXTITLE"), WCS_STRING, _("Go to a hidden room"));
-       do_template("beginbox", NULL);
+       Buf = NewStrBufPlain(_("Go to a hidden room"), -1);
+       DoTemplate(HKEY("beginbox"), NULL, Buf, CTX_STRBUF);
+
+       FreeStrBuf(&Buf);
 
        wprintf("<p>");
        wprintf(_("If you know the name of a hidden (guess-name) or "
@@ -2804,7 +2810,7 @@ void netedit(void) {
        char cmpb0[SIZ];
        char cmpb1[SIZ];
        int i, num_addrs;
-       // TODO: do line dynamic!
+       /*/ TODO: do line dynamic! */
        if (havebstr("line_pop3host")) {
                strcpy(line, bstr("prefix"));
                strcat(line, bstr("line_pop3host"));
@@ -3093,7 +3099,6 @@ void do_rooms_view(struct folder *fold, int max_folders, int num_floors) {
        char buf[256];
        char floor_name[256];
        char old_floor_name[256];
-       char boxtitle[256];
        int levels, oldlevels;
        int i, t;
        int num_boxes = 0;
@@ -3139,10 +3144,12 @@ void do_rooms_view(struct folder *fold, int max_folders, int num_floors) {
                strcpy(old_floor_name, floor_name);
 
                if (levels == 1) {
-                       /** Begin inner box */
-                       stresc(boxtitle, 256, floor_name, 1, 0);
-                       svprintf(HKEY("BOXTITLE"), WCS_STRING, boxtitle);
-                       do_template("beginbox", NULL);
+                       StrBuf *Buf;
+                       
+                       Buf = NewStrBufPlain(floor_name, -1);
+                       DoTemplate(HKEY("beginbox"), NULL, Buf, CTX_STRBUF);
+                       
+                       FreeStrBuf(&Buf);
                }
 
                oldlevels = levels;
@@ -3190,11 +3197,11 @@ void do_rooms_view(struct folder *fold, int max_folders, int num_floors) {
  * \param which_floordiv name of the floordiv???
  */
 void set_floordiv_expanded(void) {
-       struct wcsession *WCC = WC;
+       wcsession *WCC = WC;
        StrBuf *FloorDiv;
        
        FloorDiv = NewStrBuf();
-       StrBufAppendBuf(FloorDiv, WCC->UrlFragment1, 0);
+       StrBufAppendBuf(FloorDiv, WCC->UrlFragment2, 0);
        set_preference("floordiv_expanded", FloorDiv, 1);
        WCC->floordiv_expanded = FloorDiv;
 }
@@ -3428,8 +3435,8 @@ void list_all_rooms_by_floor(const char *viewpref) {
                floor_mapping[fold[i].floor]=i;
        
        /** refresh the messages index for this room */
-//     serv_puts("GOTO ");
-//     while (serv_getln(buf, sizeof buf), strcmp(buf, "000"));
+/* TODO        serv_puts("GOTO ");
+   while (serv_getln(buf, sizeof buf), strcmp(buf, "000")); */
        /** Now add rooms */
        serv_puts("LKRA");
        serv_getln(buf, sizeof buf);
@@ -3587,7 +3594,7 @@ void knrooms(void)
        /** offer the ability to switch views */
        wprintf("<ul class=\"room_actions\">\n");
        wprintf("<li class=\"start_page\">");
-       offer_start_page();
+       offer_start_page(NULL, 0, NULL, NULL, CTX_NONE);
        wprintf("</li>");
        wprintf("<li><form name=\"roomlistomatic\">\n"
                "<select name=\"newview\" size=\"1\" "
@@ -3647,9 +3654,12 @@ void set_room_policy(void) {
 }
 
 
-void tmplput_RoomName(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context)
+void tmplput_RoomName(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
 {
-       StrEscAppend(Target, NULL, WC->wc_roomname, 1, 1);
+       StrBuf *tmp;
+       tmp = NewStrBufPlain(WC->wc_roomname, -1);;
+       StrBufAppendTemplate(Target, nArgs, Tokens, Context, ContextType, tmp, 0);
+       FreeStrBuf(&tmp);
 }
 
 void _gotonext(void) { slrp_highest(); gotonext(); }
@@ -3662,7 +3672,7 @@ void dotgoto(void) {
        smart_goto(bstr("room"));
 }
 
-void tmplput_roombanner(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context)
+void tmplput_roombanner(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
 {
        wprintf("<div id=\"banner\">\n");
        embed_room_banner(NULL, navbar_default);
@@ -3670,9 +3680,9 @@ void tmplput_roombanner(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void
 }
 
 
-void tmplput_ungoto(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context)
+void tmplput_ungoto(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
 {
-       struct wcsession *WCC = WC;
+       wcsession *WCC = WC;
 
        if ((WCC!=NULL) && 
            (!IsEmptyStr(WCC->ugname)))
@@ -3680,26 +3690,146 @@ void tmplput_ungoto(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Co
 }
 
 
-int ConditionalHaveUngoto(WCTemplateToken *Tokens, void *Context)
+int ConditionalHaveUngoto(WCTemplateToken *Tokens, void *Context, int ContextType)
 {
-       struct wcsession *WCC = WC;
+       wcsession *WCC = WC;
        
        return ((WCC!=NULL) && 
                (!IsEmptyStr(WCC->ugname)) && 
                (strcasecmp(WCC->ugname, WCC->wc_roomname) == 0));
 }
 
-int ConditinalRoomHasQRVisidir(WCTemplateToken *Tokens, void *Context)
+
+
+
+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)
 {
-       struct wcsession *WCC = WC;
+       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 ConditionalHaveRoomeditRights(WCTemplateToken *Tokens, void *Context)
+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)
 {
-       struct wcsession *WCC = WC;
+       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) || 
@@ -3711,16 +3841,16 @@ void
 InitModule_ROOMOPS
 (void)
 {
-       RegisterNamespace("ROOMNAME", 0, 0, tmplput_RoomName);
+       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("gotonext"), _gotonext, NEED_URL);
+       WebcitAddUrlHandler(HKEY("skip"), gotonext, NEED_URL);
+       WebcitAddUrlHandler(HKEY("ungoto"), ungoto, NEED_URL);
+       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, 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);
@@ -3735,12 +3865,29 @@ InitModule_ROOMOPS
        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);
-       RegisterNamespace("ROOMBANNER", 0, 0, tmplput_roombanner);
-       RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_VISIDIR"), 0, ConditinalRoomHasQRVisidir);
-       RegisterConditional(HKEY("COND:UNGOTO"), 0, ConditionalHaveUngoto);
-       RegisterConditional(HKEY("COND:ROOM:EDITACCESS"), 0, ConditionalHaveRoomeditRights);
-
-       RegisterNamespace("ROOM:UNGOTO", 0, 0, tmplput_ungoto);
+       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);
 }
 
 /*@}*/