示例#1
0
 /**
  * @return \MailSo\Cache\CacheClient
  */
 public function Cacher()
 {
     if (null === $this->oCacher) {
         $this->oCacher = \MailSo\Cache\CacheClient::NewInstance();
         $oDriver = null;
         $sDriver = \strtoupper(\trim($this->Config()->Get('cache', 'fast_cache_driver', 'files')));
         switch (true) {
             case 'APC' === $sDriver && \MailSo\Base\Utils::FunctionExistsAndEnabled('apc_store'):
                 $oDriver = \MailSo\Cache\Drivers\APC::NewInstance();
                 break;
             case 'MEMCACHE' === $sDriver && \MailSo\Base\Utils::FunctionExistsAndEnabled('memcache_connect'):
             case 'MEMCACHED' === $sDriver && \MailSo\Base\Utils::FunctionExistsAndEnabled('memcache_connect'):
                 $oDriver = \MailSo\Cache\Drivers\Memcache::NewInstance($this->Config()->Get('labs', 'fast_cache_memcache_host', '127.0.0.1'), (int) $this->Config()->Get('labs', 'fast_cache_memcache_port', 11211));
                 break;
             default:
                 $oDriver = \MailSo\Cache\Drivers\File::NewInstance(APP_PRIVATE_DATA . 'cache');
                 break;
         }
         if ($oDriver) {
             $this->oCacher->SetDriver($oDriver);
         }
         $this->oCacher->SetCacheIndex($this->Config()->Get('cache', 'fast_cache_index', ''));
     }
     return $this->oCacher;
 }
 /**
  * @param string $sName
  *
  * @return bool
  */
 public function Delete($sName)
 {
     $bResult = true;
     $sRealFileName = $this->codeFileName($sName);
     if (0 < \strlen($sName) && \file_exists($this->sDomainPath . '/' . $sRealFileName . '.ini')) {
         $bResult = \unlink($this->sDomainPath . '/' . $sRealFileName . '.ini');
     }
     if ($bResult) {
         $this->Disable($sName, false);
     }
     if ($this->oCacher) {
         $this->oCacher->Delete($this->wildcardDomainsCacheKey());
     }
     return $bResult;
 }
 /**
  * @param \MailSo\Cache\CacheClient|null $oCacher
  * @param string $sSearch
  * @param string $sFilter
  * @param string $sFolderName
  * @param string $sFolderHash
  * @param bool $bUseSortIfSupported = false
  *
  * @return array
  *
  * @throws \MailSo\Base\Exceptions\InvalidArgumentException
  * @throws \MailSo\Net\Exceptions\Exception
  * @throws \MailSo\Imap\Exceptions\Exception
  */
 public function GetUids($oCacher, $sSearch, $sFilter, $sFolderName, $sFolderHash, $bUseSortIfSupported = false)
 {
     $aResultUids = false;
     $bUidsFromCacher = false;
     $bUseCacheAfterSearch = true;
     $sSerializedHash = '';
     $sSerializedLog = '';
     $bUseSortIfSupported = $bUseSortIfSupported ? !!$this->oImapClient->IsSupported('SORT') : false;
     if (0 < \strlen($sSearch)) {
         $bUseSortIfSupported = false;
     }
     $sSearchCriterias = $this->getImapSearchCriterias($sSearch, $sFilter, 0, $bUseCacheAfterSearch);
     if ($bUseCacheAfterSearch && $oCacher && $oCacher->IsInited()) {
         $sSerializedHash = 'GetUids/' . ($bUseSortIfSupported ? 'S' : 'N') . '/' . $this->GenerateImapClientHash() . '/' . $sFolderName . '/' . $sSearchCriterias;
         $sSerializedLog = '"' . $sFolderName . '" / ' . $sSearchCriterias . '';
         $sSerialized = $oCacher->Get($sSerializedHash);
         if (!empty($sSerialized)) {
             $aSerialized = @\json_decode($sSerialized, true);
             if (\is_array($aSerialized) && isset($aSerialized['FolderHash'], $aSerialized['Uids']) && $sFolderHash === $aSerialized['FolderHash'] && \is_array($aSerialized['Uids'])) {
                 if ($this->oLogger) {
                     $this->oLogger->Write('Get Serialized UIDS from cache (' . $sSerializedLog . ') [count:' . \count($aSerialized['Uids']) . ']');
                 }
                 $aResultUids = $aSerialized['Uids'];
                 $bUidsFromCacher = true;
             }
         }
     }
     if (!\is_array($aResultUids)) {
         $aResultUids = $bUseSortIfSupported ? $this->oImapClient->MessageSimpleSort(array('REVERSE ARRIVAL'), $sSearchCriterias, true) : $this->oImapClient->MessageSimpleSearch($sSearchCriterias, true, \MailSo\Base\Utils::IsAscii($sSearchCriterias) ? '' : 'UTF-8');
         if (!$bUidsFromCacher && $bUseCacheAfterSearch && \is_array($aResultUids) && $oCacher && $oCacher->IsInited() && 0 < \strlen($sSerializedHash)) {
             $oCacher->Set($sSerializedHash, @\json_encode(array('FolderHash' => $sFolderHash, 'Uids' => $aResultUids)));
             if ($this->oLogger) {
                 $this->oLogger->Write('Save Serialized UIDS to cache (' . $sSerializedLog . ') [count:' . \count($aResultUids) . ']');
             }
         }
     }
     return \is_array($aResultUids) ? $aResultUids : array();
 }
 /**
  * @param \RainLoop\Model\Account $oAccount = null
  * @param bool $bForceFile = false
  *
  * @return \MailSo\Cache\CacheClient
  */
 public function Cacher($oAccount = null, $bForceFile = false)
 {
     $sKey = '';
     if ($oAccount) {
         $sKey = $oAccount->ParentEmailHelper();
     }
     $sIndexKey = empty($sKey) ? '_default_' : $sKey;
     if ($bForceFile) {
         $sIndexKey .= '/_files_';
     }
     if (!isset($this->aCachers[$sIndexKey])) {
         $this->aCachers[$sIndexKey] = \MailSo\Cache\CacheClient::NewInstance();
         $oDriver = null;
         $sDriver = \strtoupper(\trim($this->Config()->Get('cache', 'fast_cache_driver', 'files')));
         switch (true) {
             default:
             case $bForceFile:
                 $oDriver = \MailSo\Cache\Drivers\File::NewInstance(APP_PRIVATE_DATA . 'cache', $sKey);
                 break;
             case ('APC' === $sDriver || 'APCU' === $sDriver) && \MailSo\Base\Utils::FunctionExistsAndEnabled(array('apc_store', 'apc_fetch', 'apc_delete', 'apc_clear_cache')):
                 $oDriver = \MailSo\Cache\Drivers\APC::NewInstance($sKey);
                 break;
             case ('MEMCACHE' === $sDriver || 'MEMCACHED' === $sDriver) && \MailSo\Base\Utils::FunctionExistsAndEnabled('memcache_connect'):
                 $oDriver = \MailSo\Cache\Drivers\Memcache::NewInstance($this->Config()->Get('labs', 'fast_cache_memcache_host', '127.0.0.1'), (int) $this->Config()->Get('labs', 'fast_cache_memcache_port', 11211), 43200, $sKey);
                 break;
         }
         if ($oDriver) {
             $this->aCachers[$sIndexKey]->SetDriver($oDriver);
         }
         $this->aCachers[$sIndexKey]->SetCacheIndex($this->Config()->Get('cache', 'fast_cache_index', ''));
     }
     return $this->aCachers[$sIndexKey];
 }
