#!/usr/bin/perl -w
# -*- perl -*-
use P4CGI ;
use strict ;
#
#################################################################
#  CONFIGURATION INFORMATION 
#  All config info should be in P4CGI.pm
#
#################################################################
#
#  P4 depot browser, top
#
#################################################################

print "",
    &P4CGI::start_page("P4DB<br> P4 Depot Browser",
		       "<CENTER><SMALL>Hint:".
		       "You can bookmark any page you want to get back to later</SMALL></CENTER>") ;

				# Read and parse shortcut file

my $shortcut_file = &P4CGI::SHORTCUT_FILE() ;
my $SHORTCUTS="" ;

if(defined $shortcut_file and -r $shortcut_file) {	
				# Read file
    local *D ;
    open(*D, "<$shortcut_file") or &P4CGI::bail("Failed to open $shortcut_file for read") ;
    my $tmps = join("\n",<D>) ;
    $tmps =~ s/^#.*$//gm ;
    close *D ;
    my $shortcut_text = "" ;
				# Find all <P4DB [par=data...]>...</P4DB> 
    while($tmps =~ s/^(.*?)<p4db\s+(.*?)\s*>(.*?)<\/P4DB>//is) {
	$shortcut_text .= $1 ;
	my $pars = $2 ;
	my $text = $3 ;	
				# Extract arguments for <P4DB>
	my %pars ;
	while($pars =~ s/(\S+)\s*=\s*(?:"(.*?)"|(\S+))\s*//) {
	    my $par = $1 ;
	    my $val ;
	    if(defined $2) {
		$val = $2 ;
	    }
	    else {
		$val = $3 ;
	    } ;
	    $pars{uc($par)} = $val;	    
	} ;
	my $type = "" ;
	if ( defined $pars{"TYPE"} ) {
	    $type = uc($pars{"TYPE"});
	    delete $pars{"TYPE"};
	}
	my $url ;
	if($type eq "CHANGELIST") { 
	    $url = "changeList.cgi" ; 
	} ;
	if($type eq "BROWSE") { 
	    $url = "depotTreeBrowser.cgi" ;
	} ;
	if($type eq "JOBLIST")    { 
	    $url = "jobList.cgi" ; 
	    my %flds ;
	    &P4CGI::p4readform("jobspec -o",\%flds) ;
	    my %fldtrans = map { /\s*(\d+) (\S+)/ ; (uc($2),"FLD$1") ;} split("\n",$flds{"Fields"}) ;
	    my @pars = keys %pars ;
	    while(@pars) {
		my $p = shift @pars ;
		if(exists $fldtrans{$p}) {
		    $pars{$fldtrans{$p}} = $pars{$p} ;
		    delete $pars{$p} ;
		}
	    }
	    $pars{"LIST"}="Y" ;
	} ;
	if(defined $url) {
	    my @pars = map { "$_=$pars{$_}" ; }  keys %pars ;
	    $shortcut_text .= &P4CGI::ahref(-url=>$url,
					    @pars,
					    $text) ;
	} ;
    }
    $shortcut_text .= $tmps;
    $SHORTCUTS = join("\n",(&P4CGI::start_table("align=center cellpadding=10 bgcolor=".&P4CGI::HDRFTR_BGCOLOR()),
			    &P4CGI::table_row($shortcut_text),
			    &P4CGI::end_table())) ;
} ;

if(&P4CGI::SHORTCUTS_ON_TOP()) {
    print "$SHORTCUTS",
} ;
    

my @MENU = (&P4CGI::ahref(-url => "depotTreeBrowser.cgi",
			  "Browse Depot"),
	    &P4CGI::ahref(-url => "changeList.cgi",
			  "FSPC=//...",
			  "Submitted Changes"),
	    &P4CGI::ahref(-url => "changeList.cgi",
			  "FSPC=//...",
			  "STATUS=pending",
			  "Pending Changes"),

	    &P4CGI::ahref(-url => "fileOpen.cgi",
			  "Open files"),
	    &P4CGI::ahref(-url => "branchList.cgi",
			  "Branches"),
	    &P4CGI::ahref(-url => "labelList.cgi",
			  "Labels"),

	    &P4CGI::ahref(-url => "jobList.cgi",
			  "Jobs"),
	    &P4CGI::ahref(-url => "userList.cgi",
			  "Users and Groups"),
	    &P4CGI::ahref(-url => "clientList.cgi",
			  "Clients"),

	    &P4CGI::ahref(-url => "changeByUsers.cgi",
			  "Changes by User or Group"),
	    &P4CGI::ahref(-url => "searchPattern.cgi",
			  "Search Changes by Descriptions"),
	    &P4CGI::ahref(-url => "filesChangedSince.cgi",
			  "List Recently Modified Files"),

	    &P4CGI::ahref(-url => "depotStats.cgi",
			  "Depot Statistics")
	    ) ;

