/** * get folder status and return all folders where something needs to be done * * @param Felamimail_Model_FolderFilter $_filter * @return Tinebase_Record_RecordSet */ public function getFolderStatus(Felamimail_Model_FolderFilter $_filter) { $this->_availableUpdateTime = NULL; // add user account ids to filter and use the folder backend to search as the folder controller has some special handling in its search function $_filter->createFilter(array('field' => 'account_id', 'operator' => 'in', 'value' => Felamimail_Controller_Account::getInstance()->search()->getArrayOfIds())); $folderBackend = Felamimail_Backend_Folder::getInstance(); $folders = $folderBackend->search($_filter); if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($_filter->toArray(), TRUE)); } if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) { Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__ . " Checking status of " . count($folders) . ' folders.'); } $result = new Tinebase_Record_RecordSet('Felamimail_Model_Folder'); foreach ($folders as $folder) { if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Checking folder ' . $folder->globalname); } if ($this->_doNotUpdateCache($folder, FALSE)) { continue; } $imap = Felamimail_Backend_ImapFactory::factory($folder->account_id); $folder = Felamimail_Controller_Cache_Folder::getInstance()->getIMAPFolderCounter($folder); if ($this->_cacheIsInvalid($folder) || $this->_messagesInCacheButNotOnIMAP($folder)) { $result->addRecord($folder); continue; } if ($folder->imap_totalcount > 0) { try { $this->_updateMessageSequence($folder, $imap); } catch (Felamimail_Exception_IMAPMessageNotFound $feimnf) { $result->addRecord($folder); continue; } if ($this->_messagesDeletedOnIMAP($folder) || $this->_messagesToBeAddedToCache($folder) || $this->_messagesMissingFromCache($folder)) { $result->addRecord($folder); continue; } } } if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) { Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__ . " Found " . count($result) . ' folders that need an update.'); } return $result; }
/** * extract values from folder filter * * @param Felamimail_Model_FolderFilter $_filter * @return array (assoc) with filter values * * @todo add AND/OR conditions for multiple filters of the same field? */ protected function _extractFilter(Felamimail_Model_FolderFilter $_filter) { $result = array('account_id' => Tinebase_Core::getPreference('Felamimail')->{Felamimail_Preference::DEFAULTACCOUNT}, 'globalname' => ''); $filters = $_filter->getFilterObjects(); foreach ($filters as $filter) { switch ($filter->getField()) { case 'account_id': $result['account_id'] = $filter->getValue(); break; case 'globalname': $result['globalname'] = $filter->getValue(); break; } } return $result; }