X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fvcard_edit.c;h=5ec2799afcad92107e48e7f1a57aa93cac4a3470;hb=fb6f6fa4ec4e3277e30d84326d48e6850822d318;hp=31780a6a136a2507be84e71501d558bb38df2482;hpb=1f494963f66495189901c38c84cbc6d6b3e9f952;p=citadel.git diff --git a/webcit/vcard_edit.c b/webcit/vcard_edit.c index 31780a6a1..5ec2799af 100644 --- a/webcit/vcard_edit.c +++ b/webcit/vcard_edit.c @@ -1,14 +1,61 @@ /* - * $Id$ + * Copyright (c) 1996-2012 by the citadel.org team + * + * This program is open source software. You can redistribute it and/or + * modify it under the terms of the GNU General Public License, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. */ #include "webcit.h" +#include "webserver.h" +#include "calendar.h" + + + +ConstStr VCStr [] = { + {HKEY("n")}, /* N is name, but only if there's no FN already there */ + {HKEY("fn")}, /* FN (full name) is a true 'display name' field */ + {HKEY("title")}, /* title */ + {HKEY("org")}, /* organization */ + {HKEY("email")}, + {HKEY("tel")}, + {HKEY("tel_tel")}, + {HKEY("tel_work")}, + {HKEY("tel_home")}, + {HKEY("tel_cell")}, + {HKEY("adr")}, + {HKEY("photo")}, + {HKEY("version")}, + {HKEY("rev")}, + {HKEY("label")} +}; + +typedef enum _eVC{ + VC_n, + VC_fn, + VC_title, + VC_org, + VC_email, + VC_tel, + VC_tel_tel, + VC_tel_work, + VC_tel_home, + VC_tel_cell, + VC_adr, + VC_photo, + VC_version, + VC_rev, + VC_label +} eVC; + +HashList *VCToEnum = NULL; - -/** - * \brief Record compare function for sorting address book indices - * \param ab1 adressbook one - * \param ab2 adressbook two +/* + * Record compare function for sorting address book indices */ int abcmp(const void *ab1, const void *ab2) { return(strcasecmp( @@ -18,11 +65,9 @@ int abcmp(const void *ab1, const void *ab2) { } -/** - * \brief Helper function for do_addrbook_view() +/* + * Helper function for do_addrbook_view() * Converts a name into a three-letter tab label - * \param tabbuf the tabbuffer to add name to - * \param name the name to add to the tabbuffer */ void nametab(char *tabbuf, long len, char *name) { stresc(tabbuf, len, name, 0, 0); @@ -33,55 +78,8 @@ void nametab(char *tabbuf, long len, char *name) { } -/** - * \brief display the adressbook overview - * \param msgnum the citadel message number - * \param alpha what???? - */ -void display_addressbook(long msgnum, char alpha) { - //char buf[SIZ]; - /* char mime_partnum[SIZ]; */ -/* char mime_filename[SIZ]; */ -/* char mime_content_type[SIZ]; */ - ///char mime_disposition[SIZ]; - //int mime_length; - char vcard_partnum[SIZ]; - StrBuf *vcard_source = NULL; - message_summary summ;////TODO: this will leak - - memset(&summ, 0, sizeof(summ)); - ///safestrncpy(summ.subj, _("(no subject)"), sizeof summ.subj); -///Load Message headers -// Msg = - if (!IsEmptyStr(vcard_partnum)) { - vcard_source = load_mimepart(msgnum, vcard_partnum); - if (vcard_source != NULL) { - - /** Display the summary line */ - display_vcard(WC->WBuf, vcard_source, alpha, 0, NULL, msgnum); - - /** If it's my vCard I can edit it */ - if ( (!strcasecmp(ChrPtr(WC->wc_roomname), USERCONFIGROOM)) - || (!strcasecmp(&(ChrPtr(WC->wc_roomname)[11]), USERCONFIGROOM)) - || (WC->wc_view == VIEW_ADDRESSBOOK) - ) { - wprintf("", - msgnum, vcard_partnum); - wprintf("[%s]", _("edit")); - } - - FreeStrBuf(&vcard_source); - } - } - -} - - - -/** - * \brief If it's an old "Firstname Lastname" style record, try to convert it. - * \param namebuf name to analyze, reverse if nescessary +/* + * If it's an old "Firstname Lastname" style record, try to convert it. */ void lastfirst_firstlast(char *namebuf) { char firstname[SIZ]; @@ -119,6 +117,7 @@ wc_mime_attachment *load_vcard(message_summary *Msg) load_message(Msg, FoundCharset, &Error); + FreeStrBuf(&FoundCharset); /* look up the vcard... */ it = GetNewHashPos(Msg->AllAttach, 0); while (GetNextHashPos(Msg->AllAttach, it, &len, &Key, &vMime) && @@ -142,10 +141,8 @@ wc_mime_attachment *load_vcard(message_summary *Msg) return VCMime; } -/** - * \brief fetch what??? name - * \param msgnum the citadel message number - * \param namebuf where to put the name in??? +/* + * fetch the display name off a vCard */ void fetch_ab_name(message_summary *Msg, char **namebuf) { long len; @@ -159,7 +156,7 @@ void fetch_ab_name(message_summary *Msg, char **namebuf) { return; /* Grab the name off the card */ - display_vcard(WC->WBuf, VCMime->Data, 0, 0, namebuf, Msg->msgnum); + display_vcard(WC->WBuf, VCMime, 0, 0, namebuf, Msg->msgnum); if (*namebuf != NULL) { lastfirst_firstlast(*namebuf); @@ -178,9 +175,8 @@ void fetch_ab_name(message_summary *Msg, char **namebuf) { -/** - * \brief Turn a vCard "n" (name) field into something displayable. - * \param name the name field to convert +/* + * Turn a vCard "n" (name) field into something displayable. */ void vcard_n_prettyize(char *name) { @@ -217,14 +213,12 @@ void vcard_n_prettyize(char *name) -/** - * \brief preparse a vcard name +/* + * preparse a vcard 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. - * \param v the vcard to retrieve the name from - * \param storename where to put the name at */ void fetchname_parsed_vcard(struct vCard *v, char **storename) { char *name; @@ -252,7 +246,7 @@ void fetchname_parsed_vcard(struct vCard *v, char **storename) { } } if (is_qp) { - // %ff can become 6 bytes in utf8 + /* %ff can become 6 bytes in utf8 */ *storename = malloc(len * 2 + 3); j = CtdlDecodeQuotedPrintable( *storename, name, @@ -260,14 +254,19 @@ void fetchname_parsed_vcard(struct vCard *v, char **storename) { (*storename)[j] = 0; } else if (is_b64) { - // ff will become one byte.. + /* ff will become one byte.. */ *storename = malloc(len + 50); CtdlDecodeBase64( *storename, name, len); } else { - *storename = strdup(name); + size_t len; + + len = strlen (name); + + *storename = malloc(len + 3); /* \0 + eventualy missing ', '*/ + memcpy(*storename, name, len + 1); } /* vcard_n_prettyize(storename); */ } @@ -276,8 +275,8 @@ void fetchname_parsed_vcard(struct vCard *v, char **storename) { -/** - * \brief html print a vcard +/* + * html print a vcard * display_vcard() calls this after parsing the textual vCard into * our 'struct vCard' data object. * @@ -289,11 +288,12 @@ void fetchname_parsed_vcard(struct vCard *v, char **storename) { * fields we understand, and then render them in a pretty fashion at the * end. Then we make a second pass, outputting all the fields we don't * understand in a simple two-column name/value format. - * \param v the vCard to display - * \param full display all items of the vcard? - * \param msgnum Citadel message pointer + * v the vCard to display + * full display all items of the vcard? + * msgnum Citadel message pointer */ -void display_parsed_vcard(StrBuf *Target, struct vCard *v, int full, long msgnum) { +void display_parsed_vcard(StrBuf *Target, struct vCard *v, int full, wc_mime_attachment *Mime) +{ int i, j; char buf[SIZ]; char *name; @@ -316,7 +316,7 @@ void display_parsed_vcard(StrBuf *Target, struct vCard *v, int full, long msgnum strcpy(org, ""); if (!full) { - StrBufAppendPrintf(Target, "
"); + StrBufAppendPrintf(Target, " | |||
"); StrBufAppendPrintf(Target, _("Address:")); - StrBufAppendPrintf(Target, " | "); + StrBufAppendPrintf(Target, " | ");
for (j=0; j "); else StrBufAppendPrintf(Target, " "); } } - StrBufAppendPrintf(Target, " | |
"
- ""
- "");
+ StrBufAppendPrintf(Target, ""
+ ""
+ "");
StrEscAppend(Target, NULL, fullname, 0, 0);
- StrBufAppendPrintf(Target, "");
+ StrBufAppendPrintf(Target, "");
if (!IsEmptyStr(title)) {
- StrBufAppendPrintf(Target, " | ");
+ StrBufAppendPrintf(Target, " \"");
StrEscAppend(Target, NULL, title, 0, 0);
StrBufAppendPrintf(Target, " ");
}
if (!IsEmptyStr(org)) {
- StrBufAppendPrintf(Target, "");
+ StrBufAppendPrintf(Target, " ");
StrEscAppend(Target, NULL, org, 0, 0);
StrBufAppendPrintf(Target, " ");
}
- StrBufAppendPrintf(Target, " | ||
"); @@ -532,22 +532,177 @@ void display_parsed_vcard(StrBuf *Target, struct vCard *v, int full, long msgnum StrBufAppendPrintf(Target, " |
"); + wc_printf(" | "); - wprintf("", bstr("alpha")); + wc_printf("?maxmsgs=1?is_summary=0?alpha=%s\">", bstr("alpha")); vcard_n_prettyize(addrbook[i].ab_name); escputs(addrbook[i].ab_name); - wprintf(" | \n"); + wc_printf("\n"); ++displayed; } /* Placeholders for empty columns at end */ if ((num_ab % 4) != 0) { for (i=0; i<(4-(num_ab % 4)); ++i) { - wprintf(""); + wc_printf(" | "); } } - wprintf(" |