X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Froomlist.c;h=24017f291a1bccad8e087eba374b5360660dd551;hb=11c4dd578da08ca9cd293d6cb4651bf73272b81c;hp=9b00be970c27c1b4258bd4c20a58b96a307005b6;hpb=05845d07a1b727e86dd4dda2bbd9fbb74fad63ae;p=citadel.git diff --git a/webcit/roomlist.c b/webcit/roomlist.c index 9b00be970..24017f291 100644 --- a/webcit/roomlist.c +++ b/webcit/roomlist.c @@ -125,16 +125,33 @@ 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; + FreeStrBuf(&room->XAPass); + FreeStrBuf(&room->Directory); + FreeStrBuf(&room->RoomAide); + FreeStrBuf(&room->XInfoText); + FreeStrBuf(&room->name); if (room->IgnetCfgs[0] == (HashList*) StrBufNOTNULL) { @@ -148,6 +165,7 @@ void FlushFolder(folder *room) FreeStrBuf(&room->RoomNameParts[i]); free(room->RoomNameParts); } + memset(room, 0, sizeof(folder)); } void vDeleteFolder(void *vFolder) @@ -271,6 +289,7 @@ HashList *GetNetConfigHash(StrBuf *Target, WCTemplputParams *TP) StrBuf *Content; long WantThisOne; long PutTo; + long State; WantThisOne = GetTemplateTokenNumber(Target, TP, 5, 0); if (WantThisOne == 0) @@ -283,27 +302,42 @@ HashList *GetNetConfigHash(StrBuf *Target, WCTemplputParams *TP) Line = NewStrBuf(); Token = NewStrBuf(); StrBuf_ServGetln(Line); - if (GetServerStatus(Line, NULL) == 1) + 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)) + if ((PutTo > 0) && + (PutTo < maxRoomNetCfg) && + (Pos != StrBufNOTNULL)) { int n; + HashList *SubH; if (WCC->CurRoom.IgnetCfgs[PutTo] == NULL) WCC->CurRoom.IgnetCfgs[PutTo] = NewHash(1, NULL); - Content = NewStrBuf(); - StrBufExtract_NextToken(Content, Line, &Pos, '|'); + SubH = NewHash(1, NULL); n = GetCount(WCC->CurRoom.IgnetCfgs[PutTo]) + 1; Put(WCC->CurRoom.IgnetCfgs[PutTo], IKEY(n), - Content, - HFreeStrBuf); + SubH, + HDeleteHash); + while (Pos != StrBufNOTNULL) { + Content = NewStrBuf(); + StrBufExtract_NextToken(Content, Line, &Pos, '|'); + Put(SubH, + IKEY(n), + Content, + HFreeStrBuf); + n++; + } } } + else if (State == 550) + StrBufAppendBufPlain(WCC->ImportantMsg, + _("Higher access is required to access this function."), -1, 0); + return WCC->CurRoom.IgnetCfgs[WantThisOne]; } @@ -494,7 +528,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); +} @@ -502,6 +541,14 @@ void tmplput_ROOM_NAME(StrBuf *Target, WCTemplputParams *TP) { folder *Folder = (folder *)CTX; + if (Folder == NULL) + { + wcsession *WCC = WC; + + if (WCC == NULL) + return; + Folder = &WCC->CurRoom; + } StrBufAppendTemplate(Target, TP, Folder->name, 0); } void tmplput_ROOM_BASENAME(StrBuf *Target, WCTemplputParams *TP) @@ -611,48 +658,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) { @@ -715,6 +720,21 @@ 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) +{ + wcsession *WCC = WC; + Floor *MyFloor = (Floor *)CTX; + + return WCC->CurRoom.floorid == MyFloor->ID; +} + int ConditionalRoomIsRESTSubRoom(StrBuf *Target, WCTemplputParams *TP) { @@ -811,37 +831,45 @@ 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: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_STRBUF, CTX_NONE, IT_NOFLAG); + 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); + 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); - RegisterNamespace("ROOM:INFO:PRINT_NAME", 0, 1, tmplput_ROOM_NAME, NULL, CTX_ROOMS);/// TODO! + RegisterNamespace("ROOM:INFO:PRINT_NAME", 0, 1, tmplput_ROOM_NAME, NULL, CTX_NONE); RegisterNamespace("ROOM:INFO:BASENAME", 0, 1, tmplput_ROOM_BASENAME, NULL, CTX_ROOMS); RegisterNamespace("ROOM:INFO:LEVELNTIMES", 1, 2, tmplput_ROOM_LEVEL_N_TIMES, NULL, CTX_ROOMS); @@ -860,13 +888,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);