}
+/*
+ * Turn a vCard "n" (name) field into something displayable.
+ */
+void vcard_n_prettyize(char *name)
+{
+ char *original_name;
+ int i;
+
+ original_name = strdup(name);
+ for (i=0; i<5; ++i) {
+ if (strlen(original_name) > 0) {
+ if (original_name[strlen(original_name)-1] == ' ') {
+ original_name[strlen(original_name)-1] = 0;
+ }
+ if (original_name[strlen(original_name)-1] == ';') {
+ original_name[strlen(original_name)-1] = 0;
+ }
+ }
+ }
+ strcpy(name, "");
+ for (i=0; i<strlen(original_name); ++i) {
+ if (original_name[i] == ';') {
+ strcat(name, ", ");
+ }
+ else {
+ name[strlen(name)+1] = 0;
+ name[strlen(name)] = original_name[i];
+ }
+ }
+ free(original_name);
+}
+
+
+
+
/* display_vcard() calls this after parsing the textual vCard into
* our 'struct vCard' data object.
* This gets called instead of display_parsed_vcard() if we are only looking
* to extract the person's name instead of displaying the card.
*/
void fetchname_parsed_vcard(struct vCard *v, char *storename) {
- int i;
+ char *name;
strcpy(storename, "");
- if (v->numprops) for (i=0; i<(v->numprops); ++i) {
- if (!strcasecmp(v->prop[i].name, "n")) {
- strcpy(storename, v->prop[i].value);
- if ((strlen(storename)>0) && (storename[0] != ';')) {
- while(storename[strlen(storename)-1] == ';') {
- storename[strlen(storename)-1] = 0;
- }
- }
- }
+
+ name = vcard_get_prop(v, "n", 1, 0, 0);
+ if (name != NULL) {
+ strcpy(storename, name);
+ /* vcard_n_prettyize(storename); */
}
+
}
int pass;
char displayname[SIZ];
+ char title[SIZ];
+ char org[SIZ];
char phone[SIZ];
char mailto[SIZ];
strcpy(displayname, "");
strcpy(phone, "");
strcpy(mailto, "");
+ strcpy(title, "");
+ strcpy(org, "");
if (!full) {
wprintf("<TD>");
escputs(name);
}
else if (name = vcard_get_prop(v, "n", 1, 0, 0), name != NULL) {
- escputs(name);
+ strcpy(displayname, name);
+ vcard_n_prettyize(displayname);
+ escputs(displayname);
}
else {
wprintf(" ");
return;
}
- wprintf("<TABLE bgcolor=#888888>");
+ wprintf("<div align=center><table bgcolor=#aaaaaa width=50%%>");
for (pass=1; pass<=2; ++pass) {
if (v->numprops) for (i=0; i<(v->numprops); ++i) {
if (!strcasecmp(firsttoken, "n")) {
if (strlen(displayname) == 0) {
strcpy(displayname, thisvalue);
+ vcard_n_prettyize(displayname);
}
}
else if (!strcasecmp(firsttoken, "fn")) {
strcpy(displayname, thisvalue);
}
+
+ /* title */
+ else if (!strcasecmp(firsttoken, "title")) {
+ strcpy(title, thisvalue);
+ }
+
+ /* organization */
+ else if (!strcasecmp(firsttoken, "org")) {
+ strcpy(org, thisvalue);
+ }
else if (!strcasecmp(firsttoken, "email")) {
if (strlen(mailto) > 0) strcat(mailto, "<br />");
extract_token(buf, thisvalue, j, ';');
if (strlen(buf) > 0) {
escputs(buf);
- wprintf("<br />");
+ if (j<3) wprintf("<br />");
+ else wprintf(" ");
}
}
wprintf("</TD></TR>\n");
/* ignore */
}
else {
+
+ /*** Don't show extra fields. They're ugly.
if (pass == 2) {
wprintf("<TR><TD>");
escputs(thisname);
escputs(thisvalue);
wprintf("</TD></TR>\n");
}
+ ***/
}
free(thisname);
"<IMG ALIGN=CENTER SRC=\"/static/vcard.gif\">"
"<FONT SIZE=+1><B>");
escputs(displayname);
- wprintf("</B></FONT></TD></TR>\n");
+ wprintf("</B></FONT>");
+ if (strlen(title) > 0) {
+ wprintf("<div align=right>");
+ escputs(title);
+ wprintf("</div>");
+ }
+ if (strlen(org) > 0) {
+ wprintf("<div align=right>");
+ escputs(org);
+ wprintf("</div>");
+ }
+ wprintf("</TD></TR>\n");
if (strlen(phone) > 0)
wprintf("<TR><TD>Telephone:</TD><TD>%s</TD></TR>\n", phone);
}
- wprintf("</TABLE>\n");
+ wprintf("</table></div>\n");
}
wprintf("&subject=");
if (strncasecmp(m_subject, "Re:", 3)) wprintf("Re:%20");
urlescputs(m_subject);
- wprintf("\">Reply</a> ");
+ wprintf("\">[Reply]</a> ");
if (WC->is_room_aide) {
/* Move */
- wprintf("<a href=\"/confirm_move_msg?msgid=%ld\">Move </a>",
+ wprintf("<a href=\"/confirm_move_msg?msgid=%ld\">[Move]</a> ",
msgnum);
/* Delete */
wprintf("<a href=\"/delete_msg?msgid=%ld\" "
"onClick=\"return confirm('Delete this message?');\">"
- "Delete</a>", msgnum);
+ "[Delete]</a>", msgnum);
}
char primary_inetemail[SIZ];
char other_inetemail[SIZ];
char extrafields[SIZ];
+ char title[SIZ];
+ char org[SIZ];
lastname[0] = 0;
firstname[0] = 0;
worktel[0] = 0;
primary_inetemail[0] = 0;
other_inetemail[0] = 0;
+ title[0] = 0;
+ org[0] = 0;
extrafields[0] = 0;
strcpy(whatuser, "");
extract_token(prefix, value, 3, ';');
extract_token(suffix, value, 4, ';');
}
+
+ else if (!strcasecmp(key, "title")) {
+ strcpy(title, value);
+ }
+
+ else if (!strcasecmp(key, "org")) {
+ strcpy(org, value);
+ }
else if (!strcasecmp(key, "adr")) {
extract_token(pobox, value, 0, ';');
"<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>"
"<SPAN CLASS=\"titlebar\">"
"<img src=\"/static/vcard.gif\">"
- "Contact information for "
- );
- escputs(whatuser);
- wprintf("</SPAN>"
+ "Edit contact information"
+ "</SPAN>"
"</TD></TR></TABLE>\n"
"</div>\n<div id=\"content\">\n"
);
"<TD>Last</TD>"
"<TD>Suffix</TD></TR>\n");
wprintf("<TR><TD><INPUT TYPE=\"text\" NAME=\"prefix\" "
- "VALUE=\"%s\" MAXLENGTH=\"5\"></TD>",
+ "VALUE=\"%s\" MAXLENGTH=\"5\" SIZE=\"5\"></TD>",
prefix);
wprintf("<TD><INPUT TYPE=\"text\" NAME=\"firstname\" "
"VALUE=\"%s\" MAXLENGTH=\"29\"></TD>",
"VALUE=\"%s\" MAXLENGTH=\"29\"></TD>",
lastname);
wprintf("<TD><INPUT TYPE=\"text\" NAME=\"suffix\" "
- "VALUE=\"%s\" MAXLENGTH=\"10\"></TD></TR></TABLE>\n",
+ "VALUE=\"%s\" MAXLENGTH=\"10\" SIZE=\"10\"></TD></TR></TABLE>\n",
suffix);
- wprintf("<TABLE border=0><TR><TD>PO box (optional):</TD>"
- "<TD><INPUT TYPE=\"text\" NAME=\"pobox\" "
- "VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR>\n",
+ wprintf("<table border=0 width=100%% bgcolor=\"#dddddd\">");
+ wprintf("<tr><td>");
+
+ wprintf("Title:<br>"
+ "<INPUT TYPE=\"text\" NAME=\"title\" "
+ "VALUE=\"%s\" MAXLENGTH=\"40\"><br><br>\n",
+ title
+ );
+
+ wprintf("Organization:<br>"
+ "<INPUT TYPE=\"text\" NAME=\"org\" "
+ "VALUE=\"%s\" MAXLENGTH=\"40\"><br><br>\n",
+ org
+ );
+
+ wprintf("</td><td>");
+
+ wprintf("<table border=0>");
+ wprintf("<tr><td>PO box:</td><td>"
+ "<INPUT TYPE=\"text\" NAME=\"pobox\" "
+ "VALUE=\"%s\" MAXLENGTH=\"29\"></td></tr>\n",
pobox);
- wprintf("<TR><TD>Address line 1:</TD>"
- "<TD><INPUT TYPE=\"text\" NAME=\"extadr\" "
- "VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR>\n",
+ wprintf("<tr><td>Address:</td><td>"
+ "<INPUT TYPE=\"text\" NAME=\"extadr\" "
+ "VALUE=\"%s\" MAXLENGTH=\"29\"></td></tr>\n",
extadr);
- wprintf("<TR><TD>Address line 2:</TD>"
- "<TD><INPUT TYPE=\"text\" NAME=\"street\" "
- "VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR>\n",
+ wprintf("<tr><td> </td><td>"
+ "<INPUT TYPE=\"text\" NAME=\"street\" "
+ "VALUE=\"%s\" MAXLENGTH=\"29\"></td></tr>\n",
street);
- wprintf("<TR><TD>City:</TD>"
- "<TD><INPUT TYPE=\"text\" NAME=\"city\" "
- "VALUE=\"%s\" MAXLENGTH=\"29\">\n",
+ wprintf("<tr><td>City:</td><td>"
+ "<INPUT TYPE=\"text\" NAME=\"city\" "
+ "VALUE=\"%s\" MAXLENGTH=\"29\"></td></tr>\n",
city);
- wprintf(" State: "
+ wprintf("<tr><td>State:</td><td>"
"<INPUT TYPE=\"text\" NAME=\"state\" "
- "VALUE=\"%s\" MAXLENGTH=\"2\">\n",
+ "VALUE=\"%s\" MAXLENGTH=\"2\"></td></tr>\n",
state);
- wprintf(" ZIP code: "
+ wprintf("<tr><td>ZIP code:</td><td>"
"<INPUT TYPE=\"text\" NAME=\"zipcode\" "
- "VALUE=\"%s\" MAXLENGTH=\"10\"></TD></TR>\n",
+ "VALUE=\"%s\" MAXLENGTH=\"10\"></td></tr>\n",
zipcode);
- wprintf("<TR><TD>Country:</TD>"
- "<TD><INPUT TYPE=\"text\" NAME=\"country\" "
- "VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR></TABLE>\n",
+ wprintf("<tr><td>Country:</td><td>"
+ "<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>Home telephone:</TD>"
"<TD><INPUT TYPE=\"text\" NAME=\"hometel\" "
- "VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR>\n",
+ "VALUE=\"%s\" MAXLENGTH=\"29\"></TD>\n",
hometel);
- wprintf("<TR><TD>Work telephone:</TD>"
+ wprintf("<TD>Work telephone:</TD>"
"<TD><INPUT TYPE=\"text\" NAME=\"worktel\" "
"VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR></TABLE>\n",
worktel);
- wprintf("<br /><TABLE border=0><TR>"
+ wprintf("<table border=0 width=100%% bgcolor=\"#dddddd\">");
+ wprintf("<tr><td>");
+
+ wprintf("<TABLE border=0><TR>"
"<TD VALIGN=TOP>Primary Internet e-mail address<br />"
"<INPUT TYPE=\"text\" NAME=\"primary_inetemail\" "
"SIZE=40 MAXLENGTH=40 VALUE=\"");
"Internet e-mail aliases<br />"
"<TEXTAREA NAME=\"other_inetemail\" ROWS=5 COLS=40 WIDTH=40>");
escputs(other_inetemail);
- wprintf("</TEXTAREA></TD></TR></TABLE><br />\n");
+ wprintf("</TEXTAREA></TD></TR></TABLE>\n");
+
+ wprintf("</td></tr></table>\n");
wprintf("<INPUT TYPE=\"hidden\" NAME=\"extrafields\" VALUE=\"");
escputs(extrafields);
bstr("middlename"),
bstr("prefix"),
bstr("suffix") );
+ serv_printf("title:%s", bstr("title") );
+ serv_printf("org:%s", bstr("org") );
serv_printf("adr:%s;%s;%s;%s;%s;%s;%s",
bstr("pobox"),
bstr("extadr"),