/**
  * 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));
             }
         }
     }
 }