* templatize the room creation form
authorWilfried Göesgens <willi@citadel.org>
Thu, 12 Aug 2010 20:43:45 +0000 (20:43 +0000)
committerWilfried Göesgens <willi@citadel.org>
Thu, 12 Aug 2010 20:43:45 +0000 (20:43 +0000)
webcit/auth.c
webcit/roomops.c
webcit/static/t/room/create.html [new file with mode: 0644]
webcit/static/t/room/select_targetfloor.html [new file with mode: 0644]

index 0734e2bf63c65d6bd563dffa62cd8249c71addab..d158492df709ba3ad979d0da372688449528ccf6 100644 (file)
@@ -915,6 +915,24 @@ void changepw(void)
        }
 }
 
+int ConditionalHaveAccessCreateRoom(StrBuf *Target, WCTemplputParams *TP)
+{
+       StrBuf *Buf;    
+
+       Buf = NewStrBuf();
+       serv_puts("CRE8 0");
+       StrBuf_ServGetln(Buf);
+
+       if (GetServerStatus(Buf, NULL) == 2) {
+               StrBufCutLeft(Buf, 4);
+               AppendImportantMessage(SKEY(Buf));
+               FreeStrBuf(&Buf);
+               return 0;
+       }
+       FreeStrBuf(&Buf);
+       return 1;
+}
+
 int ConditionalAide(StrBuf *Target, WCTemplputParams *TP)
 {
        wcsession *WCC = WC;
@@ -1059,7 +1077,7 @@ InitModule_AUTH
 
        RegisterConditional(HKEY("COND:AIDE"), 2, ConditionalAide, CTX_NONE);
        RegisterConditional(HKEY("COND:LOGGEDIN"), 2, ConditionalIsLoggedIn, CTX_NONE);
-
+       RegisterConditional(HKEY("COND:MAY_CREATE_ROOM"), 2,  ConditionalHaveAccessCreateRoom, CTX_NONE);
        return ;
 }
 
index 44956be84d2164d9c5750f4e4038ec78a81ea861..8e05a246888ee36337451054c4e8ae3cdc2a2a37 100644 (file)
@@ -33,6 +33,20 @@ ROOM_VIEWS exchangeable_views[VIEW_MAX][VIEW_MAX] = {        /* the different kinds of
        };
 /* the brief calendar view is disabled: VIEW_CALBRIEF */
 
+allowed_default_views[VIEW_MAX] = {
+       1, /* VIEW_BBS          Bulletin board view */
+       1, /* VIEW_MAILBOX              Mailbox summary */
+       1, /* VIEW_ADDRESSBOOK  Address book view */
+       1, /* VIEW_CALENDAR             Calendar view */
+       1, /* VIEW_TASKS                Tasks view */
+       1, /* VIEW_NOTES                Notes view */
+       1, /* VIEW_WIKI         Wiki view */
+       0, /* VIEW_CALBRIEF             Brief Calendar view */
+       0, /* VIEW_JOURNAL              Journal view */
+       0  /* VIEW_BLOG         Blog view (not yet implemented) */
+};
+
+
 /*
  * Initialize the viewdefs with localized strings
  */
@@ -49,24 +63,6 @@ void initialize_viewdefs(void) {
        viewdefs[VIEW_BLOG] = _("Blog");
 }
 
-/*
- * Determine which views are allowed as the default for creating a new room.
- */
-int is_view_allowed_as_default(int which_view)
-{
-       switch(which_view) {
-               case VIEW_BBS:          return(1);
-               case VIEW_MAILBOX:      return(1);
-               case VIEW_ADDRESSBOOK:  return(1);
-               case VIEW_CALENDAR:     return(1);
-               case VIEW_TASKS:        return(1);
-               case VIEW_NOTES:        return(1);
-               case VIEW_WIKI:         return(1);
-               case VIEW_CALBRIEF:     return(0);
-               case VIEW_JOURNAL:      return(0);
-               default:                return(0);      /* should never get here */
-       }
-}
 
 
 /*
@@ -937,6 +933,26 @@ void tmplput_RoomViewString(StrBuf *Target, WCTemplputParams *TP)
 }
 
 
+int ConditionalIsAllowedDefaultView(StrBuf *Target, WCTemplputParams *TP)
+{
+       wcsession *WCC = WC;
+       long CheckThis;
+       
+       if (WCC == NULL)
+               return 0;
+
+       CheckThis = GetTemplateTokenNumber(Target, TP, 2, 0);
+       if ((CheckThis >= VIEW_MAX) || (CheckThis < VIEW_BBS))
+       {
+               LogTemplateError(Target, "Conditional", ERR_PARM2, TP,
+                                "Roomview [%ld] not valid\n", 
+                                CheckThis);
+               return 0;
+       }
+
+       return allowed_default_views[CheckThis] != 0;
+}
+
 /*
  * goto next room
  */
@@ -2492,12 +2508,14 @@ void display_entroom(void)
                "       }                                               "
                "\">\n");
        for (i=0; i<(sizeof viewdefs / sizeof (char *)); ++i) {
+/*
                if (is_view_allowed_as_default(i)) {
                        wc_printf("<option %s value=\"%d\">",
                                ((i == 0) ? "selected" : ""), i );
                        escputs(viewdefs[i]);
                        wc_printf("</option>\n");
                }
+*/
        }
        wc_printf("</select>\n");
        wc_printf("</td></tr>");
