TopQuickSearch: Konfiguration in client_config
authorSven Schöling <s.schoeling@linet-services.de>
Tue, 22 Mar 2016 14:18:51 +0000 (15:18 +0100)
committerSven Schöling <s.schoeling@linet-services.de>
Tue, 22 Mar 2016 16:36:35 +0000 (17:36 +0100)
SL/Controller/ClientConfig.pm
SL/Controller/TopQuickSearch.pm
SL/Controller/TopQuickSearch/Base.pm
SL/Controller/TopQuickSearch/GLTransaction.pm
SL/DB/MetaSetup/Default.pm
locale/de/all
sql/Pg-upgrade2/defaults_add_quick_search_modules.sql [new file with mode: 0644]
templates/webpages/client_config/_features.html
templates/webpages/menu/header.html

index d002f42..4ce4faa 100644 (file)
@@ -16,11 +16,12 @@ use SL::Helper::Flash;
 use SL::Locale::String qw(t8);
 use SL::PriceSource::ALL;
 use SL::Template;
+use SL::Controller::TopQuickSearch;
 
 __PACKAGE__->run_before('check_auth');
 
 use Rose::Object::MakeMethods::Generic (
-  'scalar --get_set_init' => [ qw(defaults all_warehouses all_weightunits all_languages all_currencies all_templates all_price_sources h_unit_name
+  'scalar --get_set_init' => [ qw(defaults all_warehouses all_weightunits all_languages all_currencies all_templates all_price_sources h_unit_name available_quick_search_modules
                                   all_project_statuses all_project_types
                                   posting_options payment_options accounting_options inventory_options profit_options balance_startdate_method_options) ],
 );
@@ -191,6 +192,10 @@ sub init_all_price_sources {
   [ map { [ $_->name, $_->description ] } @classes ];
 }
 
+sub init_available_quick_search_modules {
+  [ SL::Controller::TopQuickSearch->new->available_modules ];
+}
+
 #
 # filters
 #
index 8c6661e..b721749 100644 (file)
@@ -57,10 +57,20 @@ sub available_modules {
   map { $_->new } @available_modules;
 }
 
+sub enabled_modules {
+  my %enabled_names = map {
+    $_ => 1
+  } @{ $::instance_conf->get_quick_search_modules };
+
+  grep {
+    $enabled_names{$_->name}
+  } $_[0]->available_modules
+}
+
 sub active_modules {
   grep {
     $::auth->assert($_->auth, 1)
-  } $_[0]->available_modules
+  } $_[0]->enabled_modules
 }
 
 sub init_module {
@@ -118,8 +128,8 @@ my $search = SL::Controller::TopQuickSearch->new;
 This controller provides abstraction for different search plugins, and ensures
 that all follow a common useability scheme.
 
-Modules should be configurable, but currently are not. Diabling modules can be
-done by removing them from available_modules.
+Modules should be configurable per user, but currently are not. Disabling
+modules can be done by removing them from available_modules or in client_config.
 
 =head1 BEHAVIOUR REQUIREMENTS
 
@@ -161,21 +171,10 @@ the user should not see.
 
 =head1 INTERFACE
 
-Plugins need to provide:
-
- - name
- - localized description for config
- - localized description for textfield
- - autocomplete callback
- - redirect callback
-
-the frontend will only generate urls of the forms:
-  action=TopQuickSearch/autocomplete&module=<module>&term=<term>
-  action=TopQuickSearch/search&module=<module>&term=<term>
+The full interface is described in L<SL::Controller::TopQuickSeach::Base>
 
 =head1 TODO
 
- - filter available searches with auth
  - toggling with cofiguration doesn't work yet
 
 =head1 BUGS
index 18c3b88..6c60618 100644 (file)
@@ -48,7 +48,7 @@ Internal name, must be plain ASCII.
 
 =item C<description_config>
 
-Localized name used in the configuration (NYI)
+Localized name used in the configuration.
 
 =item C<description_field>
 
index 2b4facd..77854ff 100644 (file)
@@ -12,7 +12,7 @@ use List::Util qw(sum);
 
 sub auth { 'general_ledger' }
 
-sub name { 'gl_transction' }
+sub name { 'gl_transaction' }
 
 sub description_config { t8('GL search') }
 
index 619a429..96c4b0f 100644 (file)
@@ -84,6 +84,7 @@ __PACKAGE__->meta->columns(
   project_type_id                           => { type => 'integer' },
   purchase_delivery_order_show_delete       => { type => 'boolean', default => 'true' },
   purchase_order_show_delete                => { type => 'boolean', default => 'true' },
+  quick_search_modules                      => { type => 'array' },
   reqdate_interval                          => { type => 'integer', default => '0' },
   require_transaction_description_ps        => { type => 'boolean', default => 'false', not_null => 1 },
   requirement_spec_section_order_part_id    => { type => 'integer' },
index bad475f..de2c7f2 100755 (executable)
@@ -221,6 +221,7 @@ $self->{texts} = {
   'All clients'                 => 'Alle Mandanten',
   'All general ledger entries'  => 'Alle Hauptbucheinträge',
   'All groups'                  => 'Alle Gruppen',
+  'All modules'                 => 'Alle Module',
   'All of the exports you have selected were already closed.' => 'Alle von Ihnen ausgewählten Exporte sind bereits abgeschlossen.',
   'All partsgroups'             => 'Alle Warengruppen',
   'All price sources'           => 'Alle Preisquellen',
@@ -1114,6 +1115,8 @@ $self->{texts} = {
   'Employees'                   => 'Benutzer',
   'Empty selection for warehouse will not be added, even if the old bin is still visible (use back and forth to edit again).' => 'Leere Lager-Auswahl wird ignoriert, selbst wenn noch ein Lagerplatz ausgewählt ist. Alle Daten können durch zurück und vorwärts korrigiert werden.',
   'Empty transaction!'          => 'Buchung ist leer!',
+  'Enabled Quick Searched'      => 'Aktivierte Schnellsuchen',
+  'Enabled modules'             => 'Aktivierte Module',
   'End date'                    => 'Enddatum',
   'Enter a description for this new draft.' => 'Geben Sie eine Beschreibung f&uuml;r diesen Entwurf ein.',
   'Enter longdescription'       => 'Langtext eingeben',
@@ -2184,6 +2187,7 @@ $self->{texts} = {
   'Quarterly'                   => 'quartalsweise',
   'Query Type'                  => 'Art der Abfrage',
   'Queue'                       => 'Warteschlange',
+  'Quick Searches that will be shown in the header in this client' => 'Schnellsuchen, die in der Kopfzeile in diesem Mandanten gezeigt werden sollen',
   'Quotation'                   => 'Angebot',
   'Quotation Date'              => 'Angebotsdatum',
   'Quotation Date missing!'     => 'Angebotsdatum fehlt!',
diff --git a/sql/Pg-upgrade2/defaults_add_quick_search_modules.sql b/sql/Pg-upgrade2/defaults_add_quick_search_modules.sql
new file mode 100644 (file)
index 0000000..7377925
--- /dev/null
@@ -0,0 +1,8 @@
+-- @tag: defaults_add_quick_search_modules
+-- @description: Mandantenkonfiguration für Schnellsuche
+-- @depends: release_3_4_0
+-- @encoding: utf-8
+
+ALTER TABLE defaults ADD COLUMN quick_search_modules TEXT[];
+
+UPDATE defaults SET quick_search_modules = '{"contact","gl_transaction"}';
index 0a2eb02..0a06d43 100644 (file)
    <td>[% L.yes_no_tag('defaults.show_longdescription_select_item', SELF.defaults.show_longdescription_select_item) %]</td>
   </tr>
 
+  <tr><td class="listheading" colspan="4">[% LxERP.t8("Enabled Quick Searched") %]</td></tr>
+  <tr>
+    <td align="right">[% 'Quick Searches that will be shown in the header in this client' | $T8 %]</td>
+    <td colspan=2>
+      <div class="clearfix">
+       [% L.select_tag("defaults.quick_search_modules[]", SELF.available_quick_search_modules, value_key="name", title_key="description_config", id="defaults_quick_searches", multiple=1, default=SELF.defaults.quick_search_modules) %]
+       [% L.multiselect2side("defaults_quick_searches", labelsx=LxERP.t8("All modules"), labeldx=LxERP.t8("Enabled modules")) %]
+      </div>
+    </td>
+  </tr>
+
  </table>
 </div>
index 8e73671..f566af7 100644 (file)
@@ -6,7 +6,7 @@
     [<a href="controller.pl?action=LoginScreen/user_login" target="_blank" title="[% 'Open a further kivitendo window or tab' | $T8 %]">[% 'New window/tab' | $T8 %]</a>]
     [<a href="JavaScript:top.print();" title="[% 'Hardcopy' | $T8 %]">[% 'Print' | $T8 %]</a>]
 
-[%- FOREACH search = quick_search.active_modules %]
+[%- FOREACH search = quick_search.enabled_modules %]
     [<input id="top-quick-search-[% search.name %]" module="[% search.name %]" placeholder="[% search.description_field %]" maxlength="20">]
 [%- END %]