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