/**
  * the singleton pattern
  *
  * @return Voipmanager_Controller_Asterisk_SipPeer
  */
 public static function getInstance()
 {
     if (self::$_instance === NULL) {
         self::$_instance = new Voipmanager_Controller_Asterisk_SipPeer();
     }
     return self::$_instance;
 }
 /**
  * Sets up the fixture.
  * This method is called before a test is executed.
  *
  * @access protected
  */
 protected function setUp()
 {
     $this->_backends['Asterisk_Context'] = Voipmanager_Controller_Asterisk_Context::getInstance();
     $this->_backends['Asterisk_Meetme'] = Voipmanager_Controller_Asterisk_Meetme::getInstance();
     $this->_backends['Asterisk_SipPeer'] = Voipmanager_Controller_Asterisk_SipPeer::getInstance();
     $this->_backends['Asterisk_Voicemail'] = Voipmanager_Controller_Asterisk_Voicemail::getInstance();
     $this->_backends['Snom_Line'] = Voipmanager_Controller_Snom_Line::getInstance();
     $this->_backends['Snom_Location'] = Voipmanager_Controller_Snom_Location::getInstance();
     $this->_backends['Snom_Phone'] = Voipmanager_Controller_Snom_Phone::getInstance();
     $this->_backends['Snom_Setting'] = Voipmanager_Controller_Snom_Setting::getInstance();
     $this->_backends['Snom_Software'] = Voipmanager_Controller_Snom_Software::getInstance();
     $this->_backends['Snom_Template'] = Voipmanager_Controller_Snom_Template::getInstance();
 }
 /**
  * create edit asterisk line dialog
  *
  * @param int $lineId
  * 
  */
 public function editAsteriskSipPeer($sipPeerId = NULL)
 {
     if (!empty($sipPeerId)) {
         $sipPeer = Voipmanager_Controller_Asterisk_SipPeer::getInstance()->get($sipPeerId);
     } else {
         $sipPeer = new Voipmanager_Model_Asterisk_SipPeer(array('type' => 'user'));
     }
     // encode the asterisk sip peer array
     $encodedSipPeer = Zend_Json::encode($sipPeer->toArray());
     $encodedContexts = Zend_Json::encode(Voipmanager_Controller_Asterisk_Context::getInstance()->search()->toArray());
     $view = new Zend_View();
     $view->setScriptPath('Tinebase/views');
     $view->title = "edit asterisk sip peer data";
     $view->jsExecute = 'Tine.Voipmanager.Asterisk.SipPeers.EditDialog.display(' . $encodedSipPeer . ',' . $encodedContexts . ');';
     header('Content-Type: text/html; charset=utf-8');
     echo $view->render('jsclient.php');
 }
Beispiel #4
0
 /**
  * handle request for single line
  *
  * @param string $name
  */
 public function handleSingle($name)
 {
     #Zend_Registry::get('logger')->debug(__METHOD__ . '::' . __LINE__ . ' handle single request for ' . print_r($_REQUEST, true));
     Zend_Registry::get('logger')->debug(__METHOD__ . '::' . __LINE__ . ' handle single request for ' . $name);
     $filter = new Voipmanager_Model_Asterisk_SipPeerFilter(array(array('field' => 'name', 'operator' => 'equals', 'value' => $name)));
     $sipPeers = Voipmanager_Controller_Asterisk_SipPeer::getInstance()->search($filter);
     if (count($sipPeers) == 0) {
         Zend_Registry::get('logger')->warn(__METHOD__ . '::' . __LINE__ . ' sip registration not found name: ' . $name);
         return;
     }
     $sipPeer = $sipPeers[0];
     #Zend_Registry::get('logger')->debug(__METHOD__ . '::' . __LINE__ . ' found sip peer ' . print_r($sipPeer->toArray(), true));
     $skipItems = array('id');
     $resultParts = array();
     foreach ($sipPeer as $key => $value) {
         if (in_array($key, $skipItems)) {
             continue;
         }
         $resultParts[] = $key . '=' . urlencode($value);
     }
     $result = implode('&', $resultParts);
     #Zend_Registry::get('logger')->debug(__METHOD__ . '::' . __LINE__ . ' result ' . $result);
     echo $result . "\n";
 }
 /**
  * start phone call and save in history
  *
  * @param Phone_Model_Call $_call
  * @return Phone_Model_Call
  */
 public function callStarted(Phone_Model_Call $_call)
 {
     $backend = Phone_Backend_Factory::factory(Phone_Backend_Factory::CALLHISTORY);
     $_call->start = Tinebase_DateTime::now();
     $filter = new Voipmanager_Model_Asterisk_SipPeerFilter(array(array('field' => 'name', 'operator' => 'equals', 'value' => $_call->line_id)));
     $asteriskSipPeers = Voipmanager_Controller_Asterisk_SipPeer::getInstance()->search($filter);
     if (count($asteriskSipPeers) > 0) {
         $_call->callerid = $asteriskSipPeers[0]->callerid;
     } else {
         $_call->callerid = $_call->line_id;
     }
     $call = $backend->create($_call);
     return $call;
 }
 /**
  * set call forwarding immediate
  * 
  * @param string $mac
  * @param string $activeLine
  */
 public function setCallForward($mac, $activeLine, $mode, $number)
 {
     $this->_authenticate();
     # get the phone
     $phone = Voipmanager_Controller_Snom_Phone::getInstance()->getByMacAddress($mac);
     # get the asterisk line
     $sipPeer = Voipmanager_Controller_Asterisk_SipPeer::getInstance()->get($phone->lines->find('linenumber', $activeLine)->asteriskline_id);
     $baseUrl = $this->_getBaseUrl();
     $doc = new DOMDocument('1.0', 'utf-8');
     if ($mode == Voipmanager_Model_Asterisk_SipPeer::CFMODE_NUMBER) {
         if (empty($number)) {
             $doc->appendChild($doc->createElement('SnomIPPhoneInput'));
             $doc->documentElement->appendChild($doc->createElement('Prompt', 'Prompt'));
             $urlElement = $doc->createElement('URL');
             $urlElement->appendChild($doc->createTextNode($baseUrl));
             $doc->documentElement->appendChild($urlElement);
             $inputItem = $doc->documentElement->appendChild($doc->createElement('InputItem'));
             $inputItem->appendChild($doc->createElement('DisplayName', 'Number:'));
             $inputItem->appendChild($doc->createElement('DefaultValue', $sipPeer->cfi_number));
             $inputItem->appendChild($doc->createElement('InputFlags', 't'));
             $queryStringParamElement = $doc->createElement('QueryStringParam');
             $queryStringParamElement->appendChild($doc->createTextNode('method=Phone.setCallForward&TINE20SESSID=' . Tinebase_Session::getId() . '&mode=' . Voipmanager_Model_Asterisk_SipPeer::CFMODE_NUMBER . '&activeLine=' . $activeLine . '&mac=' . $mac . '&number'));
             $inputItem->appendChild($queryStringParamElement);
         } else {
             $sipPeer->cfi_mode = $mode;
             $sipPeer->cfi_number = $number;
             # update the asterisk line
             Voipmanager_Controller_Asterisk_SipPeer::getInstance()->update($sipPeer);
             $doc = new Voipmanager_Snom_XML_Exit();
         }
     } else {
         if ($mode == Voipmanager_Model_Asterisk_SipPeer::CFMODE_OFF || $mode == Voipmanager_Model_Asterisk_SipPeer::CFMODE_VOICEMAIL) {
             $sipPeer->cfi_mode = $mode;
             # update the asterisk line
             Voipmanager_Controller_Asterisk_SipPeer::getInstance()->update($sipPeer);
             $doc = new Voipmanager_Snom_XML_Exit();
         }
     }
     header('Content-Type: text/xml');
     #Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' phone ' . $doc->saveXML());
     echo $doc->saveXML();
 }
 /**
  * returns record prepared for json transport
  *
  * @param Tinebase_Record_Interface $_record
  * @return array record data
  */
 protected function _recordToJson($_record)
 {
     $recordArray = parent::_recordToJson($_record);
     switch (get_class($_record)) {
         case 'Phone_Model_MyPhone':
             // add settings
             $settings = Voipmanager_Controller_Snom_PhoneSettings::getInstance()->get($_record->getId());
             $recordArray = array_merge($recordArray, $settings->toArray());
             // resolve lines
             foreach ($recordArray['lines'] as &$line) {
                 $line['asteriskline_id'] = Voipmanager_Controller_Asterisk_SipPeer::getInstance()->get($line['asteriskline_id'])->toArray();
             }
             break;
     }
     return $recordArray;
 }
 /**
  * get sippeer by name
  * 
  * @param string $_name the name of the sippeer
  * 
  * @return Voipmanager_Model_Asterisk_SipPeer
  */
 protected function _getSipPeer($_name)
 {
     $filter = new Voipmanager_Model_Asterisk_SipPeerFilter(array(array('field' => 'name', 'operator' => 'equals', 'value' => $_name)));
     $sipPeers = Voipmanager_Controller_Asterisk_SipPeer::getInstance()->search($filter);
     return $sipPeers[0];
 }
 /**
  * create lines / sippeers
  * 
  * @param Voipmanager_Model_Snom_Phone|Phone_Model_MyPhone $_phone
  * @param array $_lines
  * @return void
  */
 protected function _createLines($_phone, $_lines)
 {
     foreach ($_lines as $line) {
         $line->snomphone_id = $_phone->getId();
         if (is_array($line->asteriskline_id)) {
             $sippeer = new Voipmanager_Model_Asterisk_SipPeer($line->asteriskline_id);
             $sippeer = Voipmanager_Controller_Asterisk_SipPeer::getInstance()->update($sippeer);
             $line->asteriskline_id = $sippeer->getId();
         }
         if (empty($line->asteriskline_id)) {
             throw new Voipmanager_Exception_Validation('asteriskline_id is required.');
         }
         $addedLine = Voipmanager_Controller_Snom_Line::getInstance()->create($line);
     }
 }
 /**
  * create a phone with a line for the current user
  */
 protected function _createSnomPhone()
 {
     $testLocation = $this->_getSnomLocation();
     $returnedLocation = Voipmanager_Controller_Snom_Location::getInstance()->create($testLocation);
     $testTemplate = $this->_getSnomTemplate();
     $returnedTemplate = Voipmanager_Controller_Snom_Template::getInstance()->create($testTemplate);
     $rights = new Tinebase_Record_RecordSet('Voipmanager_Model_Snom_PhoneRight', array(array('account_id' => Tinebase_Core::getUser()->getId(), 'account_type' => Tinebase_Acl_Rights::ACCOUNT_TYPE_USER, 'read_right' => TRUE, 'write_right' => TRUE, 'dial_right' => TRUE)));
     $sipPeer = Voipmanager_Controller_Asterisk_SipPeer::getInstance()->create($this->_getAsteriskSipPeer());
     $lines = new Tinebase_Record_RecordSet('Voipmanager_Model_Snom_Line', array(array('asteriskline_id' => $sipPeer->getId(), 'linenumber' => 1, 'lineactive' => 1, 'idletext' => 'idle')));
     $settings = new Voipmanager_Model_Snom_PhoneSettings(array('web_language' => 'English'));
     $this->_phone = Voipmanager_Controller_Snom_Phone::getInstance()->create(new Voipmanager_Model_Snom_Phone(array('description' => 'Created by Tine 2.0 DEMO DATA', 'macaddress' => substr(Tinebase_Record_Abstract::generateUID(), 0, 12), 'location_id' => $returnedLocation['id'], 'template_id' => $returnedTemplate['id'], 'current_model' => 'snom300', 'redirect_event' => 'none', 'http_client_info_sent' => '1', 'http_client_user' => Tinebase_Record_Abstract::generateUID(), 'http_client_pass' => Tinebase_Record_Abstract::generateUID(), 'rights' => $rights, 'lines' => $lines, 'settings' => $settings)));
 }
