]> code.citadel.org Git - citadel.git/blobdiff - webcit/roomops.c
* switch display_editroom to template room_edit in the after save handlers
[citadel.git] / webcit / roomops.c
index 44956be84d2164d9c5750f4e4038ec78a81ea861..0cd8ecd11efad68a2f4e7983f3b3493845c2a3bb 100644 (file)
@@ -33,6 +33,20 @@ ROOM_VIEWS exchangeable_views[VIEW_MAX][VIEW_MAX] = {        /* the different kinds of
        };
 /* the brief calendar view is disabled: VIEW_CALBRIEF */
 
+allowed_default_views[VIEW_MAX] = {
+       1, /* VIEW_BBS          Bulletin board view */
+       1, /* VIEW_MAILBOX              Mailbox summary */
+       1, /* VIEW_ADDRESSBOOK  Address book view */
+       1, /* VIEW_CALENDAR             Calendar view */
+       1, /* VIEW_TASKS                Tasks view */
+       1, /* VIEW_NOTES                Notes view */
+       1, /* VIEW_WIKI         Wiki view */
+       0, /* VIEW_CALBRIEF             Brief Calendar view */
+       0, /* VIEW_JOURNAL              Journal view */
+       0  /* VIEW_BLOG         Blog view (not yet implemented) */
+};
+
+
 /*
  * Initialize the viewdefs with localized strings
  */
@@ -49,24 +63,6 @@ void initialize_viewdefs(void) {
        viewdefs[VIEW_BLOG] = _("Blog");
 }
 
-/*
- * Determine which views are allowed as the default for creating a new room.
- */
-int is_view_allowed_as_default(int which_view)
-{
-       switch(which_view) {
-               case VIEW_BBS:          return(1);
-               case VIEW_MAILBOX:      return(1);
-               case VIEW_ADDRESSBOOK:  return(1);
-               case VIEW_CALENDAR:     return(1);
-               case VIEW_TASKS:        return(1);
-               case VIEW_NOTES:        return(1);
-               case VIEW_WIKI:         return(1);
-               case VIEW_CALBRIEF:     return(0);
-               case VIEW_JOURNAL:      return(0);
-               default:                return(0);      /* should never get here */
-       }
-}
 
 
 /*
@@ -937,6 +933,26 @@ void tmplput_RoomViewString(StrBuf *Target, WCTemplputParams *TP)
 }
 
 
+int ConditionalIsAllowedDefaultView(StrBuf *Target, WCTemplputParams *TP)
+{
+       wcsession *WCC = WC;
+       long CheckThis;
+       
+       if (WCC == NULL)
+               return 0;
+
+       CheckThis = GetTemplateTokenNumber(Target, TP, 2, 0);
+       if ((CheckThis >= VIEW_MAX) || (CheckThis < VIEW_BBS))
+       {
+               LogTemplateError(Target, "Conditional", ERR_PARM2, TP,
+                                "Roomview [%ld] not valid\n", 
+                                CheckThis);
+               return 0;
+       }
+
+       return allowed_default_views[CheckThis] != 0;
+}
+
 /*
  * goto next room
  */
@@ -2069,7 +2085,7 @@ void toggle_self_service(void) {
 
        set_roomflags (&RoomFlags);
        
-       display_editroom();
+       do_template("room_edit", NULL);
 }
 
 
@@ -2096,7 +2112,7 @@ void editroom(void)
        if (!havebstr("ok_button")) {
                strcpy(WC->ImportantMessage,
                       _("Cancelled.  Changes were not saved."));
-               display_editroom();
+               do_template("room_edit", NULL);
                return;
        }
        serv_puts("GETR");
@@ -2105,7 +2121,7 @@ void editroom(void)
        if (GetServerStatus(Buf, NULL) != 2) {
                StrBufCutLeft(Buf, 4);
                strcpy(WC->ImportantMessage, ChrPtr(Buf));
-               display_editroom();
+               do_template("room_edit", NULL);
                FreeStrBuf(&Buf);
                return;
        }
@@ -2260,7 +2276,7 @@ void editroom(void)
        StrBuf_ServGetln(Buf);
        if (GetServerStatus(Buf, NULL) != 2) {
                strcpy(WC->ImportantMessage, &ChrPtr(Buf)[4]);
-               display_editroom();
+               do_template("room_edit", NULL);
                FreeStrBuf(&Buf);
                FreeStrBuf(&er_name);
                FreeStrBuf(&er_password);
@@ -2286,7 +2302,7 @@ void editroom(void)
        }
        gotoroom(er_name);
        strcpy(WC->ImportantMessage, _("Your changes have been saved."));
-       display_editroom();
+       do_template("room_edit", NULL);
        FreeStrBuf(&Buf);
        FreeStrBuf(&er_name);
        FreeStrBuf(&er_password);
@@ -2341,7 +2357,7 @@ void do_invt_kick(void) {
                 }
         }
 
