From 075b841b844a457c55a6a52ddc08e975d20e462c Mon Sep 17 00:00:00 2001 From: Lindolfo Meira Date: Wed, 6 Jun 2018 19:02:43 -0300 Subject: [PATCH] Added support to additional search field (defaults to "uid") --- .../LdapContactsSuggestions.php | 32 +++++++++++++++---- plugins/ldap-contacts-suggestions/index.php | 7 ++-- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/plugins/ldap-contacts-suggestions/LdapContactsSuggestions.php b/plugins/ldap-contacts-suggestions/LdapContactsSuggestions.php index 9eb538678..485c9f2cd 100644 --- a/plugins/ldap-contacts-suggestions/LdapContactsSuggestions.php +++ b/plugins/ldap-contacts-suggestions/LdapContactsSuggestions.php @@ -32,6 +32,11 @@ class LdapContactsSuggestions implements \RainLoop\Providers\Suggestions\ISugges */ private $sObjectClass = 'inetOrgPerson'; + /** + * @var string + */ + private $sUidField = 'uid'; + /** * @var string */ @@ -64,7 +69,7 @@ class LdapContactsSuggestions implements \RainLoop\Providers\Suggestions\ISugges * * @return \LdapContactsSuggestions */ - public function SetConfig($sHostName, $iHostPort, $sAccessDn, $sAccessPassword, $sUsersDn, $sObjectClass, $sNameField, $sEmailField) + public function SetConfig($sHostName, $iHostPort, $sAccessDn, $sAccessPassword, $sUsersDn, $sObjectClass, $sUidField, $sNameField, $sEmailField) { $this->sHostName = $sHostName; $this->iHostPort = $iHostPort; @@ -72,6 +77,7 @@ class LdapContactsSuggestions implements \RainLoop\Providers\Suggestions\ISugges $this->sAccessPassword = $sAccessPassword; $this->sUsersDn = $sUsersDn; $this->sObjectClass = $sObjectClass; + $this->sUidField = $sUidField; $this->sNameField = $sNameField; $this->sEmailField = $sEmailField; @@ -128,9 +134,9 @@ class LdapContactsSuggestions implements \RainLoop\Providers\Suggestions\ISugges * * @return array */ - private function findNameAndEmail($aLdapItem, $aEmailFields, $aNameFields) + private function findNameAndEmail($aLdapItem, $aEmailFields, $aNameFields, $aUidFields) { - $sEmail = $sName = ''; + $sEmail = $sName = $sUid = ''; if ($aLdapItem) { foreach ($aEmailFields as $sField) @@ -156,9 +162,21 @@ class LdapContactsSuggestions implements \RainLoop\Providers\Suggestions\ISugges } } } + + foreach ($aUidFields as $sField) + { + if (!empty($aLdapItem[$sField][0])) + { + $sUid = \trim($aLdapItem[$sField][0]); + if (!empty($sUid)) + { + break; + } + } + } } - return array($sEmail, $sName); + return array($sEmail, $sName, $sUid); } /** @@ -200,11 +218,13 @@ class LdapContactsSuggestions implements \RainLoop\Providers\Suggestions\ISugges $aEmails = empty($this->sEmailField) ? array() : \explode(',', $this->sEmailField); $aNames = empty($this->sNameField) ? array() : \explode(',', $this->sNameField); + $aUIDs = empty($this->sUidField) ? array() : \explode(',', $this->sUidField); $aEmails = \array_map('trim', $aEmails); $aNames = \array_map('trim', $aNames); + $aUIDs = \array_map('trim', $aUIDs); - $aFields = \array_merge($aEmails, $aNames); + $aFields = \array_merge($aEmails, $aNames, $aUIDs); $aItems = array(); $sSubFilter = ''; @@ -238,7 +258,7 @@ class LdapContactsSuggestions implements \RainLoop\Providers\Suggestions\ISugges if ($aItem) { $sName = $sEmail = ''; - list ($sEmail, $sName) = $this->findNameAndEmail($aItem, $aEmails, $aNames); + list ($sEmail, $sName) = $this->findNameAndEmail($aItem, $aEmails, $aNames, $aUIDs); if (!empty($sEmail)) { $aResult[] = array($sEmail, $sName); diff --git a/plugins/ldap-contacts-suggestions/index.php b/plugins/ldap-contacts-suggestions/index.php index b02fc1c37..0bcd0b2b7 100644 --- a/plugins/ldap-contacts-suggestions/index.php +++ b/plugins/ldap-contacts-suggestions/index.php @@ -41,6 +41,7 @@ class LdapContactsSuggestionsPlugin extends \RainLoop\Plugins\AbstractPlugin $sAccessPassword = \trim($this->Config()->Get('plugin', 'access_password', '')); $sUsersDn = \trim($this->Config()->Get('plugin', 'users_dn_format', '')); $sObjectClass = \trim($this->Config()->Get('plugin', 'object_class', '')); + $sSearchField = \trim($this->Config()->Get('plugin', 'search_field', '')); $sNameField = \trim($this->Config()->Get('plugin', 'name_field', '')); $sEmailField = \trim($this->Config()->Get('plugin', 'mail_field', '')); @@ -50,7 +51,7 @@ class LdapContactsSuggestionsPlugin extends \RainLoop\Plugins\AbstractPlugin include_once __DIR__.'/LdapContactsSuggestions.php'; $oProvider = new LdapContactsSuggestions(); - $oProvider->SetConfig($sHostName, $iHostPort, $sAccessDn, $sAccessPassword, $sUsersDn, $sObjectClass, $sNameField, $sEmailField); + $oProvider->SetConfig($sHostName, $iHostPort, $sAccessDn, $sAccessPassword, $sUsersDn, $sObjectClass, $sSearchField, $sNameField, $sEmailField); $mResult[] = $oProvider; } @@ -80,6 +81,8 @@ class LdapContactsSuggestionsPlugin extends \RainLoop\Plugins\AbstractPlugin ->SetDefaultValue('ou=People,dc=domain,dc=com'), \RainLoop\Plugins\Property::NewInstance('object_class')->SetLabel('objectClass value') ->SetDefaultValue('inetOrgPerson'), + \RainLoop\Plugins\Property::NewInstance('search_field')->SetLabel('Search field') + ->SetDefaultValue('uid'), \RainLoop\Plugins\Property::NewInstance('name_field')->SetLabel('Name field') ->SetDefaultValue('givenname'), \RainLoop\Plugins\Property::NewInstance('mail_field')->SetLabel('Mail field') @@ -89,4 +92,4 @@ class LdapContactsSuggestionsPlugin extends \RainLoop\Plugins\AbstractPlugin ->SetDefaultValue('*') ); } -} \ No newline at end of file +}