{"id":46,"date":"2016-05-06T08:57:42","date_gmt":"2016-05-06T08:57:42","guid":{"rendered":"http:\/\/symbioticindia.in\/docu\/?p=46"},"modified":"2016-05-06T08:57:42","modified_gmt":"2016-05-06T08:57:42","slug":"sugar-crm-integration-with-custom-php-applications-ii","status":"publish","type":"post","link":"http:\/\/symbioticindia.in\/docu\/2016\/05\/06\/sugar-crm-integration-with-custom-php-applications-ii\/","title":{"rendered":"Sugar CRM integration with custom PHP applications (II)"},"content":{"rendered":"<h4 align=\"center\"><strong>Using SugarCRM as an authentication system<\/strong><\/h4>\n<p align=\"left\"><strong>Demo available : <\/strong>you can now directly test what&#8217;s explained in this article. A demo is available <a href=\"http:\/\/www.beanizer.org\/sugarcrm\/\">here<\/a>.<\/p>\n<table>\n<tbody>\n<tr>\n<td><object id=\"Player_4e8e304a-2c98-4df8-a168-be6690adc66a\" width=\"250px\" height=\"250px\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" codebase=\"http:\/\/fpdownload.macromedia.com\/get\/flashplayer\/current\/swflash.cab\"><\/object><\/td>\n<td><span style=\"font-size: small;\"><strong>Introduction<\/strong><br \/>\nHere we are again with this series of articles about SugarCRM integration. This time we&#8217;ll explore the use of sugar as authentication system and user manager for custom PHP applications. Starting from the php class we wrote in the <a href=\"http:\/\/www.beanizer.org\/index.php3?page=sugar1\">first article<\/a>, we&#8217;ll expand it with some more functionalities; then we&#8217;ll write the basic code to be used in our applications to communicate with sugar.<\/p>\n<p>Basically, we&#8217;ll have a registration form on our application, filling it a record will be created on sugar &#8220;Contacts&#8221;, together with a given password. To effectively activate the new user, a sugar user will have to log in into the crm and check the access enabling checkbox. This is really the essential, a lot of other features can be added like notification emails, user groups, more articulated user status(not just enabled\/disabled) and so on, but this is up to the php application developer. Once again sugar SOAP interface will be our swiss knife.<\/span><\/p>\n<p align=\"left\">\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4><strong>SugarCRM configuration<\/strong><\/h4>\n<p>We&#8217;ll use sugarcrm Contacts module as our application users repository. What we need on sugar side are just a couple of new custom fields: a password text field and a checkbox to enable\/disable the user login on our system. Please note that saying &#8220;users&#8221; I refer to our custom application users, not sugar users. To be clearer, sugar users are those that can login into sugarcrm interface. Our users are what on sugarcrm are &#8220;contacts&#8221;.<br \/>\nAfter creating the new custom fields we need to add the checkbox in sugar Contacts EditView panel, to be able to effectively use it.<br \/>\nObscure? Don&#8217;t worry, I&#8217;ve done a simple animation with wink, detailing all the process.You can watch it <a href=\"http:\/\/www.beanizer.org\/resources\/SugarAuth1.htm\">here<\/a><br \/>\nWe are now ready on the sugar side. What SOAP are we going to use this time?<br \/>\nWe&#8217;ve already seen (see <a href=\"http:\/\/www.beanizer.org\/index.php3?page=sugar1\">previous article<\/a>) how to query sugarcrm via SOAP, so we are already able to check if a user exists and is enabled, now we need to write to sugar(when a new user gets created). Our SOAP method is <em>set_entry<\/em>. Let&#8217;s see the new code to add to our SugarSoap class&#8230;.<\/p>\n<p><span style=\"font-size: small;\"><strong>New methods in SugarSoap class<\/strong><br \/>\nFirst we add a generic setEntry function that will be used for writing on various sugarcrm modules:<\/p>\n<p><\/span><\/p>\n<pre><span style=\"color: #ccccff;\">\/**<\/span>\r\n<span style=\"color: #ccccff;\">*<\/span>       <span style=\"color: #ccccff;\">Modify<\/span> <span style=\"color: #ccccff;\">sugar<\/span> <span style=\"color: #ccccff;\">entry<\/span> <span style=\"color: #ccccff;\">with<\/span> <span style=\"color: #ccccff;\">given<\/span> <span style=\"color: #ccccff;\">data<\/span><span style=\"color: #ccccff;\">(<\/span><span style=\"color: #ccccff;\">used<\/span> <span style=\"color: #ccccff;\">by<\/span> <span style=\"color: #ccccff;\">other<\/span> <span style=\"color: #ccccff;\">set<\/span><span style=\"color: #ccccff;\">#<\/span><span style=\"color: #ccccff;\">#<\/span><span style=\"color: #ccccff;\">#<\/span> <span style=\"color: #ccccff;\">functions<\/span><span style=\"color: #ccccff;\">)<\/span> \r\n<span style=\"color: #ccccff;\">*<\/span>\r\n<span style=\"color: #ccccff;\">*<\/span><span style=\"color: #ccccff;\">*\/<\/span>             \r\n<span style=\"color: #ffa500;\">function<\/span> <span style=\"color: #b2dfee;\">setEntry<\/span>(<span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">module<\/span><span style=\"color: #00ffff;\">,<\/span><span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">array<\/span>)<span style=\"color: #00ffff;\">{<\/span>\r\n        <span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">data_array<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #ffa500;\">array<\/span>()<span style=\"color: #00ffff;\">;<\/span>\r\n        <span style=\"color: #ffa500;\">while<\/span>(<span style=\"color: #ffa500;\">list<\/span>(<span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">name<\/span><span style=\"color: #00ffff;\">,<\/span><span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">value<\/span>)<span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00cc99;\">each<\/span>(<span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">array<\/span>))<span style=\"color: #00ffff;\">{<\/span>\r\n                <span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">data_array<\/span><span style=\"color: #00ffff;\">[<\/span><span style=\"color: #00ffff;\">]<\/span><span style=\"color: #00ffff;\">=<\/span> <span style=\"color: #ffa500;\">array<\/span>(\r\n                        <span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00cd00;\">name<\/span><span style=\"color: #00cd00;\">'<\/span>  <span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00ffff;\">&gt;<\/span>      <span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">name<\/span><span style=\"color: #00ffff;\">,<\/span>\r\n                        <span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00cd00;\">value<\/span><span style=\"color: #00cd00;\">'<\/span> <span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00ffff;\">&gt;<\/span>      <span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">value<\/span>  \r\n                )<span style=\"color: #00ffff;\">;<\/span>\r\n        <span style=\"color: #00ffff;\">}<\/span>\r\n        <span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">result<\/span> <span style=\"color: #00ffff;\">=<\/span> <span style=\"color: #66ccff;\"><strong>$this<\/strong><\/span><span style=\"color: #66ccff;\"><strong>-&gt;proxy<\/strong><\/span><span style=\"color: #b2dfee;\">-&gt;set_entry<\/span>(\r\n                <span style=\"color: #66ccff;\"><strong>$this<\/strong><\/span><span style=\"color: #cc6600;\">-&gt;sess<\/span><span style=\"color: #00ffff;\">,<\/span>\r\n                <span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">module<\/span><span style=\"color: #00ffff;\">,<\/span>\r\n                <span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">data_array<\/span>\r\n        )<span style=\"color: #00ffff;\">;<\/span>\r\n        <span style=\"color: #ffa500;\">return<\/span> <span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">result<\/span><span style=\"color: #00ffff;\">;<\/span>\r\n<span style=\"color: #00ffff;\">}<\/span><\/pre>\n<p><span style=\"font-size: small;\"><\/p>\n<p>The <em>set_entry<\/em> method of sugar soap interface requires 3 parameters:<br \/>\n<\/span><\/p>\n<ol>\n<li>A valid sugar session id<\/li>\n<li>The module name (i.e. Contacts)<\/li>\n<li>The data array in sugar format(a name\/value couple for each field)<\/li>\n<\/ol>\n<p><span style=\"font-size: small;\">In our setEntry method, we&#8217;re passing an associative array, so with the &#8220;while&#8221; loop we turn it into a sugarcrm accepted array. A note about <em>set_entry<\/em> : if an &#8220;id&#8221; field is passed within the data_array parameter, sugarcrm will do an update of the record with the given id, othewise it will be intended as an &#8220;insert&#8221;, and a new record will be created.<br \/>\nNow we can add &#8220;setXXX&#8221; methods very easily for the modules we&#8217;re interested in. In this case:<\/p>\n<p><\/span><\/p>\n<pre><span style=\"color: #ffa500;\">function<\/span> <span style=\"color: #b2dfee;\">setContact<\/span>(<span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">array<\/span>)<span style=\"color: #00ffff;\">{<\/span>\r\n        <span style=\"color: #ffa500;\">return<\/span> <span style=\"color: #66ccff;\"><strong>$this<\/strong><\/span><span style=\"color: #b2dfee;\">-&gt;setEntry<\/span>(<span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00cd00;\">Contacts<\/span><span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00ffff;\">,<\/span><span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">array<\/span>)<span style=\"color: #00ffff;\">;<\/span>\r\n<span style=\"color: #00ffff;\">}<\/span><\/pre>\n<p><span style=\"font-size: small;\"><\/p>\n<p><strong>The authentication class<\/strong><br \/>\nWhat we need is a simple class to manage new user creation and authentication of existing users.<br \/>\nHere is a draft:<\/p>\n<p><\/span><\/p>\n<pre><span style=\"color: #00aae2;\">&lt;?php<\/span>\r\n<span style=\"color: #ffa500;\">include_once<\/span> <span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00cd00;\">SugarSoap<\/span><span style=\"color: #00cd00;\">.<\/span><span style=\"color: #00cd00;\">php<\/span><span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00ffff;\">;<\/span>\r\n<span style=\"color: #ffa500;\">class<\/span> <span style=\"color: #66ccff;\"><strong>UserManagement<\/strong><\/span><span style=\"color: #00ffff;\">{<\/span>\r\n        <span style=\"color: #ffa500;\">var<\/span> <span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">soap<\/span><span style=\"color: #00ffff;\">;<\/span>\r\n        <span style=\"color: #ffa500;\">function<\/span> <span style=\"color: #b2dfee;\">UserManagement<\/span>()<span style=\"color: #00ffff;\">{<\/span>\r\n                <span style=\"color: #99ff99;\">\/\/<\/span> <span style=\"color: #99ff99;\">here<\/span> <span style=\"color: #99ff99;\">goes<\/span> <span style=\"color: #99ff99;\">your<\/span> <span style=\"color: #99ff99;\">sugar<\/span> <span style=\"color: #99ff99;\">installation<\/span> <span style=\"color: #99ff99;\">address<\/span>\r\n                <span style=\"color: #66ccff;\"><strong>$this<\/strong><\/span><span style=\"color: #cc6600;\">-&gt;soap<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #ffa500;\">new<\/span> <span style=\"color: #b2dfee;\">SugarSoap<\/span>(<span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00cd00;\">http:\/\/mysugar\/soap.php?wsdl<\/span><span style=\"color: #00cd00;\">'<\/span>)<span style=\"color: #00ffff;\">;<\/span>\r\n        <span style=\"color: #00ffff;\">}<\/span>               \r\n        <span style=\"color: #ffa500;\">function<\/span> <span style=\"color: #b2dfee;\">authenticate<\/span>(<span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">email<\/span><span style=\"color: #00ffff;\">,<\/span><span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">password<\/span>)<span style=\"color: #00ffff;\">{<\/span>\r\n                <span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">result<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #66ccff;\"><strong>$this<\/strong><\/span><span style=\"color: #66ccff;\"><strong>-&gt;soap<\/strong><\/span><span style=\"color: #b2dfee;\">-&gt;getContacts<\/span>(<span style=\"color: #00cd00;\">\"<\/span> <span style=\"color: #00cd00;\">contacts_cstm<\/span><span style=\"color: #00cd00;\">.<\/span><span style=\"color: #00cd00;\">can_login_c<\/span><span style=\"color: #00cd00;\">=<\/span><span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00cd00;\">1<\/span><span style=\"color: #00cd00;\">'<\/span> \r\n                                                <span style=\"color: #00cd00;\">and<\/span> <span style=\"color: #00cd00;\">contacts<\/span><span style=\"color: #00cd00;\">.<\/span><span style=\"color: #00cd00;\">email1<\/span><span style=\"color: #00cd00;\">=<\/span><span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00ffff;\">.<\/span><span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">email<\/span><span style=\"color: #00ffff;\">.<\/span><span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00cd00;\">'<\/span> \r\n                                                <span style=\"color: #00cd00;\">and<\/span> <span style=\"color: #00cd00;\">contacts_cstm<\/span><span style=\"color: #00cd00;\">.<\/span><span style=\"color: #00cd00;\">password_c<\/span><span style=\"color: #00cd00;\">=<\/span><span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00ffff;\">.<\/span><span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">password<\/span><span style=\"color: #00ffff;\">.<\/span><span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00ffff;\">,<\/span>\r\n                                                <span style=\"color: #cdcd00;\">1<\/span><span style=\"color: #00ffff;\">,<\/span><span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00cd00;\">\"<\/span>)<span style=\"color: #00ffff;\">;<\/span>\r\n                <span style=\"color: #ffa500;\">if<\/span>(<span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">result<\/span><span style=\"color: #00ffff;\">[<\/span><span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00cd00;\">result_count<\/span><span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00ffff;\">]<\/span><span style=\"color: #00ffff;\">&gt;<\/span><span style=\"color: #cdcd00;\">0<\/span>)<span style=\"color: #00ffff;\">{<\/span>\r\n                        <span style=\"color: #99ff99;\">\/\/<\/span> <span style=\"color: #99ff99;\">Authenticated<\/span>\r\n                        <span style=\"color: #99ff99;\">\/\/<\/span> <span style=\"color: #99ff99;\">transform<\/span> <span style=\"color: #99ff99;\">return<\/span> <span style=\"color: #99ff99;\">values<\/span> <span style=\"color: #99ff99;\">into<\/span> <span style=\"color: #99ff99;\">an<\/span> <span style=\"color: #99ff99;\">associative<\/span> <span style=\"color: #99ff99;\">array<\/span>\r\n                        <span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">result<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #66ccff;\"><strong>$this<\/strong><\/span><span style=\"color: #66ccff;\"><strong>-&gt;soap<\/strong><\/span><span style=\"color: #b2dfee;\">-&gt;nameValuePairToSimpleArray<\/span>(\r\n                                        <span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">result<\/span><span style=\"color: #00ffff;\">[<\/span><span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00cd00;\">entry_list<\/span><span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00ffff;\">]<\/span><span style=\"color: #00ffff;\">[<\/span><span style=\"color: #cdcd00;\">0<\/span><span style=\"color: #00ffff;\">]<\/span><span style=\"color: #00ffff;\">[<\/span><span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00cd00;\">name_value_list<\/span><span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00ffff;\">]<\/span>)<span style=\"color: #00ffff;\">;<\/span>\r\n                        <span style=\"color: #ccccff;\">\/**<\/span>\r\n                        <span style=\"color: #ccccff;\">*<\/span>       <span style=\"color: #ccccff;\">Here<\/span> <span style=\"color: #ccccff;\">we<\/span> <span style=\"color: #ccccff;\">can<\/span> <span style=\"color: #ccccff;\">add<\/span> <span style=\"color: #ccccff;\">code<\/span> <span style=\"color: #ccccff;\">for<\/span> <span style=\"color: #ccccff;\">managing<\/span> <span style=\"color: #ccccff;\">the<\/span> <span style=\"color: #ccccff;\">authenticated<\/span> <span style=\"color: #ccccff;\">user<\/span><span style=\"color: #ccccff;\">,<\/span> \r\n                        <span style=\"color: #ccccff;\">*<\/span>       <span style=\"color: #ccccff;\">for<\/span> <span style=\"color: #ccccff;\">example<\/span> <span style=\"color: #ccccff;\">put<\/span> <span style=\"color: #ccccff;\">some<\/span> <span style=\"color: #ccccff;\">user<\/span> <span style=\"color: #ccccff;\">data<\/span> <span style=\"color: #ccccff;\">in<\/span> <span style=\"color: #ccccff;\">a<\/span> <span style=\"color: #ccccff;\">session<\/span> <span style=\"color: #ccccff;\">variable<\/span>\r\n                        <span style=\"color: #ccccff;\">*<\/span>       <span style=\"color: #ccccff;\">(<\/span><span style=\"color: #ccccff;\">id<\/span><span style=\"color: #ccccff;\">,<\/span> <span style=\"color: #ccccff;\">first<\/span> <span style=\"color: #ccccff;\">and<\/span> <span style=\"color: #ccccff;\">last<\/span> <span style=\"color: #ccccff;\">name<\/span><span style=\"color: #ccccff;\">,<\/span> <span style=\"color: #ccccff;\">email<\/span> <span style=\"color: #ccccff;\">etc<\/span><span style=\"color: #ccccff;\">.<\/span><span style=\"color: #ccccff;\">)<\/span>\r\n                        <span style=\"color: #ccccff;\">*<\/span>       <span style=\"color: #ccccff;\">Something<\/span> <span style=\"color: #ccccff;\">like<\/span> <span style=\"color: #ccccff;\">this<\/span><span style=\"color: #ccccff;\">:<\/span>\r\n                        <span style=\"color: #ccccff;\">*<\/span><span style=\"color: #ccccff;\">*\/<\/span>\r\n                        <span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">_SESSION<\/span><span style=\"color: #00ffff;\">[<\/span><span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00cd00;\">user_data<\/span><span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00ffff;\">]<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">result<\/span><span style=\"color: #00ffff;\">;<\/span>\r\n                        <span style=\"color: #ffa500;\">return<\/span> <span style=\"color: #ffa500;\">true<\/span><span style=\"color: #00ffff;\">;<\/span>\r\n                <span style=\"color: #00ffff;\">}<\/span> <span style=\"color: #ffa500;\">else<\/span><span style=\"color: #00ffff;\">{<\/span> \r\n                        <span style=\"color: #99ff99;\">\/\/<\/span> <span style=\"color: #99ff99;\">Not<\/span> <span style=\"color: #99ff99;\">authenticated<\/span>\r\n                        <span style=\"color: #ccccff;\">\/**<\/span>\r\n                        <span style=\"color: #ccccff;\">*<\/span>       <span style=\"color: #ccccff;\">and<\/span> <span style=\"color: #ccccff;\">here<\/span> <span style=\"color: #ccccff;\">we<\/span> <span style=\"color: #ccccff;\">can<\/span> <span style=\"color: #ccccff;\">add<\/span> <span style=\"color: #ccccff;\">code<\/span> <span style=\"color: #ccccff;\">for<\/span> <span style=\"color: #ccccff;\">managing<\/span> <span style=\"color: #ccccff;\">the<\/span> <span style=\"color: #ccccff;\">authentication<\/span> <span style=\"color: #ccccff;\">error<\/span><span style=\"color: #ccccff;\">,<\/span> \r\n                        <span style=\"color: #ccccff;\">*<\/span>       <span style=\"color: #ccccff;\">for<\/span> <span style=\"color: #ccccff;\">example<\/span> <span style=\"color: #ccccff;\">a<\/span> <span style=\"color: #ccccff;\">notification<\/span> <span style=\"color: #ccccff;\">email<\/span> <span style=\"color: #ccccff;\">to<\/span> <span style=\"color: #ccccff;\">someone<\/span>     \r\n                        <span style=\"color: #ccccff;\">*<\/span><span style=\"color: #ccccff;\">*\/<\/span>\r\n                        <span style=\"color: #ffa500;\">return<\/span> <span style=\"color: #ffa500;\">false<\/span><span style=\"color: #00ffff;\">;<\/span>\r\n                <span style=\"color: #00ffff;\">}<\/span>\r\n        <span style=\"color: #00ffff;\">}<\/span>\r\n        \r\n<span style=\"color: #00ffff;\">}<\/span>\r\n<span style=\"color: #00aae2;\">?&gt;<\/span><\/pre>\n<p><span style=\"font-size: small;\"><\/p>\n<p>Let&#8217;s focus on the method &#8220;authenticate&#8221;. This is obviously used to check the credentials for a user who&#8217;s trying to log in into our application. When calling the &#8220;getContacts&#8221; method, we check that the user is authorized(can_login=1), and that her\/his email\/password pair is correct. If someone matches, the result_count field will be greater than zero.<\/span><\/p>\n<p>In an hypothetic user registration process we also need a &#8220;createUser&#8221; method&#8221; expecting at least an email and a password. Here it is :<\/p>\n<pre><span style=\"color: #ffa500;\">function<\/span> <span style=\"color: #b2dfee;\">createUser<\/span>(<span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">email<\/span><span style=\"color: #00ffff;\">,<\/span><span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">password<\/span>)<span style=\"color: #00ffff;\">{<\/span>\r\n        <span style=\"color: #ffa500;\">return<\/span> <span style=\"color: #66ccff;\"><strong>$this<\/strong><\/span><span style=\"color: #66ccff;\"><strong>-&gt;soap<\/strong><\/span><span style=\"color: #b2dfee;\">-&gt;setContact<\/span>(<span style=\"color: #ffa500;\">array<\/span>(\r\n                        <span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00cd00;\">email1<\/span><span style=\"color: #00cd00;\">\"<\/span>        <span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00ffff;\">&gt;<\/span> <span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">email<\/span><span style=\"color: #00ffff;\">,<\/span>\r\n                        <span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00cd00;\">password_c<\/span><span style=\"color: #00cd00;\">\"<\/span>    <span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00ffff;\">&gt;<\/span> <span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">password<\/span>\r\n        ))<span style=\"color: #00ffff;\">;<\/span>\r\n<span style=\"color: #00ffff;\">}<\/span><\/pre>\n<p><span style=\"font-size: small;\"><br \/>\nRemember that the email field name in sugar &#8220;Contacts&#8221; module is &#8220;email1&#8221; and that password is the custom field &#8220;password_c&#8221; field we created.<\/p>\n<p><strong>A basic user registration page<\/strong><br \/>\nAt this point we have all the basics to manage a simple authentication process. A simple &#8220;register.php&#8221; page could be something like this:<br \/>\n<\/span><\/p>\n<pre><span style=\"color: #f5deb3;\"><span style=\"color: #00aae2;\">&lt;?php<\/span>\r\n<span style=\"color: #ccccff;\">\/**<\/span>\r\n<span style=\"color: #ccccff;\">*<\/span>       <span style=\"color: #ccccff;\">Trivial<\/span> <span style=\"color: #ccccff;\">and<\/span> <span style=\"color: #ccccff;\">incomplete<\/span> <span style=\"color: #ccccff;\">example<\/span> <span style=\"color: #ccccff;\">of<\/span>\r\n<span style=\"color: #ccccff;\">*<\/span>       <span style=\"color: #ccccff;\">user<\/span> <span style=\"color: #ccccff;\">registration<\/span><span style=\"color: #ccccff;\">.<\/span> <span style=\"color: #ccccff;\">Missing<\/span> <span style=\"color: #ccccff;\">are<\/span> <span style=\"color: #ccccff;\">lots<\/span> <span style=\"color: #ccccff;\">of<\/span>\r\n<span style=\"color: #ccccff;\">*<\/span>       <span style=\"color: #ccccff;\">things<\/span><span style=\"color: #ccccff;\">,<\/span> <span style=\"color: #ccccff;\">like<\/span> <span style=\"color: #ccccff;\">password<\/span> <span style=\"color: #ccccff;\">confirmation<\/span> <span style=\"color: #ccccff;\">or<\/span> \r\n<span style=\"color: #ccccff;\">*<\/span>       <span style=\"color: #ccccff;\">checking<\/span> <span style=\"color: #ccccff;\">that<\/span> <span style=\"color: #ccccff;\">a<\/span> <span style=\"color: #ccccff;\">user<\/span> <span style=\"color: #ccccff;\">with<\/span> <span style=\"color: #ccccff;\">the<\/span> <span style=\"color: #ccccff;\">same<\/span> <span style=\"color: #ccccff;\">email<\/span>\r\n<span style=\"color: #ccccff;\">*<\/span>       <span style=\"color: #ccccff;\">is<\/span> <span style=\"color: #ccccff;\">already<\/span> <span style=\"color: #ccccff;\">registered<\/span> <span style=\"color: #ccccff;\">on<\/span> <span style=\"color: #ccccff;\">the<\/span> <span style=\"color: #ccccff;\">system<\/span>\r\n<span style=\"color: #ccccff;\">*<\/span>\r\n<span style=\"color: #ccccff;\">*<\/span><span style=\"color: #ccccff;\">*\/<\/span>\r\n<span style=\"color: #ffa500;\">if<\/span>(<span style=\"color: #ffa500;\">isset<\/span>(<span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">_POST<\/span><span style=\"color: #00ffff;\">[<\/span><span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00cd00;\">submit<\/span><span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00ffff;\">]<\/span>))<span style=\"color: #00ffff;\">{<\/span>\r\n        <span style=\"color: #ffa500;\">require_once<\/span> <span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00cd00;\">UserManagement<\/span><span style=\"color: #00cd00;\">.<\/span><span style=\"color: #00cd00;\">php<\/span><span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00ffff;\">;<\/span>\r\n        <span style=\"color: #66ccff;\"><strong>$usman<\/strong><\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #ffa500;\">new<\/span> <span style=\"color: #b2dfee;\">UserManagement<\/span>()<span style=\"color: #00ffff;\">;<\/span>\r\n        <span style=\"color: #66ccff;\"><strong>$usman<\/strong><\/span><span style=\"color: #b2dfee;\">-&gt;createUser<\/span>(<span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">_POST<\/span><span style=\"color: #00ffff;\">[<\/span><span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00cd00;\">email<\/span><span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00ffff;\">]<\/span><span style=\"color: #00ffff;\">,<\/span><span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">_POST<\/span><span style=\"color: #00ffff;\">[<\/span><span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00cd00;\">password<\/span><span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00ffff;\">]<\/span>)<span style=\"color: #00ffff;\">;<\/span>\r\n        <span style=\"color: #ffa500;\">echo<\/span> <span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00cd00;\">User<\/span> <span style=\"color: #00cd00;\">created<\/span><span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00ffff;\">;<\/span>\r\n        <span style=\"color: #ffa500;\">die<\/span>()<span style=\"color: #00ffff;\">;<\/span>\r\n<span style=\"color: #00ffff;\">}<\/span>\r\n\r\n<span style=\"color: #00aae2;\">?&gt;<\/span>\r\n<span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">html<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n<span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">body<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n<span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">form<\/span> <span style=\"color: #00aae2;\">method<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00aae2;\">POST<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n<span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">table<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n        <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">tr<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n                <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">td<\/span><span style=\"color: #00aae2;\">&gt;<\/span>Email<span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">\/<\/span><span style=\"color: #00aae2;\">td<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n                <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">td<\/span><span style=\"color: #00aae2;\">&gt;<\/span><span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">input<\/span> <span style=\"color: #00aae2;\">type<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00aae2;\">text<\/span> <span style=\"color: #00aae2;\">name<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00aae2;\">email<\/span><span style=\"color: #00aae2;\">&gt;<\/span><span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">\/<\/span><span style=\"color: #00aae2;\">td<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n        <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">\/<\/span><span style=\"color: #00aae2;\">tr<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n        <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">tr<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n                <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">td<\/span><span style=\"color: #00aae2;\">&gt;<\/span>Password<span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">\/<\/span><span style=\"color: #00aae2;\">td<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n                <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">td<\/span><span style=\"color: #00aae2;\">&gt;<\/span><span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">input<\/span> <span style=\"color: #00aae2;\">type<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00aae2;\">password<\/span> <span style=\"color: #00aae2;\">name<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00aae2;\">password<\/span><span style=\"color: #00aae2;\">&gt;<\/span><span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">\/<\/span><span style=\"color: #00aae2;\">td<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n        <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">\/<\/span><span style=\"color: #00aae2;\">tr<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n        <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">tr<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n                <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">td<\/span> <span style=\"color: #00aae2;\">colspan<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00aae2;\">2<\/span> <span style=\"color: #00aae2;\">align<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00aae2;\">center<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n                        <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">input<\/span> <span style=\"color: #00aae2;\">type<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00aae2;\">submit<\/span> <span style=\"color: #00aae2;\">name<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00aae2;\">submit<\/span> <span style=\"color: #00aae2;\">value<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00cd00;\">Register<\/span><span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n                <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">\/<\/span><span style=\"color: #00aae2;\">td<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n        <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">\/<\/span><span style=\"color: #00aae2;\">tr<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n<span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">\/<\/span><span style=\"color: #00aae2;\">table<\/span><span style=\"color: #00aae2;\">&gt;<\/span>        \r\n<span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">\/<\/span><span style=\"color: #00aae2;\">form<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n<span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">\/<\/span><span style=\"color: #00aae2;\">body<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n<span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">\/<\/span><span style=\"color: #00aae2;\">html<\/span><span style=\"color: #00aae2;\">&gt;<\/span> <\/span><\/pre>\n<p><span style=\"font-size: small;\"><\/p>\n<p>The newly created user won&#8217;t be able to log in into the system because the custom field &#8220;can_login_c&#8221; defaults to 0. A sugar user has to check that field to enable user access to the application. In a complete process there will be notification emails, fields controls and other security related stuff.<\/p>\n<p>A sample login page will be something like this:<br \/>\n<\/span><\/p>\n<pre><span style=\"color: #f5deb3;\"><span style=\"color: #00aae2;\">&lt;?php<\/span>\r\n<span style=\"color: #ccccff;\">\/**<\/span>\r\n<span style=\"color: #ccccff;\">*<\/span>       <span style=\"color: #ccccff;\">Similar<\/span> <span style=\"color: #ccccff;\">notes<\/span> <span style=\"color: #ccccff;\">as<\/span> <span style=\"color: #ccccff;\">for<\/span> <span style=\"color: #ccccff;\">the<\/span> <span style=\"color: #ccccff;\">registration<\/span>\r\n<span style=\"color: #ccccff;\">*<\/span>       <span style=\"color: #ccccff;\">page<\/span><span style=\"color: #ccccff;\">.<\/span>\r\n<span style=\"color: #ccccff;\">*<\/span><span style=\"color: #ccccff;\">*\/<\/span>\r\n<span style=\"color: #ffa500;\">if<\/span>(<span style=\"color: #ffa500;\">isset<\/span>(<span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">_POST<\/span><span style=\"color: #00ffff;\">[<\/span><span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00cd00;\">submit<\/span><span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00ffff;\">]<\/span>))<span style=\"color: #00ffff;\">{<\/span>\r\n        <span style=\"color: #ffa500;\">require_once<\/span> <span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00cd00;\">UserManagement<\/span><span style=\"color: #00cd00;\">.<\/span><span style=\"color: #00cd00;\">php<\/span><span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00ffff;\">;<\/span>\r\n        <span style=\"color: #66ccff;\"><strong>$usman<\/strong><\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #ffa500;\">new<\/span> <span style=\"color: #b2dfee;\">UserManagement<\/span>()<span style=\"color: #00ffff;\">;<\/span>\r\n        <span style=\"color: #ffa500;\">if<\/span>(<span style=\"color: #66ccff;\"><strong>$usman<\/strong><\/span><span style=\"color: #b2dfee;\">-&gt;authenticate<\/span>(<span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">_POST<\/span><span style=\"color: #00ffff;\">[<\/span><span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00cd00;\">email<\/span><span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00ffff;\">]<\/span><span style=\"color: #00ffff;\">,<\/span><span style=\"color: #cc6600;\">$<\/span><span style=\"color: #cc6600;\">_POST<\/span><span style=\"color: #00ffff;\">[<\/span><span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00cd00;\">password<\/span><span style=\"color: #00cd00;\">'<\/span><span style=\"color: #00ffff;\">]<\/span>))<span style=\"color: #00ffff;\">{<\/span>\r\n                <span style=\"color: #ffa500;\">echo<\/span> <span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00cd00;\">User<\/span> <span style=\"color: #00cd00;\">authenticated<\/span><span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00ffff;\">;<\/span>\r\n        <span style=\"color: #00ffff;\">}<\/span><span style=\"color: #ffa500;\">else<\/span> <span style=\"color: #00ffff;\">{<\/span>\r\n                <span style=\"color: #ffa500;\">echo<\/span> <span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00cd00;\">Authentication<\/span> <span style=\"color: #00cd00;\">error<\/span><span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00ffff;\">;<\/span>            \r\n        <span style=\"color: #00ffff;\">}<\/span>\r\n        <span style=\"color: #ffa500;\">die<\/span>()<span style=\"color: #00ffff;\">;<\/span>\r\n<span style=\"color: #00ffff;\">}<\/span>\r\n\r\n<span style=\"color: #00aae2;\">?&gt;<\/span>\r\n<span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">html<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n<span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">body<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n<span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">form<\/span> <span style=\"color: #00aae2;\">method<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00aae2;\">POST<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n<span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">table<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n        <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">tr<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n                <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">td<\/span><span style=\"color: #00aae2;\">&gt;<\/span>Email<span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">\/<\/span><span style=\"color: #00aae2;\">td<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n                <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">td<\/span><span style=\"color: #00aae2;\">&gt;<\/span><span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">input<\/span> <span style=\"color: #00aae2;\">type<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00aae2;\">text<\/span> <span style=\"color: #00aae2;\">name<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00aae2;\">email<\/span><span style=\"color: #00aae2;\">&gt;<\/span><span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">\/<\/span><span style=\"color: #00aae2;\">td<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n        <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">\/<\/span><span style=\"color: #00aae2;\">tr<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n        <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">tr<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n                <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">td<\/span><span style=\"color: #00aae2;\">&gt;<\/span>Password<span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">\/<\/span><span style=\"color: #00aae2;\">td<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n                <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">td<\/span><span style=\"color: #00aae2;\">&gt;<\/span><span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">input<\/span> <span style=\"color: #00aae2;\">type<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00aae2;\">password<\/span> <span style=\"color: #00aae2;\">name<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00aae2;\">password<\/span><span style=\"color: #00aae2;\">&gt;<\/span><span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">\/<\/span><span style=\"color: #00aae2;\">td<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n        <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">\/<\/span><span style=\"color: #00aae2;\">tr<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n        <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">tr<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n                <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">td<\/span> <span style=\"color: #00aae2;\">colspan<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00aae2;\">2<\/span> <span style=\"color: #00aae2;\">align<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00aae2;\">center<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n                        <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">input<\/span> <span style=\"color: #00aae2;\">type<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00aae2;\">submit<\/span> <span style=\"color: #00aae2;\">name<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00aae2;\">submit<\/span> <span style=\"color: #00aae2;\">value<\/span><span style=\"color: #00ffff;\">=<\/span><span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00cd00;\">Login<\/span><span style=\"color: #00cd00;\">\"<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n                <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">\/<\/span><span style=\"color: #00aae2;\">td<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n        <span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">\/<\/span><span style=\"color: #00aae2;\">tr<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n<span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">\/<\/span><span style=\"color: #00aae2;\">table<\/span><span style=\"color: #00aae2;\">&gt;<\/span>        \r\n<span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">\/<\/span><span style=\"color: #00aae2;\">form<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n<span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">\/<\/span><span style=\"color: #00aae2;\">body<\/span><span style=\"color: #00aae2;\">&gt;<\/span>\r\n<span style=\"color: #00aae2;\">&lt;<\/span><span style=\"color: #00aae2;\">\/<\/span><span style=\"color: #00aae2;\">html<\/span><span style=\"color: #00aae2;\">&gt;<\/span> <\/span><\/pre>\n<p>Should be quite self-explanatory.<\/p>\n<p>From here it should be easy to build a robust, comfortable and easy to manage authentication system. As you&#8217;ve seen, the amount of code to be written is fairly low, as most of the job is demanded to sugar. There are a number of features we can add to make a more powerful system. Here are a few:<\/p>\n<ol>\n<li>Encoded passwords(md5 or sha). This would ensure a higher level of security in case of db tampering, but will make password recovery impossible.<br \/>\nYou could prefer one method or the other depending on numerous factors.<\/li>\n<li>A status field instead of a simple &#8220;can_login&#8221; checkbox, for example to have waiting for approval,enabled,blocked,revoked users.<br \/>\nIn this case you&#8217;d need to create a dropdown field in sugar.<\/li>\n<li>A &#8220;group&#8221; field, to implement different privileges for different users<\/li>\n<\/ol>\n<p><span style=\"font-size: small;\">and so on. I hope that this overview is clear enough to allow anyone to tailor her\/his own system easily.<\/p>\n<p><strong>Before closing the article<\/strong><br \/>\nJust wanted to name another useful method of sugar soap interface. I&#8217;m talking about &#8220;get_module_fields&#8221;.<br \/>\nThis is a simple method that accepts as parameters a session id and the module name and gives back a list of available fields for the given modules. This is quite useful while developing on sugar\/soap. I&#8217;m not going to write here the code to use it because you already know how to do&#8230;..<\/span><\/p>\n<p><strong>Resources<\/strong><br \/>\n<a href=\"http:\/\/www.beanizer.org\/site\/index.php\/en\/Articles\/Sugar-CRM-integration-with-custom-PHP-applications-I.html\">Sugar CRM integration with custom PHP applications (I) <\/a><br \/>\nThe first article of this series. There you will find the basis of what exposed in the current article.<\/p>\n<p><a href=\"http:\/\/www.beanizer.org\/site\/index.php\/Articoli\/SugarCRM-integration-website-session-and-SOAP-session.html\">Sugar CRM integration &#8211; website session and SOAP session<\/a><br \/>\nThe third article of this series. It&#8217;s about how to use web\/soap session ids\u00a0 in SugarCRM.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Using SugarCRM as an authentication system Demo available : you can now directly test what&#8217;s explained in this article. A demo is available here. Introduction Here we are again with this series of articles about SugarCRM integration. This time we&#8217;ll explore the use of sugar as authentication system and user manager for custom PHP applications. ..<\/p>\n<div class=\"clear-fix\"><\/div>\n<p><a href=\"http:\/\/symbioticindia.in\/docu\/2016\/05\/06\/sugar-crm-integration-with-custom-php-applications-ii\/\" title=\"read more...\">Read more<\/a><\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,2],"tags":[],"class_list":["post-46","post","type-post","status-publish","format-standard","hentry","category-php","category-sugarcrm"],"_links":{"self":[{"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/posts\/46","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/comments?post=46"}],"version-history":[{"count":1,"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/posts\/46\/revisions"}],"predecessor-version":[{"id":47,"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/posts\/46\/revisions\/47"}],"wp:attachment":[{"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/media?parent=46"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/categories?post=46"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/tags?post=46"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}