mirror of
https://github.com/the-djmaze/snappymail.git
synced 2025-02-23 22:36:01 +08:00
Merge pull request #1716 from lindolfomeira/ldap-contacts-suggestions
Added support to additional search field (defaults to "uid")
This commit is contained in:
commit
957e393d3b
2 changed files with 30 additions and 7 deletions
|
@ -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);
|
||||||
|
|
|
@ -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')
|
||||||
|
|
Loading…
Reference in a new issue