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