Merge pull request #1716 from lindolfomeira/ldap-contacts-suggestions

Added support to additional search field (defaults to "uid")
This commit is contained in:
RainLoop Team 2019-03-28 01:19:48 +03:00 committed by GitHub
commit 957e393d3b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 7 deletions

View file

@ -32,6 +32,11 @@ class LdapContactsSuggestions implements \RainLoop\Providers\Suggestions\ISugges
*/ */
private $sObjectClass = 'inetOrgPerson'; private $sObjectClass = 'inetOrgPerson';
/**
* @var string
*/
private $sUidField = 'uid';
/** /**
* @var string * @var string
*/ */
@ -64,7 +69,7 @@ class LdapContactsSuggestions implements \RainLoop\Providers\Suggestions\ISugges
* *
* @return \LdapContactsSuggestions * @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->sHostName = $sHostName;
$this->iHostPort = $iHostPort; $this->iHostPort = $iHostPort;
@ -75,6 +80,7 @@ class LdapContactsSuggestions implements \RainLoop\Providers\Suggestions\ISugges
} }
$this->sUsersDn = $sUsersDn; $this->sUsersDn = $sUsersDn;
$this->sObjectClass = $sObjectClass; $this->sObjectClass = $sObjectClass;
$this->sUidField = $sUidField;
$this->sNameField = $sNameField; $this->sNameField = $sNameField;
$this->sEmailField = $sEmailField; $this->sEmailField = $sEmailField;
@ -131,9 +137,9 @@ class LdapContactsSuggestions implements \RainLoop\Providers\Suggestions\ISugges
* *
* @return array * @return array
*/ */
private function findNameAndEmail($aLdapItem, $aEmailFields, $aNameFields) private function findNameAndEmail($aLdapItem, $aEmailFields, $aNameFields, $aUidFields)
{ {
$sEmail = $sName = ''; $sEmail = $sName = $sUid = '';
if ($aLdapItem) if ($aLdapItem)
{ {
foreach ($aEmailFields as $sField) foreach ($aEmailFields as $sField)
@ -159,9 +165,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);
} }
/** /**
@ -207,11 +225,13 @@ class LdapContactsSuggestions implements \RainLoop\Providers\Suggestions\ISugges
$aEmails = empty($this->sEmailField) ? array() : \explode(',', $this->sEmailField); $aEmails = empty($this->sEmailField) ? array() : \explode(',', $this->sEmailField);
$aNames = empty($this->sNameField) ? array() : \explode(',', $this->sNameField); $aNames = empty($this->sNameField) ? array() : \explode(',', $this->sNameField);
$aUIDs = empty($this->sUidField) ? array() : \explode(',', $this->sUidField);
$aEmails = \array_map('trim', $aEmails); $aEmails = \array_map('trim', $aEmails);
$aNames = \array_map('trim', $aNames); $aNames = \array_map('trim', $aNames);
$aUIDs = \array_map('trim', $aUIDs);
$aFields = \array_merge($aEmails, $aNames); $aFields = \array_merge($aEmails, $aNames, $aUIDs);
$aItems = array(); $aItems = array();
$sSubFilter = ''; $sSubFilter = '';
@ -245,7 +265,7 @@ class LdapContactsSuggestions implements \RainLoop\Providers\Suggestions\ISugges
if ($aItem) if ($aItem)
{ {
$sName = $sEmail = ''; $sName = $sEmail = '';
list ($sEmail, $sName) = $this->findNameAndEmail($aItem, $aEmails, $aNames); list ($sEmail, $sName) = $this->findNameAndEmail($aItem, $aEmails, $aNames, $aUIDs);
if (!empty($sEmail)) if (!empty($sEmail))
{ {
$aResult[] = array($sEmail, $sName); $aResult[] = array($sEmail, $sName);

View file

@ -41,6 +41,7 @@ class LdapContactsSuggestionsPlugin extends \RainLoop\Plugins\AbstractPlugin
$sAccessPassword = \trim($this->Config()->Get('plugin', 'access_password', '')); $sAccessPassword = \trim($this->Config()->Get('plugin', 'access_password', ''));
$sUsersDn = \trim($this->Config()->Get('plugin', 'users_dn_format', '')); $sUsersDn = \trim($this->Config()->Get('plugin', 'users_dn_format', ''));
$sObjectClass = \trim($this->Config()->Get('plugin', 'object_class', '')); $sObjectClass = \trim($this->Config()->Get('plugin', 'object_class', ''));
$sSearchField = \trim($this->Config()->Get('plugin', 'search_field', ''));
$sNameField = \trim($this->Config()->Get('plugin', 'name_field', '')); $sNameField = \trim($this->Config()->Get('plugin', 'name_field', ''));
$sEmailField = \trim($this->Config()->Get('plugin', 'mail_field', '')); $sEmailField = \trim($this->Config()->Get('plugin', 'mail_field', ''));
@ -49,7 +50,7 @@ class LdapContactsSuggestionsPlugin extends \RainLoop\Plugins\AbstractPlugin
include_once __DIR__.'/LdapContactsSuggestions.php'; include_once __DIR__.'/LdapContactsSuggestions.php';
$oProvider = new LdapContactsSuggestions(); $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; $mResult[] = $oProvider;
} }
@ -80,6 +81,8 @@ class LdapContactsSuggestionsPlugin extends \RainLoop\Plugins\AbstractPlugin
->SetDefaultValue('ou=People,dc=domain,dc=com'), ->SetDefaultValue('ou=People,dc=domain,dc=com'),
\RainLoop\Plugins\Property::NewInstance('object_class')->SetLabel('objectClass value') \RainLoop\Plugins\Property::NewInstance('object_class')->SetLabel('objectClass value')
->SetDefaultValue('inetOrgPerson'), ->SetDefaultValue('inetOrgPerson'),
\RainLoop\Plugins\Property::NewInstance('search_field')->SetLabel('Search field')
->SetDefaultValue('uid'),
\RainLoop\Plugins\Property::NewInstance('name_field')->SetLabel('Name field') \RainLoop\Plugins\Property::NewInstance('name_field')->SetLabel('Name field')
->SetDefaultValue('givenname'), ->SetDefaultValue('givenname'),
\RainLoop\Plugins\Property::NewInstance('mail_field')->SetLabel('Mail field') \RainLoop\Plugins\Property::NewInstance('mail_field')->SetLabel('Mail field')