Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 9b36c563

Von Moritz Bunkus vor mehr als 11 Jahren hinzugefügt

  • ID 9b36c5639d01f1c9059381c12fac5d57ff614710
  • Vorgänger 3d5cfc78
  • Nachfolger cf38d7b8

Administrationsbereich mit Menüsystem versehen

Unterschiede anzeigen:

SL/Controller/Admin.pm
# actions: database administration
#
sub action_database_administration {
sub action_create_dataset_login {
my ($self) = @_;
$::form->{dbhost} ||= $::auth->{DB_config}->{host} || 'localhost';
$::form->{dbport} ||= $::auth->{DB_config}->{port} || 5432;
$::form->{dbuser} ||= $::auth->{DB_config}->{user} || 'kivitendo';
$::form->{dbpasswd} ||= $::auth->{DB_config}->{password};
$::form->{dbdefault} ||= 'template1';
$self->render('admin/dbadmin', title => t8('Database Administration'));
$self->database_administration_login_form(
title => t8('Create Dataset'),
next_action => 'create_dataset',
);
}
sub action_create_dataset {
......
$self->redirect_to(action => 'database_administration');
}
sub action_delete_dataset_login {
my ($self) = @_;
$self->database_administration_login_form(
title => t8('Delete Dataset'),
next_action => 'delete_dataset',
);
}
sub action_delete_dataset {
my ($self) = @_;
$self->delete_dataset_form;
......
# actions: locking, unlocking
#
sub action_show_lock {
my ($self) = @_;
$self->render(
"admin/show_lock",
title => "kivitendo " . t8('Administration'),
);
}
sub action_unlock_system {
my ($self) = @_;
......
sub action_lock_system {
my ($self) = @_;
SL::System::InstallationLock->unlock;
SL::System::InstallationLock->lock;
flash_later('info', t8('Lockfile created!'));
$self->redirect_to(action => 'show');
}
......
my ($self, $action) = @_;
$::request->layout(SL::Layout::Dispatcher->new(style => 'admin'));
$::request->layout->use_stylesheet("lx-office-erp.css");
$::form->{favicon} = "favicon.ico";
%::myconfig = (
countrycode => 'de',
......
sub setup_client {
my ($self) = @_;
$self->client((first { $_->is_default } @{ $self->all_clients }) || $self->all_clients->[0]) if !$self->client;
$self->client(SL::DB::Manager::AuthClient->get_default || $self->all_clients->[0]) if !$self->client;
$::auth->set_client($self->client->id);
}
#
# displaying forms
#
......
sub login_form {
my ($self, %params) = @_;
my $version = $::form->read_version;
$::request->layout->no_menu(1);
$self->render('admin/adminlogin', title => t8('kivitendo v#1 administration', $version), %params, version => $version);
}
......
$self->render('admin/edit_printer', %params);
}
sub database_administration_login_form {
my ($self, %params) = @_;
$self->render(
'admin/dbadmin',
dbhost => $::form->{dbhost} || $::auth->{DB_config}->{host} || 'localhost',
dbport => $::form->{dbport} || $::auth->{DB_config}->{port} || 5432,
dbuser => $::form->{dbuser} || $::auth->{DB_config}->{user} || 'kivitendo',
dbpasswd => $::form->{dbpasswd} || $::auth->{DB_config}->{password},
dbdefault => $::form->{dbdefault} || 'template1',
%params,
);
}
sub create_dataset_form {
my ($self, %params) = @_;
$self->render('admin/create_dataset', title => (t8('Database Administration') . " / " . t8('Create Dataset')));
SL/DB/Manager/AuthClient.pm
columns => { SIMPLE => 'ALL' } );
}
sub get_default {
return $_[0]->get_first(where => [ is_default => 1 ]);
}
1;
SL/Layout/Admin.pm
package SL::Layout::Admin;
use strict;
use parent qw(SL::Layout::Base);
use parent qw(SL::Layout::V3);
sub init_sub_layouts {
[ SL::Layout::None->new ]
use SL::Menu;
use Rose::Object::MakeMethods::Generic (
scalar => [ qw(no_menu) ],
);
sub init_menu {
Menu->new('admin-menu.ini');
}
sub start_content {
"<div id='admin' class='admin'>\n";
}
sub end_content {
"</div>\n";
sub render {
my ($self) = @_;
$self->presenter->render(
'menu/menuv3',
force_ul_width => 1,
skip_frame_header => 1,
menu => $self->no_menu ? '' : $self->print_menu,
);
}
1;
SL/Layout/V3.pm
}
sub pre_content {
&render;
$_[0]->render;
}
sub start_content {
admin-menu.ini
[Users, Clients and User Groups]
[Users, Clients and User Groups--List Users, Clients and User Groups]
module=controller.pl
action=Admin/show
[Users, Clients and User Groups--Add User]
module=controller.pl
action=Admin/new_user
[Users, Clients and User Groups--Add Client]
module=controller.pl
action=Admin/new_client
[Users, Clients and User Groups--Add User Group]
module=controller.pl
action=Admin/new_group
[Database Management]
[Database Management--Create Dataset]
module=controller.pl
action=Admin/create_dataset_login
[Database Management--Delete Dataset]
module=controller.pl
action=Admin/delete_dataset_login
[Printer Management]
[Printer Management--List Printers]
module=controller.pl
action=Admin/list_printers
[Printer Management--Add Printer]
module=controller.pl
action=Admin/new_printer
[System]
[System--Lock and unlock installation]
module=controller.pl
action=Admin/show_lock
[System--To user login]
module=controller.pl
action=LoginScreen/user_login
[System--Logout]
module=controller.pl
action=Admin/logout
locale/de/all
'Accounting method' => 'Versteuerungsart',
'Accrual' => 'Soll-Versteuerung',
'Accrual accounting' => 'Soll-Versteuerung',
'Actions' => 'Aktionen',
'Active' => 'Aktiv',
'Active?' => 'Aktiviert?',
'Add' => 'Erfassen',
......
'Add Part' => 'Ware erfassen',
'Add Price Factor' => 'Preisfaktor erfassen',
'Add Pricegroup' => 'Preisgruppe erfassen',
'Add Printer' => 'Drucker hinzufügen',
'Add Project' => 'Projekt erfassen',
'Add Purchase Delivery Order' => 'Lieferschein (Einkauf) erfassen',
'Add Purchase Order' => 'Lieferantenauftrag erfassen',
......
'Add new currency' => 'Neue Währung hinzufügen',
'Add new custom variable' => 'Neue benutzerdefinierte Variable erfassen',
'Add note' => 'Notiz erfassen',
'Add printer' => 'Drucker hinzufügen',
'Add unit' => 'Einheit hinzuf&uuml;gen',
'Address' => 'Adresse',
'Administration' => 'Administration',
......
'Database Connection Test' => 'Test der Datenbankverbindung',
'Database Host' => 'Datenbankcomputer',
'Database ID' => 'Datenbank-ID',
'Database Management' => 'Datenbankadministration',
'Database User' => 'Datenbankbenutzer',
'Database host and port' => 'Datenbankhost und -port',
'Database login (#1)' => 'Datenbankanmeldung (#1)',
'Database name' => 'Datenbankname',
'Database settings' => 'Datenbankeinstellungen',
'Database template' => 'Datenbankvorlage',
......
'Ertrag' => 'Ertrag',
'Ertrag prozentual' => 'Ertrag prozentual',
'Escape character' => 'Escape-Zeichen',
'Everyone can log in.' => 'Alle können sich anmelden.',
'Exact' => 'Genau',
'Example: http://kivitendo.de' => 'Beispiel: http://kivitendo.de',
'Excel' => 'Excel',
......
'Help Template Variables' => 'Hilfe zu Dokumenten-Variablen',
'Help on column names' => 'Hilfe zu Spaltennamen',
'Here' => 'Hier',
'Here you only provide the credentials for logging into the database.' => 'Hier geben Sie nur die Logindaten für die Anmeldung an der Datenbank ein.',
'Here\'s an example command line:' => 'Hier ist eine Kommandozeile, die als Beispiel dient:',
'Hide Filter' => 'Filter verbergen',
'Hide by default' => 'Standardm&auml;&szlig;ig verstecken',
......
'If the default transfer out always succeed use this bin for negative stock quantity.' => 'Standardlagerplatz für Auslagern ohne Prüfung auf Bestand',
'If you enter values for the part number and / or part description then only those bins containing parts whose part number or part description match your input will be shown.' => 'Wenn Sie f&uuml;r die Artikelnummer und / oder die Beschreibung etwas eingeben, so werden nur die Lagerpl&auml;tze angezeigt, in denen Waren eingelagert sind, die Ihre Suchbegriffe enthalten.',
'If you have not chosen for example the category revenue for a tax and you choose an revenue account to create a transfer in the general ledger, this tax will not be displayed in the tax dropdown.' => 'Wenn Sie z.B. die Kategory Erlös für eine Steuer nicht gewählt haben und ein Erlöskonto beim Erstellen einer Dialogbuchung wählen, wird diese Steuer auch nicht im Dropdown-Menü für die Steuern angezeigt.',
'If you lock the system normal users won\'t be able to log in.' => 'Wenn Sie das System sperren, so werden sich normale Benutzer nicht mehr anmelden können.',
'If you see this message, you most likely just setup your LX-Office and haven\'t added any entry types. If this is the case, the option is accessible for administrators in the System menu.' => 'Wenn Sie diese Meldung sehen haben Sie wahrscheinlich ein frisches LX-Office Setup und noch keine Buchungsgruppen eingerichtet. Ein Administrator kann dies im Systemmen&uuml; erledigen.',
'If you select a base unit then you also have to enter a factor.' => 'Wenn Sie eine Basiseinheit auswählen, dann müssen Sie auch einen Faktor eingeben.',
'If you want to change any of these parameters then press the "Back" button, edit the file "config/kivitendo.conf" and login into the admin module again.' => 'Wenn Sie einen der Parameter ändern wollen, so drücken Sie auf den "Zurück"-Button, bearbeiten Sie die Datei "config/kivitendo.conf", und melden Sie sich erneut im Administrationsbereich an.',
......
'List Accounts' => 'Konten anzeigen',
'List Languages' => 'Sprachen anzeigen',
'List Price' => 'Listenpreis',
'List Printers' => 'Drucker anzeigen',
'List Transactions' => 'Buchungsliste',
'List Users, Clients and User Groups' => 'Benutzer, Mandanten und Benutzergruppen anzeigen',
'List current background jobs' => 'Aktuelle Hintergrund-Jobs anzeigen',
'List export' => 'Export anzeigen',
'List of bank accounts' => 'Liste der Bankkonten',
......
'Loading...' => 'Wird geladen...',
'Local Tax Office Preferences' => 'Angaben zum Finanzamt',
'Lock System' => 'System sperren',
'Lock and unlock installation' => 'Installation sperren/entsperren',
'Lock file handling failed. Please verify that the directory "#1" is writeable by the webserver.' => 'Die Lockdateibehandlung schlug fehl. Bitte stellen Sie sicher, dass der Webserver das Verzeichnis "#1" beschreiben darf.',
'Lockfile created!' => 'System gesperrt!',
'Lockfile removed!' => 'System entsperrt!',
......
'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.',
'No.' => 'Position',
'None' => 'Kein',
'Normal users cannot log in.' => 'Normale Benutzer können sich nicht anmelden.',
'Not Discountable' => 'Nicht rabattierfähig',
'Not delivered' => 'Nicht geliefert',
'Not done yet' => 'Noch nicht fertig',
......
'Nothing has been selected for transfer.' => 'Es wurde nichts zum Umlagern ausgew&auml;hlt.',
'Nothing selected!' => 'Es wurde nichts ausgewählt!',
'Nothing stocked yet.' => 'Noch nichts eingelagert.',
'Nothing will be created or deleted at this stage!' => 'In diesem Schritt wird nichts angelegt oder gelöscht!',
'Nov' => 'Nov',
'November' => 'November',
'Number' => 'Nummer',
......
'Periodicity' => 'Periodizität',
'Perpetual inventory' => 'Bestandsmethode',
'Personal settings' => 'Pers&ouml;nliche Einstellungen',
'Pg Database Administration' => 'Datenbankadministration',
'Phone' => 'Telefon',
'Phone1' => 'Telefon 1 ',
'Phone2' => 'Telefon 2',
......
'The account 3804 already exists, the update will be skipped.' => 'Das Konto 3804 existiert schon, das Update wird übersprungen.',
'The account 3804 will not be added automatically.' => 'Das Konto 3804 wird nicht automatisch hinzugefügt.',
'The action you\'ve chosen has not been executed because the document does not contain any item yet.' => 'Die von Ihnen ausgewählte Aktion wurde nicht ausgeführt, weil der Beleg noch keine Positionen enthält.',
'The administration area is always accessible.' => 'Der Administrationsbereich ist immer zugänglich.',
'The application "#1" was not found on the system.' => 'Die Anwendung "#1" wurde auf dem System nicht gefunden.',
'The assembly has been created.' => 'Das Erzeugnis wurde hergestellt.',
'The assistant could not find anything wrong with #1. Maybe the problem has been solved in the meantime.' => 'Der Korrekturassistent konnte kein Problem bei #1 feststellen. Eventuell wurde das Problem in der Zwischenzeit bereits behoben.',
......
'The following users will have access to this client' => 'Die folgenden Benutzer werden auf diesen Mandanten Zugriff haben',
'The formula needs the following syntax:<br>For regular article:<br>Variablename= Variable Unit;<br>Variablename2= Variable2 Unit2;<br>...<br>###<br>Variable + ( Variable2 / Variable )<br><b>Please be beware of the spaces in the formula</b><br>' => 'Die Formeln m&uuml;ssen in der folgenden Syntax eingegeben werden:<br>Bei normalen Artikeln:<br>Variablenname = Variable Einheit;<br>Variablenname2 = Variable2 Einheit2;<br>...<br>###<br>Variable + Variable2 * ( Variable - Variable2 )<br>Variablennamen und Einheiten dürfen nur aus alphanumerischen Zeichen bestehen.<br>Es muss jeweils die Gesamte Zeile eingegeben werden',
'The greetings have been saved.' => 'Die Anreden wurden gespeichert',
'The installation is currently locked.' => 'Die Installation ist momentan gesperrt.',
'The installation is currently unlocked.' => 'Die Installation ist momentan entsperrt.',
'The items are imported accoring do their number "X" regardless of the column order inside the file.' => 'Die Einträge werden in der Reihenfolge ihrer Indizes "X" unabhängig von der Spaltenreihenfolge in der Datei importiert.',
'The link target to add has been created from the existing record.' => 'Das auszuwählende Verknüpfungsziel wurde aus dem bestehenden Beleg erstellt.',
'The list has been printed.' => 'Die Liste wurde ausgedruckt.',
......
'This group is valid for the following clients' => 'Diese Gruppe ist für die folgenden Mandanten gültig',
'This has been changed in this version, therefore please change the "old" bins to some real warehouse bins.' => 'Das wurde in dieser Version umgestellt, bitte ändern Sie die Freitext-Lagerplätze auf vorhandene Lagerplätze.',
'This has been changed in this version.' => 'Ab dieser Version ist dies nicht mehr so.',
'This is a preliminary check for existing sources. Nothing will be created or deleted at this stage!' => 'In diesem Schritt werden bestehende Datenbanken gesucht. Es werden noch keine &Auml;nderungen vorgenommen!',
'This is a very critical problem.' => 'Dieses Problem ist sehr schwerwiegend.',
'This is the client to be selected by default on the login screen.' => 'Dies ist derjenige Mandant, der im Loginbildschirm standardmäßig ausgewählt sein wird.',
'This is the default bin for ignoring onhand' => 'Standardlagerplatz für Auslagern ohne Bestandsprüfung',
......
'Users that have access to this client' => 'Benutzer mit Zugriff auf diesen Mandanten',
'Users with access' => 'Benutzer mit Zugriff',
'Users with access to this client' => 'Benutzer mit Zugriff auf diesen Mandanten',
'Users, Clients and User Groups' => 'Benutzer, Mandanten und Benutzergruppen',
'VAT ID' => 'UStdID-Nr',
'Valid' => 'Gültig',
'Valid from' => 'Gültig ab',
scripts/locales.pl
use Getopt::Long;
use IO::Dir;
use List::Util qw(first);
use POSIX;
use Pod::Usage;
$OUTPUT_AUTOFLUSH = 1;
......
my $locales_dir = ".";
my $bindir = "$basedir/bin/mozilla";
my @progdirs = ( "$basedir/SL" );
my $menufile = "menu.ini";
my @menufiles = ("${basedir}/menu.ini", "${basedir}/admin-menu.ini");
my @javascript_dirs = ($basedir .'/js', $basedir .'/templates/webpages');
my $javascript_output_dir = $basedir .'/js';
my $submitsearch = qr/type\s*=\s*[\"\']?submit/i;
......
push @progfiles, map { m:^(.+)/([^/]+)$:; [ $2, $1 ] } grep { /\.pm$/ } map { find_files($_) } @progdirs;
# put customized files into @customfiles
my (@menufiles, %dir_h);
my %dir_h;
if ($opt_n) {
@customfiles = ();
@menufiles = ($menufile);
} else {
tie %dir_h, 'IO::Dir', $basedir;
@menufiles = map { "$basedir/$_" } grep { /.*?_$menufile$/ } keys %dir_h;
unshift @menufiles, "$basedir/$menufile";
push @menufiles, map { "$basedir/$_" } grep { /.*_menu.ini$/ } keys %dir_h;
}
my @dbplfiles;
......
close $fh;
}
sub slurp {
my $file = shift;
do { local ( @ARGV, $/ ) = $file; <> }
}
__END__
=head1 NAME
templates/webpages/admin/create_dataset.html
<h1>[% HTML.escape(title) %]</h1>
<p><a href="controller.pl?action=Admin/database_administration">[% LxERP.t8('Back') %]</a></p>
<form method="post" action="controller.pl">
<p>
[% LxERP.t8('You can either create a new database or chose an existing database.') %]
templates/webpages/admin/dbadmin.html
[% INCLUDE 'common/flash.html' %]
<h1>[% HTML.escape(title) %]</h1>
<h1>[% LxERP.t8("Database login (#1)", title) %]</h1>
<p><a href="controller.pl?action=Admin/show">[% LxERP.t8('Back') %]</a></p>
<p>[% LxERP.t8('Here you only provide the credentials for logging into the database.') %] [% LxERP.t8('Nothing will be created or deleted at this stage!') %]</p>
<form method="post" action="controller.pl">
<table>
<tr>
<th align="right">[% LxERP.t8('Host') %]</th>
<td>[% L.input_tag('dbhost', FORM.dbhost, size=30, class="initial_focus") %]</td>
<td>[% L.input_tag('dbhost', dbhost, size=30, class="initial_focus") %]</td>
<th align="right">[% LxERP.t8('Port') %]</th>
<td>[% L.input_tag('dbport', FORM.dbport, size=6) %]</td>
<td>[% L.input_tag('dbport', dbport, size=6) %]</td>
</tr>
<tr>
<th align="right">[% LxERP.t8('Database User') %]</th>
<td>[% L.input_tag("dbuser", FORM.dbuser, size=30) %]</td>
<td>[% L.input_tag("dbuser", dbuser, size=30) %]</td>
<th align="right">[% LxERP.t8('Password') %]</th>
<td>[% L.input_tag("dbpasswd", FORM.dbpasswd, type='password', size=30) %]</td>
<td>[% L.input_tag("dbpasswd", dbpasswd, type='password', size=30) %]</td>
</tr>
<tr>
<th align="right">[% LxERP.t8('Database template') %]</th>
<td>[% L.input_tag("dbdefault", FORM.dbdefault, size=30) %]</td>
<td>[% L.input_tag("dbdefault", dbdefault, size=30) %]</td>
</tr>
</table>
<div>
[% L.hidden_tag("action", 'Admin/dispatch') %]
[% L.submit_tag('action_create_dataset', LxERP.t8('Create Dataset')) %]
[% L.submit_tag('action_delete_dataset', LxERP.t8('Delete Dataset')) %]
</div>
</form>
[% L.hidden_tag("action", 'Admin/dispatch') %]
<p>[% LxERP.t8('This is a preliminary check for existing sources. Nothing will be created or deleted at this stage!') %]</p>
<p>
[% L.submit_tag('action_' _ next_action, LxERP.t8('Login')) %]
</p>
</form>
templates/webpages/admin/delete_dataset.html
<h1>[% HTML.escape(title) %]</h1>
<p><a href="controller.pl?action=Admin/database_administration">[% LxERP.t8('Back') %]</a></p>
<p>
[% LxERP.t8('You can only delete datasets that are not in use.') %]
[% LxERP.t8('If you want to delete such a dataset you have to edit the client(s) that are using the dataset in question and have them use another dataset.') %]
templates/webpages/admin/edit_client.html
<h1>[% HTML.escape(title) %]</h1>
<p>[% L.link(SELF.url_for(action="show"), LxERP.t8("Back")) %]</p>
<form method="post" action="controller.pl" id="form">
[% L.hidden_tag("client.id", SELF.client.id) %]
[% L.hidden_tag("action", "") %]
templates/webpages/admin/edit_group.html
<h1>[% HTML.escape(title) %]</h1>
<p>[% L.link(SELF.url_for(action="show"), LxERP.t8("Back")) %]</p>
<form method="post" action="controller.pl" id="form">
[% L.hidden_tag("group.id", SELF.group.id) %]
[% L.hidden_tag("action", "") %]
templates/webpages/admin/edit_printer.html
[% INCLUDE 'common/flash.html' %]
[% IF !SELF.all_clients.size %]
<div class="error">
[% LxERP.t8("Error") %]:
[% LxERP.t8("No clients have been created yet.") %]
</div>
[%- ELSE %]
<h1>[% HTML.escape(title) %]</h1>
<form method="post">
[% L.hidden_tag("client.id", SELF.client.id) %]
[% L.hidden_tag("action", 'Admin/dispatch') %]
[% L.hidden_tag("printer.id", SELF.printer.id) %]
<table>
<tr>
<th align="right">[% LxERP.t8('Client') %]</th>
<td>[% L.select_tag("client.id", SELF.all_clients, default=SELF.client.id, title_key='name') %]</td>
<tr>
<tr>
<th align="right">[% LxERP.t8('Printer Description') %]</th>
<td>[% L.input_tag("printer.printer_description", SELF.printer.printer_description, size=30, class="initial_focus") %]</td>
......
</p>
</form>
[% END %]
templates/webpages/admin/edit_user.html
<h1>[% HTML.escape(title) %]</h1>
<p>[% L.link(SELF.url_for(action="show"), LxERP.t8("Back")) %]</p>
<form method="post" action="controller.pl" id="form">
[% L.hidden_tag("user.id", SELF.user.id) %]
[% L.hidden_tag("action", "") %]
templates/webpages/admin/list_printers.html
[% LxERP.t8("No clients have been created yet.") %]
</div>
<div>
<a href="[% SELF.url_for(action='show') %]">[% LxERP.t8("Back") %]</a>
</div>
[%- ELSE %]
<div>
[% LxERP.t8("Actions") %]:
<span class="link_separator"></span>
<a href="[% SELF.url_for(action='show') %]">[% LxERP.t8("Back") %]</a>
<span class="link_separator">|</span>
<a href="[% SELF.url_for(action='new_printer', 'client.id'=SELF.client.id) %]">[% LxERP.t8("Add printer") %]</a>
</div>
<hr>
<p>
[% LxERP.t8("Client to configure the printers for") %]:
[% L.select_tag('client.id', SELF.all_clients, id='client_id', title_key='name', default=SELF.client.id) %]
templates/webpages/admin/show.html
<h1>[% HTML.escape(title) %]</h1>
<div>
[% LxERP.t8("Actions") %]:
<span class="link_separator"></span>
[% L.link(SELF.url_for(action="new_user"), LxERP.t8("Add User")) %]
<span class="link_separator">|</span>
[% L.link(SELF.url_for(action="new_client"), LxERP.t8("Add Client")) %]
<span class="link_separator">|</span>
[% L.link(SELF.url_for(action="new_group"), LxERP.t8("Add User Group")) %]
<span class="link_separator">|</span>
[% L.link(SELF.url_for(action="database_administration"), LxERP.t8("Pg Database Administration")) %]
<span class="link_separator">|</span>
[% L.link(SELF.url_for(action="list_printers"), LxERP.t8("Printer Management")) %]
<span class="link_separator">|</span>
[% IF SELF.is_locked %]
[% L.link(SELF.url_for(action="unlock_system"), LxERP.t8("Unlock System")) %]
[% ELSE %]
[% L.link(SELF.url_for(action="lock_system"), LxERP.t8("Lock System")) %]
[% END %]
<span class="link_separator">|</span>
[% L.link(SELF.url_for(action="logout"), LxERP.t8("Logout")) %]
<span class="link_separator">|</span>
[% L.link(SELF.url_for(controller="LoginScreen", action="user_login"), LxERP.t8("To user login")) %]
</div>
<hr>
<div class="tabwidget">
<ul>
<li><a href="#user_list">[%- LxERP.t8("User list") %]</a></li>
templates/webpages/admin/show_lock.html
[%- USE HTML %][%- USE LxERP -%][%- USE L -%]
[% INCLUDE 'common/flash.html' %]
<h1>[% HTML.escape(title) %]</h1>
[% IF SELF.is_locked %]
<p>
[% LxERP.t8("The installation is currently locked.") %]
[% LxERP.t8("Normal users cannot log in.") %]
[% LxERP.t8("The administration area is always accessible.") %]
</p>
<p><a href="[% SELF.url_for(action='unlock_system') %]">[% LxERP.t8("Unlock System") %]</a></p>
[% ELSE %]
<p>
[% LxERP.t8("The installation is currently unlocked.") %]
[% LxERP.t8("Everyone can log in.") %]
</p>
<p>
[% LxERP.t8("If you lock the system normal users won't be able to log in.") %]
[% LxERP.t8("The administration area is always accessible.") %]
</p>
<p><a href="[% SELF.url_for(action='lock_system') %]">[% LxERP.t8("Lock System") %]</a></p>
[% END %]
templates/webpages/menu/menuv3.html
[%- USE T8 %]
[% USE HTML %][%- USE LxERP -%]
[% UNLESS skip_frame_header %]
<script type="text/javascript" src="js/quicksearch_input.js"></script>
<script type="text/javascript">
<!--
......
<img src="image/[% IF MYCONFIG.stylesheet == 'lx-office-erp.css' %]spinner-blue.gif[% ELSE %]spinner-white.gif[% END %]" alt="[% LxERP.t8('Loading...') %]">
</span>
</div>
[% END %]
<div id="menuv3">
[% menu %]

Auch abrufbar als: Unified diff