]> code.citadel.org Git - citadel.git/blobdiff - webcit/roomops.c
Roomediting: add permission check to to some dialogs
[citadel.git] / webcit / roomops.c
index f16fb7f585708ed42480570359b96c863edea1e9..b6fdaa8df8113f5154a3bddd45c2e60050fcb920 100644 (file)
@@ -481,7 +481,7 @@ int SaveRoomAide(folder *Room)
 }
 
 
-int GetCurrentRoomFlags(folder *Room)
+int GetCurrentRoomFlags(folder *Room, int CareForStatusMessage)
 {
        StrBuf *Buf;
 
@@ -492,8 +492,10 @@ int GetCurrentRoomFlags(folder *Room)
                FlushStrBuf(Room->XAPass);
                FlushStrBuf(Room->Directory);
                StrBufCutLeft(Buf, 4);
-               AppendImportantMessage (SKEY(Buf));
+               if (CareForStatusMessage)
+                       AppendImportantMessage (SKEY(Buf));
                FreeStrBuf(&Buf);
+               Room->XALoaded = 2;
                return 0;
        } else {
                const char *Pos;
@@ -560,10 +562,10 @@ void LoadRoomXA (void)
 {
        wcsession *WCC = WC;
                
-       if (WCC->CurRoom.XALoaded)
+       if (WCC->CurRoom.XALoaded > 0)
                return;
 
-       GetCurrentRoomFlags(&WCC->CurRoom);
+       GetCurrentRoomFlags(&WCC->CurRoom, 0);
 }
 
 
@@ -658,7 +660,7 @@ void LoadXRoomXCountFiles(void)
 void toggle_self_service(void) {
        wcsession *WCC = WC;
 
-       if (GetCurrentRoomFlags (&WCC->CurRoom) == 0)
+       if (GetCurrentRoomFlags (&WCC->CurRoom, 1) == 0)
                return;
 
        if (yesbstr("QR2_SelfList")) 
@@ -707,8 +709,10 @@ void editroom(void)
                http_transmit_thing(ChrPtr(do_template("room_edit")), 0);
                return;
        }
-       if (GetCurrentRoomFlags (&WCC->CurRoom) == 0)
+       if (GetCurrentRoomFlags (&WCC->CurRoom, 1) == 0) {
+               http_transmit_thing(ChrPtr(do_template("room_edit")), 0);
                return;
+       }
 
        LoadRoomAide();
 
@@ -849,7 +853,7 @@ void do_invt_kick(void)
        wcsession *WCC = WC;
 
 
-       if (GetCurrentRoomFlags(&WCC->CurRoom) == 1)
+       if (GetCurrentRoomFlags(&WCC->CurRoom, 1) == 1)
        {
                const char *Pos;
                UserNames = sbstr("username");
@@ -1023,7 +1027,6 @@ void set_room_policy(void) {
  * Perform changes to a room's network configuration
  */
 void netedit(void) {
-       FILE *fp;
        char buf[SIZ];
        char line[SIZ];
        char cmpa0[SIZ];
@@ -1032,6 +1035,7 @@ void netedit(void) {
        char cmpb1[SIZ];
        int i, num_addrs;
        StrBuf *Line;
+       StrBuf *TmpBuf;
        int Done;
 
        /*/ TODO: do line dynamic! */
@@ -1058,18 +1062,11 @@ void netedit(void) {
                return;
        }
 
-
-       fp = tmpfile();
-       if (fp == NULL) {
-               http_transmit_thing(ChrPtr(do_template("room_edit")), 0);
-               return;
-       }
-
        Line = NewStrBuf();
+       TmpBuf = NewStrBuf();
        serv_puts("GNET");
        StrBuf_ServGetln(Line);
        if  (GetServerStatus(Line, NULL) != 1) {
-               fclose(fp);
                AppendImportantMessage(SRV_STATUS_MSG(Line));   
                FreeStrBuf(&Line);
                http_transmit_thing(ChrPtr(do_template("room_edit")), 0);
@@ -1093,26 +1090,24 @@ void netedit(void) {
                        if ( (strcasecmp(cmpa0, cmpb0)) 
                             || (strcasecmp(cmpa1, cmpb1)) ) {
                                StrBufAppendBufPlain(Line, HKEY("\n"), 0);
-                               fwrite(SKEY(Line), 1, fp);
+                               StrBufAppendBuf(TmpBuf, Line, 0);
                        }
                }
        }
 
-       rewind(fp);
        serv_puts("SNET");
        StrBuf_ServGetln(Line);
        if  (GetServerStatus(Line, NULL) != 4) {
-               fclose(fp);
+
                AppendImportantMessage(SRV_STATUS_MSG(Line));   
                http_transmit_thing(ChrPtr(do_template("room_edit")), 0);
                FreeStrBuf(&Line);
+               FreeStrBuf(&TmpBuf);
                return;
        }
 
-       while (fgets(buf, sizeof buf, fp) != NULL) {
-               buf[strlen(buf)-1] = 0;
-               serv_puts(buf);
-       }
+       serv_putbuf(TmpBuf);
+       FreeStrBuf(&TmpBuf);
 
        if (havebstr("add_button")) {
                num_addrs = num_tokens(bstr("line"), ',');
@@ -1134,7 +1129,6 @@ void netedit(void) {
        }
 
        serv_puts("000");
-       fclose(fp);
        FlushIgnetCfgs(&WC->CurRoom);
        FreeStrBuf(&Line);