#!/usr/local/bin/tclsh8.6

#
# Display per user statistics
#
# Called by: admin
#
# Parameters (form or url): none
#
# History
#   2002/07/25 : pda      : design
#   2003/05/13 : pda/jean : use auth base
#   2010/12/13 : pda      : i18n
#   2010/12/26 : pda      : use cgi-dispatch
#

#
# Template pages used by this script
#

set conf(page)		statuser.html

#
# Tabular specification
# Columns
#	user name
#	number of declared RR by this user
#	percent of total number of hosts
#

set conf(tabrrcor) {
    global {
	chars {10 normal}
	columns {70 15 15}
	botbar {yes}
	align {right}
    }
    pattern Title {
	align {center}
	title {yes}
	topbar {yes}
	chars {bold}
	vbar {yes}
	column { }
	vbar {yes}
	column { }
	vbar {yes}
	column { }
	vbar {yes}
    }
    pattern Normal {
	title {yes}
	vbar {yes}
	column {
	    align {left}
	}
	vbar {yes}
	column { }
	vbar {yes}
	column { }
	vbar {yes}
    }
    pattern Total {
	title {yes}
	chars {bold}
	vbar {yes}
	column {
	    align {left}
	}
	vbar {yes}
	column { }
	vbar {yes}
	column { }
	vbar {yes}
    }
}

#
# Netmagis general library
#

source /usr/local/lib/netmagis/libnetmagis.tcl

# ::webapp::cgidebug ; exit

##############################################################################
# Utility functions
##############################################################################

proc compare {e1 e2} {
    set cnt1 [lindex $e1 0]
    set cnt2 [lindex $e2 0]
    if {$cnt1 < $cnt2} then {
	return 1
    } elseif {$cnt1 > $cnt2} then {
	return -1
    }
    return [string compare [lindex $e1 1] [lindex $e2 1]]
}

##############################################################################
# Display statistics by user
##############################################################################

d cgi-register {} {} {
    global conf
    global ah

    #
    # Compute statistics, and create a list {cnt username}
    #

    set u [::webapp::authuser create %AUTO%]

    set sql "SELECT u.login, count(*) AS cnt
		    FROM dns.rr r, global.nmuser u
		    WHERE r.idcor = u.idcor
		    GROUP BY u.login
		"
    set total 0
    set list {}

    pg_select $dbfd $sql tab {
	catch {unset tabuid}

	if {[catch {set n [$ah getuser $tab(login) $u]} msg]} then {
	    return [mc "Authentication base problem: %s" $msg]
	}
	
	if {$n == 1} then {
	    set name "[$u get lastname] [$u get firstname]"
	} else {
	    set name $tab(login)
	}

	lappend list [list $tab(cnt) $name]
	incr total $tab(cnt)
    }

    $u destroy

    #
    # Sort by number of host (primary), then by name (secondary)
    #

    set list [lsort -command compare $list]

    #
    # Display data in a tabular form
    #

    set lines {}
    lappend lines [list "Total" \
			[mc "User"] \
			[mc "RR count"] \
			[mc "Percentage"] \
		    ]
    set ptotal 0.0
    foreach e $list {
	lassign $e cnt name
	set pcent [expr "$cnt*100.0/$total"]
	lappend lines [list "Normal" $name $cnt [format "%5.2f" $pcent]]
	set ptotal [expr $ptotal + $pcent]
    }
    lappend lines [list "Total" [mc "Total"] $total [format "%5.2f" $ptotal]]

    set cntrrcor [::arrgen::output "html" $conf(tabrrcor) $lines]

    #
    # End of script: output page and close database
    #

    d result $conf(page) [list \
				[list %NBRRCOR% $cntrrcor] \
			    ]
}

##############################################################################
# Main procedure
##############################################################################

d cgi-dispatch "admin" "admin"