-       display_editroom();
+       do_template("room_edit", NULL);
 }
 
 
@@ -2418,162 +2434,6 @@ void display_whok(void)
         wDumpContent(1);
 }
 
-
-
-/*
- * display the form for entering a new room
- */
-void display_entroom(void)
-{
-       StrBuf *Buf;
-       int i;
-       char buf[SIZ];
-
-       Buf = NewStrBuf();
-       serv_puts("CRE8 0");
-       serv_getln(buf, sizeof buf);
-
-       if (buf[0] != '2') {
-               strcpy(WC->ImportantMessage, &buf[4]);
-               display_main_menu();
-               FreeStrBuf(&Buf);
-               return;
-       }
-
-       output_headers(1, 1, 1, 0, 0, 0);
-
-       svprintf(HKEY("BOXTITLE"), WCS_STRING, _("Create a new room"));
-       do_template("beginbox", NULL);
-
-       wc_printf("<form name=\"create_room_form\" method=\"POST\" action=\"entroom\">\n");
-       wc_printf("<input type=\"hidden\" name=\"nonce\" value=\"%d\">\n", WC->nonce);
-
-       wc_printf("<table class=\"altern\"> ");
-
-       wc_printf("<tr class=\"even\"><td>");
-       wc_printf(_("Name of room: "));
-       wc_printf("</td><td>");
-       wc_printf("<input type=\"text\" NAME=\"er_name\" MAXLENGTH=\"127\">\n");
-        wc_printf("</td></tr>");
-
-       wc_printf("<tr class=\"odd\"><td>");
-       wc_printf(_("Resides on floor: "));
-       wc_printf("</td><td>");
-//        load_floorlist(Buf); 
-        wc_printf("<select name=\"er_floor\" size=\"1\">\n");
-        for (i = 0; i < 128; ++i)
-                if (!IsEmptyStr(floorlist[i])) {
-                        wc_printf("<option ");
-                        wc_printf("value=\"%d\">", i);
-                        escputs(floorlist[i]);
-                        wc_printf("</option>\n");
-                }
-        wc_printf("</select>\n");
-        wc_printf("</td></tr>");
-
-       /*
-        * Our clever little snippet of JavaScript automatically selects
-        * a public room if the view is set to Bulletin Board or wiki, and
-        * it selects a mailbox room otherwise.  The user can override this,
-        * of course.  We also disable the floor selector for mailboxes.
-        */
-       wc_printf("<tr class=\"even\"><td>");
-       wc_printf(_("Default view for room: "));
-       wc_printf("</td><td>");
-        wc_printf("<select name=\"er_view\" size=\"1\" OnChange=\""
-               "       if ( (this.form.er_view.value == 0)             "
-               "          || (this.form.er_view.value == 6) ) {        "
-               "               this.form.type[0].checked=true;         "
-               "               this.form.er_floor.disabled = false;    "
-               "       }                                               "
-               "       else {                                          "
-               "               this.form.type[4].checked=true;         "
-               "               this.form.er_floor.disabled = true;     "
-               "       }                                               "
-               "\">\n");
-       for (i=0; i<(sizeof viewdefs / sizeof (char *)); ++i) {
-               if (is_view_allowed_as_default(i)) {
-                       wc_printf("<option %s value=\"%d\">",
-                               ((i == 0) ? "selected" : ""), i );
-                       escputs(viewdefs[i]);
-                       wc_printf("</option>\n");
-               }
-       }
-       wc_printf("</select>\n");
-       wc_printf("</td></tr>");
-
-       wc_printf("<tr class=\"even\"><td>");
-       wc_printf(_("Type of room:"));
-       wc_printf("</td><td>");
-       wc_printf("<ul class=\"adminlist\">\n");
-
-       wc_printf("<li><input type=\"radio\" NAME=\"type\" VALUE=\"public\" ");
-       wc_printf("CHECKED OnChange=\""
-               "       if (this.form.type[0].checked == true) {        "
-               "               this.form.er_floor.disabled = false;    "
-               "       }                                               "
-               "\"> ");
-       wc_printf(_("Public (automatically appears to everyone)"));
-       wc_printf("</li>");
-
-       wc_printf("\n<li><input type=\"radio\" NAME=\"type\" VALUE=\"hidden\" OnChange=\""
-               "       if (this.form.type[1].checked == true) {        "
-               "               this.form.er_floor.disabled = false;    "
-               "       }                                               "
-               "\"> ");
-       wc_printf(_("Private - hidden (accessible to anyone who knows its name)"));
-       wc_printf("</li>");
-
-       wc_printf("\n<li><input type=\"radio\" NAME=\"type\" VALUE=\"passworded\" OnChange=\""
-               "       if (this.form.type[2].checked == true) {        "
-               "               this.form.er_floor.disabled = false;    "
-               "       }                                               "
-               "\"> ");
-       wc_printf(_("Private - require password: "));
-       wc_printf("<input type=\"text\" NAME=\"er_password\" MAXLENGTH=\"9\">\n");
-       wc_printf("</li>");
-
-       wc_printf("<li><input type=\"radio\" NAME=\"type\" VALUE=\"invonly\" OnChange=\""
-               "       if (this.form.type[3].checked == true) {        "
-               "               this.form.er_floor.disabled = false;    "
-               "       }                                               "
-               "\"> ");
-       wc_printf(_("Private - invitation only"));
-       wc_printf("</li>");
-
-       wc_printf("\n<li><input type=\"radio\" NAME=\"type\" VALUE=\"personal\" "
-               "OnChange=\""
-               "       if (this.form.type[4].checked == true) {        "
-               "               this.form.er_floor.disabled = true;     "
-               "       }                                               "
-               "\"> ");
-       wc_printf(_("Personal (mailbox for you only)"));
-       wc_printf("</li>");
-
-       wc_printf("\n</ul>\n");
-       wc_printf("</td></tr></table>\n");
-
-       wc_printf("<div class=\"buttons\">\n");
-       wc_printf("<input type=\"submit\" name=\"ok_button\" value=\"%s\">", _("Create new room"));
-       wc_printf("&nbsp;");
-       wc_printf("<input type=\"submit\" name=\"cancel_button\" value=\"%s\">", _("Cancel"));
-       wc_printf("</div>\n");
-       wc_printf("</form>\n<hr />");
-       serv_printf("MESG roomaccess");
-       serv_getln(buf, sizeof buf);
-       if (buf[0] == '1') {
-               fmout("LEFT");
-       }
-
-       do_template("endbox", NULL);
-
-       wDumpContent(1);
-       FreeStrBuf(&Buf);
-}
-
-
-
-
 /*
  * support function for entroom() -- sets the default view 
  */
