<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>sugarcrm</title>
  <link rel="alternate" type="text/html" href="http://tumbleweed.org.za/tags/sugarcrm"/>
  <link rel="self" type="application/atom+xml" href="http://tumbleweed.org.za/taxonomy/term/155/atom/feed"/>
  <id>http://tumbleweed.org.za/taxonomy/term/155/atom/feed</id>
  <updated>2008-09-21T12:23:56+00:00</updated>
  <entry>
    <title>SugarCRM to Mozilla LDAP contact slurper</title>
    <link rel="alternate" type="text/html" href="http://tumbleweed.org.za/code/sugarcrm-mozilla-ldap-contact-slurper" />
    <id>http://tumbleweed.org.za/code/sugarcrm-mozilla-ldap-contact-slurper</id>
    <published>2008-01-29T13:50:03+00:00</published>
    <updated>2008-09-21T12:23:56+00:00</updated>
    <author>
      <name>tumbleweed</name>
    </author>
    <category term="code" />
    <category term="Howto" />
    <category term="ldap" />
    <category term="python" />
    <category term="sugarcrm" />
    <summary type="html"><![CDATA[<p>Seeing as <a href="http://www.sugarforge.org/">SugarCRM</a> is now truly Open Source, I decided to support them buy using SugarCRM as a contact database for&nbsp;a&nbsp;client.</p>

<p>This script extracts contact data from Sugar, and imports it into an <span class="caps"><span class="caps">LDAP</span></span> tree, so that Thunderbird clients can use it as an&nbsp;address&nbsp;book.</p>

<p>It&#8217;s written for Sugar 5.0, and a suitable <span class="caps"><span class="caps">LDAP</span></span> installation with the <a href="http://wiki.mozilla.org/MailNews:Mozilla_LDAP_Address_Book_Schema">Mozilla&nbsp;Schema</a></p>

<p>A suitable <span class="caps"><span class="caps">VIEW</span></span> for printing out a contact directory would&nbsp;look&nbsp;like:</p>

<div class="geshifilter"><div class="mysql geshifilter-mysql" style="font-family:monospace;"><span class="kw1"><span class="caps"><span class="caps">CREATE</span></span></span> <span class="kw5"><span class="caps"><span class="caps">OR</span></span></span> <span class="kw1"><span class="caps"><span class="caps">REPLACE</span></span></span> <span class="caps"><span class="caps">VIEW</span></span> sugarab <span class="caps"><span class="caps">AS</span></span><br />
<span class="kw1"><span class="caps"><span class="caps">SELECT</span></span></span> c.id, c.description, salutation, first_name, last_name, title, department,<br />
do_not_call, phone_home, phone_mobile, phone_work, phone_other, c.phone_fax,<br />
primary_address_street, primary_address_city, primary_address_state,<br />
primary_address_postalcode, primary_address_country, alt_address_street,<br />
alt_address_city, alt_address_state, alt_address_postalcode, alt_address_country,<br />
assistant, assistant_phone, lead_source, birthdate,<br />
a.name <span class="caps"><span class="caps">AS</span></span> account_name,<br />
e1.email_address <span class="caps"><span class="caps">AS</span></span> primary_email, e2.email_address <span class="caps"><span class="caps">AS</span></span> secondary_email<br />
<span class="kw1"><span class="caps"><span class="caps">FROM</span></span></span> contacts <span class="caps"><span class="caps">AS</span></span> c<br />
<span class="kw1"><span class="caps"><span class="caps">LEFT</span></span></span> <span class="kw1"><span class="caps"><span class="caps">OUTER</span></span></span> <span class="kw1"><span class="caps"><span class="caps">JOIN</span></span></span> accounts_contacts <span class="caps"><span class="caps">AS</span></span> j <span class="caps"><span class="caps">ON</span></span> <span class="br0">&#40;</span>c.id <span class="sy0">=</span> j.contact_id <span class="kw5"><span class="caps"><span class="caps">AND</span></span></span> j.deleted <span class="sy0">=</span> 0<span class="br0">&#41;</span><br />
<span class="kw1"><span class="caps"><span class="caps">LEFT</span></span></span> <span class="kw1"><span class="caps"><span class="caps">OUTER</span></span></span> <span class="kw1"><span class="caps"><span class="caps">JOIN</span></span></span> accounts <span class="caps"><span class="caps">AS</span></span> a <span class="caps"><span class="caps">ON</span></span> <span class="br0">&#40;</span>j.account_id <span class="sy0">=</span> a.id <span class="kw5"><span class="caps"><span class="caps">AND</span></span></span> a.deleted <span class="sy0">=</span> 0<span class="br0">&#41;</span><br />
<span class="kw1"><span class="caps"><span class="caps">LEFT</span></span></span> <span class="kw1"><span class="caps"><span class="caps">OUTER</span></span></span> <span class="kw1"><span class="caps"><span class="caps">JOIN</span></span></span> email_addr_bean_rel as eb <span class="caps"><span class="caps">ON</span></span> <span class="br0">&#40;</span>eb.bean_id <span class="sy0">=</span> c.id <span class="kw5"><span class="caps"><span class="caps">AND</span></span></span> eb.deleted <span class="sy0">=</span> 0<span class="br0">&#41;</span><br />
<span class="kw1"><span class="caps"><span class="caps">LEFT</span></span></span> <span class="kw1"><span class="caps"><span class="caps">OUTER</span></span></span> <span class="kw1"><span class="caps"><span class="caps">JOIN</span></span></span> email_addresses as e1 <span class="caps"><span class="caps">ON</span></span> <span class="br0">&#40;</span>eb.email_address_id <span class="sy0">=</span> e1.id <span class="kw5"><span class="caps"><span class="caps">AND</span></span></span> eb.primary_address <span class="sy0">=</span> <span class="nu0">1</span> <span class="kw5"><span class="caps"><span class="caps">AND</span></span></span> e1.deleted <span class="sy0">=</span> 0<span class="br0">&#41;</span><br />
<span class="kw1"><span class="caps"><span class="caps">LEFT</span></span></span> <span class="kw1"><span class="caps"><span class="caps">OUTER</span></span></span> <span class="kw1"><span class="caps"><span class="caps">JOIN</span></span></span> email_addresses as e2 <span class="caps"><span class="caps">ON</span></span> <span class="br0">&#40;</span>eb.email_address_id <span class="sy0">=</span> e2.id <span class="kw5"><span class="caps"><span class="caps">AND</span></span></span> e1.id <span class="sy0">!=</span> e2.id <span class="kw5"><span class="caps"><span class="caps">AND</span></span></span> e2.deleted <span class="sy0">=</span> 0<span class="br0">&#41;</span><br />
<span class="kw1"><span class="caps"><span class="caps">WHERE</span></span></span> c.deleted <span class="sy0">=</span> 0;</div></div>
    ]]></summary>
    <content type="html"><![CDATA[<p>Seeing as <a href="http://www.sugarforge.org/">SugarCRM</a> is now truly Open Source, I decided to support them buy using SugarCRM as a contact database for a&nbsp;client.</p>

<p>This script extracts contact data from Sugar, and imports it into an <span class="caps">LDAP</span> tree, so that Thunderbird clients can use it as an address&nbsp;book.</p>

<p>It&#8217;s written for Sugar 5.0, and a suitable <span class="caps">LDAP</span> installation with the <a href="http://wiki.mozilla.org/MailNews:Mozilla_LDAP_Address_Book_Schema">Mozilla&nbsp;Schema</a></p>

<p>A suitable <span class="caps">VIEW</span> for printing out a contact directory would look&nbsp;like:</p>

<div class="geshifilter"><div class="mysql geshifilter-mysql" style="font-family:monospace;"><span class="kw1"><span class="caps">CREATE</span></span> <span class="kw5"><span class="caps">OR</span></span> <span class="kw1"><span class="caps">REPLACE</span></span> <span class="caps">VIEW</span> sugarab <span class="caps">AS</span><br />
<span class="kw1"><span class="caps">SELECT</span></span> c.id, c.description, salutation, first_name, last_name, title, department,<br />
do_not_call, phone_home, phone_mobile, phone_work, phone_other, c.phone_fax,<br />
primary_address_street, primary_address_city, primary_address_state,<br />
primary_address_postalcode, primary_address_country, alt_address_street,<br />
alt_address_city, alt_address_state, alt_address_postalcode, alt_address_country,<br />
assistant, assistant_phone, lead_source, birthdate,<br />
a.name <span class="caps">AS</span> account_name,<br />
e1.email_address <span class="caps">AS</span> primary_email, e2.email_address <span class="caps">AS</span> secondary_email<br />
<span class="kw1"><span class="caps">FROM</span></span> contacts <span class="caps">AS</span> c<br />
<span class="kw1"><span class="caps">LEFT</span></span> <span class="kw1"><span class="caps">OUTER</span></span> <span class="kw1"><span class="caps">JOIN</span></span> accounts_contacts <span class="caps">AS</span> j <span class="caps">ON</span> <span class="br0">&#40;</span>c.id <span class="sy0">=</span> j.contact_id <span class="kw5"><span class="caps">AND</span></span> j.deleted <span class="sy0">=</span> 0<span class="br0">&#41;</span><br />
<span class="kw1"><span class="caps">LEFT</span></span> <span class="kw1"><span class="caps">OUTER</span></span> <span class="kw1"><span class="caps">JOIN</span></span> accounts <span class="caps">AS</span> a <span class="caps">ON</span> <span class="br0">&#40;</span>j.account_id <span class="sy0">=</span> a.id <span class="kw5"><span class="caps">AND</span></span> a.deleted <span class="sy0">=</span> 0<span class="br0">&#41;</span><br />
<span class="kw1"><span class="caps">LEFT</span></span> <span class="kw1"><span class="caps">OUTER</span></span> <span class="kw1"><span class="caps">JOIN</span></span> email_addr_bean_rel as eb <span class="caps">ON</span> <span class="br0">&#40;</span>eb.bean_id <span class="sy0">=</span> c.id <span class="kw5"><span class="caps">AND</span></span> eb.deleted <span class="sy0">=</span> 0<span class="br0">&#41;</span><br />
<span class="kw1"><span class="caps">LEFT</span></span> <span class="kw1"><span class="caps">OUTER</span></span> <span class="kw1"><span class="caps">JOIN</span></span> email_addresses as e1 <span class="caps">ON</span> <span class="br0">&#40;</span>eb.email_address_id <span class="sy0">=</span> e1.id <span class="kw5"><span class="caps">AND</span></span> eb.primary_address <span class="sy0">=</span> <span class="nu0">1</span> <span class="kw5"><span class="caps">AND</span></span> e1.deleted <span class="sy0">=</span> 0<span class="br0">&#41;</span><br />
<span class="kw1"><span class="caps">LEFT</span></span> <span class="kw1"><span class="caps">OUTER</span></span> <span class="kw1"><span class="caps">JOIN</span></span> email_addresses as e2 <span class="caps">ON</span> <span class="br0">&#40;</span>eb.email_address_id <span class="sy0">=</span> e2.id <span class="kw5"><span class="caps">AND</span></span> e1.id <span class="sy0">!=</span> e2.id <span class="kw5"><span class="caps">AND</span></span> e2.deleted <span class="sy0">=</span> 0<span class="br0">&#41;</span><br />
<span class="kw1"><span class="caps">WHERE</span></span> c.deleted <span class="sy0">=</span> 0;</div></div>
    ]]></content>
  </entry>
</feed>
