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