@@ -2670,7 +2530,7 @@ void entroom(void)
        WCC->CurRoom.view = er_view;
 
        if ( (WCC != NULL) && ( (WCC->CurRoom.RAFlags & UA_ADMINALLOWED) != 0) )  {
-               display_editroom ();
+               do_template("room_edit", NULL);
        } else {
                do_change_view(er_view);                /* Now go there */
        }
@@ -2805,14 +2665,14 @@ void netedit(void) {
                strcat(line, bstr("suffix"));
        }
        else {
-               display_editroom();
+               do_template("room_edit", NULL);
                return;
        }
 
 
        fp = tmpfile();
        if (fp == NULL) {
-               display_editroom();
+               do_template("room_edit", NULL);
                return;
        }
 
@@ -2820,7 +2680,7 @@ void netedit(void) {
        serv_getln(buf, sizeof buf);
        if (buf[0] != '1') {
                fclose(fp);
-               display_editroom();
+               do_template("room_edit", NULL);
                return;
        }
 
@@ -2841,7 +2701,7 @@ void netedit(void) {
        serv_getln(buf, sizeof buf);
        if (buf[0] != '4') {
                fclose(fp);
-               display_editroom();
+               do_template("room_edit", NULL);
                return;
        }
 
@@ -2871,7 +2731,7 @@ void netedit(void) {
 
        serv_puts("000");
        fclose(fp);
-       display_editroom();
+       do_template("room_edit", NULL);
 }
 
 
@@ -3006,7 +2866,7 @@ void set_room_policy(void) {
        if (!havebstr("ok_button")) {
                strcpy(WC->ImportantMessage,
                       _("Cancelled.  Changes were not saved."));
-               display_editroom();
+               do_template("room_edit", NULL);
                return;
        }
 
@@ -3021,7 +2881,7 @@ void set_room_policy(void) {
                strcat(WC->ImportantMessage, &buf[4]);
        }
 
-       display_editroom();
+       do_template("room_edit", NULL);
 }
 
 void tmplput_RoomName(StrBuf *Target, WCTemplputParams *TP)
@@ -3268,9 +3128,7 @@ InitModule_ROOMOPS
 
        WebcitAddUrlHandler(HKEY("goto_private"), "", 0, goto_private, NEED_URL);
        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);
@@ -3300,6 +3158,8 @@ InitModule_ROOMOPS
        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);
+       RegisterConditional(HKEY("COND:ALLOWED_DEFAULT_VIEW"), 0, ConditionalIsAllowedDefaultView, CTX_NONE);
+
        RegisterNamespace("THISROOM:VIEW_STRING", 0, 1, tmplput_CurrentRoomViewString, NULL, CTX_NONE);
        RegisterNamespace("ROOM:VIEW_STRING", 1, 2, tmplput_RoomViewString, NULL, CTX_NONE);