コード例 #1
0
 /**
  * Adds a group and their extensions in the database.
  * Adiciona um grupo e seus ramais no banco de dados.
  */
 public function addAction()
 {
     $this->view->breadcrumb = Snep_Breadcrumb::renderPath(array($this->view->translate("Manage"), $this->view->translate("Extension Groups"), $this->view->translate("Add Extension Groups")));
     Zend_Registry::set('cancel_url', $this->getFrontController()->getBaseUrl() . '/' . $this->getRequest()->getControllerName() . '/index');
     $form_xml = new Zend_Config_Xml("modules/default/forms/extensions_groups.xml");
     $form = new Snep_Form($form_xml);
     $form->setAction($this->getFrontController()->getBaseUrl() . '/' . $this->getRequest()->getControllerName() . '/add');
     $form->getElement('name')->setLabel($this->view->translate('Name'));
     $form->getElement('type')->setRequired(true)->setLabel($this->view->translate('Type'))->setMultiOptions(array('administrator' => $this->view->translate('Administrator'), 'users' => $this->view->translate('User')));
     try {
         $ext = new Snep_Extensions();
         $extensionsGroup = $ext->fetchAll();
         //$extensionsAllGroup = Snep_ExtensionsGroups_Manager::getExtensionsAll();
     } catch (Exception $e) {
         throw new $e();
         //echo $LANG['error'].$e->getMessage();
         //display_error($LANG['error'].$e->getMessage(),true);
     }
     $extensions = array();
     foreach ($extensionsGroup as $key => $val) {
         $extensions[$val['id']] = $val['name'];
     }
     $this->view->objSelectBox = "extensions";
     $form->setSelectBox($this->view->objSelectBox, $this->view->translate('Extensions'), $extensions);
     if ($this->getRequest()->getPost()) {
         $form_isValid = $form->isValid($_POST);
         $dados = $this->_request->getParams();
         if ($form_isValid) {
             $group = array('name' => $dados['name'], 'inherit' => $dados['type']);
             $this->view->group = Snep_ExtensionsGroups_Manager::addGroup($group);
             if ($dados['box_add'] && $this->view->group) {
                 foreach ($dados['box_add'] as $id => $extensions) {
                     $extensionsGroup = array('group' => $dados['name'], 'extensions' => $extensions);
                     $this->view->extensions = Snep_ExtensionsGroups_Manager::addExtensionsGroup($extensionsGroup);
                 }
             }
             $this->_redirect("/" . $this->getRequest()->getControllerName() . "/");
         }
     }
     $this->view->form = $form;
 }
