When in read-only mode the CollectionBlock does not allow any per-item or global action to be performed.
Signed-off-by: Francois Gouget fgouget@codeweavers.com --- This avoids having to redefine GetItemActions() and GetActions() for the sole purpose of preventing the default actions on a collection block and thus removes a bit of code.
When a collection block can operate either in read-only or read-write mode depending on the circumstances (failure blacklist pages) this also makes centralizing the corresponding test a no-brainer. --- .../lib/ObjectModel/CGI/CollectionBlock.pm | 39 ++++++++++++++++--- testbot/lib/ObjectModel/CGI/CollectionPage.pm | 7 ++++ testbot/web/PatchesList.pl | 13 +------ testbot/web/index.pl | 32 +-------------- 4 files changed, 43 insertions(+), 48 deletions(-)
diff --git a/testbot/lib/ObjectModel/CGI/CollectionBlock.pm b/testbot/lib/ObjectModel/CGI/CollectionBlock.pm index 40ad61b2b..13c2a62bd 100644 --- a/testbot/lib/ObjectModel/CGI/CollectionBlock.pm +++ b/testbot/lib/ObjectModel/CGI/CollectionBlock.pm @@ -53,7 +53,7 @@ use URI::Escape;
=item C<new()>
-Creates a table showing the content of the specified Collection with +Creates a table showing the content of the specified Collection with optional support for performing actions on selected rows, or performing global actions.
Parameters: @@ -67,6 +67,8 @@ ObjectModel::CGI::Page interface.
=back
+Note that by default the table is in read-write mode (see SetReadWrite()). + =back =cut
@@ -76,7 +78,9 @@ sub new($$$@) my ($Collection, $EnclosingPage) = @_;
my $self = {Collection => $Collection, - EnclosingPage => $EnclosingPage}; + EnclosingPage => $EnclosingPage, + RW => 1, + }; $self = bless $self, $class; $self->_initialize(@_); return $self; @@ -92,6 +96,28 @@ sub Create($$@) return ObjectModel::CGI::CollectionBlock->new(@_); }
+=pod +=over 12 + +=item C<SetReadWrite()> + +If set to true, the table allows selecting rows and applying actions to +them (see GetItemActions()), as well as performing global actions (see +GetActions()). + +Otherwise none of this is allowed, regardless of what GetItemActions() and +GetActions() return. + +=back +=cut + +sub SetReadWrite($$) +{ + my ($self, $RW) = @_; + + $self->{RW} = $RW; +} + sub GetDetailsPage($) { my ($self) = @_; @@ -405,7 +431,7 @@ EOF print "<table border='0' cellpadding='5' cellspacing='0' summary='" . "Overview of " . $Collection->GetCollectionName() . "'>\n"; print "<thead>\n"; - my $ItemActions = $self->GetItemActions(); + my $ItemActions = $self->{RW} ? $self->GetItemActions() : []; $self->GenerateHeaderRow($PropertyDescriptors, $ItemActions); print "</thead>\n";
@@ -459,7 +485,7 @@ EOF print "</div>\n"; }
- my $Actions = $self->GetActions(); + my $Actions = $self->{RW} ? $self->GetActions() : []; if (@$Actions != 0) { print "<div class='CollectionBlockActions'>\n"; @@ -499,6 +525,7 @@ column of checkboxes is added. sub GetItemActions($) { #my ($self) = @_; + return ["Delete"]; }
@@ -523,7 +550,7 @@ sub OnItemAction($$$) { my ($self, $Item, $Action) = @_;
- if ($Action eq "Delete") + if ($self->{RW} and $Action eq "Delete") { my $ErrMessage = $self->{Collection}->DeleteItem($Item); if (defined $ErrMessage) @@ -587,7 +614,7 @@ sub OnAction($$) { my ($self, $Action) = @_;
- if ($Action eq "Add " . $self->{Collection}->GetItemName()) + if ($self->{RW} and $Action eq "Add ". $self->{Collection}->GetItemName()) { my $Target = $self->GetDetailsPage(); my ($MasterColNames, $MasterColValues) = $self->{Collection}->GetMasterCols(); diff --git a/testbot/lib/ObjectModel/CGI/CollectionPage.pm b/testbot/lib/ObjectModel/CGI/CollectionPage.pm index 2de667b89..7bdd27e26 100644 --- a/testbot/lib/ObjectModel/CGI/CollectionPage.pm +++ b/testbot/lib/ObjectModel/CGI/CollectionPage.pm @@ -87,6 +87,13 @@ sub _initialize($$$$;$) $self->SUPER::_initialize($Request, $RequiredRole); }
+sub SetReadWrite($$) +{ + my ($self, $RW) = @_; + + $self->{CollectionBlock}->SetReadWrite($RW); +} +
# # HTML page generation diff --git a/testbot/web/PatchesList.pl b/testbot/web/PatchesList.pl index 49e16d8d2..854c2768a 100644 --- a/testbot/web/PatchesList.pl +++ b/testbot/web/PatchesList.pl @@ -64,18 +64,6 @@ sub GenerateDataCell($$$$$) } }
-sub GetItemActions($) -{ - #my ($self) = @_; - return []; -} - -sub GetActions($) -{ - #my ($self) = @_; - return []; -} -
package main;
@@ -84,5 +72,6 @@ use WineTestBot::Patches;
my $Request = shift; my $Page = ObjectModel::CGI::CollectionPage->new($Request, "", CreatePatches(), &PatchesBlock::Create); +$Page->SetReadWrite(0); $Page->SetRefreshInterval(60); $Page->GeneratePage(); diff --git a/testbot/web/index.pl b/testbot/web/index.pl index d2dd2b49d..85f8df39f 100644 --- a/testbot/web/index.pl +++ b/testbot/web/index.pl @@ -43,18 +43,6 @@ sub SortKeys($$) return @SortedKeys; }
-sub GetItemActions($) -{ - #my ($self) = @_; - return []; -} - -sub GetActions($) -{ - #my ($self) = @_; - return []; -} - sub DisplayProperty($$) { my ($self, $PropertyDescriptor) = @_; @@ -207,18 +195,6 @@ sub SortKeys($$) return $self->{Collection}->SortKeysBySortOrder($Keys); }
-sub GetItemActions($) -{ - #my ($self) = @_; - return []; -} - -sub GetActions($) -{ - #my ($self) = @_; - return []; -} - sub DisplayProperty($$) { my ($self, $PropertyDescriptor) = @_; @@ -229,12 +205,6 @@ sub DisplayProperty($$) $PropertyName eq "Description"; }
-sub GetDetailsPage($) -{ - #my ($self) = @_; - return undef; -} -
package StatusPage;
@@ -344,6 +314,7 @@ sub GenerateBody($) my $CutOff = time() - $Days * 24 * 60 * 60; $Jobs->AddFilter("Submitted", [$CutOff], ">="); my $JobsCollectionBlock = new JobStatusBlock($Jobs, $self); + $JobsCollectionBlock->SetReadWrite(0);
# We need to collect information about the tasks of all jobs except the # pretty rare queued jobs. But doing so one job at a time is inefficient so @@ -384,6 +355,7 @@ EOF
print "<h2><a name='vms'></a>VMs</h2>\n"; my $VMsCollectionBlock = new VMStatusBlock(CreateVMs(), $self); + $VMsCollectionBlock->SetReadWrite(0); $VMsCollectionBlock->GenerateList(); print "</div>\n";