1
0
Fork 0
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:
Djip007 2015-10-24 01:53:08 +02:00
parent f564778115
commit 9dd2b7329e
2 changed files with 60 additions and 39 deletions

View file

@ -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;
@ -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;
} }
} }
?>

View file

@ -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;
} }
} }
} }
?>