* add New Tokens & conditionals for extended room attributes:
authorWilfried Göesgens <willi@citadel.org>
Thu, 29 Jul 2010 20:54:56 +0000 (20:54 +0000)
committerWilfried Göesgens <willi@citadel.org>
Thu, 29 Jul 2010 20:54:56 +0000 (20:54 +0000)
THISROOM:AIDE
THISROOM:PASS
THISROOM:DIRECTORY
THISROOM:ORDER
THISROOM:DEFAULT_VIEW
COND:THISROOM:ORDER
COND:THISROOM:DEFAULT_VIEW

webcit/roomops.c
webcit/roomops.h
webcit/static/t/room/edit/tab_config.html

index 1ab8c8efa93c78d806753c139916f500ac048145..4dbab03224fad5fecb02ca67e4858a6fb5b885c1 100644 (file)
@@ -898,6 +898,151 @@ void ParseGoto(folder *room, StrBuf *Line)
        room->Floor = (const Floor*) vFloor;
 }
 
+void LoadRoomAide(void)
+{
+       wcsession *WCC = WC;
+       StrBuf *Buf;
+       
+       if (WCC->CurRoom.RoomAideLoaded)
+               return;
+
+       WCC->CurRoom.RoomAideLoaded = 1;
+       Buf = NewStrBuf();
+       serv_puts("GETA");
+       StrBuf_ServGetln(Buf);
+       if (GetServerStatus(Buf, NULL) != 2) {
+               FlushStrBuf(WCC->CurRoom.RoomAide);
+               AppendImportantMessage (ChrPtr(Buf) + 4, 
+                                       StrLength(Buf) - 4);
+       } else {
+               const char *Pos;
+
+               Pos = ChrPtr(Buf) + 4;
+
+               FreeStrBuf(&WCC->CurRoom.RoomAide);
+               WCC->CurRoom.RoomAide = NewStrBufPlain (NULL, StrLength (Buf));
+
+               StrBufExtract_NextToken(WCC->CurRoom.RoomAide, Buf, &Pos, '|'); 
+       }
+       FreeStrBuf (&Buf);
+}
+
+void tmplput_CurrentRoomAide(StrBuf *Target, WCTemplputParams *TP) 
+{
+       wcsession *WCC = WC;
+
+       LoadRoomAide();
+
+       StrBufAppendTemplate(Target, TP, WCC->CurRoom.RoomAide, 0);
+}
+
+
+void LoadRoomXA (void)
+{
+       wcsession *WCC = WC;
+       StrBuf *Buf;
+       
+       if (WCC->CurRoom.XALoaded)
+               return;
+
+       WCC->CurRoom.XALoaded = 1;
+       Buf = NewStrBuf();
+       serv_puts("GETA");
+       StrBuf_ServGetln(Buf);
+       if (GetServerStatus(Buf, NULL) != 2) {
+               FlushStrBuf(WCC->CurRoom.XAPass);
+               FlushStrBuf(WCC->CurRoom.Directory);
+
+               AppendImportantMessage (ChrPtr(Buf) + 4, 
+                                       StrLength(Buf) - 4);
+       } else {
+               const char *Pos;
+
+               Pos = ChrPtr(Buf) + 4;
+
+               FreeStrBuf(&WCC->CurRoom.XAPass);
+               FreeStrBuf(&WCC->CurRoom.Directory);
+
+               WCC->CurRoom.XAPass = NewStrBufPlain (NULL, StrLength (Buf));
+               WCC->CurRoom.Directory = NewStrBufPlain (NULL, StrLength (Buf));
+
+               StrBufSkip_NTokenS(Buf, &Pos, '|', 1); /* The Name, we already know... */
+               StrBufExtract_NextToken(WCC->CurRoom.XAPass, Buf, &Pos, '|'); 
+               StrBufExtract_NextToken(WCC->CurRoom.Directory, Buf, &Pos, '|'); 
+               StrBufSkip_NTokenS(Buf, &Pos, '|', 2); /* QRFlags, FloorNum we already know... */
+               WCC->CurRoom.Order = StrBufExtractNext_long(Buf, &Pos, '|');
+               WCC->CurRoom.DefView = StrBufExtractNext_long(Buf, &Pos, '|');
+               /* QR2Flags, we already know them... */
+
+       }
+       FreeStrBuf (&Buf);
+}
+
+void tmplput_CurrentRoomPass(StrBuf *Target, WCTemplputParams *TP) 
+{
+       wcsession *WCC = WC;
+
+       LoadRoomXA();
+
+       StrBufAppendTemplate(Target, TP, WCC->CurRoom.XAPass, 0);
+}
+void tmplput_CurrentRoomDirectory(StrBuf *Target, WCTemplputParams *TP) 
+{
+       wcsession *WCC = WC;
+
+       LoadRoomXA();
+
+       StrBufAppendTemplate(Target, TP, WCC->CurRoom.Directory, 0);
+}
+void tmplput_CurrentRoomOrder(StrBuf *Target, WCTemplputParams *TP) 
+{
+       wcsession *WCC = WC;
+
+       LoadRoomXA();
+
+       StrBufAppendPrintf(Target, "%d", WCC->CurRoom.Order);
+}
+void tmplput_CurrentRoomDefView(StrBuf *Target, WCTemplputParams *TP) 
+{
+       wcsession *WCC = WC;
+
+       LoadRoomXA();
+
+       StrBufAppendPrintf(Target, "%d", WCC->CurRoom.DefView);
+}
+
+
+int ConditionalThisRoomOrder(StrBuf *Target, WCTemplputParams *TP)
+{
+       wcsession *WCC = WC;
+       long CheckThis;
+
+       if (WCC == NULL)
+               return 0;
+
+       LoadRoomXA();
+
+       CheckThis = GetTemplateTokenNumber(Target, TP, 2, 0);
+       return CheckThis == WCC->CurRoom.Order;
+}
+
+int ConditionalThisRoomDefView(StrBuf *Target, WCTemplputParams *TP)
+{
+       wcsession *WCC = WC;
+       long CheckThis;
+
+       if (WCC == NULL)
+               return 0;
+
+       LoadRoomXA();
+
+       CheckThis = GetTemplateTokenNumber(Target, TP, 2, 0);
+       return CheckThis == WCC->CurRoom.DefView;
+}
+
+
+
+
 
 /*
  * goto next room
@@ -3258,6 +3403,17 @@ InitModule_ROOMOPS
        RegisterConditional(HKEY("COND:THISROOM:FLAG:QR2"), 0, ConditionalCurrentRoomHas_QRFlag2, CTX_NONE);
        RegisterConditional(HKEY("COND:ROOM:FLAG:QR2"), 0, ConditionalRoomHas_QRFlag2, CTX_ROOMS);
 
+       RegisterNamespace("THISROOM:AIDE", 0, 1, tmplput_CurrentRoomAide, NULL, CTX_NONE);
+
+
+       RegisterNamespace("THISROOM:PASS", 0, 1, tmplput_CurrentRoomPass, NULL, CTX_NONE);
+       RegisterNamespace("THISROOM:DIRECTORY", 0, 1, tmplput_CurrentRoomDirectory, NULL, CTX_NONE);
+       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:ORDER"), 0, ConditionalThisRoomOrder, CTX_NONE);
+       RegisterConditional(HKEY("COND:THISROOM:DEFAULT_VIEW"), 0, ConditionalThisRoomDefView, CTX_NONE);
+
+
        REGISTERTokenParamDefine(QR_PERMANENT);
        REGISTERTokenParamDefine(QR_INUSE);
        REGISTERTokenParamDefine(QR_PRIVATE);
index a416b402ee2b6550df773e2d97d31a6ae46e3e38..d5712ddc9f2b3a8c0edce974f7c58fdc2b9eafa5 100644 (file)
@@ -73,12 +73,19 @@ typedef struct _folder {
        long nRoomNameParts;
        StrBuf **RoomNameParts;
 
-       const Floor *Floor;   /* pint to the floor we're on.. */
+       const Floor *Floor;   /* point to the floor we're on.. */
 
        int hasnewmsgs; /* are there unread messages inside */
        int is_inbox;   /* is it a mailbox?  */
 