if(uc(&P4CGI::USE_JAVA()) eq "YES") {
    push @MENU, ("<APPLET CODE=\"p4jdb/P4DirTreeApplet.class\" WIDTH=100 HEIGHT=30>\n".
		 "<param name=File value=\"javaDataView.cgi\">\n".
		 "</APPLET>") ;
} ;

my $COLS = 3 ;
print "",
    &P4CGI::start_table("width=100% cols=3 cellspacing=0 cellpadding=0") ;

my $colorCnt=0 ;
while(@MENU > 0) {
    my $n ;
    my @alts ;
    for($n = 0;($n < $COLS) and (@MENU > 0);$n++) {
	my $t =  shift @MENU ;
	push @alts, "<font size=+1>$t</font>"; 
    } ;
    my $tmp = @alts ;
    my @color = (&P4CGI::BGCOLOR(),&P4CGI::HDRFTR_BGCOLOR()) ;
    print &P4CGI::table_row(-align => "center",
			    map { 
				  {-width => "33%",
				   -bgcolor => $color[$colorCnt++ & 1],
				   -text => "$_" } ; } @alts) ."\n" ;
} ;   

print &P4CGI::end_table() ;

if(!&P4CGI::SHORTCUTS_ON_TOP()) {
    print "$SHORTCUTS\n"
} ;
    


print "",
    &P4CGI::start_table("bgcolor=".&P4CGI::HDRFTR_BGCOLOR()." align=center cellpadding=0 cellspacing=2"),
    "<tr><td>\n" ;


sub prSelection($$$$ )
{
    my $cgitarget  = shift @_ ;
    my $desc       = shift @_ ;
    my $fields     = shift @_ ;
    my $helpTarget = shift @_ ;
    
    print "", &P4CGI::table_row(-valign=>"center",
				{-align=>"center",
				 -text => 
				     join("\n",
					  &P4CGI::cgi()->startform(-action => $cgitarget,
								   -method => "GET"),
					  "<font size=+1>$desc</font>")},
				{-align=>"left",
				 -text => $fields},
				{-align=>"left",
				 -text => " "},
				{-align=>"left",
				 -valign=>"center",
				 -width=>"1",
				 -text =>  &P4CGI::cgi()->submit(-name  => "ignore",
								 -value => "GO!")
				 },
				{ -text => &P4CGI::cgi()->endform()
				  }
				) ;
} ;

print "",  &P4CGI::start_table("width=100% cellspacing=4") ;

my $limiter="<tr><td colspan=5><hr></td></tr>\n" ;

print $limiter ;

prSelection("changeList.cgi",
	    "List changes for<br>file spec",
	    join("","File spec:<font face=fixed>",
		 &P4CGI::cgi()->textfield(-name      => "FSPC",
					  -default   => "//...",
					  -size      => 50,
					  -maxlength => 256),
		 "</font>"),
	    "listCh") ;

print $limiter ;

prSelection("fileSearch.cgi",
	    "Search for file",
	    join("","File spec:<font face=fixed>",
		 &P4CGI::cgi()->textfield(-name      => "FSPC",
					  -default   => "//...",
					  -size      => 50,
					  -maxlength => 256),
		 "</font>"),
	    "fileSrch") ;

print $limiter ;

prSelection("changeView.cgi",
	    "View change",
	    join("","Change number:<font face=fixed>",
		 &P4CGI::cgi()->textfield(-name      => "CH",
					  -default   => "1",
					  -size      => 10,
					  -maxlength => 10),    
		 "</font>"),
	    "viewCh") ;

		
print &P4CGI::end_table() ;
		
print  "</tr></td>",&P4CGI::end_table() ;


print
    "<hr>",
    &P4CGI::start_table("width=100% cols=3"),
    &P4CGI::table_row(-align => "left",
		      &P4CGI::ahref(-url => &P4CGI::HELPFILE_PATH() . "/README.html",
				    "Readme file<br>for admin"),
		      {-align => "center",
		       -text =>  &P4CGI::ahref(-url => "SetPreferences.cgi",
					       "<FONT SIZE=+2>Set Preferences</FONT>"),
		      },
		      { -text => &P4CGI::ahref(-url => "p4race.cgi",
					       "<font size=-1>The Great<br>Submit Race</font>"),
			-align => "right" }),
    &P4CGI::end_table() ;

print "<hr>" ;

print    
    &P4CGI::end_page() ;

#
# That's all folks
#