/**
  * @param \RainLoop\Model\Account $oAccount
  * @param string $sQuery
  * @param int $iLimit = 20
  *
  * @return array
  */
 public function Process($oAccount, $sQuery, $iLimit = 20)
 {
     $aSuggestions = array();
     if ($oAccount instanceof \RainLoop\Model\Account && $this->IsActive() && \is_array($this->aDrivers) && 0 < \strlen($sQuery)) {
         foreach ($this->aDrivers as $oDriver) {
             $aSubs = null;
             if ($oDriver) {
                 $aSubs = $oDriver->Process($oAccount, $sQuery, $iLimit);
                 if (\is_array($aSubs) && 0 < \count($aSubs)) {
                     $aSuggestions = \array_merge($aSuggestions, $aSubs);
                 }
             }
         }
     }
     $aResult = \RainLoop\Utils::RemoveSuggestionsdDuplicates($aSuggestions);
     if ($iLimit < \count($aResult)) {
         $aResult = \array_slice($aResult, 0, $iLimit);
     }
     return $aResult;
 }
Example #2
0
 /**
  * @return array
  */
 public function DoSuggestions()
 {
     $oAccount = $this->getAccountFromToken();
     $sQuery = \trim($this->GetActionParam('Query', ''));
     $iLimit = (int) $this->Config()->Get('contacts', 'suggestions_limit', 20);
     $aResult = array();
     $this->Plugins()->RunHook('ajax.suggestions-input-parameters', array(&$sQuery, &$iLimit, $oAccount));
     $iLimit = (int) $iLimit;
     if (5 > $iLimit) {
         $iLimit = 5;
     }
     $this->Plugins()->RunHook('ajax.suggestions-pre', array(&$aResult, $sQuery, $oAccount, $iLimit));
     if ($iLimit > \count($aResult) && 0 < \strlen($sQuery)) {
         try {
             // Address Book
             $oAddressBookProvider = $this->AddressBookProvider($oAccount);
             if ($oAddressBookProvider && $oAddressBookProvider->IsActive()) {
                 $aSuggestions = $oAddressBookProvider->GetSuggestions($oAccount->ParentEmailHelper(), $sQuery, $iLimit);
                 if (0 === \count($aResult)) {
                     $aResult = $aSuggestions;
                 } else {
                     $aResult = \array_merge($aResult, $aSuggestions);
                 }
             }
         } catch (\Exception $oException) {
             $this->Logger()->WriteException($oException);
         }
     }
     if ($iLimit > \count($aResult) && 0 < \strlen($sQuery)) {
         $oSuggestionsProvider = $this->SuggestionsProvider();
         if ($oSuggestionsProvider && $oSuggestionsProvider->IsActive()) {
             $aSuggestionsProviderResult = $oSuggestionsProvider->Process($oAccount, $sQuery, $iLimit);
             if (\is_array($aSuggestionsProviderResult) && 0 < \count($aSuggestionsProviderResult)) {
                 $aResult = \array_merge($aResult, $aSuggestionsProviderResult);
             }
         }
     }
     $aResult = \RainLoop\Utils::RemoveSuggestionsdDuplicates($aResult);
     if ($iLimit < \count($aResult)) {
         $aResult = \array_slice($aResult, 0, $iLimit);
     }
     $this->Plugins()->RunHook('ajax.suggestions-post', array(&$aResult, $sQuery, $oAccount, $iLimit));
     $aResult = \RainLoop\Utils::RemoveSuggestionsdDuplicates($aResult);
     if ($iLimit < \count($aResult)) {
         $aResult = \array_slice($aResult, 0, $iLimit);
     }
     return $this->DefaultResponse(__FUNCTION__, $aResult);
 }