[ bug #12979 ] new function. (anniversary_ber): new function.

2001-10-27  Chris Toshok  <toshok@ximian.com>

	[ bug #12979 ]
	* backend/pas/pas-backend-ldap.c (anniversary_populate): new
	function.
	(anniversary_ber): new function.
	(anniversary_compare): new function.
	(birthday_populate): new function.
	(birthday_ber): new function.
	(birthday_compare): new function.

svn path=/trunk/; revision=14277
This commit is contained in:
Chris Toshok
2001-10-28 05:22:00 +00:00
committed by Chris Toshok
parent 4689dccf16
commit 19c8e44cfa
2 changed files with 172 additions and 19 deletions

View File

@ -1,3 +1,14 @@
2001-10-27 Chris Toshok <toshok@ximian.com>
[ bug #12979 ]
* backend/pas/pas-backend-ldap.c (anniversary_populate): new
function.
(anniversary_ber): new function.
(anniversary_compare): new function.
(birthday_populate): new function.
(birthday_ber): new function.
(birthday_compare): new function.
2001-10-27 Chris Toshok <toshok@ximian.com>
* gui/component/select-names/e-select-names-completion.c

View File

@ -128,27 +128,35 @@ static ECardSimple *build_card_from_entry (LDAP *ldap, LDAPMessage *e);
static void email_populate (ECardSimple *card, char **values);
struct berval** email_ber (ECardSimple *card);
gboolean email_compare (ECardSimple *ecard1, ECardSimple *ecard2);
static gboolean email_compare (ECardSimple *ecard1, ECardSimple *ecard2);
static void homephone_populate (ECardSimple *card, char **values);
struct berval** homephone_ber (ECardSimple *card);
gboolean homephone_compare (ECardSimple *ecard1, ECardSimple *ecard2);
static gboolean homephone_compare (ECardSimple *ecard1, ECardSimple *ecard2);
static void business_populate (ECardSimple *card, char **values);
struct berval** business_ber (ECardSimple *card);
gboolean business_compare (ECardSimple *ecard1, ECardSimple *ecard2);
static gboolean business_compare (ECardSimple *ecard1, ECardSimple *ecard2);
static void anniversary_populate (ECardSimple *card, char **values);
struct berval** anniversary_ber (ECardSimple *card);
static gboolean anniversary_compare (ECardSimple *ecard1, ECardSimple *ecard2);
static void birthday_populate (ECardSimple *card, char **values);
struct berval** birthday_ber (ECardSimple *card);
static gboolean birthday_compare (ECardSimple *ecard1, ECardSimple *ecard2);
struct prop_info {
ECardSimpleField field_id;
char *query_prop;
char *ldap_attr;
#define PROP_TYPE_STRING 0x01
#define PROP_TYPE_LIST 0x02
#define PROP_TYPE_COMPLEX 0x02
#define PROP_DN 0x04
#define PROP_EVOLVE 0x08
int prop_type;
/* the remaining items are only used for the TYPE_LIST props */
/* the remaining items are only used for the TYPE_COMPLEX props */
/* used when reading from the ldap server populates ECard with the values in **values. */
void (*populate_ecard_func)(ECardSimple *card, char **values);
@ -159,8 +167,8 @@ struct prop_info {
} prop_info[] = {
#define LIST_PROP(fid,q,a,ctor,ber,cmp) {fid, q, a, PROP_TYPE_LIST, ctor, ber, cmp}
#define E_LIST_PROP(fid,q,a,ctor,ber,cmp) {fid, q, a, PROP_TYPE_LIST | PROP_EVOLVE, ctor, ber, cmp}
#define COMPLEX_PROP(fid,q,a,ctor,ber,cmp) {fid, q, a, PROP_TYPE_COMPLEX, ctor, ber, cmp}
#define E_COMPLEX_PROP(fid,q,a,ctor,ber,cmp) {fid, q, a, PROP_TYPE_COMPLEX | PROP_EVOLVE, ctor, ber, cmp}
#define STRING_PROP(fid,q,a) {fid, q, a, PROP_TYPE_STRING}
#define E_STRING_PROP(fid,q,a) {fid, q, a, PROP_TYPE_STRING | PROP_EVOLVE}
@ -170,12 +178,12 @@ struct prop_info {
STRING_PROP (E_CARD_SIMPLE_FIELD_FAMILY_NAME, "family_name", "sn" ),
/* email addresses */
LIST_PROP (E_CARD_SIMPLE_FIELD_EMAIL, "email", "mail", email_populate, email_ber, email_compare),
COMPLEX_PROP (E_CARD_SIMPLE_FIELD_EMAIL, "email", "mail", email_populate, email_ber, email_compare),
/* phone numbers */
E_STRING_PROP (E_CARD_SIMPLE_FIELD_PHONE_PRIMARY, "primary_phone", "primaryPhone"),
LIST_PROP (E_CARD_SIMPLE_FIELD_PHONE_BUSINESS, "business_phone", "telephoneNumber", business_populate, business_ber, business_compare),
LIST_PROP (E_CARD_SIMPLE_FIELD_PHONE_HOME, "home_phone", "homePhone", homephone_populate, homephone_ber, homephone_compare),
COMPLEX_PROP (E_CARD_SIMPLE_FIELD_PHONE_BUSINESS, "business_phone", "telephoneNumber", business_populate, business_ber, business_compare),
COMPLEX_PROP (E_CARD_SIMPLE_FIELD_PHONE_HOME, "home_phone", "homePhone", homephone_populate, homephone_ber, homephone_compare),
STRING_PROP (E_CARD_SIMPLE_FIELD_PHONE_MOBILE, "mobile_phone", "mobile"),
E_STRING_PROP (E_CARD_SIMPLE_FIELD_PHONE_CAR, "car_phone", "carPhone"),
STRING_PROP (E_CARD_SIMPLE_FIELD_PHONE_BUSINESS_FAX, "business_fax", "facsimileTelephoneNumber"),
@ -211,8 +219,8 @@ struct prop_info {
STRING_PROP (E_CARD_SIMPLE_FIELD_NICKNAME, "nickname", "displayName"),
E_STRING_PROP (E_CARD_SIMPLE_FIELD_SPOUSE, "spouse", "spouseName"),
E_STRING_PROP (E_CARD_SIMPLE_FIELD_NOTE, "note", "note"),
E_STRING_PROP (E_CARD_SIMPLE_FIELD_ANNIVERSARY, "anniversary", "anniversary"),
E_STRING_PROP (E_CARD_SIMPLE_FIELD_BIRTH_DATE, "birth_date", "birthDate"),
E_COMPLEX_PROP (E_CARD_SIMPLE_FIELD_ANNIVERSARY, "anniversary", "anniversary", anniversary_populate, anniversary_ber, anniversary_compare),
E_COMPLEX_PROP (E_CARD_SIMPLE_FIELD_BIRTH_DATE, "birth_date", "birthDate", birthday_populate, birthday_ber, birthday_compare),
E_STRING_PROP (E_CARD_SIMPLE_FIELD_MAILER, "mailer", "mailer"),
E_STRING_PROP (E_CARD_SIMPLE_FIELD_FILE_AS, "file_as", "fileAs"),
@ -224,8 +232,8 @@ struct prop_info {
#undef E_STRING_PROP
#undef STRING_PROP
#undef E_LIST_PROP
#undef LIST_PROP
#undef E_COMPLEX_PROP
#undef COMPLEX_PROP
};
static int num_prop_infos = sizeof(prop_info) / sizeof(prop_info[0]);
@ -725,7 +733,7 @@ build_mods_from_ecards (PASBackendLDAP *bl, ECardSimple *current, ECardSimple *n
mod->mod_values[0] = new_prop;
mod->mod_values[1] = NULL;
}
else { /* PROP_TYPE_LIST */
else { /* PROP_TYPE_COMPLEX */
mod->mod_op |= LDAP_MOD_BVALUES;
mod->mod_bvalues = new_prop_bers;
}
@ -1407,7 +1415,7 @@ email_ber(ECardSimple *card)
return result;
}
gboolean
static gboolean
email_compare (ECardSimple *ecard1, ECardSimple *ecard2)
{
const char *email1, *email2;
@ -1473,7 +1481,7 @@ homephone_ber(ECardSimple *card)
return result;
}
gboolean
static gboolean
homephone_compare (ECardSimple *ecard1, ECardSimple *ecard2)
{
int phone_ids[2] = { E_CARD_SIMPLE_FIELD_PHONE_HOME, E_CARD_SIMPLE_FIELD_PHONE_HOME_2 };
@ -1540,7 +1548,7 @@ business_ber(ECardSimple *card)
return result;
}
gboolean
static gboolean
business_compare (ECardSimple *ecard1, ECardSimple *ecard2)
{
int phone_ids[2] = { E_CARD_SIMPLE_FIELD_PHONE_BUSINESS, E_CARD_SIMPLE_FIELD_PHONE_BUSINESS_2 };
@ -1564,6 +1572,140 @@ business_compare (ECardSimple *ecard1, ECardSimple *ecard2)
return TRUE;
}
static void
anniversary_populate (ECardSimple *card, char **values)
{
if (values[0]) {
ECardDate dt = e_card_date_from_string (values[0]);
gtk_object_set (GTK_OBJECT (card->card),
"anniversary", &dt,
NULL);
}
}
struct berval**
anniversary_ber (ECardSimple *card)
{
ECardDate *dt;
struct berval** result = NULL;
gtk_object_get (GTK_OBJECT (card->card),
"anniversary", &dt,
NULL);
if (dt) {
char *anniversary;
anniversary = e_card_date_to_string (dt);
result = g_new (struct berval*, 2);
result[0] = g_new (struct berval, 1);
result[0]->bv_val = anniversary;
result[0]->bv_len = strlen (anniversary);
result[1] = NULL;
}
return result;
}
static gboolean
anniversary_compare (ECardSimple *ecard1, ECardSimple *ecard2)
{
ECardDate *dt;
char *date1 = NULL, *date2 = NULL;
gboolean equal;
gtk_object_get (GTK_OBJECT (ecard1->card),
"anniversary", &dt,
NULL);
if (dt)
date1 = e_card_date_to_string (dt);
gtk_object_get (GTK_OBJECT (ecard2->card),
"anniversary", &dt,
NULL);
if (dt)
date2 = e_card_date_to_string (dt);
if (date1 && date2)
equal = !strcmp (date1, date2);
else
equal = (!!date1 == !!date2);
g_free (date1);
g_free (date2);
return TRUE;
}
static void
birthday_populate (ECardSimple *card, char **values)
{
if (values[0]) {
ECardDate dt = e_card_date_from_string (values[0]);
gtk_object_set (GTK_OBJECT (card->card),
"birth_date", &dt,
NULL);
}
}
struct berval**
birthday_ber (ECardSimple *card)
{
ECardDate *dt;
struct berval** result = NULL;
gtk_object_get (GTK_OBJECT (card->card),
"birth_date", &dt,
NULL);
if (dt) {
char *birthday;
birthday = e_card_date_to_string (dt);
result = g_new (struct berval*, 2);
result[0] = g_new (struct berval, 1);
result[0]->bv_val = birthday;
result[0]->bv_len = strlen (birthday);
result[1] = NULL;
}
return result;
}
static gboolean
birthday_compare (ECardSimple *ecard1, ECardSimple *ecard2)
{
ECardDate *dt;
char *date1 = NULL, *date2 = NULL;
gboolean equal;
gtk_object_get (GTK_OBJECT (ecard1->card),
"birth_date", &dt,
NULL);
if (dt)
date1 = e_card_date_to_string (dt);
gtk_object_get (GTK_OBJECT (ecard2->card),
"birth_date", &dt,
NULL);
if (dt)
date2 = e_card_date_to_string (dt);
if (date1 && date2)
equal = !strcmp (date1, date2);
else
equal = (!!date1 == !!date2);
g_free (date1);
g_free (date2);
return TRUE;
}
#define IS_RFC2254_CHAR(c) ((c) == '*' || (c) =='\\' || (c) == '(' || (c) == ')' || (c) == '\0')
static char hex[] = "0123456789abcdef";
static char *
@ -1965,7 +2107,7 @@ build_card_from_entry (LDAP *ldap, LDAPMessage *e)
e_card_simple_set (card, info->field_id, values[0]);
}
else if (info->prop_type & PROP_TYPE_LIST) {
else if (info->prop_type & PROP_TYPE_COMPLEX) {
/* if it's a list call the ecard-populate function,
which calls gtk_object_set to set the property */
info->populate_ecard_func(card,