#!%TCLSH%


#
# Script d'enregistrement des modifications des paramtres de la base
#
# Appel par : adminliste
#
# Paramtres (formulaire ou URL) : les paramtres
#
# Historique
#   2003/12/08 : pda      : cration  partir de sos
#   2004/10/13 : pda      : ajout des paramtres DHCP
#   2007/10/25 : jean     : log des actions de modification
#

set conf(homeurl)	%HOMEURL%

#
# Chemins utiliss par les scripts
#

set conf(pkg)		%PKGTCL%
set conf(lib)		%DESTDIR%/lib
set conf(libdns)	$conf(lib)/libdns.tcl

#
# Dfinition des noms des pages " trous"
#

set conf(err)		$conf(lib)/erreur.html
set conf(page)		$conf(lib)/admvalide.html

#
# Quelques paramtres du script
#

set conf(auth)		%AUTH%
set conf(base)		%BASE%
set conf(nologin)	%NOLOGIN%
set conf(log)		%LOG%

#
# Les outils du parfait concepteur de pages Web dynamiques...
#

lappend auto_path $conf(pkg)
package require webapp
package require pgsql

#
# On y va !
#

# ::webapp::cgidebug ; exit

source $conf(libdns)

##############################################################################
# Programme principal
##############################################################################

proc main {} {
    global conf

    #
    # Initialisation
    #

    init-dns $conf(nologin) $conf(auth) $conf(base) $conf(err) "admin" \
			{} ftab dbfd login tabcor $conf(log)

    #
    # Cration d'une liste de contrle de formulaire  partir
    # des clefs de configuration
    #

    set form {}
    foreach key [dnsconfig keys] {
	lappend form [list $key 1 1]
    }
    if {[llength [::webapp::get-data ftab $form]] == 0} then {
	::webapp::error-exit $conf(err) "Formulaire non conforme aux spcifications"
    }

    #
    # Enregistrement des paramtres du formulaire
    #

    if {! [::pgsql::lock $dbfd {config} msg]} then {
	::webapp::error-exit $conf(err) "Verrouillage impossible ('$msg')"
    }

    set lm {}
    foreach key [dnsconfig keys] {
	set val [lindex $ftab($key) 0]
	set msg [dnsconfig set $key $val]
	if {[string equal $msg ""]} then {
	    lappend lm "$key ($val)"
	} else {
	    ::pgsql::unlock $dbfd "abort" m
	    ::webapp::error-exit $conf(err) "Ereur dans l'enregistrement de '$key' ('$msg')"
	}
    }

    if {! [::pgsql::unlock $dbfd "commit" msg]} then {
	::webapp::error-exit $conf(err) "Dverrouillage impossible ('$msg')"
    }

    writelog "admparmodif" $tabcor(login) \
	    "modification des parametres de l'application : [join $lm ,]"

    #
    # Gnration de la page d'accus de modification
    #

    set url "$conf(homeurl)/bin/admparliste"
    set typeenclair "paramtres de l'application"

    ::webapp::send html [::webapp::file-subst $conf(page) \
				[list \
					[list %TYPEENCLAIR% $typeenclair] \
					[list %URL% $url] \
				    ] \
				]

    #
    # Dconnexion de la base
    #

    fermer-base $dbfd
}

::webapp::cgi-exec main %DEBUG%