示例#5
0
 public function Delete($sAuthToken)
 {
     $this->Session->Delete('AUTHTOKEN:' . $sAuthToken);
 }
示例#6
0
 /**
  * @param string $sSearch
  * @param string $sFolderName
  * @param string|bool $sFolderHash
  * @param bool $bUseSortIfSupported = true
  * @param bool $bUseESearchOrESortRequest = false
  * @param \MailSo\Cache\CacheClient|null $oCacher = null
  *
  * @return Array|bool
  */
 private function getSearchUidsResult($sSearch, $sFolderName, $sFolderHash, $bUseSortIfSupported = true, $bUseESearchOrESortRequest = false, $oCacher = null)
 {
     $bUidsFromCacher = false;
     $aResultUids = false;
     $bUseCacheAfterSearch = true;
     $sSerializedHash = '';
     $bESortSupported = $bUseSortIfSupported && $bUseESearchOrESortRequest ? $this->oImapClient->IsSupported('ESORT') : false;
     $bESearchSupported = $bUseESearchOrESortRequest ? $this->oImapClient->IsSupported('ESEARCH') : false;
     $bUseSortIfSupported = $bUseSortIfSupported ? $this->oImapClient->IsSupported('SORT') : false;
     $sSearchCriterias = $this->getImapSearchCriterias($sSearch, 0, $bUseCacheAfterSearch);
     if ($bUseCacheAfterSearch && $oCacher && $oCacher->IsInited()) {
         $sSerializedHash = ($bUseSortIfSupported ? 'S' : 'N') . '/' . $this->oImapClient->GetLogginedUser() . '@' . $this->oImapClient->GetConnectedHost() . ':' . $this->oImapClient->GetConnectedPort() . '/' . $sFolderName . '/' . $sSearchCriterias;
         $sSerializedLog = '"' . $sFolderName . '" / ' . $sSearchCriterias . '';
         $sSerialized = $oCacher->Get($sSerializedHash);
         if (!empty($sSerialized)) {
             $aSerialized = @\unserialize($sSerialized);
             if (\is_array($aSerialized) && isset($aSerialized['FolderHash'], $aSerialized['Uids']) && \is_array($aSerialized['Uids']) && $sFolderHash === $aSerialized['FolderHash']) {
                 if ($this->oLogger) {
                     $this->oLogger->Write('Get Serialized UIDS from cache (' . $sSerializedLog . ') [count:' . \count($aSerialized['Uids']) . ']');
                 }
                 $aResultUids = $aSerialized['Uids'];
                 $bUidsFromCacher = true;
             }
         }
     }
     if (!\is_array($aResultUids)) {
         if ($bUseSortIfSupported) {
             if ($bESortSupported) {
                 $aESorthData = $this->oImapClient->MessageSimpleESort(array('ARRIVAL'), $sSearchCriterias, array('ALL'), true, '');
                 if (isset($aESorthData['ALL'])) {
                     $aResultUids = \MailSo\Base\Utils::ParseFetchSequence($aESorthData['ALL']);
                     $aResultUids = \array_reverse($aResultUids);
                 }
                 unset($aESorthData);
             } else {
                 $aResultUids = $this->oImapClient->MessageSimpleSort(array('REVERSE ARRIVAL'), $sSearchCriterias, true);
             }
         } else {
             if (!\MailSo\Base\Utils::IsAscii($sSearch)) {
                 try {
                     if ($bESearchSupported) {
                         $aESearchData = $this->oImapClient->MessageSimpleESearch($sSearchCriterias, array('ALL'), true, '', 'UTF-8');
                         if (isset($aESearchData['ALL'])) {
                             $aResultUids = \MailSo\Base\Utils::ParseFetchSequence($aESearchData['ALL']);
                             $aResultUids = \array_reverse($aResultUids);
                         }
                         unset($aESearchData);
                     } else {
                         $aResultUids = $this->oImapClient->MessageSimpleSearch($sSearchCriterias, true, 'UTF-8');
                     }
                 } catch (\MailSo\Imap\Exceptions\NegativeResponseException $oException) {
                     $oException = null;
                     $aResultUids = false;
                 }
             }
             if (false === $aResultUids) {
                 if ($bESearchSupported) {
                     $aESearchData = $this->oImapClient->MessageSimpleESearch($sSearchCriterias, array('ALL'), true);
                     if (isset($aESearchData['ALL'])) {
                         $aResultUids = \MailSo\Base\Utils::ParseFetchSequence($aESearchData['ALL']);
                         $aResultUids = \array_reverse($aResultUids);
                     }
                     unset($aESearchData);
                 } else {
                     $aResultUids = $this->oImapClient->MessageSimpleSearch($sSearchCriterias, true);
                 }
             }
         }
         if (!$bUidsFromCacher && $bUseCacheAfterSearch && \is_array($aResultUids) && $oCacher && $oCacher->IsInited() && 0 < \strlen($sSerializedHash)) {
             $oCacher->Set($sSerializedHash, \serialize(array('FolderHash' => $sFolderHash, 'Uids' => $aResultUids)));
             if ($this->oLogger) {
                 $this->oLogger->Write('Save Serialized UIDS to cache (' . $sSerializedLog . ') [count:' . \count($aResultUids) . ']');
             }
         }
     }
     return $aResultUids;
 }
