#!/usr/bin/perl -w
# -*- perl -*-
use P4CGI ;
use strict ;
#
#################################################################
# CONFIGURATION INFORMATION
# All config info should be in P4CGI.pm
#
#################################################################
#
# Search changes for pattern
#
#################################################################
my $FSPC = &P4CGI::cgi()->param("FSPC") ;
$FSPC = "//..." unless defined $FSPC ;
$FSPC= &P4CGI::htmlEncode($FSPC) ; # protect against malicious parameter values
my $COMPLETE= &P4CGI::cgi()->param("COMPLETE") ;
print &P4CGI::start_page("Find changes ($FSPC)","") ;
sub prSelection($$$ )
{
my $title = shift @_ ;
my $cgitarget = shift @_ ;
my $fields = shift @_ ;
my $c = join("\n",
&P4CGI::start_table(),
&P4CGI::table_row(&P4CGI::cgi()->startform(-action => $cgitarget,
-method => "GET"),
{-align=>"left",
-valign=>"top",
-text => $fields},
{-align=>"left",
-text => " "},
{ -valign=>"bottom",
-text => " " . &P4CGI::cgi()->endform()
},
),
&P4CGI::end_table()) ;
print
&P4CGI::framedTable($title,$c) ;
} ;
prSelection("Find change",
"changeView.cgi",
join("\n",(&P4CGI::cgi()->textfield(-name => "CH",
-default => &P4CGI::CURRENT_CHANGE_LEVEL(),
-override => 1,
-size => 10,
-maxlength => 10,
-title => "Change number"),
&P4CGI::cgi()->hidden(-name=>"DP",
-value=>&P4CGI::CURR_DEPOT_NO()),
&P4CGI::cgi()->submit(-name => "0",
-value => "GO!",
-title => "View change")))
) ;
print "<br>" ;
prSelection("Find changes for file spec",
"changeList.cgi",
join("\n",(&P4CGI::start_table(),
"<tr>",
"<td class=\"Prompt\">File spec:</td>",
"<td>",
&P4CGI::cgi()->textfield(-name => "FSPC",
-default => "$FSPC",
-override => 1,
-title =>
"File spec to search",
-size => 50,
-maxlength => 256),
"</td><td>",
&P4CGI::cgi()->hidden(-name=>"DP",
-value=>&P4CGI::CURR_DEPOT_NO()),
&P4CGI::cgi()->submit(-name => "ignore",
-value => "GO!",
-title => "Start search"),
"</td></tr>",
"</table>"))
) ;
print "<br>" ;
prSelection("Find changes by description",
"changeList.cgi",
join("\n",(&P4CGI::start_table(),
"<tr>",
"<td class=\"Prompt\">File spec:</td>",
"<td>",
&P4CGI::cgi()->textfield(-name => "FSPC",
-default => "$FSPC",
-override => 1,
-title =>
"File spec to search",
-size => 50,
-maxlength => 256),
"</td></tr>",
"<td class=\"Prompt\">Pattern:</td>",
"<td >",
&P4CGI::cgi()->textfield(-name => "SEARCHDESC",
-default => "<pattern>",
-override => 1,
-title =>
"Search pattern. Wildcards: ?=any character, *=any number of characters.",
-size => 50,
-maxlength => 256),
"</td></tr>",
"<td class=\"Prompt\">Invert search:</td>",
"<td >",
&P4CGI::cgi()->checkbox(-name => "SEARCH_INVERT",
-value => 1,
-label => " Search descriptions <B>NOT</B> including pattern"),
"</td><td>",
&P4CGI::cgi()->hidden(-name=>"DP",
-value=>&P4CGI::CURR_DEPOT_NO()),
&P4CGI::cgi()->submit(-name => "ignore",
-value => "GO!",
-title => "Start search"),
"</td></tr>",
"</table>"))
) ;
print "<br>\n" ;
# Get users
my %userCvt ;
&P4CGI::p4user2name(\%userCvt) ;
map { $userCvt{$_} = "$_ - $userCvt{$_}" } keys %userCvt ;
my @listOfUsers = sort { uc($a) cmp uc ($b) } (keys %userCvt);
if(defined $COMPLETE) {
my %allUsers ;
local *P ;
&P4CGI::p4call(*P,"changes $FSPC") ;
while(<P>) {
/.*by (\S+)@/ ;
if(exists $allUsers{$1}) { $allUsers{$1} += 1 ; }
else { $allUsers{$1} = 1 ; }
} ;
foreach (keys %allUsers) {
if(!exists $userCvt{$_}) {
$userCvt{$_} = "Old user: $_ ($allUsers{$_} changes)" ;
push @listOfUsers,$_ ;
} else {
$userCvt{$_} .= " ($allUsers{$_} changes)" ;
}
} ;
}
# Get groups
my @listOfgroups ;
&P4CGI::p4call(\@listOfgroups, "groups" );
my $buttoncell = "" ;
unless(defined $COMPLETE) {
$buttoncell =
join("\n",("<tr>" ,
&P4CGI::buttonCell($ENV{SCRIPT_NAME},
"Include old users in list",
"COMPLETE=Yes",
"FSPC=$FSPC",
"Include old users"),
"</tr>")) ;
} ;
my $ulistSize = @listOfUsers ;
$ulistSize= 15 if $ulistSize > 15 ;
my $glistSize = @listOfgroups ;
$glistSize= 15 if $glistSize > 15 ;
prSelection("Find changes by user and group",
"changeList.cgi",
join("\n",
&P4CGI::start_table(),
$buttoncell,
&P4CGI::table_row({-class=>"Prompt",
-text => "File spec:"},
&P4CGI::cgi()->textfield(-name => "FSPC",
-default => $FSPC,
-override => 1,
-size => 50,
-maxlength => 256)
),
&P4CGI::table_row({-class=>"Prompt",
-text=>"User(s):"},
&P4CGI::cgi()->scrolling_list(-name => "USERS",
-values => \@listOfUsers,
-size => $ulistSize,
-multiple => 'true',
-labels => \%userCvt)
) ,
&P4CGI::table_row({-class=>"Prompt",
-text=>"Group(s):"},
&P4CGI::cgi()->scrolling_list(-name => "GROUPS",
-values => \@listOfgroups,
-size => $glistSize,
-multiple => 'true')
),
&P4CGI::table_row("",
&P4CGI::cgi()->hidden(-name=>"DP",
-value=>&P4CGI::CURR_DEPOT_NO()) .
&P4CGI::cgi()->submit(-name => "ignore",
-value => "GO!",
-title => "Start search")),
&P4CGI::end_table())) ;
print
&P4CGI::end_page() ;
#
# That's all folks
#
| # | Change | User | Description | Committed | |
|---|---|---|---|---|---|
| #8 | 4998 | Fredric Fredricson |
P4DB: cleaned up some code. Added p4users(), p4client() and p4user2name() to P4CGI.pm and modified all cgi:s to use these, |
||
| #7 | 4842 | Fredric Fredricson |
P4DB: Strange error, possibly in CGI.pm, "fixed" with a non-intuitive work around. |
||
| #6 | 4306 | Fredric Fredricson |
P4DB: Hardened P4DB against malicious parameters (cross site scripting), performed some cleanup and increased version to 3.1.1. |
||
| #5 | 4152 | Fredric Fredricson | P4DB: Some more work on tha way to version 3.1.... | ||
| #4 | 4046 | Fredric Fredricson |
P4DB: First submit for 3.1. * Removed frame-stuff and some related files * Added new page header * Started update of documentation * Changed a lot of CGI:s to conform to new "look and feel" Still a lot to do: - clean up stuff (especially the javascript) - Fix the file list to use new annotate-command - Clean up and document css-file - and more....... |
||
| #3 | 2875 | Fredric Fredricson | P4DB 3.0 first beta... | ||
| #2 | 2225 | Fredric Fredricson | P4DB 3.0: First (small) submit | ||
| #1 | 1638 | Fredric Fredricson | P4DB: Added all (I think) files for P4DB |