@@ -3300,6 +3318,8 @@ InitModule_ROOMOPS
        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:HAVE_VIEW"), 0, ConditionalThisRoomHaveView, CTX_NONE);
+       RegisterConditional(HKEY("COND:ALLOWED_DEFAULT_VIEW"), 0, ConditionalIsAllowedDefaultView, CTX_NONE);
+
        RegisterNamespace("THISROOM:VIEW_STRING", 0, 1, tmplput_CurrentRoomViewString, NULL, CTX_NONE);
        RegisterNamespace("ROOM:VIEW_STRING", 1, 2, tmplput_RoomViewString, NULL, CTX_NONE);
 
diff --git a/webcit/static/t/room/create.html b/webcit/static/t/room/create.html
new file mode 100644 (file)
index 0000000..f3a8b6e
--- /dev/null
@@ -0,0 +1,111 @@
+<??("COND:MAY_CREATE_ROOM", 10)>
+<?=("display_main_menu")>
+<??("X", 10)>
+<?!("COND:MAY_CREATE_ROOM", 11)>
+<?=("head")><?=("important_msg")><?%("COND:LOGGEDIN", 1, 1, 1, "", ="paging")>
+<div id="banner">
+<?=("roombanner")>
+</div>
+<div id="content" class="service fix_scrollbar_bug">
+
+<?=("beginbox_1")><?_("Create a new room")><?=("beginbox_2")>
+
+
+<form name="create_room_form" method="POST" action="entroom">
+<input type="hidden" name="nonce" value="<?NONCE>">
+
+<table class="altern"> 
+
+<tr class="odd"><td><?_("Name of room: ")></td><td><input type="text" NAME="er_name" MAXLENGTH="127"></td></tr>
+
+<tr class="even"><td><?_("Resides on floor: ")></td><td>
+
+
+<select name="er_floor" size="1"><?ITERATE("LFLR", _"room_select_targetfloor")></select>
+</td></tr>
+
+<!--
+   * Our clever little snippet of JavaScript automatically selects
+   * a public room if the view is set to Bulletin Board or wiki, and
+   * it selects a mailbox room otherwise.  The user can override this,
+   * of course.  We also disable the floor selector for mailboxes.
+-->
+<tr class="odd"><td><?_("Default view for room: ")></td>
+<td>
+<select name="er_view" size="1" OnChange="
+if ( (this.form.er_view.value == 0)
+|| (this.form.er_view.value == 6) ) {
+       this.form.type[0].checked=true;
+       this.form.er_floor.disabled = false;
+}
+else {
+       this.form.type[4].checked=true;
+       this.form.er_floor.disabled = true;
+}">
+
+<?!("COND:ALLOWED_DEFAULT_VIEW", 1, #"VIEW_BBS")><option value="changeview?view=<?DEF:VAL(#"VIEW_BBS")>" <?%("COND:THISROOM:CURR_VIEW", 2, #"VIEW_BBS", 0, "selected", "")>><?ROOM:VIEW_STRING(#"VIEW_BBS", "X")></option><??("X", 1)>
+
+<?!("COND:ALLOWED_DEFAULT_VIEW", 1, #"VIEW_MAILBOX")><option value="changeview?view=<?DEF:VAL(#"VIEW_MAILBOX")>" <?%("COND:THISROOM:CURR_VIEW", 2, #"VIEW_MAILBOX", 0, "selected", "")>><?ROOM:VIEW_STRING(#"VIEW_MAILBOX", "X")></option><??("X", 1)>
+
+<?!("COND:ALLOWED_DEFAULT_VIEW", 1, #"VIEW_ADDRESSBOOK")><option value="changeview?view=<?DEF:VAL(#"VIEW_ADDRESSBOOK")>" <?%("COND:THISROOM:CURR_VIEW", 2, #"VIEW_ADDRESSBOOK", 0, "selected", "")>><?ROOM:VIEW_STRING(#"VIEW_ADDRESSBOOK", "X")></option><??("X", 1)>
+
+<?!("COND:ALLOWED_DEFAULT_VIEW", 1, #"VIEW_CALENDAR")><option value="changeview?view=<?DEF:VAL(#"VIEW_CALENDAR")>" <?%("COND:THISROOM:CURR_VIEW", 2, #"VIEW_CALENDAR", 0, "selected", "")>><?ROOM:VIEW_STRING(#"VIEW_CALENDAR", "X")></option><??("X", 1)>
+
+<?!("COND:ALLOWED_DEFAULT_VIEW", 1, #"VIEW_TASKS")><option value="changeview?view=<?DEF:VAL(#"VIEW_TASKS")>" <?%("COND:THISROOM:CURR_VIEW", 2, #"VIEW_TASKS", 0, "selected", "")>><?ROOM:VIEW_STRING(#"VIEW_TASKS", "X")></option><??("X", 1)>
+
+<?!("COND:ALLOWED_DEFAULT_VIEW", 1, #"VIEW_NOTES")><option value="changeview?view=<?DEF:VAL(#"VIEW_NOTES")>" <?%("COND:THISROOM:CURR_VIEW", 2, #"VIEW_NOTES", 0, "selected", "")>><?ROOM:VIEW_STRING(#"VIEW_NOTES", "X")></option><??("X", 1)>
+
+<?!("COND:ALLOWED_DEFAULT_VIEW", 1, #"VIEW_WIKI")><option value="changeview?view=<?DEF:VAL(#"VIEW_WIKI")>" <?%("COND:THISROOM:CURR_VIEW", 2, #"VIEW_WIKI", 0, "selected", "")>><?ROOM:VIEW_STRING(#"VIEW_WIKI", "X")></option><??("X", 1)>
+
+<!-- <?!("COND:ALLOWED_DEFAULT_VIEW", 1, #"VIEW_CALBRIEF")><option value="changeview?view=<?DEF:VAL(#"VIEW_CALBRIEF")>" <?%("COND:THISROOM:CURR_VIEW", 2, #"VIEW_CALBRIEF", 0, "selected", "")>><?ROOM:VIEW_STRING(#"VIEW_CALBRIEF", "X")></option><??("X", 1)> -->
+
+<?!("COND:ALLOWED_DEFAULT_VIEW", 1, #"VIEW_JOURNAL")><option value="changeview?view=<?DEF:VAL(#"VIEW_JOURNAL")>" <?%("COND:THISROOM:CURR_VIEW", 2, #"VIEW_JOURNAL", 0, "selected", "")>><?ROOM:VIEW_STRING(#"VIEW_JOURNAL", "X")></option><??("X", 1)>
+
+<?!("COND:ALLOWED_DEFAULT_VIEW", 1, #"VIEW_BLOG")><option value="changeview?view=<?DEF:VAL(#"VIEW_BLOG")>" <?%("COND:THISROOM:CURR_VIEW", 2, #"VIEW_BLOG", 0, "selected", "")>><?ROOM:VIEW_STRING(#"VIEW_BLOG", "X")></option><??("X", 1)>
+
+</select>
+</td></tr>
+
+<tr class="even"><td><?_("Type of room:")></td>
+<td>
+<ul class="adminlist">
+
+<li><input type="radio" NAME="type" VALUE="public" CHECKED OnChange="if (this.form.type[0].checked == true) { this.form.er_floor.disabled = false;}"> 
+<?_("Public (automatically appears to everyone)")>
+</li>
+
+<li><input type="radio" NAME="type" VALUE="hidden" OnChange="if (this.form.type[1].checked == true) {this.form.er_floor.disabled = false;}"> 
+<?_("Private - hidden (accessible to anyone who knows its name)")>
+</li>
+
+<li><input type="radio" NAME="type" VALUE="passworded" OnChange="if (this.form.type[2].checked == true) {this.form.er_floor.disabled = false;}"> 
+<?_("Private - require password: ")>
+<input type="text" NAME="er_password" MAXLENGTH="9">
+</li>
+
+<li><input type="radio" NAME="type" VALUE="invonly" OnChange="if (this.form.type[3].checked == true) {this.form.er_floor.disabled = false;}"> 
+<?_("Private - invitation only")>
+</li>
+
+<li><input type="radio" NAME="type" VALUE="personal" OnChange="if (this.form.type[4].checked == true) {this.form.er_floor.disabled = true;}"> 
+<?_("Personal (mailbox for you only)")>
+</li>
+
+</ul>
+</td></tr></table>
+
+<div class="buttons">
+<input type="submit" name="ok_button" value="<?_("Create new room")>">
+&nbsp;
+<input type="submit" name="cancel_button" value="<?_("Cancel")>">
+</div>
+</form><hr />
+<?SERV:MESG("roomaccess")>
+
+<?=("endbox")>
+
+
+
+</div>
+<?=("trailing")>
+<?!("X", 11)>
diff --git a/webcit/static/t/room/select_targetfloor.html b/webcit/static/t/room/select_targetfloor.html
new file mode 100644 (file)
index 0000000..5fa5ba9
--- /dev/null
@@ -0,0 +1 @@
+<option value="<?FLOOR:ID>"><?FLOOR:NAME("X")></option>