Example #1
0
 /**
  * the singleton pattern
  *
  * @return Voipmanager_Controller_Snom_PhoneSettings
  */
 public static function getInstance()
 {
     if (self::$_instance === NULL) {
         self::$_instance = new Voipmanager_Controller_Snom_PhoneSettings();
     }
     return self::$_instance;
 }
 /**
  * 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());
 }
Example #6
0
 /**
  * delete phoneSettings
  *
  * @param  array $ids phoneSettingsId to delete
  * @return array
  */
 public function deleteSnomPhoneSettings($ids)
 {
     return $this->_delete($ids, Voipmanager_Controller_Snom_PhoneSettings::getInstance());
 }
Example #7
0
 /**
  * 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());
 }