mirror of
https://github.com/YunoHost-Apps/rainloop_ynh.git
synced 2024-09-03 20:16:18 +02:00
ynl-ldap-addressbooks modification:
- report secondary mail. - reformat sources.
This commit is contained in:
parent
f564778115
commit
9dd2b7329e
2 changed files with 60 additions and 39 deletions
|
@ -2,29 +2,32 @@
|
||||||
class YnhLdapAddressbooks implements \RainLoop\Providers\Suggestions\ISuggestions {
|
class YnhLdapAddressbooks implements \RainLoop\Providers\Suggestions\ISuggestions {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
*
|
||||||
* @var \MailSo\Log\Logger
|
* @var \MailSo\Log\Logger
|
||||||
*/
|
*/
|
||||||
private $oLogger = null;
|
private $oLogger = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
*
|
||||||
* @param \RainLoop\Model\Account $oAccount
|
* @param \RainLoop\Model\Account $oAccount
|
||||||
* @param string $sQuery
|
* @param string $sQuery
|
||||||
* @param int $iLimit = 20
|
* @param int $iLimit
|
||||||
|
* = 20
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function Process($oAccount, $sQuery, $iLimit = 20) {
|
public function Process($oAccount, $sQuery, $iLimit = 20) {
|
||||||
$sQuery = \trim($sQuery);
|
$sQuery = \trim ( $sQuery );
|
||||||
|
|
||||||
if (''===$sQuery || !$oAccount) {
|
if ('' === $sQuery || ! $oAccount) {
|
||||||
return array ();
|
return array ();
|
||||||
}
|
}
|
||||||
|
|
||||||
$aResult = $this->ldapSearch ( $oAccount, $sQuery, $iLimit );
|
$aResult = $this->ldapSearch ( $oAccount, $sQuery, $iLimit );
|
||||||
|
|
||||||
$aResult = \RainLoop\Utils::RemoveSuggestionDuplicates($aResult);
|
$aResult = \RainLoop\Utils::RemoveSuggestionDuplicates ( $aResult );
|
||||||
if ($iLimit < \count($aResult)) {
|
if ($iLimit < \count ( $aResult )) {
|
||||||
$aResult = \array_slice($aResult, 0, $iLimit);
|
$aResult = \array_slice ( $aResult, 0, $iLimit );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $aResult;
|
return $aResult;
|
||||||
|
@ -32,8 +35,8 @@ class YnhLdapAddressbooks implements \RainLoop\Providers\Suggestions\ISuggestion
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* OK search in ldap.
|
* OK search in ldap.
|
||||||
* match email or displayName...
|
* match email or displayName...
|
||||||
*
|
*
|
||||||
* @param \RainLoop\Model\Account $oAccount
|
* @param \RainLoop\Model\Account $oAccount
|
||||||
* @param string $sQuery
|
* @param string $sQuery
|
||||||
|
@ -41,27 +44,27 @@ class YnhLdapAddressbooks implements \RainLoop\Providers\Suggestions\ISuggestion
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
private function ldapSearch($oAccount, $sQuery, $iLimit) {
|
private function ldapSearch($oAccount, $sQuery, $iLimit) {
|
||||||
$sSearchEscaped = $this->escape($sQuery);
|
$sSearchEscaped = $this->escape ( $sQuery );
|
||||||
|
|
||||||
$aResult = array();
|
$aResult = array ();
|
||||||
$oCon = @\ldap_connect();
|
$oCon = @\ldap_connect ();
|
||||||
if (! $oCon) {
|
if (! $oCon) {
|
||||||
$this->oLogger->Write('YnhLdapAddressbooks: Could not connect to LDAP server', \MailSo\Log\Enumerations\Type::ERROR );
|
$this->oLogger->Write ( 'YnhLdapAddressbooks: Could not connect to LDAP server', \MailSo\Log\Enumerations\Type::ERROR );
|
||||||
return $aResult;
|
return $aResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
@\ldap_set_option($oCon, LDAP_OPT_PROTOCOL_VERSION, 3 );
|
@\ldap_set_option ( $oCon, LDAP_OPT_PROTOCOL_VERSION, 3 );
|
||||||
|
|
||||||
if (!ldap_bind($oCon)) {
|
if (! ldap_bind ( $oCon )) {
|
||||||
// bizard... ca renvoie false.... mais ca marche....
|
// bizard... ca renvoie false.... mais ca marche....
|
||||||
// $this->logLdapError ( $oCon, 'ldap_bind' );
|
// $this->logLdapError ( $oCon, 'ldap_bind' );
|
||||||
// $this->Manager()->Actions()->Logger()->Write('YnhLdapAdressbooks: Could not bind to LDAP server', \MailSo\Log\Enumerations\Type::ERROR);
|
// $this->Manager()->Actions()->Logger()->Write('YnhLdapAdressbooks: Could not bind to LDAP server', \MailSo\Log\Enumerations\Type::ERROR);
|
||||||
// return $aResult;
|
// return $aResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->oLogger->Write('YnhLdapAddressbooks: connected to LDAP', \MailSo\Log\Enumerations\Type::INFO, 'LDAP' );
|
$this->oLogger->Write ( 'YnhLdapAddressbooks: connected to LDAP', \MailSo\Log\Enumerations\Type::INFO, 'LDAP' );
|
||||||
|
|
||||||
$sSearchDn='dc=yunohost,dc=org';
|
$sSearchDn = 'dc=yunohost,dc=org';
|
||||||
|
|
||||||
// on veut chercher parmis mail et nom utilisateur...
|
// on veut chercher parmis mail et nom utilisateur...
|
||||||
$sFilter = '(&(objectClass=inetOrgPerson)';
|
$sFilter = '(&(objectClass=inetOrgPerson)';
|
||||||
|
@ -70,32 +73,43 @@ class YnhLdapAddressbooks implements \RainLoop\Providers\Suggestions\ISuggestion
|
||||||
$sFilter .= '(displayName=*' . $sSearchEscaped . '*)';
|
$sFilter .= '(displayName=*' . $sSearchEscaped . '*)';
|
||||||
$sFilter .= '))';
|
$sFilter .= '))';
|
||||||
|
|
||||||
$aItems = array ( 'mail', 'displayName');
|
$aItems = array (
|
||||||
|
'mail',
|
||||||
|
'displayName'
|
||||||
|
);
|
||||||
|
|
||||||
$this->oLogger->Write('YnhLdapAddressbooks: ldap_search : '.$sSearchDn.' / '.$sFilter, \MailSo\Log\Enumerations\Type::INFO, 'LDAP' );
|
$this->oLogger->Write ( 'YnhLdapAddressbooks: ldap_search : ' . $sSearchDn . ' / ' . $sFilter, \MailSo\Log\Enumerations\Type::INFO, 'LDAP' );
|
||||||
|
|
||||||
$oS = @\ldap_search($oCon, $sSearchDn, $sFilter, $aItems, 0, $iLimit, $iLimit);
|
$oS = @\ldap_search ( $oCon, $sSearchDn, $sFilter, $aItems, 0, $iLimit, $iLimit );
|
||||||
if ($oS) {
|
if ($oS) {
|
||||||
$aEntries = @\ldap_get_entries($oCon, $oS);
|
$aEntries = @\ldap_get_entries ( $oCon, $oS );
|
||||||
$this->oLogger->Write('YnhLdapAddressbooks: ldap_search => '.var_export($aEntries), \MailSo\Log\Enumerations\Type::INFO, 'LDAP');
|
$this->oLogger->Write ( 'YnhLdapAddressbooks: ldap_search => ' . var_export ( $aEntries ), \MailSo\Log\Enumerations\Type::INFO, 'LDAP' );
|
||||||
if (is_array($aEntries)) {
|
|
||||||
if (isset ( $aEntries ['count'] )) { unset ( $aEntries ['count'] ); }
|
if (is_array ( $aEntries )) {
|
||||||
|
if (isset ( $aEntries ['count'] )) {
|
||||||
|
unset ( $aEntries ['count'] );
|
||||||
|
}
|
||||||
|
|
||||||
foreach ( $aEntries as $aItem ) {
|
foreach ( $aEntries as $aItem ) {
|
||||||
if ($aItem) {
|
$sName = \trim ( $aItem ['displayname'] [0] );
|
||||||
$sEmail = \trim($aItem['mail'] [0] );
|
if (isset ( $aItem ['mail'] ['count'] )) {
|
||||||
$sName = \trim($aItem['displayname'] [0] );
|
unset ( $aItem ['mail'] ['count'] );
|
||||||
|
}
|
||||||
if (!empty($sEmail)) {
|
foreach ( $aItem ['mail'] as $sEmail ) {
|
||||||
$aResult[] = array($sEmail, $sName);
|
$sEmail = \trim ( $sEmail );
|
||||||
|
if (! empty ( $sEmail )) {
|
||||||
|
$aResult [] = array (
|
||||||
|
$sEmail,
|
||||||
|
$sName
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$this->logLdapError($oCon, 'ldap_get_entries');
|
$this->logLdapError ( $oCon, 'ldap_get_entries' );
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$this->logLdapError($oCon, 'ldap_search');
|
$this->logLdapError ( $oCon, 'ldap_search' );
|
||||||
}
|
}
|
||||||
|
|
||||||
return $aResult;
|
return $aResult;
|
||||||
|
@ -109,12 +123,18 @@ class YnhLdapAddressbooks implements \RainLoop\Providers\Suggestions\ISuggestion
|
||||||
*/
|
*/
|
||||||
private function escape($sStr) {
|
private function escape($sStr) {
|
||||||
$aNewChars = array ();
|
$aNewChars = array ();
|
||||||
$aChars = array ('\\', '*',' (', ')', \chr(0));
|
$aChars = array (
|
||||||
|
'\\',
|
||||||
|
'*',
|
||||||
|
' (',
|
||||||
|
')',
|
||||||
|
\chr ( 0 )
|
||||||
|
);
|
||||||
|
|
||||||
foreach ( $aChars as $iIndex => $sValue ) {
|
foreach ( $aChars as $iIndex => $sValue ) {
|
||||||
$aNewChars [$iIndex] = '\\' . \str_pad ( \dechex ( \ord ( $sValue ) ), 2, '0' );
|
$aNewChars [$iIndex] = '\\' . \str_pad ( \dechex ( \ord ( $sValue ) ), 2, '0' );
|
||||||
}
|
}
|
||||||
return \str_replace($aChars, $aNewChars, $sStr);
|
return \str_replace ( $aChars, $aNewChars, $sStr );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -126,10 +146,10 @@ class YnhLdapAddressbooks implements \RainLoop\Providers\Suggestions\ISuggestion
|
||||||
*/
|
*/
|
||||||
private function logLdapError($oCon, $sCmd) {
|
private function logLdapError($oCon, $sCmd) {
|
||||||
if ($this->oLogger) {
|
if ($this->oLogger) {
|
||||||
$sError = $oCon ? @\ldap_error($oCon) : '';
|
$sError = $oCon ? @\ldap_error ( $oCon ) : '';
|
||||||
$iErrno = $oCon ? @\ldap_errno($oCon) : 0;
|
$iErrno = $oCon ? @\ldap_errno ( $oCon ) : 0;
|
||||||
|
|
||||||
$this->oLogger->Write($sCmd.' error: '.$sError.' ('. $iErrno.')', \MailSo\Log\Enumerations\Type::WARNING, 'LDAP' );
|
$this->oLogger->Write ( $sCmd . ' error: ' . $sError . ' (' . $iErrno . ')', \MailSo\Log\Enumerations\Type::WARNING, 'LDAP' );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,5 +166,5 @@ class YnhLdapAddressbooks implements \RainLoop\Providers\Suggestions\ISuggestion
|
||||||
public function SetLogger($oLogger) {
|
public function SetLogger($oLogger) {
|
||||||
$this->oLogger = $oLogger instanceof \MailSo\Log\Logger ? $oLogger : null;
|
$this->oLogger = $oLogger instanceof \MailSo\Log\Logger ? $oLogger : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
?>
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
<?php
|
<?php
|
||||||
class YnhLdapAddressbooksPlugin extends \RainLoop\Plugins\AbstractPlugin {
|
class YnhLdapAddressbooksPlugin extends \RainLoop\Plugins\AbstractPlugin {
|
||||||
|
|
||||||
public function Init() {
|
public function Init() {
|
||||||
$this->addHook ( 'main.fabrica', 'MainFabrica' );
|
$this->addHook ( 'main.fabrica', 'MainFabrica' );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* test if ldap is supported (but with ynh it nead ;) )
|
* test if ldap is supported (but with ynh it nead ;) )
|
||||||
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function Supported() {
|
public function Supported() {
|
||||||
|
@ -17,6 +17,7 @@ class YnhLdapAddressbooksPlugin extends \RainLoop\Plugins\AbstractPlugin {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
*
|
||||||
* @param string $sName
|
* @param string $sName
|
||||||
* @param mixed $mResult
|
* @param mixed $mResult
|
||||||
*/
|
*/
|
||||||
|
@ -32,5 +33,5 @@ class YnhLdapAddressbooksPlugin extends \RainLoop\Plugins\AbstractPlugin {
|
||||||
$mResult [] = $oProvider;
|
$mResult [] = $oProvider;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
?>
|
||||||
|
|
Loading…
Reference in a new issue