* FlushFolder (): memset (0) the struct, so flags etc. go away too.
[citadel.git] / webcit / roomlist.c
index f4edff91ba0ccc492ed1001fb79c4291d4304e63..24017f291a1bccad8e087eba374b5360660dd551 100644 (file)
@@ -125,12 +125,24 @@ HashList *GetRoomListHashLKRA(StrBuf *Target, WCTemplputParams *TP)
 
        if (WCC->Floors == NULL)
                GetFloorListHash(Target, TP);
-       serv_puts("LKRA");
        if (WCC->Rooms == NULL) 
+       {
+               serv_puts("LKRA");
                WCC->Rooms =  GetRoomListHash(Target, TP);
+       }
        return WCC->Rooms;
 }
 
+HashList *GetZappedRoomListHash(StrBuf *Target, WCTemplputParams *TP) 
+{
+       wcsession *WCC = WC;
+
+       if (WCC->Floors == NULL)
+               GetFloorListHash(Target, TP);
+       serv_puts("LZRM -1");
+       return GetRoomListHash(Target, TP);
+}
+
 void FlushFolder(folder *room)
 {
        int i;
@@ -153,6 +165,7 @@ void FlushFolder(folder *room)
                        FreeStrBuf(&room->RoomNameParts[i]);
                free(room->RoomNameParts);
        }
+       memset(room, 0, sizeof(folder));
 }
 
 void vDeleteFolder(void *vFolder)
@@ -317,6 +330,7 @@ HashList *GetNetConfigHash(StrBuf *Target, WCTemplputParams *TP)
                                    IKEY(n),
                                    Content, 
                                    HFreeStrBuf);
+                               n++;
                        }
                }
        }
@@ -706,6 +720,12 @@ int ConditionalFloorIsRESTSubFloor(StrBuf *Target, WCTemplputParams *TP)
        return WCC->CurrentFloor == MyFloor;
 }
 
+int ConditionalFloorIsVirtual(StrBuf *Target, WCTemplputParams *TP)
+{
+       Floor *MyFloor = (Floor *)CTX;
+
+       return MyFloor->ID == VIRTUAL_MY_FLOOR;
+}
 
 int ConditionalFloorIsSUBROOM(StrBuf *Target, WCTemplputParams *TP)
 {
@@ -836,6 +856,7 @@ InitModule_ROOMLIST
        RegisterNamespace("FLOOR:NAME", 0, 1, tmplput_FLOOR_NAME, NULL, CTX_FLOORS);
        RegisterNamespace("FLOOR:NROOMS", 0, 0, tmplput_FLOOR_NROOMS, NULL, CTX_FLOORS);
        RegisterConditional(HKEY("COND:FLOOR:ISSUBROOM"), 0, ConditionalFloorIsSUBROOM, CTX_FLOORS);
+       RegisterConditional(HKEY("COND:FLOOR:ISVIRTUAL"), 0, ConditionalFloorIsVirtual, CTX_FLOORS);
        RegisterConditional(HKEY("COND:ROOM:REST:ISSUBFLOOR"), 0, ConditionalFloorIsRESTSubFloor, CTX_FLOORS);
 
        RegisterIterator("ITERATE:THISROOM:GNET", 1, NULL, GetNetConfigHash, NULL, NULL, CTX_STRBUFARR, CTX_NONE, IT_NOFLAG);
@@ -843,6 +864,8 @@ InitModule_ROOMLIST
        RegisterIterator("LFLR", 0, NULL, GetFloorListHash, NULL, NULL, CTX_FLOORS, CTX_NONE, IT_FLAG_DETECT_GROUPCHANGE);
 
        RegisterIterator("LKRA", 0, NULL, GetRoomListHashLKRA, NULL, NULL, CTX_ROOMS, CTX_NONE, IT_FLAG_DETECT_GROUPCHANGE);
+       RegisterIterator("LZRM", 0, NULL, GetZappedRoomListHash, NULL, DeleteHash, CTX_ROOMS, CTX_NONE, IT_FLAG_DETECT_GROUPCHANGE);
+
 
        RegisterNamespace("ROOM:INFO:FLOORID", 0, 1, tmplput_ROOM_FLOORID, NULL, CTX_ROOMS);
        RegisterNamespace("ROOM:INFO:NAME", 0, 1, tmplput_ROOM_NAME, NULL, CTX_ROOMS);