]> code.citadel.org Git - citadel.git/blobdiff - webcit/roomlist.c
* remove the room infomatic, add templates
[citadel.git] / webcit / roomlist.c
index 4405b5c2410c77e156dfa830aa4f8fd80f057b51..c692236f0619e363d06388912ad6e2947dcf0a45 100644 (file)
@@ -135,7 +135,18 @@ void FlushFolder(folder *room)
 {
        int i;
 
+       FreeStrBuf(&room->XAPass);
+       FreeStrBuf(&room->Directory);
+       FreeStrBuf(&room->RoomAide);
+       FreeStrBuf(&room->XInfoText);
+
        FreeStrBuf(&room->name);
+       if (room->IgnetCfgs[0] == (HashList*) StrBufNOTNULL)
+       {
+               room->IgnetCfgs[0] = NULL;
+               for (i = ignet_push_share; i < maxRoomNetCfg; i++)
+                       DeleteHash(&room->IgnetCfgs[i]);
+       }
        if (room->RoomNameParts != NULL)
        {
                for (i=0; i < room->nRoomNameParts; i++)
@@ -162,7 +173,6 @@ HashList *GetRoomListHash(StrBuf *Target, WCTemplputParams *TP)
        folder *room;
        StrBuf *Buf;
        const char *Pos;
-       const char *Err;
        void *vFloor;
        wcsession *WCC = WC;
        CompareFunc SortIt;
@@ -170,7 +180,7 @@ HashList *GetRoomListHash(StrBuf *Target, WCTemplputParams *TP)
 
        Buf = NewStrBuf();
        rooms = NewHash(1, NULL);
-       StrBufTCP_read_line(Buf, &WC->serv_sock, 0, &Err);
+       StrBuf_ServGetln(Buf);
        if (GetServerStatus(Buf, NULL) == 1) 
        {
                while(!Done && StrBuf_ServGetln(Buf))
@@ -258,6 +268,66 @@ HashList *GetRoomListHash(StrBuf *Target, WCTemplputParams *TP)
        return rooms;
 }
 
+HashList *GetNetConfigHash(StrBuf *Target, WCTemplputParams *TP) 
+{
+       wcsession *WCC = WC;
+       StrBuf *Line;
+       StrBuf *Token;
+       StrBuf *Content;
+       long WantThisOne;
+       long PutTo;
+       long State;
+       
+       WantThisOne = GetTemplateTokenNumber(Target, TP, 5, 0);
+       if (WantThisOne == 0)
+               return NULL;
+       if (WCC->CurRoom.IgnetCfgs[0] == (HashList*) StrBufNOTNULL)
+               return WCC->CurRoom.IgnetCfgs[WantThisOne];
+
+       WCC->CurRoom.IgnetCfgs[0] = (HashList*) StrBufNOTNULL;
+       serv_puts("GNET");
+       Line = NewStrBuf();
+       Token = NewStrBuf();
+       StrBuf_ServGetln(Line);
+       if (GetServerStatus(Line, &State) == 1) 
+       {
+               const char *Pos = NULL;
+               StrBuf_ServGetln(Line);
+               StrBufExtract_NextToken(Token, Line, &Pos, '|');
+               PutTo = GetTokenDefine(SKEY(Token), -1);
+               if ((PutTo > 0) && 
+                   (PutTo < maxRoomNetCfg) &&
+                   (Pos != StrBufNOTNULL))
+               {
+                       int n;
+                       HashList *SubH;
+
+                       if (WCC->CurRoom.IgnetCfgs[PutTo] == NULL)
+                               WCC->CurRoom.IgnetCfgs[PutTo] = NewHash(1, NULL);
+                       SubH = NewHash(1, NULL);
+                       n = GetCount(WCC->CurRoom.IgnetCfgs[PutTo]) + 1;
+                       Put(WCC->CurRoom.IgnetCfgs[PutTo], 
+                           IKEY(n),
+                           SubH, 
+                           HDeleteHash);
+                       while (Pos != StrBufNOTNULL) {
+                               Content = NewStrBuf();
+                               StrBufExtract_NextToken(Content, Line, &Pos, '|');
+                               Put(SubH, 
+                                   IKEY(n),
+                                   Content, 
+                                   HFreeStrBuf);
+                       }
+               }
+       }
+       else if (State == 550)
+               StrBufAppendBufPlain(WCC->ImportantMsg,
+                                    _("Higher access is required to access this function."), -1, 0);
+
+
+       return WCC->CurRoom.IgnetCfgs[WantThisOne];
+}
+
 /** Unused function that orders rooms by the listorder flag */
 int SortRoomsByListOrder(const void *room1, const void *room2) 
 {
@@ -444,7 +514,12 @@ int GroupchangeRoomListByFloorRoomPrivFirst(const void *room1, const void *room2
 }
 
 
-
+int CompareRooms(const folder *room1, const folder *room2) 
+{
+       if ((room1 == NULL) || (room2 == NULL))
+               return -1;
+       return CompareRoomListByFloorRoomPrivFirst(room1, room2);
+}
 
 
 
@@ -561,48 +636,6 @@ void tmplput_ROOM_FLOOR_NROOMS(StrBuf *Target, WCTemplputParams *TP)
 
 
 
-int ConditionalRoomHas_UA_KNOWN(StrBuf *Target, WCTemplputParams *TP)
-{
-       folder *Folder = (folder *)CTX;
-       return (Folder->RAFlags & UA_KNOWN) != 0;
-}
-
-int ConditionalRoomHas_UA_GOTOALLOWED(StrBuf *Target, WCTemplputParams *TP)
-{
-       folder *Folder = (folder *)CTX;
-       return (Folder->RAFlags & UA_GOTOALLOWED) != 0;
-}
-
-int ConditionalRoomHas_UA_HASNEWMSGS(StrBuf *Target, WCTemplputParams *TP)
-{
-       folder *Folder = (folder *)CTX;
-       return (Folder->RAFlags & UA_HASNEWMSGS) != 0;
-}
-
-int ConditionalRoomHas_UA_ZAPPED(StrBuf *Target, WCTemplputParams *TP)
-{
-       folder *Folder = (folder *)CTX;
-       return (Folder->RAFlags & UA_ZAPPED) != 0;
-}
-
-int ConditionalRoomHas_UA_POSTALLOWED(StrBuf *Target, WCTemplputParams *TP)
-{
-       folder *Folder = (folder *)CTX;
-       return (Folder->RAFlags & UA_POSTALLOWED) != 0;
-}
-
-int ConditionalRoomHas_UA_ADMINALLOWED(StrBuf *Target, WCTemplputParams *TP)
-{
-       folder *Folder = (folder *)CTX;
-       return (Folder->RAFlags & UA_ADMINALLOWED) != 0;
-}
-
-int ConditionalRoomHas_UA_DELETEALLOWED(StrBuf *Target, WCTemplputParams *TP)
-{
-       folder *Folder = (folder *)CTX;
-       return (Folder->RAFlags & UA_DELETEALLOWED) != 0;
-}
-
 
 int ConditionalRoomIsInbox(StrBuf *Target, WCTemplputParams *TP)
 {
@@ -666,6 +699,15 @@ int ConditionalFloorIsRESTSubFloor(StrBuf *Target, WCTemplputParams *TP)
 }
 
 
+int ConditionalFloorIsSUBROOM(StrBuf *Target, WCTemplputParams *TP)
+{
+       wcsession  *WCC = WC;
+       Floor *MyFloor = (Floor *)CTX;
+
+       return WCC->CurRoom.floorid == MyFloor->ID;
+}
+
+
 int ConditionalRoomIsRESTSubRoom(StrBuf *Target, WCTemplputParams *TP)
 {
        wcsession  *WCC = WC;
@@ -761,28 +803,35 @@ void jsonRoomFlr(void)
        end_burst(); 
 }
 
-
-void 
-SessionDetachModule_ROOMLIST
-(wcsession *sess)
-{
-       DeleteHash(&sess->Floors);
-       DeleteHash(&sess->Rooms);
-       DeleteHash(&sess->FloorsByName);
-}
+#define POP3_HOST 0
+#define POP3_USERNAME 1
+#define POP3_PASSWORD 2
+#define POP3_KEEP 3
+#define POP3_INTERVAL 4
 
 void 
 InitModule_ROOMLIST
 (void)
 {
+
+       REGISTERTokenParamDefine(POP3_HOST);
+       REGISTERTokenParamDefine(POP3_USERNAME);
+       REGISTERTokenParamDefine(POP3_PASSWORD);
+       REGISTERTokenParamDefine(POP3_KEEP);
+       REGISTERTokenParamDefine(POP3_INTERVAL);
+
+
        WebcitAddUrlHandler(HKEY("json_roomflr"), "", 0, jsonRoomFlr, 0);
 
 
        RegisterNamespace("FLOOR:ID", 0, 0, tmplput_FLOOR_ID, NULL, CTX_FLOORS);
        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:ROOM:REST:ISSUBFLOOR"), 0, ConditionalFloorIsRESTSubFloor, CTX_FLOORS);
 
+       RegisterIterator("ITERATE:THISROOM:GNET", 1, NULL, GetNetConfigHash, NULL, NULL, CTX_STRBUFARR, CTX_NONE, IT_NOFLAG);
+
        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);
@@ -808,13 +857,6 @@ InitModule_ROOMLIST
        RegisterConditional(HKEY("COND:ROOM:REST:ISSUBROOM"), 0, ConditionalRoomIsRESTSubRoom, CTX_ROOMS);
 
        RegisterConditional(HKEY("COND:ROOM:INFO:IS_INBOX"), 0, ConditionalRoomIsInbox, CTX_ROOMS);
-       RegisterConditional(HKEY("COND:ROOM:FLAGS:UA_KNOWN"), 0, ConditionalRoomHas_UA_KNOWN, CTX_ROOMS);
-       RegisterConditional(HKEY("COND:ROOM:FLAGS:UA_GOTOALLOWED"), 0, ConditionalRoomHas_UA_GOTOALLOWED, CTX_ROOMS);
-       RegisterConditional(HKEY("COND:ROOM:FLAGS:UA_HASNEWMSGS"), 0, ConditionalRoomHas_UA_HASNEWMSGS, CTX_ROOMS);
-       RegisterConditional(HKEY("COND:ROOM:FLAGS:UA_ZAPPED"), 0, ConditionalRoomHas_UA_ZAPPED, CTX_ROOMS);
-       RegisterConditional(HKEY("COND:ROOM:FLAGS:UA_POSTALLOWED"), 0, ConditionalRoomHas_UA_POSTALLOWED, CTX_ROOMS);
-       RegisterConditional(HKEY("COND:ROOM:FLAGS:UA_ADMINALLOWED"), 0, ConditionalRoomHas_UA_ADMINALLOWED, CTX_ROOMS);
-       RegisterConditional(HKEY("COND:ROOM:FLAGS:UA_DELETEALLOWED"), 0, ConditionalRoomHas_UA_DELETEALLOWED, CTX_ROOMS);
        RegisterConditional(HKEY("COND:ROOM:GROUPDAV_CONTENT"), 0, ConditionalRoomHasGroupdavContent, CTX_ROOMS);