/** * delete messages with given messageuids by folder (id) * * @param array $_msguids * @param mixed $_folderId * @return integer number of deleted rows or false if no message are given */ public function deleteMessageuidsByFolderId($_msguids, $_folderId) { $return = FALSE; if (!(empty($_msguids) || !is_array($_msguids))) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Logicaly delete the messages ' . print_r($_msguids, true)); $return = count($_msguids); } //return $return; /** * TODO: remove the code below and uncomment the code above */ $aux = new Felamimail_Backend_Cache_Sql_Message(); $retorno = $aux->deleteMessageuidsByFolderId($_msguids, $_folderId); return $retorno; }
/** * test search with cache * - test text_plain.eml message * - test from header */ public function testSearchWithCache() { // get inbox folder id Felamimail_Controller_Cache_Folder::getInstance()->update($this->_account->getId()); $folderBackend = new Felamimail_Backend_Folder(); $folder = Felamimail_Controller_Folder::getInstance()->getByBackendAndGlobalName($this->_account->getId(), $this->_testFolderName); // clear cache and empty folder $this->_cache->clear($folder->getId()); Felamimail_Controller_Folder::getInstance()->emptyFolder($folder->getId()); // append message $this->_appendMessage('text_plain.eml', $this->_folder); // search messages in test folder $this->_cache->updateCache($folder); $result = $this->_controller->search($this->_getFilter($folder->getId())); //print_r($result->toArray()); // check result $firstMessage = $result->getFirstRecord(); $this->_createdMessages->addRecord($firstMessage); $this->assertGreaterThan(0, count($result)); $this->assertEquals($folder->getId(), $firstMessage->folder_id); $this->assertEquals("Re: [gentoo-dev] `paludis --info' is not like `emerge --info'", $firstMessage->subject); $this->assertEquals('Pipping, Sebastian (Luxembourg)', $firstMessage->from_name); $this->assertEquals('*****@*****.**', $firstMessage->from_email); $this->assertEquals(array('*****@*****.**', '*****@*****.**'), $firstMessage->to); // check cache entries $cacheBackend = new Felamimail_Backend_Cache_Sql_Message(); $cachedMessage = $cacheBackend->get($firstMessage->getId()); $this->assertEquals($folder->getId(), $cachedMessage->folder_id); $this->assertEquals(Tinebase_DateTime::now()->format('Y-m-d'), $cachedMessage->timestamp->format('Y-m-d')); // clear cache $this->_cache->clear($folder->getId()); }
/** * add to/cc/bcc and flags custom filters * * @param Zend_Db_Select $_select * @param Felamimail_Backend_Cache_Sql_Message $_backend * @param array $_filterData * @return void */ protected function _addRecipientAndFlagsSql($_select, $_backend, $_filterData) { $db = $_backend->getAdapter(); $foreignTables = $_backend->getForeignTables(); // add conditions $tablename = $foreignTables[$_filterData['field']]['table']; if ($_filterData['field'] !== 'flags') { $fieldName = $tablename . '.name'; $fieldEmail = $tablename . '.email'; } // add filter value if (!is_array($_filterData['value'])) { $value = '%' . $_filterData['value'] . '%'; } else { $value = array(); foreach ((array) $_filterData['value'] as $customValue) { $value[] = '%' . $customValue . '%'; } } if ($_filterData['field'] == 'flags') { $columns = $_select->getPart(Zend_Db_Select::COLUMNS); $flags = ''; foreach ($columns as $column) { if ($column[2] == 'flags') { $flags = '(' . $column[1] . ')'; break; } } if ($_filterData['operator'] == 'equals' || $_filterData['operator'] == 'contains') { $_select->having($db->quoteInto($flags . ' LIKE ?', $value)); } else { if ($_filterData['operator'] == 'in' || $_filterData['operator'] == 'notin') { if (empty($value)) { $whereString = $flags . ' IS NULL'; } else { $value = (array) $value; $where = array(); $op = $_filterData['operator'] == 'in' ? 'LIKE' : 'NOT LIKE'; $opImplode = $_filterData['operator'] == 'in' ? ' OR ' : ' AND '; foreach ($value as $flag) { $where[] = $db->quoteInto($flags . ' ' . $op . ' ?', $flag); } $whereString = implode($opImplode, $where); if ($_filterData['operator'] == 'notin') { $whereString = '(' . $whereString . ') OR ' . $flags . ' IS NULL'; } } $_select->having($whereString); } else { $_select->having($db->quoteInto($flags . ' NOT LIKE ? OR ' . $flags . ' IS NULL', $value)); } } } else { $_select->where($db->quoteInto($fieldName . ' LIKE ?', $value) . ' OR ' . $db->quoteInto($fieldEmail . ' LIKE ?', $value)); } }
/** * delete messages from cache by folder * * @param $_folder */ public function deleteByFolder(Felamimail_Model_Folder $_folder) { $this->_backend->deleteByFolderId($_folder); }
/** * add to/cc/bcc and flags custom filters * * @param Zend_Db_Select $_select * @param Felamimail_Backend_Cache_Sql_Message $_backend * @param array $_filterData * @return void */ protected function _addRecipientAndFlagsSql($_select, $_backend, $_filterData) { $db = $_backend->getAdapter(); $foreignTables = $_backend->getForeignTables(); // add conditions $tablename = $foreignTables[$_filterData['field']]['table']; if ($_filterData['field'] !== 'flags') { $fieldName = $tablename . '.name'; $fieldEmail = $tablename . '.email'; } // add filter value if (!is_array($_filterData['value'])) { $value = '%' . $_filterData['value'] . '%'; } else { $value = array(); foreach ((array) $_filterData['value'] as $customValue) { $value[] = '%' . $customValue . '%'; } } if ($_filterData['field'] == 'flags') { $havingColumn = $db instanceof Zend_Db_Adapter_Pdo_Pgsql ? Tinebase_Backend_Sql_Command::factory($db)->getAggregate('felamimail_cache_msg_flag.flag') : 'flags'; if ($_filterData['operator'] == 'equals' || $_filterData['operator'] == 'contains') { $_select->having($db->quoteInto($havingColumn . ' LIKE ?', $value)); } else { if ($_filterData['operator'] == 'in' || $_filterData['operator'] == 'notin') { if (empty($value)) { $whereString = 'flags IS NULL'; } else { $value = (array) $value; $where = array(); $op = $_filterData['operator'] == 'in' ? 'LIKE' : 'NOT LIKE'; $opImplode = $_filterData['operator'] == 'in' ? ' OR ' : ' AND '; foreach ($value as $flag) { $where[] = $db->quoteInto('flags ' . $op . ' ?', $flag); } $whereString = implode($opImplode, $where); if ($_filterData['operator'] == 'notin') { $whereString = '(' . $whereString . ') OR flags IS NULL'; } } $_select->having(str_replace('flags', $havingColumn, $whereString)); } else { $_select->having($db->quoteInto($havingColumn . ' NOT LIKE ? OR ' . $havingColumn . ' IS NULL', $value)); } } } else { $_select->where($db->quoteInto($fieldName . ' LIKE ?', $value) . ' OR ' . $db->quoteInto($fieldEmail . ' LIKE ?', $value)); } }
/** * test clear message cache * */ public function testClear() { $this->_controller->clear($this->_folder); $messageCacheBackend = new Felamimail_Backend_Cache_Sql_Message(); $count = $messageCacheBackend->searchCountByFolderId($this->_folder->getId()); // check if empty $this->assertEquals(0, $count); $this->assertEquals(Felamimail_Model_Folder::CACHE_STATUS_EMPTY, $this->_folder->cache_status); $this->assertEquals(0, $this->_folder->cache_job_actions_est); }
/** * update to 8.5 * - add account_id-folder_id index to felamimail_cache_message * */ public function update_4() { $tableVersion = $this->getTableVersion('felamimail_cache_message'); if ($tableVersion < 10) { $backend = new Felamimail_Backend_Cache_Sql_Message(); $db = $backend->getAdapter(); $skip = false; if ($db instanceof Zend_Db_Adapter_Pdo_Mysql) { try { if (!($stmt = $db->query('select @@innodb_version')) || !$stmt->setFetchMode(Zend_Db::FETCH_NUM) || !($row = $stmt->fetchAll())) { $skip = true; } } catch (Exception $e) { Tinebase_Exception::log($e); $skip = true; } if (!$skip) { $declaration = new Setup_Backend_Schema_Index_Xml('<index> <name>account_id-folder_id</name> <field> <name>account_id</name> </field> <field> <name>folder_id</name> </field> </index>'); $this->_backend->addIndex('felamimail_cache_message', $declaration); } $this->setTableVersion('felamimail_cache_message', '10'); } } $this->setApplicationVersion('Felamimail', '8.5'); }