/** * appends sql to given select statement * * @param Zend_Db_Select $_select * @param Tinebase_Backend_Sql_Abstract $_backend */ public function appendFilterSql($_select, $_backend) { if (empty($this->_value)) { // nothing to filter return; } $filterData = array(array('field' => 'lead_name', 'operator' => 'contains', 'value' => $this->_value), array('field' => 'description', 'operator' => 'contains', 'value' => $this->_value), array('field' => 'showClosed', 'operator' => 'equals', 'value' => TRUE)); $filter = new Crm_Model_LeadFilter($filterData, 'OR'); /*** also filter for related contacts ***/ $contactFilter = new Addressbook_Model_ContactFilter(array(array('field' => 'query', 'operator' => 'contains', 'value' => $this->_value))); $contactIds = Addressbook_Controller_Contact::getInstance()->search($contactFilter, NULL, FALSE, TRUE); $relationFilter = new Tinebase_Model_RelationFilter(array(array('field' => 'own_model', 'operator' => 'equals', 'value' => 'Crm_Model_Lead'), array('field' => 'related_model', 'operator' => 'equals', 'value' => 'Addressbook_Model_Contact'), array('field' => 'related_id', 'operator' => 'in', 'value' => $contactIds))); $leadIds = Tinebase_Relations::getInstance()->search($relationFilter, NULL)->own_id; $filter->addFilter(new Tinebase_Model_Filter_Id('id', 'in', $leadIds)); Tinebase_Backend_Sql_Filter_FilterGroup::appendFilters($_select, $filter, $_backend); }
/** * append relation filter * * @param Crm_Model_LeadFilter $filter */ protected function _appendRelationFilter($filter) { if (!Tinebase_Core::getPreference()->getValue(Tinebase_Preference::ADVANCED_SEARCH, false)) { return; } $relationsToSearchIn = array('Addressbook_Model_Contact', 'Sales_Model_Product', 'Tasks_Model_Task'); $leadIds = array(); foreach ($relationsToSearchIn as $relatedModel) { $filterModel = $relatedModel . 'Filter'; $relatedFilter = new $filterModel(array(array('field' => 'query', 'operator' => 'contains', 'value' => $this->_value))); $relatedIds = Tinebase_Core::getApplicationInstance($relatedModel)->search($relatedFilter, NULL, FALSE, TRUE); $relationFilter = new Tinebase_Model_RelationFilter(array(array('field' => 'own_model', 'operator' => 'equals', 'value' => 'Crm_Model_Lead'), array('field' => 'related_model', 'operator' => 'equals', 'value' => $relatedModel), array('field' => 'related_id', 'operator' => 'in', 'value' => $relatedIds))); $leadIds = array_merge($leadIds, Tinebase_Relations::getInstance()->search($relationFilter, NULL)->own_id); } $filter->addFilter(new Tinebase_Model_Filter_Id('id', 'in', $leadIds)); }