From eb62628035cf79052a8816eb6ae1772e37c33188 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com>
Date: Thu, 2 Aug 2007 15:31:28 +0000
Subject: [PATCH] The vobject extension was missing

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@15422 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 .../ExtensionTemplateItem/VObject_export.py   | 107 ++++++++++++++++++
 bt5/erp5_mobile/bt/comment                    |   0
 bt5/erp5_mobile/bt/revision                   |   2 +-
 bt5/erp5_mobile/bt/template_extension_id_list |   1 +
 4 files changed, 109 insertions(+), 1 deletion(-)
 create mode 100644 bt5/erp5_mobile/ExtensionTemplateItem/VObject_export.py
 create mode 100644 bt5/erp5_mobile/bt/comment

diff --git a/bt5/erp5_mobile/ExtensionTemplateItem/VObject_export.py b/bt5/erp5_mobile/ExtensionTemplateItem/VObject_export.py
new file mode 100644
index 0000000000..cfd9e3094f
--- /dev/null
+++ b/bt5/erp5_mobile/ExtensionTemplateItem/VObject_export.py
@@ -0,0 +1,107 @@
+# vobject integration for ERP5
+
+try:
+  import vobject
+except ImportError:
+  raise ImportError('vobject is not properly installed, get it from '\
+                    ' http://vobject.skyhouseconsulting.com')
+
+def decode(string):
+  if not string:
+    return ''
+  return unicode(string, 'utf8', 'repr')
+
+def Person_viewPersonAsvCard(self, REQUEST=None):
+  """Returns a vCard representation of a Person object.
+  """
+  vcard = vobject.vCard()
+  # name
+  vcard.add('n')
+  vcard.n.value = vobject.vcard.Name( family=decode(self.getFirstName()),
+                                      given=decode(self.getLastName()),
+                                      additional=decode(self.getMiddleName()),
+                                      prefix=decode(self.getPrefix()),
+                                      suffix=decode(self.getSuffix()) )
+  # formatted name
+  vcard.add('fn')
+  vcard.fn.value = decode(self.getTitle())
+  
+  # organisation
+  if self.getSubordination():
+    vcard.add('org')
+    vcard.org.value = decode(self.getSubordinationTitle())
+
+  # default email
+  email = self.getDefaultEmailValue()
+  if email is not None:
+    vcard.add('email')
+    vcard.email.value = email.getUrlString()
+    vcard.email.type_param = 'PREF'
+  
+  # alt. emails
+  for addr in self.contentValues(filter=dict(portal_type=['Email'])):
+    if addr.getId() not in ('default_email', ):
+      c = vcard.add('email')
+      c.value = decode(addr.asText())
+      c.type_param = 'INTERNET'
+
+  # default address
+  address = self.getDefaultAddressValue()
+  if address is not None:
+    addr = vcard.add('adr')
+    addr.value = vobject.vcard.Address(
+                                street=decode(address.getStreetAddress()),
+                                city=decode(address.getCity()),
+                                region=decode(address.getRegionTitle()),
+                                code=decode(address.getZipCode()))
+    addr.type_param = 'PREF'
+
+  # alt. addresses
+  for addr in self.contentValues(filter=dict(portal_type=['Address'])):
+    if addr.getId() not in ('default_address', ):
+      c = vcard.add('adr')
+      c.value = vobject.vcard.Address(
+                                street=decode(addr.getStreetAddress()),
+                                city=decode(addr.getCity()),
+                                region=decode(addr.getRegionTitle()),
+                                code=decode(addr.getZipCode()))
+      c.type_param = decode(addr.getTitle())
+
+  # default telephone
+  tel = self.getDefaultTelephoneValue()
+  if tel is not None:
+    vcard.add('tel')
+    vcard.tel.value = decode(tel.asText())
+    vcard.tel.type_param = 'PREF'
+  
+  # default fax
+  default_fax = self.getDefaultFaxValue()
+  if default_fax is not None:
+    fax = vcard.add('tel')
+    fax.value = decode(default_fax.asText())
+    fax.type_param = 'FAX'
+  
+  # alt. telephones
+  for tel in self.contentValues(filter=dict(
+                         portal_type=['Telephone', 'Fax'])):
+    if tel.getId() not in ('default_telephone', 'default_fax'):
+      c = vcard.add('tel')
+      c.value = decode(tel.asText())
+
+  # default image
+  if getattr(self, 'getDefaultImage', None) is not None:
+    image = self.getDefaultImage()
+    if image is not None:
+      photo = vcard.add('photo')
+      photo.value = image.manage_FTPget()
+      photo.encoding_param = 'b'
+
+  if REQUEST:
+    REQUEST.RESPONSE.setHeader('Content-type', 'text/x-vcard')
+  return vcard.serialize().encode('utf8')
+  
+def PersonModule_importvCard(self):
+  """Import persons from a vCard file.
+  """
+  return NotImplemented
+
diff --git a/bt5/erp5_mobile/bt/comment b/bt5/erp5_mobile/bt/comment
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/bt5/erp5_mobile/bt/revision b/bt5/erp5_mobile/bt/revision
index 3f10ffe7a4..19c7bdba7b 100644
--- a/bt5/erp5_mobile/bt/revision
+++ b/bt5/erp5_mobile/bt/revision
@@ -1 +1 @@
-15
\ No newline at end of file
+16
\ No newline at end of file
diff --git a/bt5/erp5_mobile/bt/template_extension_id_list b/bt5/erp5_mobile/bt/template_extension_id_list
index e69de29bb2..bb129ea596 100644
--- a/bt5/erp5_mobile/bt/template_extension_id_list
+++ b/bt5/erp5_mobile/bt/template_extension_id_list
@@ -0,0 +1 @@
+VObject_export
\ No newline at end of file
-- 
2.30.9