From: Sven Schöling Date: Tue, 28 Dec 2010 12:49:19 +0000 (+0100) Subject: Merge branch 'master' of ssh://lx-office.linet-services.de/~/lx-office-erp X-Git-Tag: release-2.6.2beta1~51^2~9 X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/commitdiff_plain/40c4eff395b9a1524d06e25ac7548113f9c1dc71?hp=eb2fb9cf3117515e9182ca4eb3c5f008ab2da225 Merge branch 'master' of ssh://lx-office.linet-services.de/~/lx-office-erp --- diff --git a/SL/Form.pm b/SL/Form.pm index f02c25abe..7b7746d0c 100644 --- a/SL/Form.pm +++ b/SL/Form.pm @@ -616,120 +616,72 @@ sub create_http_response { sub header { - $main::lxdebug->enter_sub(); + $::lxdebug->enter_sub; - # extra code ist currently only used by menuv3 and menuv4 to set their css. + # extra code is currently only used by menuv3 and menuv4 to set their css. # it is strongly deprecated, and will be changed in a future version. my ($self, $extra_code) = @_; + my $db_charset = $::dbcharset || Common::DEFAULT_CHARSET; + my @header; + + $::lxdebug->leave_sub and return if !$ENV{HTTP_USER_AGENT} || $self->{header}++; + + $self->{favicon} ||= "favicon.ico"; + $self->{titlebar} = "$self->{title} - $self->{titlebar}" if $self->{title}; + + # build includes + if ($self->{refresh_url} || $self->{refresh_time}) { + my $refresh_time = $self->{refresh_time} || 3; + my $refresh_url = $self->{refresh_url} || $ENV{REFERER}; + push @header, ""; + } + + push @header, "" + for grep { -f "css/$_" } apply { s|.*/|| } $self->{stylesheet}, $self->{stylesheets}; + + push @header, "" if $self->{landscape}; + push @header, "" if -f $self->{favicon}; + push @header, '', + '', + '', + '', + '', + '', + ''; + push @header, $self->{javascript} if $self->{javascript}; + push @header, map { $_->show_javascript } @{ $self->{AJAX} || [] }; + push @header, "" if $self->{fokus}; + push @header, sprintf "", + join ' - ', grep $_, $self->{title}, $self->{login}, $::myconfig{dbname}, $self->{version} if $self->{title}; - if ($self->{header}) { - $main::lxdebug->leave_sub(); - return; - } - - my ($stylesheet, $favicon, $pagelayout); - - if ($ENV{HTTP_USER_AGENT}) { - my $doctype; - - if ($ENV{'HTTP_USER_AGENT'} =~ m/MSIE\s+\d/) { - # Only set the DOCTYPE for Internet Explorer. Other browsers have problems displaying the menu otherwise. - $doctype = qq|\n|; - } - - my $stylesheets = "$self->{stylesheet} $self->{stylesheets}"; - - $stylesheets =~ s|^\s*||; - $stylesheets =~ s|\s*$||; - foreach my $file (split m/\s+/, $stylesheets) { - $file =~ s|.*/||; - next if (! -f "css/$file"); - - $stylesheet .= qq|\n|; - } - - $self->{favicon} = "favicon.ico" unless $self->{favicon}; - - if ($self->{favicon} && (-f "$self->{favicon}")) { - $favicon = - qq| - |; - } - - my $db_charset = $main::dbcharset ? $main::dbcharset : Common::DEFAULT_CHARSET; - - if ($self->{landscape}) { - $pagelayout = qq||; - } - - my $fokus = qq| + # if there is a title, we put some JavaScript in to the page, wich writes a + # meaningful title-tag for our frameset. + my $title_hack = ''; + if ($self->{title}) { + $title_hack = qq| - | if $self->{"fokus"}; - - # if there is a title, we put some JavaScript in to the page, wich writes a - # meaningful title-tag for our frameset. - my $title_hack; - if ($self->{"title"}){ - $title_hack = qq| - - |; - } - - #Set Calendar - my $jsscript = ""; - if ($self->{jsscript} == 1) { - - $jsscript = qq| - - - - - - - $self->{javascript} - |; - } - - $self->{titlebar} = - ($self->{title}) - ? "$self->{title} - $self->{titlebar}" - : $self->{titlebar}; - my $ajax = ""; - for my $item (@ { $self->{AJAX} || [] }) { - $ajax .= $item->show_javascript(); - } + |; + } - print $self->create_http_response('content_type' => 'text/html', - 'charset' => $db_charset,); - print qq|${doctype} - - + # output + print $self->create_http_response(content_type => 'text/html', charset => $db_charset); + print "\n" + if $ENV{'HTTP_USER_AGENT'} =~ m/MSIE\s+\d/; # Other browsers may choke on menu scripts with DOCTYPE. + print < + + $self->{titlebar} - $stylesheet - $pagelayout - $favicon - $jsscript - $ajax - $fokus - $title_hack - +EOT + print " $_\n" for @header; + print < - - + - $extra_code - + $title_hack + -|; - } - $self->{header} = 1; +EOT - $main::lxdebug->leave_sub(); + $::lxdebug->leave_sub; } sub ajax_response_header { @@ -3568,9 +3518,7 @@ Points of interest for a beginner are: =head1 SPECIAL FUNCTIONS -=over 4 - -=item _store_value() +=head2 C<_store_value()> parses a complex var name, and stores it in the form. @@ -3625,7 +3573,7 @@ supported key structures are: filter.status[] => $form->{status}->[ val1, val2, ... ] -=item update_business PARAMS +=head2 C PARAMS PARAMS (not named): \%config, - config hashref @@ -3637,7 +3585,7 @@ handles business (thats customer/vendor types) sequences. special behaviour for empty strings in customerinitnumber field: will in this case not increase the value, and return undef. -=item redirect_header $url +=head2 C $url Generates a HTTP redirection header for the new C<$url>. Constructs an absolute URL including scheme, host name and port. If C<$url> is a @@ -3651,6 +3599,45 @@ Examples: print $::form->redirect_header('oe.pl?action=edit&id=1234'); print $::form->redirect_header('http://www.lx-office.org/'); +=head2 C
+ +Generates a general purpose http/html header and includes most of the scripts +ans stylesheets needed. + +Only one header will be generated. If the method was already called in this +request it will not output anything and return undef. Also if no +HTTP_USER_AGENT is found, no header is generated. + +Although header does not accept parameters itself, it will honor special +hashkeys of its Form instance: + +=over 4 + +=item refresh_time + +=item refresh_url + +If one of these is set, a http-equiv refresh is generated. Missing parameters +default to 3 seconds and the refering url. + +=item stylesheet + +=item stylesheets + +If these are arrayrefs the contents will be inlined into the header. + +=item landscape + +If true, a css snippet will be generated that sets the page in landscape mode. + +=item favicon + +Used to override the default favicon. + +=item title + +A html page title will be generated from this + =back =cut diff --git a/bin/mozilla/admin_groups.pl b/bin/mozilla/admin_groups.pl index 069fa69bb..1444332bb 100644 --- a/bin/mozilla/admin_groups.pl +++ b/bin/mozilla/admin_groups.pl @@ -73,6 +73,7 @@ sub save_group { $form->isblank('name', $locale->text('The group name is missing.')); my $groups = $main::auth->read_groups(); + my %users = map { ( $_->{id} => 1 ) } values %{ { $::auth->read_all_users() } }; foreach my $group (values %{$groups}) { if (($form->{group_id} != $group->{id}) @@ -92,9 +93,8 @@ sub save_group { $group->{name} = $form->{name}; $group->{description} = $form->{description}; - $group->{rights} = {}; - - map { $group->{rights}->{$_} = $form->{"${_}_granted"} ? 1 : 0 } SL::Auth::all_rights(); + $group->{rights} = { map { ( $_ => $form->{"${_}_granted"} ? 1 : 0 ) } SL::Auth::all_rights() }; + $group->{members} = [ grep { $users{$_} } @{ $form->{user_ids} || [] } ]; my $is_new = !$form->{group_id}; @@ -124,17 +124,9 @@ sub edit_group { $form->show_generic_error($locale->text("No group has been selected, or the group does not exist anymore.")); } - my $group = $groups->{$form->{group_id}}; - - my %all_users = $main::auth->read_all_users(); - my %users_by_id = map { $_->{id} => $_ } values %all_users; - - my @members = uniq sort { lc $a->{login} cmp lc $b->{login} } @users_by_id{ @{ $group->{members} } }; - - my %grouped = map { $_ => 1 } uniq @{ $group->{members} }; - my @non_members = sort { lc $a->{login} cmp lc $b->{login} } grep { !$grouped{$_->{id}} } values %all_users; - - my @rights = map { + my $group = $groups->{$form->{group_id}}; + my %all_users = $main::auth->read_all_users(); + my @rights = map { { "right" => $_->[0], "description" => $_->[1], "is_section" => '--' eq substr($_->[0], 0, 2), @@ -143,8 +135,8 @@ sub edit_group { } SL::Auth::all_rights_full(); $form->header(); - print $form->parse_html_template("admin/edit_group", { "USERS_IN_GROUP" => \@members, - "USERS_NOT_IN_GROUP" => \@non_members, + print $form->parse_html_template("admin/edit_group", { ALL_USERS => [ values %all_users ], + USER_IDS_IN_GROUP => $group->{members}, "RIGHTS" => \@rights, "name" => $group->{name}, "description" => $group->{description} }); @@ -179,56 +171,6 @@ sub delete_group { $main::lxdebug->leave_sub(); } -sub add_to_group { - $main::lxdebug->enter_sub(); - - my $form = $main::form; - my $locale = $main::locale; - - $form->isblank('user_id_not_in_group', $locale->text('No user has been selected.')); - - my $groups = $main::auth->read_groups(); - - if (!$form->{group_id} || !$groups->{$form->{group_id}}) { - $form->show_generic_error($locale->text('No group has been selected, or the group does not exist anymore.')); - } - - my $group = $groups->{$form->{group_id}}; - $group->{members} = [ uniq @{ $group->{members} }, $form->{user_id_not_in_group} ]; - - $main::auth->save_group($group); - - $form->{message} = $locale->text('The user has been added to this group.'); - edit_group(); - - $main::lxdebug->leave_sub(); -} - -sub remove_from_group { - $main::lxdebug->enter_sub(); - - my $form = $main::form; - my $locale = $main::locale; - - $form->isblank('user_id_in_group', $locale->text('No user has been selected.')); - - my $groups = $main::auth->read_groups(); - - if (!$form->{group_id} || !$groups->{$form->{group_id}}) { - $form->show_generic_error($locale->text('No group has been selected, or the group does not exist anymore.')); - } - - my $group = $groups->{$form->{group_id}}; - $group->{members} = [ uniq grep { $_ ne $form->{user_id_in_group} } @{ $group->{members} } ]; - - $main::auth->save_group($group); - - $form->{message} = $locale->text('The user has been removed from this group.'); - edit_group(); - - $main::lxdebug->leave_sub(); -} - sub edit_group_membership { $main::lxdebug->enter_sub(); diff --git a/locale/de/all b/locale/de/all index 219a0d4a2..f25d6372f 100644 --- a/locale/de/all +++ b/locale/de/all @@ -169,6 +169,7 @@ $self->{texts} = { 'All of the exports you have selected were already closed.' => 'Alle von Ihnen ausgewählten Exporte sind bereits abgeschlossen.', 'All reports' => 'Alle Berichte (Kontenübersicht, Summen- u. Saldenliste, GuV, BWA, Bilanz, Projektbuchungen)', 'All the selected exports have already been closed, or all of their items have already been executed.' => 'Alle ausgewählten Exporte sind als abgeschlossen markiert, oder für alle Einträge wurden bereits Zahlungen verbucht.', + 'All users' => 'Alle BenutzerInnen', 'Allow access' => 'Zugriff erlauben', 'Allow the following users access to my follow-ups:' => 'Erlaube den folgenden Benutzern Zugriff auf meine Wiedervorlagen:', 'Alternatively you can create a new part which will then be selected.' => 'Sie können auch einen neuen Artikel anlegen, der dann automatisch ausgewählt wird.', @@ -667,6 +668,7 @@ $self->{texts} = { 'Edit group ' => 'Gruppe bearbeiten', 'Edit group membership' => 'Gruppenmitgliedschaften bearbeiten', 'Edit groups' => 'Gruppen bearbeiten', + 'Edit membership' => 'Mitgliedschaft bearbeiten', 'Edit note' => 'Notiz bearbeiten', 'Edit rights' => 'Rechte bearbeiten', 'Edit templates' => 'Vorlagen bearbeiten', @@ -1089,7 +1091,6 @@ $self->{texts} = { 'No transaction selected!' => 'Keine Transaktion ausgewählt', 'No transfers were executed in this export.' => 'In diesem SEPA-Export wurden keine Überweisungen ausgeführt.', 'No unknown units where found.' => 'Es wurden keine unbekannten Einheiten gefunden.', - 'No user has been selected.' => 'Es wurde kein Benutzer ausgewählt.', 'No valid number entered for pricegroup "#1".' => 'Für Preisgruppe "#1" wurde keine gültige Nummer eingegeben.', 'No vendor has been selected yet.' => 'Es wurde noch kein Lieferant ausgewählt.', 'No warehouse has been created yet or the quantity of the bins is not configured yet.' => 'Es wurde noch kein Lager angelegt, bzw. die dazugehörigen Lagerplätze sind noch nicht konfiguriert.', @@ -1357,7 +1358,6 @@ $self->{texts} = { 'Remove' => 'Entfernen', 'Remove Draft' => 'Entwurf löschen', 'Remove draft when posting' => 'Entwurf beim Buchen löschen', - 'Remove from group' => 'Aus Gruppe entfernen', 'Removed spoolfiles!' => 'Druckdateien entfernt!', 'Removing marked entries from queue ...' => 'Markierte Einträge werden von der Warteschlange entfernt ...', 'Rename the group' => 'Gruppe umbenennen', @@ -1697,8 +1697,6 @@ $self->{texts} = { 'The unit in row %d has been deleted in the meantime.' => 'Die Einheit in Zeile %d ist in der Zwischentzeit gelöscht worden.', 'The unit in row %d has been used in the meantime and cannot be changed anymore.' => 'Die Einheit in Zeile %d wurde in der Zwischenzeit benutzt und kann nicht mehr geändert werden.', 'The units have been saved.' => 'Die Einheiten wurden gespeichert.', - 'The user has been added to this group.' => 'Der Benutzer wurde der Gruppe hinzugefügt.', - 'The user has been removed from this group.' => 'Der Benutzer wurde aus der Gruppe entfernt.', 'The user is a member in the following group(s):' => 'Der Benutzer ist Mitglied in den folgenden Gruppen:', 'The user migration process is complete.' => 'Der Prozess der Benutzerdatenmigration ist abgeschlossen.', 'The variable name must only consist of letters, numbers and underscores. It must begin with a letter. Example: send_christmas_present' => 'Der Variablenname darf nur aus Zeichen (keine Umlaute), Ziffern und Unterstrichen bestehen. Er muss mit einem Buchstaben beginnen. Beispiel: weihnachtsgruss_verschicken', @@ -1837,6 +1835,7 @@ $self->{texts} = { 'User name' => 'Benutzername', 'User saved!' => 'Benutzer gespeichert!', 'Username' => 'Benutzername', + 'Users in this group' => 'BenutzerInnen in dieser Gruppe', 'Ust-IDNr' => 'USt-IdNr.', 'Valid from' => 'Gültig ab', 'Valid until' => 'gültig bis', diff --git a/templates/webpages/admin/edit_group.html b/templates/webpages/admin/edit_group.html index 88ced6a67..5b6846108 100644 --- a/templates/webpages/admin/edit_group.html +++ b/templates/webpages/admin/edit_group.html @@ -1,10 +1,9 @@ -[%- USE T8 %] -[% USE HTML %] -
- - - +[% USE T8 %][% USE HTML %][% USE L %][% USE LxERP -%] + + [% L.stylesheet_tag('jquery.multiselect2side') %] + [% L.javascript_tag('jquery.selectboxes', 'jquery.multiselect2side') %] + [% IF message %]

[% message %]

[% END %] @@ -15,68 +14,49 @@
-

[% 'Rename the group' | $T8 %]

- - - -
[% 'Name' | $T8 %]
[% 'Description' | $T8 %]
-
- - - -
-
-
[% 'Group membership' | $T8 %]
- - - - - - - - - - - - - - -

[% 'Members of' | $T8 %]
[% HTML.escape(name) %]

[% 'Members not of' | $T8 %]
[% HTML.escape(name) %]

- - - -
-
- -
- -
-
-
-
[% 'Edit rights' | $T8 %]
- - [% FOREACH right = RIGHTS %] - - [% IF right.is_section %] -
-

[% right.description %]

- [% ELSE %] -

- - -

- [% END %] - - [% END %] - -
- - - +

[%- LxERP.t8('Edit membership') %]

+ +
+ [% L.select_tag("user_ids[]", L.options_for_select(ALL_USERS, value => 'id', title => 'login', default => USER_IDS_IN_GROUP), 'multiple' => 'multiple') %] +
+ +

[% 'Edit rights' | $T8 %]

+ +

+ [% FOREACH right = RIGHTS %] + [% IF right.is_section %] + [% right.description %]
+ [% ELSE %] + + +
+ [% END %] + [% END %] +

+ +

[% LxERP.t8('Rename the group') %]

+ + + + + + + + + + + +
[% 'Name' | $T8 %]:
[% 'Description' | $T8 %]:
+ +

+ + + +   + [% 'Back' | $T8 %] +

+ + [% L.multiselect2side('user_ids_', labelsx => LxERP.t8('All users'), labeldx => LxERP.t8('Users in this group')) %]