*/
void readinfo(void)
{
- char buf[SIZ];
+ char buf[256];
+ char briefinfo[128];
+ char fullinfo[8192];
+ int fullinfo_len = 0;
serv_puts("RINF");
serv_getln(buf, sizeof buf);
if (buf[0] == '1') {
+
+ while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
+ if (fullinfo_len < (sizeof fullinfo - sizeof buf)) {
+ strcpy(&fullinfo[fullinfo_len], buf);
+ fullinfo_len += strlen(buf);
+ }
+ }
+
+ safestrncpy(briefinfo, fullinfo, sizeof briefinfo);
+ strcpy(&briefinfo[50], "...");
+
wprintf("<div class=\"infos\" "
"onclick=\"javascript:Effect.Appear('room_infos', { duration: 0.5 });\" "
">");
- wprintf(_("Room info"));
- wprintf("</div><div id=\"room_infos\" style=\"display:none;\">"
- "<p class=\"close_infos\" "
- "onclick=\"javascript:Effect.Fade('room_infos', { duration: 0.5 });\" "
- ">");
- wprintf(_("Close window"));
- wprintf("</p>");
- fmout("CENTER");
+ escputs(briefinfo);
+ wprintf("</div><div id=\"room_infos\" style=\"display:none;\">");
+ wprintf("<img class=\"close_infos\" "
+ "onclick=\"javascript:Effect.Fade('room_infos', { duration: 0.5 });\" "
+ "src=\"static/closewindow.gif\" alt=\"%s\">",
+ _("Close window")
+ );
+ escputs(fullinfo);
wprintf("</div>");
}
else {
void embed_view_o_matic(void) {
int i;
- wprintf("<form name=\"viewomatic\" action=\"changeview\">\n"
- "<label for=\"view_name\">");
+ wprintf("<form name=\"viewomatic\" action=\"changeview\">\n");
+ wprintf("<input type=\"hidden\" name=\"nonce\" value=\"%ld\">\n", WC->nonce);
+ wprintf("<label for=\"view_name\">");
wprintf(_("View as:"));
wprintf("</label> "
"<select name=\"newview\" size=\"1\" "
* \brief Display a search box
*/
void embed_search_o_matic(void) {
- wprintf("<form name=\"searchomatic\" action=\"do_search\">\n"
- "<label for=\"search_name\">");
+ wprintf("<form name=\"searchomatic\" action=\"do_search\">\n");
+ wprintf("<input type=\"hidden\" name=\"nonce\" value=\"%ld\">\n", WC->nonce);
+ wprintf("<label for=\"search_name\">");
wprintf(_("Search: "));
wprintf("</label> <input "
"type=\"text\" name=\"query\" size=\"15\" maxlength=\"128\" "
WC->new_mail = extract_int(&got[4], 9);
WC->wc_view = extract_int(&got[4], 11);
- svprintf("ROOMNAME", WCS_STRING, "%s", WC->wc_roomname);
+ stresc(buf, WC->wc_roomname, 1, 1);
+ svprintf("ROOMNAME", WCS_STRING, "%s", buf);
svprintf("NUMMSGS", WCS_STRING,
_("%d new of %d messages"),
extract_int(&got[4], 1),
do_template("roombanner");
if (navbar_style != navbar_none) {
- wprintf("<div id=\"navbar\">\n"
- "<ul>");
-
-
+ wprintf("<div id=\"navbar\"><ul>");
if (navbar_style == navbar_default) wprintf(
"<li class=\"ungoto\">"
if (!strcmp(tab, "config")) {
wprintf("<FORM METHOD=\"POST\" action=\"editroom\">\n");
+ wprintf("<input type=\"hidden\" name=\"nonce\" value=\"%ld\">\n", WC->nonce);
wprintf("<UL><LI>");
wprintf(_("Name of room: "));
if ((er_flags & QR_PRIVATE) == 0)
wprintf("CHECKED ");
wprintf("> ");
- wprintf(_("Public room"));
+ wprintf(_("Public (automatically appears to everyone)"));
wprintf("\n");
wprintf("<LI><INPUT TYPE=\"radio\" NAME=\"type\" VALUE=\"hidden\" ");
(er_flags & QR_GUESSNAME))
wprintf("CHECKED ");
wprintf("> ");
- wprintf(_("Private - guess name"));
+ wprintf(_("Private - hidden (accessible to anyone who knows its name)"));
wprintf("\n<LI><INPUT TYPE=\"radio\" NAME=\"type\" VALUE=\"passworded\" ");
if ((er_flags & QR_PRIVATE) &&
(er_flags & QR_PASSWORDED))
wprintf("CHECKED ");
wprintf("> ");
- wprintf(_("Private - require password:"));
+ wprintf(_("Private - require password: "));
wprintf("\n<INPUT TYPE=\"text\" NAME=\"er_password\" VALUE=\"%s\" MAXLENGTH=\"9\">\n",
er_password);
wprintf("> ");
wprintf(_("Permanent (does not auto-purge)"));
+ wprintf("\n<LI><INPUT TYPE=\"checkbox\" NAME=\"subjectreq\" VALUE=\"yes\" ");
+ if (er_flags2 & QR2_SUBJECTREQ)
+ wprintf("CHECKED ");
+ wprintf("> ");
+ wprintf(_("Subject Required (Force users to specify a message subject)"));
+
/** start of anon options */
wprintf("\n<LI>");
extract_token(node, buf, 0, '|', sizeof node);
extract_token(remote_room, buf, 1, '|', sizeof remote_room);
if (strlen(node) > 0) {
- wprintf("<FORM METHOD=\"POST\" "
- "action=\"netedit\">"
- "<TR><TD>%s</TD>\n", node);
+ wprintf("<FORM METHOD=\"POST\" action=\"netedit\">");
+ wprintf("<input type=\"hidden\" name=\"nonce\" value=\"%ld\">\n", WC->nonce);
+ wprintf("<TR><TD>%s</TD>\n", node);
wprintf("<TD>");
if (strlen(remote_room) > 0) {
for (i=0; i<num_tokens(not_shared_with, '\n'); ++i) {
extract_token(node, not_shared_with, i, '\n', sizeof node);
if (strlen(node) > 0) {
- wprintf("<FORM METHOD=\"POST\" "
- "action=\"netedit\">"
- "<TR><TD>");
+ wprintf("<FORM METHOD=\"POST\" action=\"netedit\">");
+ wprintf("<input type=\"hidden\" name=\"nonce\" value=\"%ld\">\n", WC->nonce);
+ wprintf("<TR><TD>");
escputs(node);
wprintf("</TD><TD>"
"<INPUT TYPE=\"INPUT\" "
extract_token(recp, buf, 1, '|', sizeof recp);
escputs(recp);
- wprintf(" <a href=\"netedit&cmd=remove&line="
- "listrecp|");
+ wprintf(" <a href=\"netedit&cmd=remove&tab=listserv&line=listrecp|");
urlescputs(recp);
- wprintf("&tab=listserv\">");
+ wprintf("\">");
wprintf(_("(remove)"));
wprintf("</A><br />");
}
wprintf("<br /><FORM METHOD=\"POST\" action=\"netedit\">\n"
"<INPUT TYPE=\"hidden\" NAME=\"tab\" VALUE=\"listserv\">\n"
"<INPUT TYPE=\"hidden\" NAME=\"prefix\" VALUE=\"listrecp|\">\n");
- wprintf("<INPUT TYPE=\"text\" NAME=\"line\">\n");
+ wprintf("<input type=\"hidden\" name=\"nonce\" value=\"%ld\">\n", WC->nonce);
+ wprintf("<INPUT TYPE=\"text\" id=\"add_as_listrecp\" NAME=\"line\">\n");
wprintf("<INPUT TYPE=\"submit\" NAME=\"add_button\" VALUE=\"%s\">", _("Add"));
wprintf("</FORM>\n");
extract_token(recp, buf, 1, '|', sizeof recp);
escputs(recp);
- wprintf(" <a href=\"netedit&cmd=remove&line="
+ wprintf(" <a href=\"netedit&cmd=remove&tab=listserv&line="
"digestrecp|");
urlescputs(recp);
- wprintf("&tab=listserv\">");
+ wprintf("\">");
wprintf(_("(remove)"));
wprintf("</A><br />");
}
wprintf("<br /><FORM METHOD=\"POST\" action=\"netedit\">\n"
"<INPUT TYPE=\"hidden\" NAME=\"tab\" VALUE=\"listserv\">\n"
"<INPUT TYPE=\"hidden\" NAME=\"prefix\" VALUE=\"digestrecp|\">\n");
- wprintf("<INPUT TYPE=\"text\" NAME=\"line\">\n");
+ wprintf("<input type=\"hidden\" name=\"nonce\" value=\"%ld\">\n", WC->nonce);
+ wprintf("<INPUT TYPE=\"text\" id=\"add_as_digestrecp\" NAME=\"line\">\n");
wprintf("<INPUT TYPE=\"submit\" NAME=\"add_button\" VALUE=\"%s\">", _("Add"));
wprintf("</FORM>\n");
- wprintf("</TD></TR></TABLE><hr />\n");
+ wprintf("</TD></TR></TABLE>\n");
+ /** Pop open an address book -- begin **/
+ wprintf("<div align=right>"
+ "<a href=\"javascript:PopOpenAddressBook('add_as_listrecp|%s|add_as_digestrecp|%s');\" "
+ "title=\"%s\">"
+ "<img align=middle border=0 width=24 height=24 src=\"static/viewcontacts_24x.gif\">"
+ " %s</a>"
+ "</div>",
+ _("List"),
+ _("Digest"),
+ _("Add recipients from Contacts or other address books"),
+ _("Add recipients from Contacts or other address books")
+ );
+ /** Pop open an address book -- end **/
+
+ wprintf("<hr />");
if (self_service(999) == 1) {
wprintf(_("This room is configured to allow "
"self-service subscribe/unsubscribe requests."));
}
wprintf("<br /><FORM METHOD=\"POST\" action=\"set_room_policy\">\n");
+ wprintf("<input type=\"hidden\" name=\"nonce\" value=\"%ld\">\n", WC->nonce);
wprintf("<TABLE border=0 cellspacing=5>\n");
wprintf("<TR><TD>");
wprintf(_("Message expire policy for this room"));
/** end content of whatever tab is open now */
wprintf("</TD></TR></TABLE></div>\n");
+ address_book_popup();
wDumpContent(1);
}
er_flags &= ~QR_PERMANENT;
}
+ if (!strcmp(bstr("subjectreq"), "yes")) {
+ er_flags2 |= QR2_SUBJECTREQ;
+ } else {
+ er_flags2 &= ~QR2_SUBJECTREQ;
+ }
+
if (!strcmp(bstr("network"), "yes")) {
er_flags |= QR_NETWORK;
} else {
wprintf("<br /><br />");
wprintf("<CENTER><FORM METHOD=\"POST\" action=\"do_invt_kick\">\n");
+ wprintf("<input type=\"hidden\" name=\"nonce\" value=\"%ld\">\n", WC->nonce);
wprintf("<INPUT TYPE=\"hidden\" NAME=\"tab\" VALUE=\"access\">\n");
wprintf("<SELECT NAME=\"username\" SIZE=\"10\" style=\"width:100%%\">\n");
serv_puts("WHOK");
wprintf("<CENTER><FORM METHOD=\"POST\" action=\"do_invt_kick\">\n");
wprintf("<INPUT TYPE=\"hidden\" NAME=\"tab\" VALUE=\"access\">\n");
+ wprintf("<input type=\"hidden\" name=\"nonce\" value=\"%ld\">\n", WC->nonce);
wprintf(_("Invite:"));
wprintf(" ");
wprintf("<input type=\"text\" name=\"username\" style=\"width:100%%\"><br />\n"
"<table class=\"roomops_background\"><tr><td>\n");
wprintf("<form name=\"create_room_form\" method=\"POST\" action=\"entroom\">\n");
+ wprintf("<input type=\"hidden\" name=\"nonce\" value=\"%ld\">\n", WC->nonce);
wprintf("<UL><LI>");
wprintf(_("Name of room: "));
wprintf("\n<br /><br />");
wprintf("<FORM METHOD=\"POST\" action=\"goto_private\">\n");
+ wprintf("<input type=\"hidden\" name=\"nonce\" value=\"%ld\">\n", WC->nonce);
wprintf("<table border=\"0\" cellspacing=\"5\" "
"cellpadding=\"5\" class=\"roomops_background_alt\">\n"
"to do?<br />\n"), WC->wc_roomname);
wprintf("<FORM METHOD=\"POST\" action=\"zap\">\n");
+ wprintf("<input type=\"hidden\" name=\"nonce\" value=\"%ld\">\n", WC->nonce);
wprintf("<INPUT TYPE=\"submit\" NAME=\"ok_button\" VALUE=\"%s\">", _("Zap this room"));
wprintf(" ");
wprintf("<INPUT TYPE=\"submit\" NAME=\"cancel_button\" VALUE=\"%s\">", _("Cancel"));
char cmpa1[SIZ];
char cmpb0[SIZ];
char cmpb1[SIZ];
+ int i, num_addrs;
if (strlen(bstr("line"))==0) {
display_editroom();
}
if (strlen(bstr("add_button")) > 0) {
- serv_puts(line);
+ num_addrs = num_tokens(bstr("line"), ',');
+ if (num_addrs < 2) {
+ /* just adding one node or address */
+ serv_puts(line);
+ }
+ else {
+ /* adding multiple addresses separated by commas */
+ for (i=0; i<num_addrs; ++i) {
+ strcpy(line, bstr("prefix"));
+ extract_token(buf, bstr("line"), i, ',', sizeof buf);
+ striplt(buf);
+ strcat(line, buf);
+ strcat(line, bstr("suffix"));
+ serv_puts(line);
+ }
+ }
}
serv_puts("000");
display_editroom();
}
-
/*@}*/