+       int RoomAideLoaded;
+       StrBuf *RoomAide;
 
+       int XALoaded;
+       StrBuf *XAPass;
+       StrBuf *Directory;
+       long Order;
+       long DefView;
 
        int selectable; /* can we select it ??? */
        long num_rooms; /* If this is a floor, how many rooms does it have */
index 2b429e3589bca13ca6c0406fee6bc1cf080e7c9f..4a827b26379a73b28b3c3838b27fdd206742f5ed 100644 (file)
@@ -41,7 +41,7 @@
                                                onChange="this.form.er_floor.disabled = false; { (this.form.type[2].checked == true) }"
                                                        />
                                                <?_("Private - require password: ")>
-                                               <input type="text" name="er_password" value="<?PASSWORD("U")>" maxlength="9" />
+                                               <input type="text" name="er_password" value="<?THISROOM:PASS("U")>" maxlength="9" />
                                        </li>
                                        <li>
                                                <input type="radio" name="type" value="invonly" 
@@ -88,7 +88,7 @@
                                <ul>
                                        <li>
                                                <?_("Directory name: ")>
-                                               <input type="text" name="er_dirname" value="<?DIRNAME>" maxlength="14" />
+                                               <input type="text" name="er_dirname" value="<?THISROOM:DIRECTORY("U")>" maxlength="14" />
                                        </li>
                                        <li>
                                                <input type="checkbox" name="ulallowed" value="yes" 
                        </ul>
                        <li>
                                <?_("Room aide: ")>
-                               ////// TODO: ?GETA???
-                                <?%("COND:THISROOM:GETA", 26, ROOMAIDE, "<em><?GETA></em>")>, '<input type="text" name="er_roomaide" value="<?ROOMAIDE>" maxlength="25" /'>
+                               <input type="text" name="er_roomaide" value="<?THISROOM:AIDE("U")>" maxlength="25" /'>
                        </li>
        </ul>