/** * appends sql to given select statement * * @param Zend_Db_Select $_select * @param Tinebase_Backend_Sql_Abstract $_backend * @throws Tinebase_Exception_AccessDenied */ public function appendFilterSql($_select, $_backend) { $db = $_backend->getAdapter(); if ($this->_requiredGrants === NULL) { throw new Tinebase_Exception_AccessDenied('No grants have been defined.'); } // it searches select columns // return an array where each element has 3 items: 0 - table, 1 - field/expression, 2 - alias $columns = $_select->getPart(Zend_Db_Select::COLUMNS); // it gets an array with expressions used in having clause $grants = array(); foreach ($columns as $column) { if (!empty($column[2])) { $grants[$column[2]] = $column[1]; } } // it uses into having clause expressions instead of aliases foreach ($this->_requiredGrants as $grant) { $_select->orHaving($db->quoteInto($db->quoteIdentifier($grants[$grant]) . ' = ?', 1, Zend_Db::INT_TYPE)); } }