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