示例#7
0
 /**
  * @return \MailSo\Cache\CacheClient
  */
 public static function Cacher()
 {
     static $oCacher = null;
     if (null === $oCacher) {
         $oCacher = \MailSo\Cache\CacheClient::NewInstance();
         $oCacher->SetDriver(\MailSo\Cache\Drivers\File::NewInstance(CApi::DataPath() . '/cache'));
         $oCacher->SetCacheIndex(self::Version());
     }
     return $oCacher;
 }
示例#8
0
 /**
  * @param string $sFolderName
  * @param string $sFolderHash
  * @param \MailSo\Cache\CacheClient $oCacher
  *
  * @return array
  *
  * @throws \MailSo\Base\Exceptions\InvalidArgumentException
  * @throws \MailSo\Net\Exceptions\Exception
  * @throws \MailSo\Imap\Exceptions\Exception
  */
 public function MessageListThreadsMap($sFolderName, $sFolderHash, $oCacher)
 {
     if ($oCacher && $oCacher->IsInited()) {
         $sSerializedHash = 'ThreadsMap/UNDELETED/' . $this->oImapClient->GetLogginedUser() . '@' . $this->oImapClient->GetConnectedHost() . ':' . $this->oImapClient->GetConnectedPort() . '/' . $sFolderName . '/' . $sFolderHash;
         $sSerializedUids = $oCacher->Get($sSerializedHash);
         if (!empty($sSerializedUids)) {
             $aSerializedUids = @\unserialize($sSerializedUids);
             if (is_array($aSerializedUids)) {
                 return $aSerializedUids;
             }
         }
     }
     $this->oImapClient->FolderExamine($sFolderName);
     $aThreadUids = array();
     try {
         $aThreadUids = $this->oImapClient->MessageSimpleThread('UNDELETED');
     } catch (\MailSo\Imap\Exceptions\RuntimeException $oException) {
         $aThreadUids = array();
     }
     $aResult = $this->compileThreadArray($aThreadUids);
     if ($oCacher && $oCacher->IsInited() && !empty($sSerializedHash)) {
         $oCacher->Set($sSerializedHash, serialize($aResult));
     }
     return $aResult;
 }