Beispiel #11
0
 /**
  * delete multiple asterisk sip peers
  *
  * @param  array $ids list of sipPeerId's to delete
  * @return array
  */
 public function deleteAsteriskSipPeers($ids)
 {
     return $this->_delete($ids, Voipmanager_Controller_Asterisk_SipPeer::getInstance());
 }
 /**
  * start phone call and save in history
  *
  * @param Phone_Model_Call $_call
  * @return Phone_Model_Call
  */
 public function callStarted(Phone_Model_Call $_call)
 {
     $backend = Phone_Backend_Factory::factory(Phone_Backend_Factory::CALLHISTORY);
     $_call->start = Tinebase_DateTime::now();
     $filter = new Voipmanager_Model_Asterisk_SipPeerFilter(array(array('field' => 'name', 'operator' => 'equals', 'value' => $_call->line_id)));
     $asteriskSipPeers = Voipmanager_Controller_Asterisk_SipPeer::getInstance()->search($filter);
     if (count($asteriskSipPeers) > 0) {
         $_call->callerid = $asteriskSipPeers[0]->callerid;
     } else {
         $_call->callerid = $_call->line_id;
     }
     $call = $backend->create($_call);
     // resolve telephone number to contacts if possible
     $phoneController = Phone_Controller_Call::getInstance();
     $telNumber = Addressbook_Model_Contact::normalizeTelephoneNoCountry($phoneController->resolveInternalNumber($call->destination));
     if (null !== $telNumber) {
         $filter = new Addressbook_Model_ContactFilter(array(array('field' => 'telephone_normalized', 'operator' => 'equals', 'value' => $telNumber)));
         $controller = Addressbook_Controller_Contact::getInstance();
         $oldAclChecks = $controller->doContainerACLChecks();
         $controller->doContainerACLChecks(false);
         $contacts = $controller->search($filter);
         $relationBackend = new Tinebase_Relation_Backend_Sql();
         foreach ($contacts as $contact) {
             // we dont add the relations to the call record as this is called by the phone server, so no need to return the relations
             $relationBackend->addRelation(new Tinebase_Model_Relation(array('own_model' => 'Phone_Model_Call', 'own_id' => $call->getId(), 'own_backend' => Tinebase_Model_Relation::DEFAULT_RECORD_BACKEND, 'related_model' => 'Addressbook_Model_Contact', 'related_id' => $contact->getId(), 'related_degree' => Tinebase_Model_Relation::DEGREE_SIBLING, 'related_backend' => Tinebase_Model_Relation::DEFAULT_RECORD_BACKEND, 'type' => 'CALLER')));
         }
         $controller->doContainerACLChecks($oldAclChecks);
     }
     return $call;
 }