#!%TCLSH%

#
# Script pour prsenter les caractristiques associes  un groupe
#
# Appel par : index.htgt
#
# Paramtres (formulaire ou URL) :
#	- groupe : nom du groupe
#
# Historique
#   2002/05/21 : pda/jean : cration
#   2002/07/09 : pda      : ajout de nologin
#   2003/05/13 : pda/jean : utilisation de la base d'authentification
#   2004/01/14 : pda/jean : ajout IPv6
#

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)/admgrpliste.html

#
# Quelques paramtres du script
#

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

# nb de lignes dans les listboxes
set conf(hauteur)	20

set conf(form) {
	{groupe		1 1}
}

set conf(tabdomaines) {
    global {
	chars {12 normal}
	botbar {no}
	columns {25 25 25 25}
	align {center}
	format {raw}
    }
    pattern Titre {
	topbar {no}
	vbar {no}
	chars {bold}
	column { }
	vbar {no}
	column { }
	vbar {no}
	column { }
	vbar {no}
	column { }
	vbar {no}
    }
    pattern Normal {
	topbar {no}
	vbar {no}
	format {raw}
	column { }
	vbar {no}
	column { }
	vbar {no}
	column { }
	vbar {no}
	column { }
	vbar {no}
    }
}

set conf(tabdrip) {
    global {
	chars {12 normal}
	botbar {no}
	columns {20 80}
	format {raw}
    }
    pattern Normal {
	topbar {no}
	vbar {no}
	column {
	    align {right}
	}
	vbar {no}
	column {
	    align {left}
	}
	vbar {no}
    }
}

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

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

#
# 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

    #
    # Valider le nom du groupe, et rcuprer son identifiant numrique
    #

    set groupe [lindex $ftab(groupe) 0]
    set qgroupe [::pgsql::quote $groupe]
    set idgrp -1
    pg_select $dbfd "SELECT idgrp FROM groupe WHERE nom = '$qgroupe'" tab {
	set idgrp $tab(idgrp)
    }

    if {$idgrp == -1} then {
	::webapp::error-exit $conf(err) "Groupe '$groupe' non trouv"
    }

    #
    # Extraire la liste des correspondants pour ce groupe (pour info)
    #

    set lcor {}
    set sql "SELECT login FROM corresp WHERE idgrp = $idgrp"
    pg_select $dbfd $sql tab {
	lappend lcor $tab(login)
    }
    set listecor [join $lcor " "]

    #
    # Extraire la liste des domaines, slectionner ceux qui sont
    # autoriss pour le groupe, et prsenter tout a dans une "listbox".
    #

    set donnees {}
    lappend donnees {Titre
			{Classe de tri}
			{Domaine}
			{dition des rles de messagerie}
			{dition des rles Web}
		    }
    set ldom [::pgsql::getcols $dbfd domaine "" "nom ASC" {nom nom}]
    set sql "SELECT domaine.nom AS nom, dr_dom.tri AS tri,
				dr_dom.rolemail, dr_dom.roleweb
			FROM domaine, dr_dom
			WHERE domaine.iddom = dr_dom.iddom
				AND dr_dom.idgrp = $idgrp
			ORDER BY dr_dom.tri ASC, domaine.nom ASC"
    set ndom 1
    pg_select $dbfd $sql tab {
	set d        $tab(nom)
	set tri      $tab(tri)
	set rolemail $tab(rolemail)
	set roleweb  $tab(roleweb)

	set idx [lsearch -exact $ldom [list $d $d]]
	if {$idx == -1} then {
	    ::webapp::error-exit $conf(err) \
		"Le groupe  accs au domaine '$d' qui n'existe pas dans la base"
	}
	set htri  [::webapp::form-text tri$ndom 1 5 5 $tri]
	set hdom  [::webapp::form-menu domaine$ndom 1 0 $ldom [list $idx]]
	set hmail [::webapp::form-bool rolemail$ndom $rolemail]
	set hweb  [::webapp::form-bool roleweb$ndom  $roleweb]
	lappend donnees [list Normal $htri $hdom $hmail $hweb]
	incr ndom
    }

    for {set i 1} {$i <= 5} {incr i} {
	set htri  [::webapp::form-text tri$ndom 1 5 5 ""]
	set hdom  [::webapp::form-menu domaine$ndom 1 0 $ldom {}]
	set hmail [::webapp::form-bool rolemail$ndom 0]
	set hweb  [::webapp::form-bool roleweb$ndom  0]
	lappend donnees [list Normal $htri $hdom $hmail $hweb]
	incr ndom
    }

    set listedomaines [::arrgen::output "html" $conf(tabdomaines) $donnees]

    #
    # Extraire la liste des rseaux, slectionner ceux qui sont
    # autoriss pour le groupe, et prsenter tout a dans une "listbox".
    #

    set listereseaux [liste-reseaux $dbfd $idgrp "tous" "reseaux" $conf(hauteur)]

    #
    # Les droits
    #

    set donnees {}
    set n 1
    set sql "SELECT adr, allow_deny \
			FROM dr_ip \
			WHERE idgrp = $idgrp \
			ORDER BY adr"
    pg_select $dbfd $sql tab {
	set a $tab(allow_deny)
	set menuallow [::webapp::form-menu allow$n 1 0 \
					{{1 allow} {0 deny}} \
					[list [expr 1 - $a]] \
				    ]
	set textcidr [::webapp::form-text adr$n 1 49 49 $tab(adr)]
	lappend donnees [list Normal $menuallow $textcidr]
	incr n
    }

    for {set i 0} {$i < 5} {incr i} {
	set menuallow [::webapp::form-menu allow$n 1 0 \
					{{1 allow} {0 deny}} \
					{0} \
				    ]
	set textcidr [::webapp::form-text adr$n 1 49 49 ""]
	lappend donnees [list Normal $menuallow $textcidr]
	incr n
    }

    set listedroits [::arrgen::output "html" $conf(tabdrip) $donnees]

    #
    # Sortie du rsultat
    #

    ::webapp::send html [::webapp::file-subst $conf(page) \
				[list \
					[list %GROUPE% $groupe] \
					[list %LISTECOR% $listecor] \
					[list %LISTEDOMAINES% $listedomaines] \
					[list %LISTERESEAUX% $listereseaux] \
					[list %LISTEDROITS% $listedroits] \
				    ] \
			    ]

    #
    # Dconnexion de la base
    #

    fermer-base $dbfd
}

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