#!/usr/bin/perl -w
# -*- perl -*-
use P4CGI ;
use strict ;
#
#################################################################
# CONFIGURATION INFORMATION
# All config info should be in P4CGI.pm
#
#################################################################
#
# P4 list all users
# List p4 users
#
#################################################################
my $GROUPSONLY = P4CGI::cgi()->param("GROUPSONLY") ;
sub weeksago($$$ ) {
my ($y,$m,$d) = @_ ;
$y -= 1900 ;
$m-- ;
my $_now = time() ;
my $_then = $_now ;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime($_then);
if(($y > $year) or
(($y == $year) and ($m > $mon)) or
(($y == $year) and ($m == $mon) and ($d > $mday))) {
return 0 ;
}
while(1) {
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime($_then);
if(($y == $year) and ($m == $mon) and ($d == $mday)) {
return int(( $_now - $_then)/(3600*24*7)) ;
}
$_then -= 3600*24 ;
} ;
}
&P4CGI::SET_HELP_TARGET("userList") ;
# Get users
my @users ;
&P4CGI::p4call(\@users, "users" );
# Get groups
my @groups ;
&P4CGI::p4call(\@groups, "groups" );
my $emailall ;
my $usertable = "" ;
unless(defined $GROUPSONLY) {
$usertable .= join("\n",("",scalar(@users)," users:
",
&P4CGI::start_table("cellpadding=1"),
&P4CGI::table_header("User/view user",
"Name",
"e-mail address/send email",
"Last access"))) ;
my $userinfo ;
foreach $userinfo (sort { uc($a) cmp uc($b) } @users)
{
$userinfo =~ /(\w+)\s+\<(.*)\>\s+\((.*)\) accessed (\S+)/ and do {
my ($user,$email,$name,$lastaccess) = ($1,$2,$3,$4) ;
$user = &P4CGI::ahref(-url => "userView.cgi",
"USER=$user",
$user) ;
$email =~ /\w+\@\w+/ and do {
if(defined $emailall) {
$emailall .= ",$email" ;
} else {
$emailall = "mailto:$email" ;
} ;
$email = &P4CGI::ahref(-url => "mailto:$email",
$email) ;
} ;
my $weeksOld = "" ;
if($lastaccess =~ /(\d\d\d\d)\/(\d\d)\/(\d\d)/) {
$weeksOld = weeksago($1,$2,$3) ;
if($weeksOld > 10) {
$weeksOld = "Not used for $weeksOld weeks!" ;
}
else {
$weeksOld = "" ;
}
}
$usertable .= &P4CGI::table_row($user,
$name,
$email,
$lastaccess,
$weeksOld) ;
}
}
$usertable .= &P4CGI::end_table() ;
} ;
if(@groups > 0) {
my $g = @groups == 1?"group":"groups" ;
my $n = @groups ;
$usertable .= "$n $g
" ;
$usertable .= &P4CGI::start_table("cellpadding=1") ;
$usertable .= &P4CGI::table_header("Group/view group");
foreach (@groups) {
$usertable .= &P4CGI::table_row(&P4CGI::ahref(-url => "groupView.cgi",
"GROUP=$_",
$_)) ;
}
$usertable .= &P4CGI::end_table() ;
}
my @legend ;
unless(defined $GROUPSONLY) {
push @legend ,("user -- see more info",
"e-mail address -- e-mail user",
&P4CGI::ahref(-url => $emailall,
"Email all users")) ;
} ;
push @legend,"group -- details about group" if @groups > 0 ;
unless(defined $GROUPSONLY) {
push @legend, &P4CGI::ahref("GROUPSONLY=Y",
"Groups only") ;
}
print "",
&P4CGI::start_page(defined $GROUPSONLY ? "P4 Groups":@groups > 0?"P4 Users and Groups":"P4 Users",
&P4CGI::ul_list(@legend)),
$usertable,
&P4CGI::end_page() ;
#
# That's all folks
#