private function modificarExtensionUsuario($domain, $oldExten, $extension, $password, $name, $username, &$arrBackup)
 {
     $continuar = true;
     $pDevice = new paloDevice($domain, "sip", $this->_DB);
     $error = "";
     //1.- Tomar un backup de las entradas en la base astDB para dicha extension
     //2.- Eliminar la extension anterior
     //3.- Crear la nueva extension
     //borramos la extension anterior
     $arrBackup = $pDevice->backupAstDBEXT($oldExten);
     //borramos la extension anterior
     if (!$pDevice->deleteExtension($oldExten)) {
         $this->errMsg = _tr("Old extension can't be deleted") . $pDevice->errMsg;
         return false;
     }
     //creamos una extension nueva
     $arrProp = $this->setParameterUserExtension($domain, "sip", $extension, $password, $name, $username);
     if ($arrProp == false) {
         $error = $this->errMsg;
         $continuar = false;
     } else {
         if ($pDevice->createNewDevice($arrProp, "sip") == false) {
             //si no se pude crear la extension anterior se restaura los valores anteriores en la base astDB
             $pDevice->restoreBackupAstDBEXT($arrBackup);
             $error = $pDevice->errMsg;
             $continuar = false;
         }
     }
     $this->errMsg = $error;
     return $continuar;
 }
function saveNewExten($smarty, $module_name, $local_templates_dir, &$pDB, $arrConf, $credentials)
{
    $pExten = new paloSantoExtensions($pDB);
    $error = "";
    $continuar = true;
    $exito = false;
    $domain = getParameter('organization');
    //este parametro solo es selecionable cuando es el superadmin quien crea la extension
    if ($credentials['userlevel'] != 'superadmin') {
        $domain = $credentials['domain'];
    }
    $arrForm = createFieldForm();
    $oForm = new paloForm($smarty, $arrForm);
    if (!$oForm->validateForm($_POST)) {
        // Validation basic, not empty and VALIDATION_TYPE
        $smarty->assign("mb_title", _tr("Validation Error"));
        $arrErrores = $oForm->arrErroresValidacion;
        $strErrorMsg = "<b>" . _tr("The following fields contain errors") . ":</b><br/>";
        if (is_array($arrErrores) && count($arrErrores) > 0) {
            foreach ($arrErrores as $k => $v) {
                $strErrorMsg .= "{$k} [{$v['mensaje']}], ";
            }
        }
        $smarty->assign("mb_message", $strErrorMsg);
        return viewFormExten($smarty, $module_name, $local_templates_dir, $pDB, $arrConf, $credentials);
    } else {
        $secret = getParameter("secret");
        if (!isStrongPassword($secret)) {
            $error .= _tr("Secret can not be empty, must be at least 10 characters, contain digits, uppers and little case letters");
            $continuar = false;
        }
        $type = getParameter("technology");
        if (!isset($type) || !($type == "sip" || $type == "iax2")) {
            $error .= _tr("You must select a technology");
            $continuar = false;
        }
        //no puede contener caracteres esoeciales ni salto de lineas
        $exten = getParameter("exten");
        $arrProp["fullname"] = getParameter("clid_name");
        if ($arrProp["fullname"] != '') {
            if (!preg_match("/^[[:alnum:]_[:space:]-]+\$/", $arrProp["fullname"])) {
                $error .= _tr("CID Name is invalid");
                $continuar = false;
            }
        } else {
            $arrProp["fullname"] = $exten;
        }
        $arrProp["clid_number"] = getParameter('clid_number');
        if ($arrProp["clid_number"] != '') {
            if (!preg_match("/^[[:alnum:]_[:space:]-]+\$/", $arrProp["clid_number"])) {
                $error .= _tr("CID Number is invalid");
                $continuar = false;
            }
        } else {
            $arrProp["clid_number"] = $exten;
        }
        if ($continuar) {
            //seteamos un arreglo con los parametros configurados
            $arrProp["name"] = getParameter("exten");
            //nombre del device al que se le agrega como prefijo orgcode_
            $arrProp["exten"] = getParameter("exten");
            $arrProp['secret'] = getParameter("secret");
            $arrProp['rt'] = getParameter("ring_timer");
            $arrProp['record_in'] = getParameter("record_in");
            $arrProp['record_out'] = getParameter("record_out");
            $arrProp['language'] = getParameter("language");
            $arrProp['out_clid'] = getParameter("out_clid");
            $arrProp['callwaiting'] = getParameter("call_waiting");
            $arrProp['screen'] = getParameter("screen");
            $arrProp['dictate'] = getParameter("dictate");
            $arrProp['dictformat'] = getParameter("dictformat");
            $arrProp['dictemail'] = getParameter("dictemail");
            //obtenemos los datos para la creacion de voicemail
            if (getParameter("create_vm") == "yes") {
                $vmpassword = getParameter("vmpassword");
                if (!preg_match('/^[[:digit:]]+$/', "{$vmpassword}")) {
                    $error = _tr("Voicemail password cannot be empty and must only contain digits");
                    $continuar = false;
                } else {
                    $arrProp["create_vm"] = "yes";
                    $arrProp["vmpassword"] = $vmpassword;
                    $arrProp["vmemail"] = getParameter("vmemail");
                    $arrProp["vmattach"] = getParameter("vmattach");
                    $arrProp["vmsaycid"] = getParameter("vmsaycid");
                    $arrProp["vmdelete"] = getParameter("vmdelete");
                    $arrProp["vmenvelope"] = getParameter("vmenvelope");
                    $arrProp["vmcontext"] = getParameter("vmcontext");
                    $arrProp["vmoptions"] = getParameter("vmoptions");
                    $arrProp["vmemailsubject"] = getParameter("vmemailsubject");
                    $arrProp["vmemailbody"] = getParameter("vmemailbody");
                    //vmx_locator settings
                    $arrProp["vmx_locator"] = getParameter("vmx_locator");
                    $arrProp["vmx_use"] = getParameter("vmx_use");
                    $arrProp["vmx_extension_0"] = getParameter("vmx_extension_0");
                    $arrProp["vmx_extension_1"] = getParameter("vmx_extension_1");
                    $arrProp["vmx_extension_2"] = getParameter("vmx_extension_2");
                    $arrProp["vmx_operator"] = getParameter("vmx_operator");
                }
            } else {
                $arrProp["create_vm"] = "no";
            }
        }
        if ($continuar) {
            $pDevice = new paloDevice($domain, $type, $pDB);
            $pDB->beginTransaction();
            $exito = $pDevice->createNewDevice($arrProp, $type);
            if ($exito) {
                $pDB->commit();
            } else {
                $pDB->rollBack();
            }
            $error .= $pDevice->errMsg;
        }
    }
    if ($exito) {
        $smarty->assign("mb_title", _tr("MESSAGE"));
        $smarty->assign("mb_message", _tr("Extension has been created successfully"));
        //mostramos el mensaje para crear los archivos de ocnfiguracion
        $pAstConf = new paloSantoASteriskConfig($pDB);
        $pAstConf->setReloadDialplan($domain, true);
        $content = reportExten($smarty, $module_name, $local_templates_dir, $pDB, $arrConf, $credentials);
    } else {
        $smarty->assign("mb_title", _tr("ERROR"));
        $smarty->assign("mb_message", $error);
        $content = viewFormExten($smarty, $module_name, $local_templates_dir, $pDB, $arrConf, $credentials);
    }
    return $content;
}