コード例 #2
0
ファイル: ExtensionsController.php プロジェクト: rootzig/SNEP
 protected function execAdd($postData, $update = false)
 {
     $formData = $postData;
     $db = Zend_Registry::get('db');
     $exten = $formData["extension"]["exten"];
     // Verifica se já existe um ramal com esse nome
     $extensions = new Snep_Extensions();
     foreach ($extensions->fetchAll() as $ext) {
         $extension = $ext->findParentRow('Snep_Peer_Manager')->ds_name;
         if ($extension == $exten && !$update) {
             return $this->view->translate('Extension already taken. Please, choose another denomination.');
         } else {
             if ($update) {
                 $idExt = $ext->findParentRow('Snep_Peer_Manager')->id_peer;
                 break;
             }
         }
     }
     $extenObj = $extensions->createRow();
     // Subseção Ramais
     $context = 'default';
     $extenUser = $formData["extension"]["user"];
     $extenCallerId = $formData["extension"]["name"];
     $extenGroup = $formData["extension"]["exten_group"] == '' ? "NULL" : $formData["extension"]["exten_group"];
     $extenPickGrp = $formData["extension"]["pickup_group"] == '' ? "NULL" : $formData["extension"]["pickup_group"];
     $peerType = "R";
     // Subseção Tecnologia da Interface
     $techType = $formData["technology"]["type"];
     $secret = $formData[$techType]["password"];
     $callLimit = $formData[$techType]["calllimit"];
     $nat = 'no';
     if ($techType == 'sip' || $techType == 'iax2') {
         if (key_exists('nat', $formData[$techType])) {
             $nat = 'yes';
         }
     }
     $qualify = 'no';
     if ($techType == 'sip' || $techType == 'iax2') {
         if (key_exists('qualify', $formData[$techType])) {
             $qualify = 'yes';
         }
     }
     $type = $formData[$techType]["type"];
     $dtmfmode = $formData[$techType]["dtmf"];
     // Codec
     if ($techType == "sip" || $techType == "iax2") {
         $allow = sprintf("%s;%s;%s", $formData[$techType]['codec'], $formData[$techType]['codec1'], $formData[$techType]['codec2']);
     } else {
         $allow = "ulaw";
     }
     // Cadastro do channel
     $channel = strtoupper($techType);
     if ($channel == "KHOMP") {
         $khompBoard = $formData[$techType]['board'];
         $khompChannel = $formData[$techType]['channel'];
         if ($khompBoard == null || $khompBoard == '') {
             return $this->view->translate('Select a Khomp board from the list');
         }
         if ($khompChannel == null || $khompChannel == '') {
             return $this->view->translate('Select a Khomp channel from the list');
         }
         $channel .= "/b" . $khompBoard . 'c' . $khompChannel;
     } else {
         if ($channel == "VIRTUAL") {
             $virtualInfo = $formData[$techType]['virtual'];
             $channel .= "/" . $virtualInfo;
         } else {
             if ($channel == "MANUAL") {
                 $manualManual = $formData[$techType]['manual'];
                 $channel .= "/" . $manualManual;
             } else {
                 // SIP & IAX2
                 $channel .= "/" . $exten;
             }
         }
     }
     // Subseção Avançado
     $advVoiceMail = 'no';
     if (key_exists("voicemail", $formData["advanced"])) {
         $advVoiceMail = 'yes';
     } else {
         $advVoiceMail = 'no';
     }
     $advEmail = $formData["advanced"]["email"];
     // bloqueio
     $advPadLock = '0';
     if (key_exists("padlock", $formData["advanced"])) {
         $advPadLock = '1';
     } else {
         $advPadLock = '0';
     }
     // controle de minuto
     if (key_exists("minute_control", $formData["advanced"])) {
         $advMinCtrl = true;
         $advTimeTotal = $formData["advanced"]["timetotal"] * 60;
         // tempo total
         $advTimeTotal = $advTimeTotal == 0 ? "NULL" : "'{$advTimeTotal}'";
         $advCtrlType = $advTimeTotal > 0 ? "{$formData['advanced']['controltype']}" : "NULL";
         // tipo de controle
     } else {
         $advMinCtrl = false;
         $advTimeTotal = null;
         $advCtrlType = 'N';
     }
     $defFielsExten = array("accountcode" => "''", "amaflags" => "''", "defaultip" => "''", "host" => "'dynamic'", "insecure" => "''", "language" => "'pt_BR'", "deny" => "''", "permit" => "''", "mask" => "''", "port" => "''", "restrictcid" => "''", "rtptimeout" => "''", "rtpholdtimeout" => "''", "musiconhold" => "'cliente'", "regseconds" => 0, "ipaddr" => "''", "regexten" => "''", "cancallforward" => "'yes'", "setvar" => "''", "disallow" => "'all'", "canreinvite" => "'no'");
     $sqlFieldsExten = $sqlDefaultValues = "";
     foreach ($defFielsExten as $key => $value) {
         $sqlFieldsExten .= ",{$key}";
         $sqlDefaultValues .= ",{$value}";
     }
     if ($update) {
         $sql = "UPDATE peers ";
         $sql .= " SET name='{$exten}',password='******' , callerid='{$extenCallerId}', ";
         $sql .= "context='{$context}',mailbox='{$exten}',qualify='{$qualify}',";
         $sql .= "secret='{$secret}',type='{$type}', allow='{$allow}', fromuser='******',";
         $sql .= "username='******',fullcontact='',dtmfmode='{$dtmfmode}',";
         $sql .= "email='{$advEmail}', `call-limit`='{$callLimit}',";
         $sql .= "outgoinglimit='1', incominglimit='1',";
         $sql .= "usa_vc='{$advVoiceMail}',pickupgroup={$extenPickGrp},callgroup='{$extenPickGrp}',";
         $sql .= "nat='{$nat}',canal='{$channel}', authenticate={$advPadLock}, ";
         $sql .= "`group`='{$extenGroup}', ";
         $sql .= "time_total={$advTimeTotal}, time_chargeby='{$advCtrlType}'  WHERE id={$idExt}";
     }
     /*else {
           $sql = "INSERT INTO peers (";
           $sql.= "name, password,callerid,context,mailbox,qualify,";
           $sql.= "secret,type,allow,fromuser,username,fullcontact,";
           $sql.= "dtmfmode,email,`call-limit`,incominglimit,";
           $sql.= "outgoinglimit, usa_vc, pickupgroup, canal,nat,peer_type, authenticate,";
           $sql.= "trunk, `group`, callgroup, time_total, ";
           $sql.= "time_chargeby " . $sqlFieldsExten;
           $sql.= ") values (";
           $sql.= "'$exten','$extenPass','$extenCallerId','$context','$exten','$qualify',";
           $sql.= "'$secret','$type','$allow','$exten','$exten','$fullcontact',";
           $sql.= "'$dtmfmode','$advEmail','$callLimit','1',";
           $sql.= "'1', '$advVoiceMail', $extenPickGrp ,'$channel','$nat', '$peerType',";
           $sql.= "$advPadLock,'no','$extenGroup',";
           $sql.= "'$extenPickGrp', $advTimeTotal, '$advCtrlType' " . $sqlDefaultValues;
           $sql.= ")";
           
       }*/
     $extenObj->fg_canreinvite = 0;
     $extenObj->fg_usevoicemail = 0;
     $extenObj->fg_dontdisturb = 0;
     $extenObj->fg_followme = 0;
     $peers = new Snep_Peer_Manager();
     $newPeer = $peers->createRow();
     $newPeer->ds_name = $exten;
     $newPeer->ds_callerid = $extenCallerId;
     $newPeer->ds_context = $context;
     $newPeer->cd_peer_type = $peerType;
     $newPeer->ds_host = 'dynamic';
     $extenObj->id_user = $formData["extension"]["user"];
     $extenObj->id_extensiongroup = $extenGroup;
     $extenObj->id_pickupgroup = $extenPickGrp;
     $newPeer->cd_secret = $secret;
     $newPeer->cd_type = $type;
     $newPeer->fg_qualify = $qualify;
     $newPeer->fg_nat = $nat;
     $newPeer->ds_codec_allow = $allow;
     $newPeer->ds_username = $exten;
     $newPeer->ds_dtmfmode = $dtmfmode;
     $newPeer->vl_call_limit = $callLimit;
     $newPeer->ds_channel = $channel;
     $newPeer->cd_peer_type = $peerType;
     $newPeer->vl_time_total = $advTimeTotal;
     $newPeer->vl_time_chargeby = $advCtrlType;
     $newPeer->save();
     $extenObj->id_peer = $newPeer->id_peer;
     $extenObj->save();
     /*
     $idExten = $db->lastInsertId();
     */
     if ($advVoiceMail == 'yes') {
         if ($update) {
             $db->delete("voicemail_users", " mailbox='{$exten}' ");
         }
         $sql = "INSERT INTO voicemail_users ";
         $sql .= " (fullname, email, mailbox, password, customer_id, `delete`) VALUES ";
         $sql .= " ('{$extenName}', '{$advEmail}','{$exten}','{$extenPass}','{$exten}', 'yes')";
         $stmt = $db->prepare($sql);
         $stmt->execute();
     }
     /*
     Snep_InterfaceConf::loadConfFromDb();
     */
 }