зеркало из https://github.com/mozilla/pjs.git
new notice assciations stuff.
This commit is contained in:
Родитель
603ce35943
Коммит
be7b9c1295
|
@ -19,8 +19,8 @@
|
|||
# notice board display, build display (colored squares)
|
||||
|
||||
|
||||
# $Revision: 1.13 $
|
||||
# $Date: 2002-05-07 22:50:07 $
|
||||
# $Revision: 1.14 $
|
||||
# $Date: 2002-05-10 21:20:30 $
|
||||
# $Author: kestes%walrus.com $
|
||||
# $Source: /home/jrmuizel/cvs-mirror/mozilla/webtools/tinderbox2/src/lib/TinderDB.pm,v $
|
||||
# $Name: $
|
||||
|
@ -65,6 +65,7 @@ use File::Basename;
|
|||
use lib '#tinder_libdir#';
|
||||
|
||||
use Utils;
|
||||
use TinderDB::Notice;
|
||||
|
||||
|
||||
# Use the DB implementations you wish to use.
|
||||
|
@ -106,6 +107,10 @@ sub strings2columns {
|
|||
main::require_modules(@IMPLS);
|
||||
@HTML_COLUMNS = strings2columns(@IMPLS);
|
||||
|
||||
# now the notice column is special, it may not be a column but several
|
||||
# columns use it and it needs to have some column like behavior.
|
||||
|
||||
$NOTICE= TinderDB::Notice->new();
|
||||
|
||||
|
||||
# It would be nice if we had some kind of display of the bug tracking
|
||||
|
@ -322,6 +327,11 @@ sub loadtree_db {
|
|||
$db->loadtree_db(@_);
|
||||
}
|
||||
|
||||
# Make sure the notice database is handled
|
||||
# even if notice is not a column.
|
||||
|
||||
$NOTICE->loadtree_db(@_);
|
||||
|
||||
return ;
|
||||
}
|
||||
|
||||
|
@ -340,6 +350,11 @@ sub apply_db_updates {
|
|||
$out += $db->apply_db_updates(@_);
|
||||
}
|
||||
|
||||
# Make sure the notice database is handled
|
||||
# even if notice is not a column.
|
||||
|
||||
$NOTICE->apply_db_updates(@_);
|
||||
|
||||
return $out;
|
||||
}
|
||||
|
||||
|
@ -360,11 +375,30 @@ sub trim_db_history {
|
|||
$db->trim_db_history(@_);
|
||||
}
|
||||
|
||||
# Make sure the notice database is handled
|
||||
# even if notice is not a column.
|
||||
|
||||
$NOTICE->trim_db_history(@_);
|
||||
|
||||
return ;
|
||||
|
||||
}
|
||||
|
||||
|
||||
# where can people attach notices to?
|
||||
# Really this is the names the columns produced by this DB
|
||||
|
||||
sub notice_association {
|
||||
my (@outrow) = ();
|
||||
|
||||
foreach $db (@{$DB}) {
|
||||
push @outrow, $db->status_table_header(@_);
|
||||
}
|
||||
|
||||
return (@outrow);
|
||||
}
|
||||
|
||||
|
||||
sub savetree_db {
|
||||
# do not call this directly, its only here for testing.
|
||||
# This is called by update
|
||||
|
@ -381,6 +415,11 @@ sub savetree_db {
|
|||
$db->savetree_db(@_);
|
||||
}
|
||||
|
||||
# Make sure the notice database is handled
|
||||
# even if notice is not a column.
|
||||
|
||||
$NOTICE->savetree_db(@_);
|
||||
|
||||
return ;
|
||||
}
|
||||
|
||||
|
|
|
@ -37,8 +37,8 @@
|
|||
# Contributor(s):
|
||||
|
||||
|
||||
# $Revision: 1.17 $
|
||||
# $Date: 2002-05-09 03:09:12 $
|
||||
# $Revision: 1.18 $
|
||||
# $Date: 2002-05-10 21:20:28 $
|
||||
# $Author: kestes%walrus.com $
|
||||
# $Source: /home/jrmuizel/cvs-mirror/mozilla/webtools/tinderbox2/src/lib/TinderDB/BT_Generic.pm,v $
|
||||
# $Name: $
|
||||
|
@ -74,9 +74,10 @@ use Utils;
|
|||
use HTMLPopUp;
|
||||
use TreeData;
|
||||
use VCDisplay;
|
||||
use TinderDB::Notice;
|
||||
|
||||
|
||||
$VERSION = ( qw $Revision: 1.17 $ )[1];
|
||||
$VERSION = ( qw $Revision: 1.18 $ )[1];
|
||||
|
||||
@ISA = qw(TinderDB::BasicTxtDB);
|
||||
|
||||
|
@ -84,6 +85,9 @@ $VERSION = ( qw $Revision: 1.17 $ )[1];
|
|||
# name of the bug tracking system
|
||||
$BT_NAME = $TinderConfig::BT_NAME || "BT";
|
||||
|
||||
# We 'have a' notice so that we can put stars in our column.
|
||||
|
||||
$NOTICE= TinderDB::Notice->new();
|
||||
|
||||
# get the recent data from where the MDA puts the parsed data.
|
||||
|
||||
|
@ -181,6 +185,14 @@ sub status_table_header {
|
|||
return ($out);
|
||||
}
|
||||
|
||||
# where can people attach notices to?
|
||||
# Really this is the names the columns produced by this DB
|
||||
|
||||
sub notice_association {
|
||||
my (@columns) = BTData::get_all_columns();
|
||||
return @columns;
|
||||
}
|
||||
|
||||
|
||||
sub render_bug {
|
||||
my ($rec) = @_;
|
||||
|
@ -319,16 +331,33 @@ sub cell_data {
|
|||
# that no authors have checked in during this time.
|
||||
|
||||
sub render_empty_cell {
|
||||
my ($tree, $till_time, $rowspan) = @_;
|
||||
my ($tree, $till_time, $rowspan, $column) = @_;
|
||||
|
||||
my $notice = $NOTICE->Notice_Link(
|
||||
$till_time,
|
||||
$tree,
|
||||
$column,
|
||||
);
|
||||
|
||||
my $cell_contents;
|
||||
if ($notice) {
|
||||
$cell_contents = (
|
||||
"\t\t\t".
|
||||
$notice.
|
||||
"\n".
|
||||
"");
|
||||
} else {
|
||||
$cell_contents = $HTMLPopUp::EMPTY_TABLE_CELL;
|
||||
}
|
||||
|
||||
my $local_till_time = localtime($till_time);
|
||||
return ("\t<!-- BT_Generic: empty data. ".
|
||||
"tree: $tree, ".
|
||||
"tree: $tree, column: $column, ".
|
||||
"filling till: '$local_till_time', ".
|
||||
"-->\n".
|
||||
|
||||
"\t\t<td align=center rowspan=$rowspan>".
|
||||
"$HTMLPopUp::EMPTY_TABLE_CELL</td>\n");
|
||||
"$cell_contents</td>\n");
|
||||
}
|
||||
|
||||
|
||||
|
@ -353,9 +382,11 @@ sub status_table_start {
|
|||
my (@columns) = BTData::get_all_columns();
|
||||
|
||||
foreach $column (@columns) {
|
||||
$NOTICE->status_table_start($row_times, $tree, $column);
|
||||
|
||||
$NEXT_DB{$tree}{$column} = 0;
|
||||
while ( ($DB_TIMES[$NEXT_DB] > $earliest_data) &&
|
||||
($NEXT_DB{$tree} < $#DB_TIMES) ) {
|
||||
while ( ($DB_TIMES[$NEXT_DB{$tree}{$column}] > $earliest_data) &&
|
||||
($NEXT_DB{$tree}{$column} < $#DB_TIMES) ) {
|
||||
$NEXT_DB{$tree}{$column}++;
|
||||
}
|
||||
}
|
||||
|
@ -396,6 +427,17 @@ sub render_one_column {
|
|||
my $html = render_bug($bug_ids->{$bug_id});
|
||||
push @html, $html;
|
||||
}
|
||||
|
||||
$notice .= (
|
||||
"\t\t\t".
|
||||
$NOTICE->Notice_Link(
|
||||
$DB_TIMES[$NEXT_DB{$tree}{$column}],
|
||||
$tree,
|
||||
$column,
|
||||
).
|
||||
"\n".
|
||||
"");
|
||||
|
||||
my $out = (
|
||||
"\t<td align=center>\n".
|
||||
"@html".
|
||||
|
@ -433,7 +475,7 @@ sub render_one_column {
|
|||
|
||||
@html= render_empty_cell($tree,
|
||||
$row_times->[$row_index+$rowspan],
|
||||
$rowspan);
|
||||
$rowspan, $column);
|
||||
|
||||
return @html;
|
||||
}
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
# the build was and display a link to the build log.
|
||||
|
||||
|
||||
# $Revision: 1.53 $
|
||||
# $Date: 2002-05-08 22:30:12 $
|
||||
# $Revision: 1.54 $
|
||||
# $Date: 2002-05-10 21:20:27 $
|
||||
# $Author: kestes%walrus.com $
|
||||
# $Source: /home/jrmuizel/cvs-mirror/mozilla/webtools/tinderbox2/src/lib/TinderDB/Build.pm,v $
|
||||
# $Name: $
|
||||
|
@ -148,25 +148,23 @@ use File::Basename;
|
|||
|
||||
use lib '#tinder_libdir#';
|
||||
|
||||
use HTMLPopUp;
|
||||
use BuildStatus;
|
||||
use TinderDB::BasicTxtDB;
|
||||
use VCDisplay;
|
||||
use Utils;
|
||||
use TinderConfig;
|
||||
use TinderDB::Notice;
|
||||
|
||||
$VERSION = '#tinder_version#';
|
||||
|
||||
@ISA = qw(TinderDB::BasicTxtDB);
|
||||
|
||||
# as part of the configuration for mozilla.org, they want most cells
|
||||
# which are empty to not have borders but the builds cells are
|
||||
# different. yeck!
|
||||
|
||||
$EMPTY_TABLE_CELL = $HTMLPopUp::EMPTY_TABLE_CELL ||
|
||||
" ";
|
||||
|
||||
$DISPLAY_BUILD_ERRORS = $TinderConfig::DISPLAY_BUILD_ERRORS ||
|
||||
1;
|
||||
if (defined ($TinderConfig::DISPLAY_BUILD_ERRORS)) {
|
||||
$DISPLAY_BUILD_ERRORS = $TinderConfig::DISPLAY_BUILD_ERRORS;
|
||||
} else {
|
||||
$DISPLAY_BUILD_ERRORS = 1;
|
||||
}
|
||||
|
||||
|
||||
# The number of most recent builds used in computing the averages
|
||||
|
@ -174,6 +172,10 @@ $DISPLAY_BUILD_ERRORS = $TinderConfig::DISPLAY_BUILD_ERRORS ||
|
|||
|
||||
$NUM_OF_AVERAGE = 10;
|
||||
|
||||
# We 'have a' notice so that we can put stars in our column.
|
||||
|
||||
$NOTICE= TinderDB::Notice->new();
|
||||
|
||||
# Find the name of each build and the proper order to display them.
|
||||
# No part of the code should peek at keys %{ $DATABASE{$tree} } directly.
|
||||
|
||||
|
@ -263,6 +265,12 @@ sub latest_status {
|
|||
}
|
||||
|
||||
|
||||
# where can people attach notices to?
|
||||
# Really this is the names the columns produced by this DB
|
||||
|
||||
sub notice_association {
|
||||
return build_names();
|
||||
}
|
||||
|
||||
# Prepare information for popupwindows on row headers and also the
|
||||
# link to bonsai giving the aproximate times that the build was
|
||||
|
@ -1076,6 +1084,9 @@ sub status_table_start {
|
|||
|
||||
my (@all_build_names) = all_build_names($tree);
|
||||
foreach $buildname (@all_build_names) {
|
||||
|
||||
$NOTICE->status_table_start($row_times, $tree, $buildname);
|
||||
|
||||
my ($db_index) = 0;
|
||||
my ($current_rec) = $DATABASE{$tree}{$buildname}{'recs'}[$db_index];
|
||||
while (
|
||||
|
@ -1139,20 +1150,38 @@ sub status_table_row {
|
|||
$rowspan++ ;
|
||||
}
|
||||
|
||||
$NEXT_ROW{$tree}{$buildname} = $row_index + $rowspan;
|
||||
|
||||
my ($cell_color) = BuildStatus::status2html_colors('not_running');
|
||||
my ($cell_options) = ("rowspan=$rowspan ".
|
||||
"bgcolor=$cell_color ");
|
||||
my ($lc_time) = localtime($current_rec->{'timenow'});
|
||||
|
||||
my $notice = $NOTICE->Notice_Link(
|
||||
$row_times->[$row_index + $rowspan],
|
||||
$tree,
|
||||
$buildname,
|
||||
);
|
||||
my $cell_contents;
|
||||
if ($notice) {
|
||||
$cell_contents = (
|
||||
"\t\t\t".
|
||||
$notice.
|
||||
"\n".
|
||||
"");
|
||||
} else {
|
||||
$cell_contents = $HTMLPopUp::EMPTY_TABLE_CELL;
|
||||
}
|
||||
|
||||
push @outrow, ("\t<!-- not_running: Build:".
|
||||
"tree: $tree, ".
|
||||
"build: $buildname, ".
|
||||
"previous_end: $lc_time, ".
|
||||
"-->\n".
|
||||
|
||||
|
||||
"\t\t<td align=center $cell_options>".
|
||||
"$EMPTY_TABLE_CELL</td>\n");
|
||||
$NEXT_ROW{$tree}{$buildname} = $row_index + $rowspan;
|
||||
"$cell_contents</td>\n");
|
||||
|
||||
next;
|
||||
}
|
||||
|
||||
|
@ -1280,6 +1309,17 @@ sub status_table_row {
|
|||
"");
|
||||
}
|
||||
|
||||
|
||||
$links .= (
|
||||
"\t\t\t".
|
||||
$NOTICE->Notice_Link(
|
||||
$current_rec->{'starttime'},
|
||||
$tree,
|
||||
$buildname,
|
||||
).
|
||||
"\n".
|
||||
"");
|
||||
|
||||
|
||||
$links.= "\t\t\t".$text_browser_color_string."\n";
|
||||
|
||||
|
|
|
@ -30,8 +30,8 @@
|
|||
# kestes@walrus.com Home.
|
||||
# Contributor(s):
|
||||
|
||||
# $Revision: 1.22 $
|
||||
# $Date: 2002-05-06 19:08:55 $
|
||||
# $Revision: 1.23 $
|
||||
# $Date: 2002-05-10 21:20:27 $
|
||||
# $Author: kestes%walrus.com $
|
||||
# $Source: /home/jrmuizel/cvs-mirror/mozilla/webtools/tinderbox2/src/lib/TinderDB/Notice.pm,v $
|
||||
# $Name: $
|
||||
|
@ -84,7 +84,7 @@ use Utils;
|
|||
use HTMLPopUp;
|
||||
use TinderDB::BasicTxtDB;
|
||||
|
||||
$VERSION = ( qw $Revision: 1.22 $ )[1];
|
||||
$VERSION = ( qw $Revision: 1.23 $ )[1];
|
||||
|
||||
@ISA = qw(TinderDB::BasicTxtDB);
|
||||
|
||||
|
@ -215,7 +215,7 @@ sub trim_db_history {
|
|||
# clear data structures in preparation for printing a new table
|
||||
|
||||
sub status_table_start {
|
||||
my ($self, $row_times, $tree, ) = @_;
|
||||
my ($self, $row_times, $tree, $association) = @_;
|
||||
|
||||
# create an ordered list of all times which any data is stored
|
||||
|
||||
|
@ -233,16 +233,53 @@ sub status_table_start {
|
|||
my ($first_cell_seconds) = 2*($row_times->[0] - $row_times->[1]);
|
||||
my ($earliest_data) = $row_times->[0] + $first_cell_seconds;
|
||||
|
||||
$NEXT_DB = 0;
|
||||
while ( ($DB_TIMES[$NEXT_DB] > $earliest_data) &&
|
||||
($NEXT_DB < $#DB_TIMES) ) {
|
||||
$NEXT_DB++
|
||||
$NEXT_DB{$tree}{$association} = 0;
|
||||
while ( ($DB_TIMES[$NEXT_DB{$tree}{$association}] > $earliest_data) &&
|
||||
($NEXT_DB{$tree}{$association} < $#DB_TIMES) ) {
|
||||
$NEXT_DB{$tree}{$association}++
|
||||
}
|
||||
|
||||
return ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
sub cell_data {
|
||||
my ($tree, $db_index, $last_time, $association) = @_;
|
||||
|
||||
my %authors = ();
|
||||
|
||||
my ($first_notice_time) = $DB_TIMES[$NEXT_DB{$tree}{$association}];
|
||||
|
||||
while (1) {
|
||||
my ($time) = $DB_TIMES[$db_index];
|
||||
|
||||
# find the DB entries which are needed for this cell
|
||||
($time < $last_time) && last;
|
||||
($db_index >= $#DB_TIMES) && last;
|
||||
|
||||
$db_index++;
|
||||
|
||||
foreach $author (keys %{ $DATABASE{$tree}{$time} }) {
|
||||
my $rec = $DATABASE{$tree}{$time}{$author};
|
||||
if (
|
||||
(defined($association)) &&
|
||||
(!(defined($rec->{'associations'}->{$association})))
|
||||
) {
|
||||
next;
|
||||
}
|
||||
$authors{$author} = $rec;
|
||||
}
|
||||
|
||||
} # while (1)
|
||||
|
||||
|
||||
return ($db_index, $first_notice_time, \%authors);
|
||||
}
|
||||
|
||||
|
||||
# Given a notice return a formatted HTML representation of the text.
|
||||
|
||||
sub render_notice {
|
||||
my ($notice) = @_;
|
||||
|
||||
|
@ -252,156 +289,274 @@ sub render_notice {
|
|||
my $mailaddr = $notice->{'mailaddr'};
|
||||
|
||||
my ($pretty_time) = HTMLPopUp::timeHTML($time);
|
||||
my $mailto = "mailto:$mailaddr?subject=Tinderbox Notice";
|
||||
my $hidden_info = (
|
||||
"\t\t\t<!-- ".
|
||||
"posted from remote host: $remote_host".
|
||||
" at time: $notice->{'localposttime'} ".
|
||||
"-->\n".
|
||||
"");
|
||||
|
||||
# If the user requests for us to lie about the time, we should
|
||||
# also tell when the note was really posted.
|
||||
|
||||
my $localpostedtime;
|
||||
if ( $notice->{'posttime'} - $notice->{'time'} > $main::SECONDS_PER_HOUR) {
|
||||
$localpostedtime = (
|
||||
"<br>(Actually posted at: ".
|
||||
$notice->{'localposttime'}.
|
||||
")\n".
|
||||
"");
|
||||
if (
|
||||
($notice->{'posttime'} - $notice->{'time'}) >
|
||||
$main::SECONDS_PER_HOUR
|
||||
) {
|
||||
$localpostedtime = (
|
||||
"(Actually posted at: ".
|
||||
$notice->{'localposttime'}.
|
||||
")<br>\n".
|
||||
"");
|
||||
}
|
||||
|
||||
my $rendered_association;
|
||||
my $assocations_ref = $notice->{'associations'};
|
||||
if ($assocations_ref) {
|
||||
foreach $association (sort keys %{ $assocations_ref }) {
|
||||
$rendered_association .= (
|
||||
"\t\t\t<tt>-".
|
||||
$association.
|
||||
"-</tt><br>\n"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
my ($rendered_notice) = (
|
||||
"\t\t<p>\n".
|
||||
"\t\t\t[<b>".
|
||||
HTMLPopUp::Link(
|
||||
"linktxt"=>$mailaddr,
|
||||
"href"=>"mailto:$mailaddr?subject=\"Tinderbox Notice\"",
|
||||
"name"=>"$time\.$mailaddr",
|
||||
).
|
||||
" - ".
|
||||
HTMLPopUp::Link(
|
||||
"linktxt"=>$pretty_time,
|
||||
"href"=>"\#$time",
|
||||
).
|
||||
"</b>]".
|
||||
$localpostedtime.
|
||||
"\n".
|
||||
"<!-- posted from remote host: $remote_host at time : $notice->{'localposttime'} -->\n".
|
||||
"\t\t</p>\n".
|
||||
"\t\t<p>\n".
|
||||
"$note\n".
|
||||
"\t\t</p>\n"
|
||||
);
|
||||
my ($rendered_notice) = (
|
||||
"\t\t<br>\n".
|
||||
"\t\t\t[<b>".
|
||||
HTMLPopUp::Link(
|
||||
"linktxt"=>$mailaddr,
|
||||
"href"=>$mailto,
|
||||
"name"=>"$time\.$mailaddr",
|
||||
).
|
||||
" - ".
|
||||
HTMLPopUp::Link(
|
||||
"linktxt"=>$pretty_time,
|
||||
"href"=>"\#$time",
|
||||
).
|
||||
"</b>]<br>\n".
|
||||
$localpostedtime.
|
||||
$rendered_association.
|
||||
$hidden_info.
|
||||
"\t\t<p>\n".
|
||||
"$note\n".
|
||||
"\t\t</p>\n"
|
||||
);
|
||||
|
||||
return $rendered_notice;
|
||||
}
|
||||
|
||||
|
||||
# return all the notices so we can write to the disk this data. Those
|
||||
# users with text browsers can view this data without popups.
|
||||
|
||||
sub get_all_rendered_notices {
|
||||
my ($self, $tree, ) = @_;
|
||||
|
||||
my $rendered_notices;
|
||||
|
||||
my @db_times = sort {$b <=> $a} keys %{ $DATABASE{$tree} };
|
||||
|
||||
foreach $time (@db_times) {
|
||||
|
||||
$localtime = localtime($time);
|
||||
$rendered_notices .= (
|
||||
"\n\n".
|
||||
# allow us to reference individual
|
||||
# notices in the file
|
||||
HTMLPopUp::Link(
|
||||
"name"=>$time,
|
||||
"href"=>"\#$time",
|
||||
#"linktxt" => $localtime,
|
||||
).
|
||||
"<!-- $localtime -->".
|
||||
"\n".
|
||||
"");
|
||||
|
||||
foreach $author (keys %{ $DATABASE{$tree}{$time} }) {
|
||||
my $new_notice =
|
||||
render_notice($DATABASE{$tree}{$time}{$author});
|
||||
|
||||
$rendered_notices .= "<p>".$new_notice."</p>";
|
||||
} # foreach $author
|
||||
|
||||
} # foreach $time
|
||||
|
||||
|
||||
return $rendered_notices;
|
||||
}
|
||||
|
||||
# Given a data structure which represents all applicable notices for a
|
||||
# cell render the popup and graphic image which is appropriate. This
|
||||
# is used by the code which renders the whole cell in <td>'s.
|
||||
|
||||
|
||||
sub rendered_cell_contents {
|
||||
my ($tree, $authors, $first_notice_time, ) = @_;
|
||||
|
||||
my $rendered_notices;
|
||||
my $num_notices =0;
|
||||
foreach $author (sort keys %{ $authors }) {
|
||||
my $new_notice =
|
||||
render_notice($authors->{$author});
|
||||
|
||||
$rendered_notices .= "<p>".$new_notice."</p>";
|
||||
$num_notices++
|
||||
} # foreach $author
|
||||
|
||||
|
||||
($rendered_notices) ||
|
||||
return ;
|
||||
|
||||
# create a url to a cgi script so that those who do not use pop up
|
||||
# menus can view the notice.
|
||||
|
||||
my $href = (FileStructure::get_filename($tree, 'tree_URL').
|
||||
"/all_notices.html\#$first_notice_time");
|
||||
|
||||
# the popup window software is pretty sensitive to newlines and
|
||||
# terminating quotes. Take those out of the message.
|
||||
|
||||
my $title = (
|
||||
"Notice Board: ".
|
||||
HTMLPopUp::timeHTML($first_notice_time)
|
||||
);
|
||||
|
||||
$out = (
|
||||
"\t\t".
|
||||
HTMLPopUp::Link(
|
||||
|
||||
# If notice available is an image then
|
||||
# we need the spaces to make the popup
|
||||
# on mouse over work.
|
||||
|
||||
"linktxt" => " $NOTICE_AVAILABLE ",
|
||||
"href" => $href,
|
||||
"windowtxt" => $rendered_notices,
|
||||
"windowtitle" => $title,
|
||||
"windowheight" => (175 * $num_notices)+100,
|
||||
).
|
||||
"\n".
|
||||
"");
|
||||
|
||||
return $out;
|
||||
}
|
||||
|
||||
sub get_all_rendered_notices {
|
||||
my ($self, $tree, ) = @_;
|
||||
|
||||
my $rendered_notices;
|
||||
|
||||
my @db_times = sort {$b <=> $a} keys %{ $DATABASE{$tree} };
|
||||
# Create one cell (possibly taking up many rows) which will show
|
||||
# that no authors have checked in during this time.
|
||||
|
||||
foreach $time (@db_times) {
|
||||
|
||||
$localtime = localtime($time);
|
||||
$rendered_notices .= (
|
||||
"\n\n".
|
||||
# allow us to reference individual
|
||||
# notices in the file
|
||||
HTMLPopUp::Link(
|
||||
"name"=>$time,
|
||||
"href"=>"\#$time",
|
||||
#"linktxt" => $localtime,
|
||||
).
|
||||
"<!-- $localtime -->".
|
||||
"\n".
|
||||
"");
|
||||
sub render_empty_cell {
|
||||
my ($tree, $till_time, $rowspan) = @_;
|
||||
|
||||
foreach $author (keys %{ $DATABASE{$tree}{$time} }) {
|
||||
my $new_notice =
|
||||
render_notice($DATABASE{$tree}{$time}{$author});
|
||||
my $local_till_time = localtime($till_time);
|
||||
return ("\t<!-- Notice: empty data. ".
|
||||
"tree: $tree, ".
|
||||
"filling till: '$local_till_time', ".
|
||||
"-->\n".
|
||||
|
||||
$rendered_notices .= "<p>".$new_notice."</p>";
|
||||
} # foreach $author
|
||||
|
||||
} # foreach $time
|
||||
"\t\t<td align=center rowspan=$rowspan>".
|
||||
"$HTMLPopUp::EMPTY_TABLE_CELL</td>\n");
|
||||
}
|
||||
|
||||
|
||||
return $rendered_notices;
|
||||
sub Notice_Link {
|
||||
my ($self, $last_time, $tree, $association) = @_;
|
||||
|
||||
my ($db_index, $first_notice_time, $authors) =
|
||||
cell_data($tree,
|
||||
$NEXT_DB{$tree}{$association},
|
||||
$last_time,
|
||||
$association);
|
||||
|
||||
$NEXT_DB{$tree}{$association} = $db_index;
|
||||
|
||||
my $html = rendered_cell_contents($tree,
|
||||
$authors, $first_notice_time);
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
|
||||
sub status_table_row {
|
||||
my ($self, $row_times, $row_index, $tree, ) = @_;
|
||||
my ($self, $row_times, $row_index, $tree,) = @_;
|
||||
|
||||
my @html;
|
||||
|
||||
my @outrow = ();
|
||||
my @authors = ();
|
||||
# skip this column because it is part of a multi-row missing data
|
||||
# cell?
|
||||
|
||||
# we assume that tree states only change rarely so there are very
|
||||
# few cells which have more then one state associated with them.
|
||||
# It does not matter what we do with those cells.
|
||||
if ( $NEXT_ROW{$tree}{$association} != $row_index ) {
|
||||
|
||||
push @html, ("\t<!-- Notice: skipping. ".
|
||||
"tree: $tree, ".
|
||||
"additional_skips: ".
|
||||
($NEXT_ROW{$tree}{$association} - $row_index).", ".
|
||||
" -->\n");
|
||||
return @html;
|
||||
}
|
||||
|
||||
my ($db_index, $first_notice_time, $authors) =
|
||||
cell_data($tree,
|
||||
$NEXT_DB{$tree}{$association},
|
||||
$row_times->[$row_index],
|
||||
undef);
|
||||
|
||||
# If there is data for this cell render it and return.
|
||||
|
||||
my $rendered_notice = '';
|
||||
my $num_notices = 0;
|
||||
if (scalar(%{$authors})) {
|
||||
|
||||
$NEXT_DB{$tree}{$association} = $db_index;
|
||||
$NEXT_ROW{$tree}{$association} = $row_index + 1;
|
||||
@html = rendered_cell_contents(
|
||||
$tree,
|
||||
$authors, $first_notice_time);
|
||||
|
||||
my ($first_notice_time) = $DB_TIMES[$NEXT_DB];
|
||||
my $out = (
|
||||
"\t<td align=center>\n".
|
||||
"@html".
|
||||
"\t</td>\n".
|
||||
"");
|
||||
|
||||
while (1) {
|
||||
my ($time) = $DB_TIMES[$NEXT_DB];
|
||||
|
||||
# find the DB entries which are needed for this cell
|
||||
($time < $row_times->[$row_index]) && last;
|
||||
|
||||
foreach $author (keys %{ $DATABASE{$tree}{$time} }) {
|
||||
my $new_notice =
|
||||
render_notice($DATABASE{$tree}{$time}{$author});
|
||||
|
||||
$rendered_notice .= "<p>".$new_notice."</p>";
|
||||
push @authors, $author;
|
||||
$num_notices++;
|
||||
return $out;
|
||||
}
|
||||
|
||||
$NEXT_DB++;
|
||||
($NEXT_DB > $#DB_TIMES) && last;
|
||||
}
|
||||
# Create a multi-row dummy cell for missing data.
|
||||
# Cell stops if there is data in the following cell.
|
||||
|
||||
my $rowspan = 0;
|
||||
my ($next_db_index);
|
||||
$next_db_index = $db_index;
|
||||
|
||||
while (
|
||||
($row_index+$rowspan <= $#{ $row_times }) &&
|
||||
|
||||
|
||||
# create a url to a cgi script so that those who do not use pop up
|
||||
# menus can view the notice.
|
||||
|
||||
my $href = (FileStructure::get_filename($tree, 'tree_URL').
|
||||
"/all_notices.html\#$first_notice_time");
|
||||
|
||||
if ($rendered_notice) {
|
||||
|
||||
# the popup window software is pretty sensitive to newlines and
|
||||
# terminating quotes. Take those out of the message.
|
||||
|
||||
|
||||
@outrow = (
|
||||
"\t<td>\n".
|
||||
"\t\t".
|
||||
HTMLPopUp::Link(
|
||||
|
||||
# if notice available is an image then
|
||||
# we need the spaces to make the popup
|
||||
# on mouse over work.
|
||||
|
||||
"linktxt" => " $NOTICE_AVAILABLE ",
|
||||
"href" => $href,
|
||||
"windowtxt" => $rendered_notice,
|
||||
"windowtitle" => "Notice Board",
|
||||
"windowheight" => (175 * $num_notices)+100,
|
||||
).
|
||||
"\n".
|
||||
"\t</td>\n");
|
||||
} else {
|
||||
@outrow = ("\t<!-- skipping: Notice: tree: $tree -->\n".
|
||||
"\t\t<td>$HTMLPopUp::EMPTY_TABLE_CELL</td>\n");
|
||||
|
||||
}
|
||||
|
||||
|
||||
return @outrow;
|
||||
(!(scalar(%{$authors})))
|
||||
) {
|
||||
|
||||
$db_index = $next_db_index;
|
||||
$rowspan++ ;
|
||||
|
||||
($next_db_index, $first_notice_time, $authors) =
|
||||
cell_data($tree,
|
||||
$db_index,
|
||||
$row_times->[$row_index+$rowspan],
|
||||
undef);
|
||||
}
|
||||
|
||||
$NEXT_ROW{$tree}{$association} = $row_index + $rowspan;
|
||||
$NEXT_DB{$tree}{$association} = $db_index;
|
||||
|
||||
@html= render_empty_cell($tree,
|
||||
$row_times->[$row_index+$rowspan],
|
||||
$rowspan);
|
||||
|
||||
return @html;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
|
|
@ -40,8 +40,8 @@
|
|||
# Contributor(s):
|
||||
|
||||
|
||||
# $Revision: 1.59 $
|
||||
# $Date: 2002-05-09 03:08:38 $
|
||||
# $Revision: 1.60 $
|
||||
# $Date: 2002-05-10 21:20:26 $
|
||||
# $Author: kestes%walrus.com $
|
||||
# $Source: /home/jrmuizel/cvs-mirror/mozilla/webtools/tinderbox2/src/lib/TinderDB/VC_Bonsai.pm,v $
|
||||
# $Name: $
|
||||
|
@ -99,9 +99,10 @@ use Utils;
|
|||
use HTMLPopUp;
|
||||
use TreeData;
|
||||
use VCDisplay;
|
||||
use TinderDB::Notice;
|
||||
|
||||
|
||||
$VERSION = ( qw $Revision: 1.59 $ )[1];
|
||||
$VERSION = ( qw $Revision: 1.60 $ )[1];
|
||||
|
||||
@ISA = qw(TinderDB::BasicTxtDB);
|
||||
|
||||
|
@ -112,6 +113,9 @@ $VC_NAME = $TinderConfig::VC_NAME || "CVS";
|
|||
$VC_BUGNUM_REGEXP = $TinderConfig::VC_BUGNUM_REGEXP ||
|
||||
'(\d\d\d+)';
|
||||
|
||||
# We 'have a' notice so that we can put stars in our column.
|
||||
|
||||
$NOTICE= TinderDB::Notice->new();
|
||||
|
||||
# Print out the Database in a visually useful form so that I can
|
||||
# debug timing problems. This is not called by any code. I use this
|
||||
|
@ -336,7 +340,7 @@ sub status_table_legend {
|
|||
# Really this is the names the columns produced by this DB
|
||||
|
||||
sub notice_association {
|
||||
return "$VC_NAME";
|
||||
return $VC_NAME;
|
||||
}
|
||||
|
||||
|
||||
|
@ -411,8 +415,10 @@ sub render_authors {
|
|||
}
|
||||
|
||||
my $query_links = '';
|
||||
$query_links.= "\t\t".$text_browser_color_string."\n";
|
||||
|
||||
if ($text_browser_color_string) {
|
||||
$query_links.= "\t\t".$text_browser_color_string."\n";
|
||||
}
|
||||
|
||||
if ( scalar(%authors) ) {
|
||||
|
||||
# find the times which bound the cell so that we can set up a
|
||||
|
@ -564,24 +570,24 @@ sub render_authors {
|
|||
" -->\n".
|
||||
"");
|
||||
|
||||
# $links .= (
|
||||
# "\t\t\t".
|
||||
# TinderDB::Notice::Notice_Link(
|
||||
# 'tree' => $tree,
|
||||
# 'associated' => $VC_NAME,
|
||||
# 'mindate' => $mindate,
|
||||
# 'maxdate' => $maxdate,
|
||||
# )
|
||||
# "\n"
|
||||
# );
|
||||
|
||||
$query_links .= "\t\t".$query_link."\n";
|
||||
|
||||
} # foreach %author
|
||||
} # if %authors
|
||||
|
||||
$query_links.= "\t\t".$text_browser_color_string."\n";
|
||||
|
||||
my $notice = $NOTICE->Notice_Link(
|
||||
$maxdate,
|
||||
$tree,
|
||||
$VC_NAME,
|
||||
);
|
||||
if ($notice) {
|
||||
$query_links.= "\t\t".$notice."\n";
|
||||
}
|
||||
|
||||
if ($text_browser_color_string) {
|
||||
$query_links.= "\t\t".$text_browser_color_string."\n";
|
||||
}
|
||||
|
||||
@outrow = (
|
||||
"\t<!-- VC_Bonsai: authors -->\n".
|
||||
"\t<td align=center $cell_options>\n".
|
||||
|
@ -612,9 +618,25 @@ sub render_empty_cell {
|
|||
$text_browser_color_string =
|
||||
HTMLPopUp::text_browser_color_string($cell_color, $char) ;
|
||||
}
|
||||
my $notice = $NOTICE->Notice_Link(
|
||||
$till_time,
|
||||
$tree,
|
||||
$VC_NAME,
|
||||
);
|
||||
|
||||
my $cell_contents = $text_browser_color_string ||
|
||||
$HTMLPopUp::EMPTY_TABLE_CELL;
|
||||
|
||||
my $cell_contents;
|
||||
if ($text_browser_color_string) {
|
||||
$cell_contents .= $text_browser_color_string;
|
||||
}
|
||||
|
||||
if ($notice) {
|
||||
$cell_contents .= "\n\t\t".$notice."\n";
|
||||
}
|
||||
|
||||
if (!($cell_contents)) {
|
||||
$cell_contents = "\n\t\t".$HTMLPopUp::EMPTY_TABLE_CELL."\n";
|
||||
}
|
||||
|
||||
return ("\t<!-- VC_Bonsai: empty data. ".
|
||||
"tree: $tree, ".
|
||||
|
@ -653,6 +675,8 @@ sub status_table_start {
|
|||
$NEXT_DB{$tree}++
|
||||
}
|
||||
|
||||
$NOTICE->status_table_start($row_times, $tree, $VC_NAME);
|
||||
|
||||
# we do not store a treestate with every database entry.
|
||||
# remember the treestate as we travel through the database.
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче