*/
/*@{*/
#include "webcit.h"
-#include "vcard.h"
/**
* \brief Edit the vCard component of a MIME message.
* \param partnum what???
* \param return_to where to go back in the browser after edit ????
*/
-void do_edit_vcard(long msgnum, char *partnum, char *return_to) {
+void do_edit_vcard(long msgnum, char *partnum, char *return_to, char *force_room) {
char buf[SIZ];
char *serialized_vcard = NULL;
size_t total_len = 0;
char country[256];
char hometel[256];
char worktel[256];
+ char faxtel[256];
+ char mobiletel[256];
char primary_inetemail[256];
char other_inetemail[SIZ];
char extrafields[SIZ];
country[0] = 0;
hometel[0] = 0;
worktel[0] = 0;
+ faxtel[0] = 0;
+ mobiletel[0] = 0;
primary_inetemail[0] = 0;
other_inetemail[0] = 0;
title[0] = 0;
org[0] = 0;
extrafields[0] = 0;
+ fullname[0] = 0;
safestrncpy(whatuser, "", sizeof whatuser);
}
}
- sprintf(buf, "OPNA %ld|%s", msgnum, partnum);
+ sprintf(buf, "DLAT %ld|%s", msgnum, partnum);
serv_puts(buf);
serv_getln(buf, sizeof buf);
- if (buf[0] != '2') {
+ if (buf[0] != '6') {
convenience_page("770000", "Error", &buf[4]);
return;
}
total_len = atoi(&buf[4]);
serialized_vcard = malloc(total_len + 2);
-
- read_server_binary(serialized_vcard, total_len);
-
- serv_puts("CLOS");
- serv_getln(buf, sizeof buf);
+
+ serv_read(serialized_vcard, total_len);
serialized_vcard[total_len] = 0;
v = vcard_load(serialized_vcard);
extract_token(worktel, value, 0, ';', sizeof worktel);
}
+ else if (!strcasecmp(key, "tel;fax")) {
+ extract_token(faxtel, value, 0, ';', sizeof faxtel);
+ }
+
+ else if (!strcasecmp(key, "tel;cell")) {
+ extract_token(mobiletel, value, 0, ';', sizeof mobiletel);
+ }
+
else if (!strcasecmp(key, "email;internet")) {
if (primary_inetemail[0] == 0) {
safestrncpy(primary_inetemail, value, sizeof primary_inetemail);
}
/** Display the form */
- output_headers(1, 1, 2, 0, 0, 0);
- wprintf("<div id=\"banner\">\n"
- "<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>"
- "<SPAN CLASS=\"titlebar\">"
- "<img src=\"static/savecontact_48x.gif\">");
- wprintf(_("Edit contact information"));
- wprintf("</SPAN>"
- "</TD></TR></TABLE>\n"
- "</div>\n<div id=\"content\">\n"
- );
+ output_headers(1, 1, 1, 0, 0, 0);
+
+ svput("BOXTITLE", WCS_STRING, _("Edit contact information"));
+ do_template("beginbox");
+
+ wprintf("<form method=\"POST\" action=\"submit_vcard\">\n");
+ wprintf("<input type=\"hidden\" name=\"nonce\" value=\"%ld\">\n", WC->nonce);
+
+ if (force_room != NULL) {
+ wprintf("<input type=\"hidden\" name=\"force_room\" value=\"");
+ escputs(force_room);
+ wprintf("\">\n");
+ }
- wprintf("<FORM METHOD=\"POST\" action=\"submit_vcard\">\n");
wprintf("<div class=\"fix_scrollbar_bug\">"
- "<table border=0 width=100%% bgcolor=\"#ffffff\"><tr><td>\n");
-
- wprintf("<TABLE border=0><TR>"
- "<TD>%s</TD>"
- "<TD>%s</TD>"
- "<TD>%s</TD>"
- "<TD>%s</TD>"
- "<TD>%s</TD></TR>\n",
+ "<table class=\"vcard_edit_background\"><tr><td>\n");
+
+ wprintf("<table border=0><tr>"
+ "<td>%s</td>"
+ "<td>%s</td>"
+ "<td>%s</td>"
+ "<td>%s</td>"
+ "<td>%s</td></tr>\n",
_("Prefix"), _("First"), _("Middle"), _("Last"), _("Suffix")
);
- wprintf("<TR><TD><INPUT TYPE=\"text\" NAME=\"prefix\" "
- "VALUE=\"%s\" MAXLENGTH=\"5\" SIZE=\"5\"></TD>",
+ wprintf("<tr><td><input type=\"text\" name=\"prefix\" "
+ "value=\"%s\" maxlength=\"5\" size=\"5\"></td>",
prefix);
- wprintf("<TD><INPUT TYPE=\"text\" NAME=\"firstname\" "
- "VALUE=\"%s\" MAXLENGTH=\"29\"></TD>",
+ wprintf("<td><input type=\"text\" name=\"firstname\" "
+ "value=\"%s\" maxlength=\"29\"></td>",
firstname);
- wprintf("<TD><INPUT TYPE=\"text\" NAME=\"middlename\" "
- "VALUE=\"%s\" MAXLENGTH=\"29\"></TD>",
+ wprintf("<td><input type=\"text\" name=\"middlename\" "
+ "value=\"%s\" maxlength=\"29\"></td>",
middlename);
- wprintf("<TD><INPUT TYPE=\"text\" NAME=\"lastname\" "
- "VALUE=\"%s\" MAXLENGTH=\"29\"></TD>",
+ wprintf("<td><input type=\"text\" name=\"lastname\" "
+ "value=\"%s\" maxlength=\"29\"></td>",
lastname);
- wprintf("<TD><INPUT TYPE=\"text\" NAME=\"suffix\" "
- "VALUE=\"%s\" MAXLENGTH=\"10\" SIZE=\"10\"></TD></TR></TABLE>\n",
+ wprintf("<td><input type=\"text\" name=\"suffix\" "
+ "value=\"%s\" maxlength=\"10\" size=\"10\"></td></tr></table>\n",
suffix);
- wprintf("<table border=0 width=100%% bgcolor=\"#dddddd\">");
+ wprintf("<table class=\"vcard_edit_background_alt\">");
wprintf("<tr><td>");
wprintf(_("Display name:"));
wprintf("<br>"
- "<INPUT TYPE=\"text\" NAME=\"fullname\" "
- "VALUE=\"%s\" MAXLENGTH=\"40\"><br><br>\n",
+ "<input type=\"text\" name=\"fullname\" "
+ "value=\"%s\" maxlength=\"40\"><br><br>\n",
fullname
);
wprintf(_("Title:"));
wprintf("<br>"
- "<INPUT TYPE=\"text\" NAME=\"title\" "
- "VALUE=\"%s\" MAXLENGTH=\"40\"><br><br>\n",
+ "<input type=\"text\" name=\"title\" "
+ "value=\"%s\" maxlength=\"40\"><br><br>\n",
title
);
wprintf(_("Organization:"));
wprintf("<br>"
- "<INPUT TYPE=\"text\" NAME=\"org\" "
- "VALUE=\"%s\" MAXLENGTH=\"40\"><br><br>\n",
+ "<input type=\"text\" name=\"org\" "
+ "value=\"%s\" maxlength=\"40\"><br><br>\n",
org
);
wprintf("<tr><td>");
wprintf(_("PO box:"));
wprintf("</td><td>"
- "<INPUT TYPE=\"text\" NAME=\"pobox\" "
- "VALUE=\"%s\" MAXLENGTH=\"29\"></td></tr>\n",
+ "<input type=\"text\" name=\"pobox\" "
+ "value=\"%s\" maxlength=\"29\"></td></tr>\n",
pobox);
wprintf("<tr><td>");
wprintf(_("Address:"));
wprintf("</td><td>"
- "<INPUT TYPE=\"text\" NAME=\"extadr\" "
- "VALUE=\"%s\" MAXLENGTH=\"29\"></td></tr>\n",
+ "<input type=\"text\" name=\"extadr\" "
+ "value=\"%s\" maxlength=\"29\"></td></tr>\n",
extadr);
wprintf("<tr><td> </td><td>"
- "<INPUT TYPE=\"text\" NAME=\"street\" "
- "VALUE=\"%s\" MAXLENGTH=\"29\"></td></tr>\n",
+ "<input type=\"text\" name=\"street\" "
+ "value=\"%s\" maxlength=\"29\"></td></tr>\n",
street);
wprintf("<tr><td>");
wprintf(_("City:"));
wprintf("</td><td>"
- "<INPUT TYPE=\"text\" NAME=\"city\" "
- "VALUE=\"%s\" MAXLENGTH=\"29\"></td></tr>\n",
+ "<input type=\"text\" name=\"city\" "
+ "value=\"%s\" maxlength=\"29\"></td></tr>\n",
city);
wprintf("<tr><td>");
wprintf(_("State:"));
wprintf("</td><td>"
- "<INPUT TYPE=\"text\" NAME=\"state\" "
- "VALUE=\"%s\" MAXLENGTH=\"2\"></td></tr>\n",
+ "<input type=\"text\" name=\"state\" "
+ "value=\"%s\" maxlength=\"29\"></td></tr>\n",
state);
wprintf("<tr><td>");
wprintf(_("ZIP code:"));
wprintf("</td><td>"
- "<INPUT TYPE=\"text\" NAME=\"zipcode\" "
- "VALUE=\"%s\" MAXLENGTH=\"10\"></td></tr>\n",
+ "<input type=\"text\" name=\"zipcode\" "
+ "value=\"%s\" maxlength=\"10\"></td></tr>\n",
zipcode);
wprintf("<tr><td>");
wprintf(_("Country:"));
wprintf("</td><td>"
- "<INPUT TYPE=\"text\" NAME=\"country\" "
- "VALUE=\"%s\" MAXLENGTH=\"29\" WIDTH=\"5\"></td></tr>\n",
+ "<input type=\"text\" name=\"country\" "
+ "value=\"%s\" maxlength=\"29\" width=\"5\"></td></tr>\n",
country);
wprintf("</table>\n");
wprintf("</table>\n");
- wprintf("<TABLE BORDER=0><TR><TD>");
+ wprintf("<table border=0><tr><td>");
wprintf(_("Home telephone:"));
- wprintf("</TD>"
- "<TD><INPUT TYPE=\"text\" NAME=\"hometel\" "
- "VALUE=\"%s\" MAXLENGTH=\"29\"></TD>\n",
+ wprintf("</td>"
+ "<td><input type=\"text\" name=\"hometel\" "
+ "value=\"%s\" maxlength=\"29\"></td>\n",
hometel);
- wprintf("<TD>");
+ wprintf("<td>");
wprintf(_("Work telephone:"));
- wprintf("</TD>"
- "<TD><INPUT TYPE=\"text\" NAME=\"worktel\" "
- "VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR></TABLE>\n",
+ wprintf("</td>"
+ "<td><input type=\"text\" name=\"worktel\" "
+ "value=\"%s\" maxlength=\"29\"></td></tr>\n",
worktel);
-
- wprintf("<table border=0 width=100%% bgcolor=\"#dddddd\">");
+ wprintf("<tr><td>");
+ wprintf(_("Mobile telephone:"));
+ wprintf("</td>"
+ "<td><input type=\"text\" name=\"mobiletel\" "
+ "value=\"%s\" maxlength=\"29\"></td>\n",
+ mobiletel);
+ wprintf("<td>");
+ wprintf(_("Fax number:"));
+ wprintf("</td>"
+ "<td><input type=\"text\" name=\"faxtel\" "
+ "value=\"%s\" maxlength=\"29\"></td></tr></table>\n",
+ faxtel);
+
+ wprintf("<table class=\"vcard_edit_background_alt\">");
wprintf("<tr><td>");
- wprintf("<TABLE border=0><TR>"
- "<TD VALIGN=TOP>");
+ wprintf("<table border=0><TR>"
+ "<td valign=top>");
wprintf(_("Primary Internet e-mail address"));
wprintf("<br />"
- "<INPUT TYPE=\"text\" NAME=\"primary_inetemail\" "
- "SIZE=40 MAXLENGTH=40 VALUE=\"");
+ "<input type=\"text\" name=\"primary_inetemail\" "
+ "size=40 maxlength=60 value=\"");
escputs(primary_inetemail);
wprintf("\"><br />"
- "</TD><TD VALIGN=TOP>");
+ "</td><td valign=top>");
wprintf(_("Internet e-mail aliases"));
wprintf("<br />"
- "<TEXTAREA NAME=\"other_inetemail\" ROWS=5 COLS=40 WIDTH=40>");
+ "<textarea name=\"other_inetemail\" rows=5 cols=40 width=40>");
escputs(other_inetemail);
- wprintf("</TEXTAREA></TD></TR></TABLE>\n");
+ wprintf("</textarea></td></tr></table>\n");
wprintf("</td></tr></table>\n");
- wprintf("<INPUT TYPE=\"hidden\" NAME=\"extrafields\" VALUE=\"");
+ wprintf("<input type=\"hidden\" name=\"extrafields\" value=\"");
escputs(extrafields);
wprintf("\">\n");
- wprintf("<INPUT TYPE=\"hidden\" NAME=\"return_to\" VALUE=\"");
+ wprintf("<input type=\"hidden\" name=\"return_to\" value=\"");
urlescputs(return_to);
wprintf("\">\n");
- wprintf("<CENTER>\n"
- "<INPUT TYPE=\"submit\" NAME=\"ok_button\" VALUE=\"%s\">"
+ wprintf("<div class=\"buttons\">\n"
+ "<input type=\"submit\" name=\"ok_button\" value=\"%s\">"
" "
- "<INPUT TYPE=\"submit\" NAME=\"cancel_button\" VALUE=\"%s\">"
- "</CENTER></FORM>\n",
+ "<input type=\"submit\" name=\"cancel_button\" value=\"%s\">"
+ "</div></form>\n",
_("Save changes"),
_("Cancel")
);
- wprintf("</td></tr></table></div>\n");
+ wprintf("</td></tr></table>\n");
+ do_template("endbox");
wDumpContent(1);
}
long msgnum;
char *partnum;
- msgnum = atol(bstr("msgnum"));
+ msgnum = lbstr("msgnum");
partnum = bstr("partnum");
- do_edit_vcard(msgnum, partnum, "");
+ do_edit_vcard(msgnum, partnum, "", NULL);
}
* \brief parse edited vcard from the browser
*/
void submit_vcard(void) {
+ struct vCard *v;
+ char *serialized_vcard;
char buf[SIZ];
int i;
- if (strlen(bstr("ok_button")) == 0) {
+ if (!havebstr("ok_button")) {
readloop("readnew");
return;
}
+ if (havebstr("force_room")) {
+ gotoroom(bstr("force_room"));
+ }
+
sprintf(buf, "ENT0 1|||4||");
serv_puts(buf);
serv_getln(buf, sizeof buf);
return;
}
- serv_puts("Content-type: text/x-vcard");
- serv_puts("");
- serv_puts("begin:vcard");
- serv_printf("n:%s;%s;%s;%s;%s",
+ /** Make a vCard structure out of the data supplied in the form */
+
+ snprintf(buf, sizeof buf, "begin:vcard\r\n%s\r\nend:vcard\r\n",
+ bstr("extrafields")
+ );
+ v = vcard_load(buf); /** Start with the extra fields */
+ if (v == NULL) {
+ safestrncpy(WC->ImportantMessage,
+ _("An error has occurred."),
+ sizeof WC->ImportantMessage
+ );
+ edit_vcard();
+ return;
+ }
+
+ snprintf(buf, sizeof buf, "%s;%s;%s;%s;%s",
bstr("lastname"),
bstr("firstname"),
bstr("middlename"),
bstr("prefix"),
bstr("suffix") );
- serv_printf("title:%s", bstr("title") );
- serv_printf("fn:%s", bstr("fullname") );
- serv_printf("org:%s", bstr("org") );
- serv_printf("adr:%s;%s;%s;%s;%s;%s;%s",
+ vcard_add_prop(v, "n", buf);
+
+ vcard_add_prop(v, "title", bstr("title"));
+ vcard_add_prop(v, "fn", bstr("fullname"));
+ vcard_add_prop(v, "org", bstr("org"));
+
+ snprintf(buf, sizeof buf, "%s;%s;%s;%s;%s;%s;%s",
bstr("pobox"),
bstr("extadr"),
bstr("street"),
bstr("state"),
bstr("zipcode"),
bstr("country") );
- serv_printf("tel;home:%s", bstr("hometel") );
- serv_printf("tel;work:%s", bstr("worktel") );
+ vcard_add_prop(v, "adr", buf);
+
+ vcard_add_prop(v, "tel;home", bstr("hometel"));
+ vcard_add_prop(v, "tel;work", bstr("worktel"));
+ vcard_add_prop(v, "tel;fax", bstr("faxtel"));
+ vcard_add_prop(v, "tel;cell", bstr("mobiletel"));
+ vcard_add_prop(v, "email;internet", bstr("primary_inetemail"));
- serv_printf("email;internet:%s\n", bstr("primary_inetemail"));
for (i=0; i<num_tokens(bstr("other_inetemail"), '\n'); ++i) {
extract_token(buf, bstr("other_inetemail"), i, '\n', sizeof buf);
- if (strlen(buf) > 0) {
- serv_printf("email;internet:%s", buf);
+ if (!IsEmptyStr(buf)) {
+ vcard_add_prop(v, "email;internet", buf);
}
}
- serv_printf("%s", bstr("extrafields") );
- serv_puts("end:vcard");
+ serialized_vcard = vcard_serialize(v);
+ vcard_free(v);
+ if (serialized_vcard == NULL) {
+ safestrncpy(WC->ImportantMessage,
+ _("An error has occurred."),
+ sizeof WC->ImportantMessage
+ );
+ edit_vcard();
+ return;
+ }
+
+ serv_puts("Content-type: text/x-vcard; charset=UTF-8");
+ serv_puts("");
+ serv_printf("%s\r\n", serialized_vcard);
serv_puts("000");
+ free(serialized_vcard);
if (!strcmp(bstr("return_to"), "select_user_to_edit")) {
select_user_to_edit(NULL, NULL);