QuickSearch: nicht anzeigen, wenn Datenbankupgrades eingespielt werden müssen
authorMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 1 Apr 2016 09:13:16 +0000 (11:13 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 1 Apr 2016 09:13:16 +0000 (11:13 +0200)
QuickSearch hat seine Konfiguration in gewissen Spalten in der
Datenbank. Um auf diese zugreifen zu können, müssen die dazugehörigen
Datenbankupgrades bereits eingespielt worden sein.

Da das Menü und damit die QuickSearch-Items auch während des Einspielens
der Upgrades angezeigt werden, kann es also dazu führen, dass die
Spalten noch nicht existieren. Daher wird QuickSearch nun komplett
deaktiviert, solange ausstehende Datenbankupgrades existieren.

SL/Layout/Top.pm
SL/Request.pm
SL/User.pm

index 2ae61cb..05c0046 100644 (file)
@@ -8,11 +8,17 @@ use SL::Controller::TopQuickSearch;
 sub pre_content {
   my ($self) = @_;
 
+  my @options;
+  # Only enable the quick search functionality if all database
+  # upgrades have already been applied as quick search requires
+  # certain columns that are only created by said database upgrades.
+  push @options, (quick_search => SL::Controller::TopQuickSearch->new) unless $::request->applying_database_upgrades;
+
   $self->presenter->render('menu/header',
     now        => DateTime->now_local,
     is_fastcgi => $::dispatcher ? scalar($::dispatcher->interface_type =~ /fastcgi/i) : 0,
     is_links   => scalar($ENV{HTTP_USER_AGENT}         =~ /links/i),
-    quick_search => SL::Controller::TopQuickSearch->new,
+    @options,
   );
 }
 
index f72694d..8d62f17 100644 (file)
@@ -18,6 +18,7 @@ our @EXPORT_OK = qw(flatten unflatten read_cgi_input);
 
 use Rose::Object::MakeMethods::Generic
 (
+  scalar                  => [ qw(applying_database_upgrades) ],
   'scalar --get_set_init' => [ qw(cgi layout presenter is_ajax type) ],
 );
 
index fe2152e..37e1a9b 100644 (file)
@@ -133,6 +133,11 @@ sub login {
     return LOGIN_OK();
   }
 
+  # Store the fact that we're applying database upgrades at the
+  # moment. That way functions called from the layout modules that may
+  # require updated tables can chose only to use basic features.
+  $::request->applying_database_upgrades(1);
+
   $form->{$_} = $::auth->client->{$_} for qw(dbname dbhost dbport dbuser dbpasswd);
   $form->{$_} = $myconfig{$_}         for qw(datestyle);