/** * create edit phone dialog * * @param int $phoneId * @todo catch permission denied exceptions only * */ public function editSnomPhone($phoneId = NULL) { $snomTemplates = Voipmanager_Controller_Snom_Template::getInstance()->search(); $snomLocations = Voipmanager_Controller_Snom_Location::getInstance()->search(); $pagination = new Tinebase_Model_Pagination(array('sort' => 'name')); $asteriskSipPeers = Voipmanager_Controller_Asterisk_SipPeer::getInstance()->search(NULL, $pagination); $encodedAsteriskSipPeers = Zend_Json::encode($asteriskSipPeers->toArray()); if (!empty($phoneId)) { $snomPhone = Voipmanager_Controller_Snom_Phone::getInstance()->get($phoneId); $_phoneData = $snomPhone->toArray(); $_phoneSettingsData = Voipmanager_Controller_Snom_PhoneSettings::getInstance()->get($_phoneData['id'])->toArray(); $_templateData = Voipmanager_Controller_Snom_Template::getInstance()->get($_phoneData['template_id'])->toArray(); $_settingsData = Voipmanager_Controller_Snom_Setting::getInstance()->get($_templateData['setting_id'])->toArray(); $_writableFields = array('web_language', 'language', 'display_method', 'mwi_notification', 'mwi_dialtone', 'headset_device', 'message_led_other', 'global_missed_counter', 'pickup_indication', 'scroll_outgoing', 'show_local_line', 'show_call_status', 'call_waiting'); foreach ($_writableFields as $wField) { $_fieldRW = $wField . '_writable'; if ($_settingsData[$_fieldRW] == '0') { $_phoneSettingsData[$wField] = $_settingsData[$wField]; $_notWritable[$wField] = 'true'; } else { if (empty($_phoneSettingsData[$wField])) { $_phoneSettingsData[$wField] = $_settingsData[$wField]; } $_notWritable[$wField] = ''; } } $encodedWritable = Zend_Json::encode($_notWritable); $_phoneData = array_merge($_phoneSettingsData, $_phoneData); // encode the data arrays $encodedSnomPhone = Zend_Json::encode($_phoneData); $encodedSnomLines = Zend_Json::encode($snomPhone->lines->toArray()); } else { $encodedWritable = '{}'; $encodedSnomPhone = "{current_model:'snom320',redirect_event:'none'}"; $encodedSnomLines = '[]'; //$encodedSettings = '{}'; } $encodedTemplates = Zend_Json::encode($snomTemplates->toArray()); $encodedLocations = Zend_Json::encode($snomLocations->toArray()); $view = new Zend_View(); $view->setScriptPath('Tinebase/views'); $view->title = "edit snom phone data"; $view->jsExecute = 'Tine.Voipmanager.Snom.Phones.EditDialog.display(' . $encodedSnomPhone . ', ' . $encodedSnomLines . ', ' . $encodedAsteriskSipPeers . ', ' . $encodedTemplates . ', ' . $encodedLocations . ', ' . $encodedWritable . ');'; header('Content-Type: text/html; charset=utf-8'); echo $view->render('jsclient.php'); }
/** * create edit MyPhone dialog * * @param int $phoneId * * @todo remove that when new myphone edit dialog is working * @deprecated */ public function editMyPhone($phoneId = NULL) { $currentAccount = Tinebase_Core::getUser()->toArray(); if (!empty($phoneId)) { $snomPhone = Phone_Controller_MyPhone::getInstance()->get($phoneId); //unset($phone->lines); $_phoneData = $snomPhone->toArray(); $_phoneSettingsData = Voipmanager_Controller_Snom_PhoneSettings::getInstance()->get($_phoneData['id'])->toArray(); $_templateData = Voipmanager_Controller_Snom_Template::getInstance()->get($_phoneData['template_id'])->toArray(); $_settingsData = Voipmanager_Controller_Snom_Setting::getInstance()->get($_templateData['setting_id'])->toArray(); $_writableFields = array('web_language', 'language', 'display_method', 'mwi_notification', 'mwi_dialtone', 'headset_device', 'message_led_other', 'global_missed_counter', 'scroll_outgoing', 'show_local_line', 'show_call_status', 'call_waiting'); foreach ($_writableFields as $wField) { $_fieldRW = $wField . '_writable'; if ($_settingsData[$_fieldRW] == '0') { $_phoneSettingsData[$wField] = $_settingsData[$wField]; $_notWritable[$wField] = 'true'; } else { if ($_phoneSettingsData[$wField] === NULL) { $_phoneSettingsData[$wField] = $_settingsData[$wField]; } $_notWritable[$wField] = ''; } } $encodedWritable = Zend_Json::encode($_notWritable); $_phoneData = array_merge($_phoneSettingsData, $_phoneData); if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' . print_r($_phoneData, true)); } // encode the data arrays $encodedSnomPhone = Zend_Json::encode($_phoneData); } else { //$phone = new Voipmanager_Model_Snom_Phone(); //$lines = new Tinebase_Record_RecordSet('Voipmanager_Model_Snom_Line'); $encodedWritable = '{}'; $encodedSnomPhone = '{}'; //$encodedSettings = '{}'; } $view = new Zend_View(); $view->setScriptPath('Tinebase/views'); $view->title = "edit myPhone data"; $view->jsExecute = 'Tine.Voipmanager.MyPhones.EditDialog.display(' . $encodedSnomPhone . ', ' . $encodedWritable . ');'; header('Content-Type: text/html; charset=utf-8'); echo $view->render('jsclient.php'); }
/** * 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; }
/** * update one phone * * @param Voipmanager_Model_Snom_Phone $_phone * @return Voipmanager_Model_Snom_Phone * @throws Voipmanager_Exception_Validation * * @todo do not overwrite update() -> use inspectBefore/After functions */ public function update(Tinebase_Record_Interface $_phone) { // check first if mac address is already used if ($_phone->has('macaddress')) { try { $phoneWithMac = $this->getByMacAddress($_phone->macaddress); if ($phoneWithMac->getId() !== $_phone->getId()) { throw new Voipmanager_Exception_Validation('A phone with this mac address already exists.'); } } catch (Voipmanager_Exception_NotFound $venf) { // everything ok } } try { $db = $this->_backend->getAdapter(); $transactionId = Tinebase_TransactionManager::getInstance()->startTransaction($db); $phone = $this->_backend->update($_phone); $_phoneSettings = $_phone->settings; if ($_phoneSettings instanceof Voipmanager_Model_Snom_PhoneSettings) { // force the right phone_id $_phoneSettings->setId($phone->getId()); // set all settings which are equal to the default settings to NULL $template = Voipmanager_Controller_Snom_Template::getInstance()->get($phone->template_id); $settingDefaults = Voipmanager_Controller_Snom_Setting::getInstance()->get($template->setting_id); foreach ($_phoneSettings->toArray() as $key => $value) { if ($key == 'phone_id') { continue; } if ($settingDefaults->{$key} == $value) { $_phoneSettings->{$key} = NULL; } } if (Voipmanager_Controller_Snom_PhoneSettings::getInstance()->get($phone->getId())) { $phoneSettings = Voipmanager_Controller_Snom_PhoneSettings::getInstance()->update($_phoneSettings); } else { $phoneSettings = Voipmanager_Controller_Snom_PhoneSettings::getInstance()->create($_phoneSettings); } } Voipmanager_Controller_Snom_Line::getInstance()->deletePhoneLines($phone->getId()); $this->_createLines($phone, $_phone->lines); // save phone rights if (isset($_phone->rights)) { $this->_backend->setPhoneRights($_phone); } Tinebase_TransactionManager::getInstance()->commitTransaction($transactionId); } catch (Exception $e) { $this->_handleRecordCreateOrUpdateException($e); } return $this->get($phone->getId()); }
/** * delete phoneSettings * * @param array $ids phoneSettingsId to delete * @return array */ public function deleteSnomPhoneSettings($ids) { return $this->_delete($ids, Voipmanager_Controller_Snom_PhoneSettings::getInstance()); }
/** * update one phone * * @param Voipmanager_Model_Snom_Phone $_phone * @param Voipmanager_Model_Snom_PhoneSettings|optional $_phoneSettings * @return Voipmanager_Model_Snom_Phone * @throws Voipmanager_Exception_Validation */ public function update(Tinebase_Record_Interface $_phone) { //if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' . print_r($_phone->toArray(), true)); // check first if mac address is already used if ($_phone->has('macaddress')) { try { $phoneWithMac = $this->getByMacAddress($_phone->macaddress); if ($phoneWithMac->getId() !== $_phone->getId()) { throw new Voipmanager_Exception_Validation('A phone with this mac address already exists.'); } } catch (Voipmanager_Exception_NotFound $venf) { // everything ok } } $phone = $this->_backend->update($_phone); $_phoneSettings = $_phone->settings; if ($_phoneSettings instanceof Voipmanager_Model_Snom_PhoneSettings) { // force the right phone_id $_phoneSettings->setId($phone->getId()); // set all settings which are equal to the default settings to NULL $template = Voipmanager_Controller_Snom_Template::getInstance()->get($phone->template_id); $settingDefaults = Voipmanager_Controller_Snom_Setting::getInstance()->get($template->setting_id); foreach ($_phoneSettings->toArray() as $key => $value) { if ($key == 'phone_id') { continue; } if ($settingDefaults->{$key} == $value) { $_phoneSettings->{$key} = NULL; } } if (Voipmanager_Controller_Snom_PhoneSettings::getInstance()->get($phone->getId())) { //if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' . print_r($_phoneSettings->toArray(), true)); $phoneSettings = Voipmanager_Controller_Snom_PhoneSettings::getInstance()->update($_phoneSettings); } else { $phoneSettings = Voipmanager_Controller_Snom_PhoneSettings::getInstance()->create($_phoneSettings); } } Voipmanager_Controller_Snom_Line::getInstance()->deletePhoneLines($phone->getId()); $this->_createLines($phone, $_phone->lines); // save phone rights if (isset($_phone->rights)) { $this->_backend->setPhoneRights($_phone); } return $this->get($phone->getId()); }