/** * inspects delete action * * @param array $_ids * @return array of ids to actually delete */ protected function _inspectDelete(array $_ids) { if (!is_array($_ids)) { $_ids = array($_ids); } $filter = new Sipgate_Model_ConnectionFilter(array(), 'OR'); foreach ($_ids as $id) { $filter->addFilter(new Tinebase_Model_Filter_Text(array('field' => 'line_id', 'operator' => 'equals', 'value' => $id))); } Sipgate_Controller_Connection::getInstance()->deleteByFilter($filter); return $_ids; }
/** * synchronizes unassigned connections with contacts and clear old assignments * @param Sipgate_Model_Line/Tinebase_Record_RecordSet $_line just work on this line */ public function syncContacts($_line = NULL) { $lines = NULL; if ($_line) { if ($_line instanceof Sipgate_Model_Line) { $lines = new Tinebase_Record_RecordSet('Sipgate_Model_Line', array($_line->toArray())); } elseif ($_line instanceof Tinebase_Record_RecordSet) { $lines = $_line; } else { throw new Tinebase_Exception_InvalidArgument('$_line must be an instance of Tinebase_Record_RecordSet or Sipgate_Model_Line!'); } } // remove old assignments $filter = new Sipgate_Model_ConnectionFilter(array()); $filter->addFilter(new Tinebase_Model_Filter_Text(array('field' => 'contact_id', 'operator' => 'not', 'value' => NULL))); if ($lines) { $filter->addFilter(new Tinebase_Model_Filter_Text(array('field' => 'line_id', 'operator' => 'in', 'value' => $lines->id))); } $connections = $this->search($filter); $contactIds = array_unique($connections->contact_id); $filter = new Addressbook_Model_ContactFilter(array(), 'AND'); $filter->addFilter(new Tinebase_Model_Filter_Text(array('field' => 'id', 'operator' => 'in', 'value' => $contactIds))); $contacts = Addressbook_Controller_Contact::getInstance()->search($filter); foreach ($contactIds as $cid) { $contact = $contacts->filter('id', $cid)->getFirstRecord(); $numbers = array_unique($connections->filter('contact_id', $cid)->remote_number); if ($contact->n_fn != $connection->contact_name || !in_array($contact->tel_assistent, $numbers) && !in_array($contact->tel_car, $numbers) && !in_array($contact->tel_cell, $numbers) && !in_array($contact->tel_cell_private, $numbers) && !in_array($contact->tel_fax, $numbers) && !in_array($contact->tel_fax_home, $numbers) && !in_array($contact->tel_home, $numbers) && !in_array($contact->tel_other, $numbers) && !in_array($contact->tel_pager, $numbers) && !in_array($contact->tel_prefer, $numbers) && !in_array($contact->tel_work, $numbers)) { $filter = new Sipgate_Model_ConnectionFilter(array()); $filter->addFilter(new Tinebase_Model_Filter_Text(array('field' => 'contact_id', 'operator' => 'equals', 'value' => $cid))); $this->updateMultiple($filter, array('contact_id' => null)); } } // add new assignments $filter = new Sipgate_Model_ConnectionFilter(array(), 'AND'); $filter->addFilter(new Tinebase_Model_Filter_Text(array('field' => 'contact_id', 'operator' => 'equals', 'value' => null))); if ($lines) { $filter->addFilter(new Tinebase_Model_Filter_Text(array('field' => 'line_id', 'operator' => 'in', 'value' => $lines->id))); } $connections = $this->search($filter); $numbers = array_unique($connections->remote_number); foreach ($numbers as $number) { if ($number != 'anonymous') { $filter = new Addressbook_Model_ContactFilter(array(array("field" => "telephone", "operator" => "contains", "value" => $number))); $contact = Addressbook_Controller_Contact::getInstance()->search($filter)->getFirstRecord(); if ($contact) { $ids = $connections->filter('remote_number', $number)->id; $filter = new Sipgate_Model_ConnectionFilter(array(array('field' => 'id', 'operator' => 'in', 'value' => $ids))); $this->updateMultiple($filter, array('contact_id' => $contact->getId(), 'contact_name' => $contact->n_fn)); } } } }