TopQuickSearch für den Benutzer konfigurierbar gemacht.
[kivitendo-erp.git] / SL / Controller / TopQuickSearch.pm
index b721749..8b47080 100644 (file)
@@ -6,6 +6,7 @@ use parent qw(SL::Controller::Base);
 use SL::ClientJS;
 use SL::JSON;
 use SL::Locale::String qw(t8);
+use SL::Helper::UserPreferences;
 
 use Rose::Object::MakeMethods::Generic (
  'scalar --get_set_init' => [ qw(module js) ],
@@ -16,8 +17,15 @@ my @available_modules = (
   'SL::Controller::TopQuickSearch::Part',
   'SL::Controller::TopQuickSearch::Service',
   'SL::Controller::TopQuickSearch::Assembly',
+  'SL::Controller::TopQuickSearch::Assortment',
   'SL::Controller::TopQuickSearch::Contact',
+  'SL::Controller::TopQuickSearch::SalesQuotation',
+  'SL::Controller::TopQuickSearch::SalesOrder',
+  'SL::Controller::TopQuickSearch::RequestForQuotation',
+  'SL::Controller::TopQuickSearch::PurchaseOrder',
   'SL::Controller::TopQuickSearch::GLTransaction',
+  'SL::Controller::TopQuickSearch::Customer',
+  'SL::Controller::TopQuickSearch::Vendor',
 );
 my %modules_by_name;
 
@@ -58,9 +66,23 @@ sub available_modules {
 }
 
 sub enabled_modules {
-  my %enabled_names = map {
-    $_ => 1
-  } @{ $::instance_conf->get_quick_search_modules };
+  my $user_prefs = SL::Helper::UserPreferences->new(
+    namespace         => 'TopQuickSearch',
+  );
+
+  my %enabled_names;
+  if ($user_prefs) {
+    my $prefs_val            = $user_prefs->get('quick_search_modules');
+    my @quick_search_modules = split ',', $prefs_val;
+
+    %enabled_names = map {
+      $_ => 1
+    } @quick_search_modules ;
+  } else {
+    %enabled_names = map {
+      $_ => 1
+    } @{ $::instance_conf->get_quick_search_modules };
+  }
 
   grep {
     $enabled_names{$_->name}
@@ -115,13 +137,14 @@ SL::Controller::TopQuickSearch - Framework for pluggable quicksearch fields in t
 
 =head1 SYNOPSIS
 
-use SL::Controller::TopQuickSearch;
-my $search = SL::Controller::TopQuickSearch->new;
+  use SL::Controller::TopQuickSearch;
+  my $search = SL::Controller::TopQuickSearch->new;
+  $::request->layout->add_javascripts('kivi.QuickSearch.js');
 
-# in layout
-[%- FOREACH module = search.available_modules %]
-<input type='text' id='top-search-[% module.name %]'>
-[%- END %]
+  # in template
+  [%- FOREACH module = search.enabled_modules %]
+  <input type='text' id='top-search-[% module.name %]'>
+  [%- END %]
 
 =head1 DESCRIPTION
 
@@ -167,6 +190,10 @@ redirect should occur.
 Each search must check rights and must not present a backdoor into data that
 the user should not see.
 
+=item *
+
+By design the search must not try to guess C<exact matches>.
+
 =back
 
 =head1 INTERFACE
@@ -175,7 +202,7 @@ The full interface is described in L<SL::Controller::TopQuickSeach::Base>
 
 =head1 TODO
 
- - toggling with cofiguration doesn't work yet
+  * user configuration
 
 =head1 BUGS