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