#!%TCLSH%

# $Id: admgenset,v 1.4 2007/11/13 16:44:05 pda Exp $

#
# Script pour forcer la gnration d'une ou plusieurs zones.
#
# Appel par : admgenliste
#
# Paramtres (formulaire ou URL) :
#	- zones : liste de noms de zones  gnrer
#
# Historique
#   2002/05/23 : pda/jean : cration
#   2002/07/09 : pda      : ajout de nologin
#   2003/05/13 : pda/jean : utilisation de la base d'authentification
#   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)/admgenset.html

#
# Quelques paramtres du script
#

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

set conf(form)	{
    {zones		0 9999}
}

#
# 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" \
			$conf(form) ftab dbfd login tabcor $conf(log)

    #
    # Forcer la gnration
    #

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

    foreach z $ftab(zones) {
	set qz [::pgsql::quote $z]
	set sql "UPDATE zone SET generer = 1 WHERE domaine = '$qz'"
	if {! [::pgsql::execsql $dbfd $sql msg]} then {
	    ::pgsql::unlock $dbfd "abort" m
	    ::webapp::error-exit $conf(err) "chec pour la zone '$z'. Abandon.\n$msg"
	}
    }

    if {! [::pgsql::unlock $dbfd "commit" msg]} then {
	::pgsql::unlock $dbfd "abort" m
	::webapp::error-exit $conf(err) "L'opration a chou. Abandon.\n$msg"
    }

    writelog "forcegeneration" $tabcor(login) "zones $ftab(zones)"

    #
    # Sortie du rsultat
    #

    ::webapp::send html [::webapp::file-subst $conf(page) \
				    [list \
					] \
			    ]

    #
    # Dconnexion de la base
    #

    fermer-base $dbfd
}

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