4 * Handles editing of vCard objects.
15 #include <sys/types.h>
17 #include <sys/socket.h>
20 #include <netinet/in.h>
33 void do_edit_vcard(long msgnum, char *partnum, char *return_to) {
35 char *serialized_vcard = NULL;
59 char extrafields[SIZ];
81 sprintf(buf, "MSG0 %ld|1", msgnum);
88 while (serv_gets(buf), strcmp(buf, "000")) {
89 if (!strncasecmp(buf, "from=", 5)) {
90 strcpy(whatuser, &buf[5]);
92 else if (!strncasecmp(buf, "node=", 5)) {
93 strcat(whatuser, " @ ");
94 strcat(whatuser, &buf[5]);
98 total_len = atoi(&buf[4]);
101 sprintf(buf, "OPNA %ld|%s", msgnum, partnum);
109 total_len = atoi(&buf[4]);
110 serialized_vcard = malloc(total_len + 1);
111 while (bytes < total_len) {
113 if ((total_len - bytes) < thisblock) thisblock = total_len - bytes;
114 sprintf(buf, "READ %d|%d", bytes, thisblock);
118 thisblock = atoi(&buf[4]);
119 serv_read(&serialized_vcard[bytes], thisblock);
123 wprintf("Error: %s<BR>\n", &buf[4]);
129 serialized_vcard[total_len + 1] = 0;
131 v = vcard_load(serialized_vcard);
132 free(serialized_vcard);
134 /* Populate the variables for our form */
136 while (key = vcard_get_prop(v, "", 0, i, 1), key != NULL) {
137 value = vcard_get_prop(v, "", 0, i++, 0);
139 if (!strcasecmp(key, "n")) {
140 extract_token(lastname, value, 0, ';');
141 extract_token(firstname, value, 1, ';');
142 extract_token(middlename, value, 2, ';');
143 extract_token(prefix, value, 3, ';');
144 extract_token(suffix, value, 4, ';');
147 else if (!strcasecmp(key, "adr")) {
148 extract_token(pobox, value, 0, ';');
149 extract_token(extadr, value, 1, ';');
150 extract_token(street, value, 2, ';');
151 extract_token(city, value, 3, ';');
152 extract_token(state, value, 4, ';');
153 extract_token(zipcode, value, 5, ';');
154 extract_token(country, value, 6, ';');
157 else if (!strcasecmp(key, "tel;home")) {
158 extract_token(hometel, value, 0, ';');
161 else if (!strcasecmp(key, "tel;work")) {
162 extract_token(worktel, value, 0, ';');
165 else if (!strcasecmp(key, "email;internet")) {
166 if (inetemail[0] != 0) {
167 strcat(inetemail, "\n");
169 strcat(inetemail, value);
173 strcat(extrafields, key);
174 strcat(extrafields, ":");
175 strcat(extrafields, value);
176 strcat(extrafields, "\n");
183 /* Display the form */
184 wprintf("<FORM METHOD=\"POST\" ACTION=\"/submit_vcard\">\n");
185 wprintf("<H2><IMG ALIGN=CENTER SRC=\"/static/vcard.gif\">"
186 "Contact information for ");
190 wprintf("<TABLE border=0><TR>"
195 "<TD>Suffix</TD></TR>\n");
196 wprintf("<TR><TD><INPUT TYPE=\"text\" NAME=\"prefix\" "
197 "VALUE=\"%s\" MAXLENGTH=\"5\"></TD>",
199 wprintf("<TD><INPUT TYPE=\"text\" NAME=\"firstname\" "
200 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD>",
202 wprintf("<TD><INPUT TYPE=\"text\" NAME=\"middlename\" "
203 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD>",
205 wprintf("<TD><INPUT TYPE=\"text\" NAME=\"lastname\" "
206 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD>",
208 wprintf("<TD><INPUT TYPE=\"text\" NAME=\"suffix\" "
209 "VALUE=\"%s\" MAXLENGTH=\"10\"></TD></TR></TABLE>\n",
212 wprintf("<TABLE border=0><TR><TD>PO box (optional):</TD>"
213 "<TD><INPUT TYPE=\"text\" NAME=\"pobox\" "
214 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR>\n",
216 wprintf("<TR><TD>Address line 1:</TD>"
217 "<TD><INPUT TYPE=\"text\" NAME=\"extadr\" "
218 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR>\n",
220 wprintf("<TR><TD>Address line 2:</TD>"
221 "<TD><INPUT TYPE=\"text\" NAME=\"street\" "
222 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR>\n",
224 wprintf("<TR><TD>City:</TD>"
225 "<TD><INPUT TYPE=\"text\" NAME=\"city\" "
226 "VALUE=\"%s\" MAXLENGTH=\"29\">\n",
229 "<INPUT TYPE=\"text\" NAME=\"state\" "
230 "VALUE=\"%s\" MAXLENGTH=\"2\">\n",
232 wprintf(" ZIP code: "
233 "<INPUT TYPE=\"text\" NAME=\"zipcode\" "
234 "VALUE=\"%s\" MAXLENGTH=\"10\"></TD></TR>\n",
236 wprintf("<TR><TD>Country:</TD>"
237 "<TD><INPUT TYPE=\"text\" NAME=\"country\" "
238 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR></TABLE>\n",
241 wprintf("<TABLE BORDER=0><TR><TD>Home telephone:</TD>"
242 "<TD><INPUT TYPE=\"text\" NAME=\"hometel\" "
243 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR>\n",
245 wprintf("<TR><TD>Work telephone:</TD>"
246 "<TD><INPUT TYPE=\"text\" NAME=\"worktel\" "
247 "VALUE=\"%s\" MAXLENGTH=\"29\"></TD></TR></TABLE>\n",
250 wprintf("<TABLE border=0><TR><TD>Internet e-mail addresses:<BR>"
251 "<FONT size=-2>For addresses in the Citadel directory, "
252 "the topmost address will be used in outgoing mail."
254 "<TEXTAREA NAME=\"inetemail\" ROWS=5 COLS=40 WIDTH=40>");
256 wprintf("</TEXTAREA></TD></TR></TABLE><BR>\n");
258 wprintf("<INPUT TYPE=\"hidden\" NAME=\"extrafields\" VALUE=\"");
259 escputs(extrafields);
262 wprintf("<INPUT TYPE=\"hidden\" NAME=\"return_to\" VALUE=\"");
263 urlescputs(return_to);
266 wprintf("<CENTER>\n");
267 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"OK\">");
268 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">");
269 wprintf("</CENTER></FORM>\n");
277 void edit_vcard(void) {
281 msgnum = atol(bstr("msgnum"));
282 partnum = bstr("partnum");
283 do_edit_vcard(msgnum, partnum, "");
289 void submit_vcard(void) {
293 if (strcmp(bstr("sc"), "OK")) {
298 sprintf(buf, "ENT0 1|||4||");
306 serv_puts("Content-type: text/x-vcard");
308 serv_puts("begin:vcard");
309 serv_printf("n:%s;%s;%s;%s;%s",
315 serv_printf("adr:%s;%s;%s;%s;%s;%s;%s",
323 serv_printf("tel;home:%s", bstr("hometel") );
324 serv_printf("tel;work:%s", bstr("worktel") );
326 for (i=0; i<num_tokens(bstr("inetemail"), '\n'); ++i) {
327 extract_token(buf, bstr("inetemail"), i, '\n');
328 if (strlen(buf) > 0) {
329 serv_printf("email;internet:%s", buf);
333 serv_printf("%s", bstr("extrafields") );
334 serv_puts("end:vcard");
337 if (!strcmp(bstr("return_to"), "/select_user_to_edit")) {
338 select_user_to_edit(NULL, NULL);