[tools] testbot/cgi: Let CollectionBlock operate in read-only mode.

Francois Gouget fgouget at codeweavers.com
Wed Apr 6 07:18:36 CDT 2022


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 at 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";
 
-- 
2.30.2



More information about the wine-devel mailing list