Revision 9636227e
Von Moritz Bunkus vor mehr als 11 Jahren hinzugefügt
SL/Controller/Admin.pm | ||
---|---|---|
|
||
use Rose::Object::MakeMethods::Generic
|
||
(
|
||
'scalar --get_set_init' => [ qw(client user nologin_file_name db_cfg all_dateformats all_numberformats all_countrycodes all_stylesheets all_menustyles all_clients all_groups) ],
|
||
'scalar --get_set_init' => [ qw(client user nologin_file_name db_cfg all_dateformats all_numberformats all_countrycodes all_stylesheets all_menustyles all_clients all_groups all_users) ],
|
||
);
|
||
|
||
__PACKAGE__->run_before(\&setup_layout);
|
||
... | ... | |
$self->redirect_to(action => 'show');
|
||
}
|
||
|
||
#
|
||
# actions: clients
|
||
#
|
||
|
||
sub action_new_client {
|
||
my ($self) = @_;
|
||
|
||
$self->client(SL::DB::AuthClient->new(
|
||
dbhost => $::auth->{DB_config}->{host},
|
||
dbport => $::auth->{DB_config}->{port},
|
||
dbuser => $::auth->{DB_config}->{user},
|
||
dbpasswd => $::auth->{DB_config}->{password},
|
||
));
|
||
|
||
$self->edit_client_form(title => t8('Create a new client'));
|
||
}
|
||
|
||
sub action_edit_client {
|
||
my ($self) = @_;
|
||
$self->edit_client_form(title => t8('Edit Client'));
|
||
}
|
||
|
||
sub action_save_client {
|
||
my ($self) = @_;
|
||
my $params = delete($::form->{client}) || { };
|
||
my $is_new = !$params->{id};
|
||
|
||
$self->client($is_new ? SL::DB::AuthClient->new : SL::DB::AuthClient->new(id => $params->{id})->load)->assign_attributes(%{ $params });
|
||
|
||
my @errors = $self->client->validate;
|
||
|
||
if (@errors) {
|
||
flash('error', @errors);
|
||
$self->edit_client_form(title => $is_new ? t8('Create a new client') : t8('Edit Client'));
|
||
return;
|
||
}
|
||
|
||
$self->client->save;
|
||
if ($self->client->is_default) {
|
||
SL::DB::Manager::AuthClient->update_all(set => { is_default => 0 }, where => [ '!id' => $self->client->id ]);
|
||
}
|
||
|
||
flash_later('info', $is_new ? t8('The client has been created.') : t8('The client has been saved.'));
|
||
$self->redirect_to(action => 'show');
|
||
}
|
||
|
||
sub action_delete_client {
|
||
my ($self) = @_;
|
||
|
||
if (!$self->client->delete) {
|
||
flash('error', t8('The client could not be deleted.'));
|
||
$self->edit_client_form(title => t8('Edit Client'));
|
||
return;
|
||
}
|
||
|
||
flash_later('info', t8('The client has been deleted.'));
|
||
$self->redirect_to(action => 'show');
|
||
}
|
||
|
||
sub action_test_database_connectivity {
|
||
my ($self) = @_;
|
||
|
||
my %cfg = %{ $::form->{client} || {} };
|
||
my $dbconnect = 'dbi:Pg:dbname=' . $cfg{dbname} . ';host=' . $cfg{dbhost} . ';port=' . $cfg{dbport};
|
||
my $dbh = DBI->connect($dbconnect, $cfg{dbuser}, $cfg{dbpasswd});
|
||
|
||
my $ok = !!$dbh;
|
||
my $error = $DBI::errstr;
|
||
|
||
$dbh->disconnect if $dbh;
|
||
|
||
$self->render('admin/test_db_connection',
|
||
title => t8('Database Connection Test'),
|
||
ok => $ok,
|
||
error => $error);
|
||
}
|
||
|
||
#
|
||
# actions: locking, unlocking
|
||
#
|
||
... | ... | |
sub init_client { SL::DB::AuthClient->new(id => ($::form->{id} || ($::form->{client} || {})->{id}))->load }
|
||
sub init_user { SL::DB::AuthUser ->new(id => ($::form->{id} || ($::form->{user} || {})->{id}))->load }
|
||
sub init_all_clients { SL::DB::Manager::AuthClient->get_all_sorted }
|
||
sub init_all_users { SL::DB::Manager::AuthUser->get_all_sorted }
|
||
sub init_all_groups { SL::DB::Manager::AuthGroup->get_all_sorted }
|
||
sub init_all_dateformats { [ qw(mm/dd/yy dd/mm/yy dd.mm.yy yyyy-mm-dd) ] }
|
||
sub init_all_numberformats { [ qw(1,000.00 1000.00 1.000,00 1000,00) ] }
|
||
... | ... | |
$self->render('admin/edit_user', %params);
|
||
}
|
||
|
||
sub edit_client_form {
|
||
my ($self, %params) = @_;
|
||
|
||
$::request->layout->use_javascript("${_}.js") for qw(jquery.selectboxes jquery.multiselect2side);
|
||
$self->render('admin/edit_client', %params);
|
||
}
|
||
|
||
#
|
||
# helpers
|
||
#
|
SL/DB/AuthClient.pm | ||
---|---|---|
|
||
use SL::DB::MetaSetup::AuthClient;
|
||
use SL::DB::Manager::AuthClient;
|
||
use SL::DB::Helper::Util;
|
||
|
||
__PACKAGE__->meta->add_relationship(
|
||
users => {
|
||
... | ... | |
|
||
__PACKAGE__->meta->initialize;
|
||
|
||
sub validate {
|
||
my ($self) = @_;
|
||
|
||
my @errors;
|
||
push @errors, $::locale->text('The name is missing.') if !$self->name;
|
||
push @errors, $::locale->text('The database name is missing.') if !$self->dbname;
|
||
push @errors, $::locale->text('The database host is missing.') if !$self->dbhost;
|
||
push @errors, $::locale->text('The database port is missing.') if !$self->dbport;
|
||
push @errors, $::locale->text('The database user is missing.') if !$self->dbuser;
|
||
push @errors, $::locale->text('The name is not unique.') if !SL::DB::Helper::Util::is_unique($self, 'name');
|
||
push @errors, $::locale->text('The combination of database host, port and name is not unique.') if !SL::DB::Helper::Util::is_unique($self, 'dbhost', 'dbport', 'dbname');
|
||
|
||
return @errors;
|
||
}
|
||
|
||
1;
|
locale/de/all | ||
---|---|---|
'Close Books up to' => 'Die Bücher abschließen bis zum',
|
||
'Close Flash' => 'Schließen',
|
||
'Close SEPA exports' => 'SEPA-Export abschließen',
|
||
'Close Window' => 'Fenster Schließen',
|
||
'Close window' => 'Fenster schließen',
|
||
'Close Window' => 'Fenster Schließen',
|
||
'Closed' => 'Geschlossen',
|
||
'Collective Orders only work for orders from one customer!' => 'Sammelaufträge funktionieren nur für Aufträge von einem Kunden!',
|
||
'Column name' => 'Spaltenname',
|
||
... | ... | |
'Create Date' => 'Erstelldatum',
|
||
'Create a new background job' => 'Einen neuen Hintergrund-Job anlegen',
|
||
'Create a new business' => 'Einen neuen Kunden-/Lieferantentyp erfassen',
|
||
'Create a new client' => 'Einen neuen Mandanten anlegen',
|
||
'Create a new department' => 'Eine neue Abteilung erfassen',
|
||
'Create a new payment term' => 'Neue Zahlungsbedingungen anlegen',
|
||
'Create a new project' => 'Neues Projekt anlegen',
|
||
... | ... | |
'Database ID' => 'Datenbank-ID',
|
||
'Database User' => 'Datenbankbenutzer',
|
||
'Database backups and restorations are disabled in the configuration.' => 'Datenbanksicherungen und -wiederherstellungen sind in der Konfiguration deaktiviert.',
|
||
'Database host and port' => 'Datenbankhost und -port',
|
||
'Database name' => 'Datenbankname',
|
||
'Database settings' => 'Datenbankeinstellungen',
|
||
'Database template' => 'Datenbankvorlage',
|
||
'Database update error:' => 'Fehler beim Datenbankupgrade:',
|
||
'Database user and password' => 'Datebankbenutzer und -passwort',
|
||
'Dataset' => 'Datenbank',
|
||
'Dataset missing!' => 'Datenbank fehlt!',
|
||
'Dataset name' => 'Datenbankname',
|
||
... | ... | |
'Default Warehouse' => 'Standard-Lager',
|
||
'Default Warehouse with ignoring on hand' => 'Standardlager für Auslagern ohne Prüfung auf Bestand',
|
||
'Default buchungsgruppe' => 'Standardbuchungsgruppe',
|
||
'Default client' => 'Standardmandant',
|
||
'Default currency' => 'Standardwährung',
|
||
'Default currency missing!' => 'Standardwährung fehlt!',
|
||
'Default output medium' => 'Standardausgabekanal',
|
||
... | ... | |
'Edit Assembly' => 'Erzeugnis bearbeiten',
|
||
'Edit Bins' => 'Lagerplätze bearbeiten',
|
||
'Edit Buchungsgruppe' => 'Buchungsgruppe bearbeiten',
|
||
'Edit Client' => 'Mandanten bearbeiten',
|
||
'Edit Credit Note' => 'Gutschrift bearbeiten',
|
||
'Edit Customer' => 'Kunde editieren',
|
||
'Edit Dunning' => 'Mahnungen konfigurieren',
|
||
... | ... | |
'Filter date by' => 'Datum filtern nach',
|
||
'Filter for customer variables' => 'Filter für benutzerdefinierte Kundenvariablen',
|
||
'Filter for item variables' => 'Filter für benutzerdefinierte Artikelvariablen',
|
||
'Filter parts' => 'Artikel filtern',
|
||
'Finish' => 'Abschließen',
|
||
'First 20 Lines' => 'Nur erste 20 Datensätze',
|
||
'Fix transaction' => 'Buchung korrigieren',
|
||
... | ... | |
'Group' => 'Warengruppe',
|
||
'Group Invoices' => 'Rechnungen zusammenfassen',
|
||
'Group Items' => 'Waren gruppieren',
|
||
'Group assignment' => 'Gruppenzuordnung',
|
||
'Group deleted!' => 'Warengruppe gelöscht!',
|
||
'Group membership' => 'Gruppenzugehörigkeit',
|
||
'Group missing!' => 'Warengruppe fehlt!',
|
||
... | ... | |
'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 users have been created yet.' => 'Es wurden noch keine Benutzer angelegt.',
|
||
'No users have been created yet.' => 'Es wurden noch keine Benutzer anleget.',
|
||
'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.',
|
||
... | ... | |
'Please enter a profile name.' => 'Bitte geben Sie einen Profilnamen an.',
|
||
'Please enter the currency you are working with.' => 'Bitte geben Sie die Währung an, mit der Sie arbeiten.',
|
||
'Please enter the login for the new user.' => 'Bitte geben Sie das Login für den neuen Benutzer ein.',
|
||
'Please enter the name for the new client.' => 'Bitte geben Sie einen Namen für den neuen Mandanten ein.',
|
||
'Please enter the name of the database that will be used as the template for the new database:' => 'Bitte geben Sie den Namen der Datenbank an, die als Vorlage für die neue Datenbank benutzt wird:',
|
||
'Please enter the name of the dataset you want to restore the backup in.' => 'Bitte geben Sie den Namen der Datenbank ein, in der Sie die Sicherung wiederherstellen wollen.',
|
||
'Please enter the sales tax identification number.' => 'Bitte geben Sie die Umsatzsteueridentifikationsnummer an.',
|
||
... | ... | |
'Templates' => 'Vorlagen',
|
||
'Terms missing in row ' => '+Tage fehlen in Zeile ',
|
||
'Test and preview' => 'Test und Vorschau',
|
||
'Test database connectivity' => 'Datenbankverbindung testen',
|
||
'Text field' => 'Textfeld',
|
||
'Text field variables: \'WIDTH=w HEIGHT=h\' sets the width and height of the text field. They default to 30 and 5 respectively.' => 'Textfelder: \'WIDTH=w HEIGHT=h\' setzen die Breite und die Höhe des Textfeldes. Wenn nicht anders angegeben, so werden sie 30 Zeichen breit und fünf Zeichen hoch dargestellt.',
|
||
'Text variables: \'MAXLENGTH=n\' sets the maximum entry length to \'n\'.' => 'Textzeilen: \'MAXLENGTH=n\' setzt eine Maximallänge von n Zeichen.',
|
||
... | ... | |
'The business has been saved.' => 'Der Kunden-/Lieferantentyp wurde gespeichert.',
|
||
'The business is in use and cannot be deleted.' => 'Der Kunden-/Lieferantentyp wird benutzt und kann nicht gelöscht werden.',
|
||
'The changing of tax-o-matic account is NOT recommended, but if you do so please also (re)configure buchungsgruppen and reconfigure ALL charts which point to this tax-o-matic account. ' => 'Es wird nicht empfohlen Steuerkonten (Umsatzsteuer oder Vorsteuer) "umzuhängen", aber falls es gemacht wird, bitte auch entsprechend konsequent die Buchungsgruppen und die Konten die mit dieser Steuer verknüpft sind umkonfigurieren.',
|
||
'The client could not be deleted.' => 'Der Mandant konnte nicht gelöscht werden.',
|
||
'The client has been created.' => 'Der Mandant wurde angelegt.',
|
||
'The client has been deleted.' => 'Der Mandant wurde gelöscht.',
|
||
'The client has been saved.' => 'Der Mandant wurde gespeichert.',
|
||
'The column "make_X" can contain either a vendor\'s database ID, a vendor number or a vendor\'s name.' => 'Die Spalte "make_X" can entweder die Datenbank-ID des Lieferanten, eine Lieferantennummer oder einen Lieferantennamen enthalten.',
|
||
'The column triplets can occur multiple times with different numbers "X" each time (e.g. "make_1", "model_1", "lastcost_1", "make_2", "model_2", "lastcost_2", "make_3", "model_3", "lastcost_3" etc).' => 'Die Spalten-Dreiergruppen können mehrfach auftreten, sofern sie unterschiedliche Nummern "X" verwenden (z.B. "make_1", "model_1", "lastcost_1", "make_2", "model_2", "lastcost_2", "make_3", "model_3", "lastcost_3" etc).',
|
||
'The columns "Dunning Duedate", "Total Fees" and "Interest" show data for the previous dunning created for this invoice.' => 'Die Spalten "Zahlbar bis", "Kumulierte Gebühren" und "Zinsen" zeigen Daten der letzten für diese Rechnung erzeugten Mahnung.',
|
||
'The combination of database host, port and name is not unique.' => '',
|
||
'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/kivitendo.conf.' => 'Die Verbindung zum LDAP-Server kann nicht verschlüsselt werden (Fehler bei SSL/TLS-Initialisierung). Bitte überprüfen Sie die Angaben in config/kivitendo.conf.',
|
||
'The connection to the authentication database failed:' => 'Die Verbindung zur Authentifizierungsdatenbank schlug fehl:',
|
||
'The connection to the configured client database "#1" on host "#2:#3" failed.' => 'Die Verbindung zur konfigurierten Datenbank "#1" auf Host "#2:#3" schlug fehl.',
|
||
... | ... | |
'The custom variable has been saved.' => 'Die benutzerdefinierte Variable wurde gespeichert.',
|
||
'The database #1 has been successfully deleted.' => 'Die Datenbank #1 wurde erfolgreich gelöscht.',
|
||
'The database for user management and authentication does not exist. You can create let kivitendo create it with the following parameters:' => 'Die Datenbank für die Benutzeranmeldung existiert nicht. Sie können Sie von kivitendo automatisch mit den folgenden Parametern anlegen lassen:',
|
||
'The database host is missing.' => 'Der Datenbankhost fehlt.',
|
||
'The database name is missing.' => 'Der Datenbankname fehlt.',
|
||
'The database port is missing.' => 'Der Datenbankport fehlt.',
|
||
'The database update/creation did not succeed. The file #1 contained the following error:' => 'Die Datenbankaktualisierung/erstellung schlug fehl. Die Datei #1 enthielt den folgenden Fehler:',
|
||
'The database upgrade for the introduction of Buchungsgruppen is now complete.' => 'Das Datenbankupgrade für die Einführung von Buchungsgruppen ist jetzt beendet.',
|
||
'The database upgrade for the introduction of units is now complete.' => 'Das Datenbankupgrade zwecks Einführung von Einheiten ist nun beendet.',
|
||
'The database user is missing.' => 'Der Datenbankbenutzer fehlt.',
|
||
'The dataset #1 has been successfully created.' => 'Die Datenbank #1 wurde erfolgreich angelegt.',
|
||
'The dataset backup has been sent via email to #1.' => 'Die Datenbanksicherung wurde per Email an #1 verschickt.',
|
||
'The dataset has to exist before a restoration can be started.' => 'Die Datenbank muss vor der Wiederherstellung bereits angelegt worden sein.',
|
||
... | ... | |
'The following Datasets need to be updated' => 'Folgende Datenbanken müssen aktualisiert werden',
|
||
'The following currencies have been used, but they are not defined:' => 'Die folgenden Währungen wurden benutzt, sind aber nicht ordnungsgemäß in der Datenbank eingetragen:',
|
||
'The following drafts have been saved and can be loaded.' => 'Die folgenden Entwürfe wurden gespeichert und können geladen werden.',
|
||
'The following groups are valid for this client' => 'Die folgenden Gruppen sind für diesen Mandanten gültig',
|
||
'The following list has been generated automatically from existing users collapsing users with identical settings into a single entry.' => 'Die folgende Liste wurde automatisch aus den im System vorhandenen Benutzern zusammengestellt, wobei identische Einstellungen zu einem Eintrag zusammengefasst wurden.',
|
||
'The following old files whose settings have to be merged manually into the new configuration file "config/kivitendo.conf" still exist:' => 'Es existieren noch die folgenden alten Dateien, deren Einstellungen manuell in die neue Konfiguratsdatei "config/kivitendo.conf" migriert werden müssen:',
|
||
'The following transaction contains wrong taxes:' => 'Die folgende Buchung enthält falsche Steuern:',
|
||
... | ... | |
'The following transactions are concerned:' => 'Die folgenden Buchungen sind betroffen:',
|
||
'The following units are unknown.' => 'Die folgenden Einheiten sind unbekannt.',
|
||
'The following units exist already:' => 'Die folgenden Einheiten existieren bereits:',
|
||
'The following users will have access to this client' => 'Die folgenden Benutzer werden auf diesen Mandanten Zugriff haben',
|
||
'The following warnings occured during an upgrade to the document templates:' => 'Die folgenden Warnungen traten während einer Aktualisierung der Dokumentenvorlagen auf:',
|
||
'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ü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 name in row %d has already been used before.' => 'Der Name in Zeile %d wurde vorher bereits benutzt.',
|
||
'The name is missing in row %d.' => 'Der Name fehlt in Zeile %d.',
|
||
'The name is missing.' => 'Der Name fehlt.',
|
||
'The name is not unique.' => 'Der Name ist nicht eindeutig.',
|
||
'The name must only consist of letters, numbers and underscores and start with a letter.' => 'Der Name darf nur aus Buchstaben (keine Umlaute), Ziffern und Unterstrichen bestehen und muss mit einem Buchstaben beginnen.',
|
||
'The number of days for full payment' => 'Die Anzahl Tage, bis die Rechnung in voller Höhe bezahlt werden muss',
|
||
'The option field is empty.' => 'Das Optionsfeld ist leer.',
|
||
... | ... | |
'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 can chose which client to connect to during login.' => 'Bei der Anmeldung kann der Benutzer auswählen, welchen Mandanten er benutzen möchte.',
|
||
'The user could not be deleted.' => '',
|
||
'The user could not be deleted.' => 'Der Benutzer konnte nicht gelöscht werden.',
|
||
'The user has been created.' => 'Der Benutzer wurde angelegt.',
|
||
'The user has been deleted.' => '',
|
||
'The user has been deleted.' => 'Der Benutzer wurde gelöscht.',
|
||
'The user has been saved.' => 'Der Benutzer wurde gespeichert.',
|
||
'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',
|
||
'The warehouse could not be deleted because it has already been used.' => 'Das Lager konnte nicht gelöscht werden, da es bereits in Benutzung war.',
|
||
... | ... | |
'This installation uses an unknown chart of accounts ("#1"). This database upgrade cannot create standard buchungsgruppen automatically.' => 'Diese Installation benutzt einen unbekannten Kontenrahmen ("#1"). Dieses Datenbankupgrade kann die Standardbuchungsgruppen nicht automatisch anlegen.',
|
||
'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 Ä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',
|
||
'This is the default bin for parts' => 'Standard-Lagerplatz für Stammdaten/Waren',
|
||
'This list is capped at 15 items to keep it fast. If you need a full list, please use reports.' => 'Diese Liste ist auf 15 Zeilen begrenzt. Wenn Sie eine vollständige Liste benötigen, erstellen Sie bitte einen Bericht.',
|
||
... | ... | |
'User name' => 'Benutzername',
|
||
'Username' => 'Benutzername',
|
||
'Users in this group' => 'BenutzerInnen in dieser Gruppe',
|
||
'Users that have access to this client' => 'Benutzer mit Zugriff auf diesen Mandaten',
|
||
'Users with access' => 'Benutzer mit Zugriff',
|
||
'Users with access to this client' => 'Benutzer mit Zugriff auf diesen Mandanten',
|
||
'VAT ID' => 'UStdID-Nr',
|
||
'Valid' => 'Gültig',
|
||
'Valid from' => 'Gültig ab',
|
||
'Valid until' => 'gültig bis',
|
||
'Valid/Obsolete' => 'Gültig/ungültig',
|
||
'Value' => 'Wert',
|
||
'Variable' => 'Variable',
|
||
'Variable Description' => 'Datenfeldbezeichnung',
|
templates/webpages/admin/edit_client.html | ||
---|---|---|
[%- USE HTML %]
|
||
[%- USE L %][%- USE LxERP -%]
|
||
|
||
[%- INCLUDE 'common/flash.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", "") %]
|
||
|
||
<h2>[%- LxERP.t8("Settings") %]</h2>
|
||
|
||
<table>
|
||
<tr>
|
||
<th align="right">[% LxERP.t8('Client name') %]</th>
|
||
<td>[% L.input_tag("client.name", SELF.client.name) %]</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<th align="right">[% LxERP.t8('Default client') %]</th>
|
||
<td>[% L.checkbox_tag("client.is_default", label=LxERP.t8('This is the client to be selected by default on the login screen.'), checked=SELF.client.is_default) %]</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<th align="right">[% LxERP.t8('Database name') %]</th>
|
||
<td>[% L.input_tag("client.dbname", SELF.client.dbname, 'data-dbsettings'=1) %]</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<th align="right">[% LxERP.t8('Database host and port') %]</th>
|
||
<td>
|
||
[% L.input_tag("client.dbhost", SELF.client.dbhost, 'data-dbsettings'=1) %]
|
||
[% L.input_tag("client.dbport", SELF.client.dbport, 'data-dbsettings'=1, size=6) %]
|
||
</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<th align="right">[% LxERP.t8('Database user and password') %]</th>
|
||
<td>
|
||
[% L.input_tag("client.dbuser", SELF.client.dbuser, 'data-dbsettings'=1) %]
|
||
[% L.input_tag("client.dbpasswd", SELF.client.dbpasswd, 'data-dbsettings'=1) %]
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
|
||
<div>
|
||
[% L.button_tag("test_database_connectivity()", LxERP.t8("Test database connectivity")) %]
|
||
</div>
|
||
|
||
<h2>[%- LxERP.t8("Access to clients") %]</h2>
|
||
|
||
[% IF SELF.all_users.size %]
|
||
<p>
|
||
[%- LxERP.t8("The following users will have access to this client") %]:
|
||
</p>
|
||
|
||
<div class="clearfix">
|
||
[% L.select_tag("client.users[]", SELF.all_users, id="client_users", title_key="login", default=SELF.client.users, default_key='id', multiple=1) %]
|
||
[% L.multiselect2side("client_users", labelsx => LxERP.t8("All users"), labeldx => LxERP.t8("Users that have access to this client")) %]
|
||
</div>
|
||
|
||
[%- ELSE %]
|
||
<p>
|
||
[% LxERP.t8("No users have been created yet.") %]
|
||
</p>
|
||
[%- END %]
|
||
|
||
<h2>[%- LxERP.t8("Group assignment") %]</h2>
|
||
|
||
[% IF SELF.all_groups.size %]
|
||
<p>
|
||
[%- LxERP.t8("The following groups are valid for this client") %]:
|
||
</p>
|
||
|
||
<div class="clearfix">
|
||
[% L.select_tag("client.groups[]", SELF.all_groups, id="client_groups", title_key="name", default=SELF.client.groups, default_key='id', multiple=1) %]
|
||
[% L.multiselect2side("client_groups", labelsx => LxERP.t8("All groups"), labeldx => LxERP.t8("Groups valid for this client")) %]
|
||
</div>
|
||
|
||
[%- ELSE %]
|
||
<p>
|
||
[% LxERP.t8("No groups have been created yet.") %]
|
||
</p>
|
||
[%- END %]
|
||
|
||
<hr size="3" noshade>
|
||
|
||
<p>
|
||
[% L.link(SELF.url_for(action="show"), LxERP.t8("Back")) %]
|
||
|
||
[% L.button_tag("submit_with_action('save_client')", LxERP.t8("Save")) %]
|
||
[% IF SELF.client.id %]
|
||
[% L.button_tag("save_as_new()", LxERP.t8("Save as new")) %]
|
||
[% L.button_tag("submit_with_action('delete_client')", LxERP.t8("Delete"), confirm=LxERP.t8("Are you sure?")) %]
|
||
[%- END %]
|
||
</p>
|
||
|
||
</form>
|
||
|
||
<script type="text/javascript">
|
||
<!--
|
||
function submit_with_action(action) {
|
||
$("#action").val("Admin/" + action);
|
||
$("#form").submit();
|
||
}
|
||
|
||
function save_as_new() {
|
||
var new_client_name = prompt("[% LxERP.t8("Please enter the name for the new client.") %]", "");
|
||
if (!new_client_name)
|
||
return;
|
||
|
||
$("#client_name").val(new_client_name);
|
||
$("#client_id").val("");
|
||
submit_with_action("save_client");
|
||
}
|
||
|
||
function test_database_connectivity() {
|
||
open_jqm_window({
|
||
url: 'controller.pl?action=Admin/test_database_connectivity',
|
||
data: $("INPUT[data-dbsettings=1]").serialize(),
|
||
type: 'POST'
|
||
});
|
||
return true;
|
||
}
|
||
-->
|
||
</script>
|
templates/webpages/admin/show.html | ||
---|---|---|
<div>
|
||
[% LxERP.t8("Actions") %]:
|
||
<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_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="edit_groups"), LxERP.t8("Edit groups")) %]
|
||
<span class="link_separator">|</span>
|
||
[% L.link(SELF.url_for(action="pg_database_administration", controller="admin.pl"), LxERP.t8("Pg Database Administration")) %]
|
||
... | ... | |
|
||
[%- ELSE %]
|
||
<table width="100%">
|
||
<tr>
|
||
<th class="listtop">[% LxERP.t8('Login Name') %]</th>
|
||
<th class="listtop">[% LxERP.t8('Name') %]</th>
|
||
<th class="listtop">[% LxERP.t8('Language') %]</th>
|
||
<tr class="listheading">
|
||
<th>[% LxERP.t8('Login Name') %]</th>
|
||
<th>[% LxERP.t8('Name') %]</th>
|
||
<th>[% LxERP.t8('Language') %]</th>
|
||
</tr>
|
||
|
||
[% FOREACH user = USERS %]
|
||
... | ... | |
|
||
[%- ELSE %]
|
||
<table width="100%">
|
||
<tr>
|
||
<th class="listtop">[% LxERP.t8('Client name') %]</th>
|
||
<th class="listtop">[% LxERP.t8('Database ID') %]</th>
|
||
<th class="listtop">[% LxERP.t8('Database name') %]</th>
|
||
<th class="listtop">[% LxERP.t8('Database Host') %]</th>
|
||
<th class="listtop">[% LxERP.t8('Database User') %]</th>
|
||
<tr class="listheading">
|
||
<th>[% LxERP.t8('Client name') %]</th>
|
||
<th>[% LxERP.t8('Database ID') %]</th>
|
||
<th>[% LxERP.t8('Database name') %]</th>
|
||
<th>[% LxERP.t8('Database Host') %]</th>
|
||
<th>[% LxERP.t8('Database User') %]</th>
|
||
<th>[% LxERP.t8('Default client') %]</th>
|
||
</tr>
|
||
|
||
[%- FOREACH client = CLIENTS %]
|
||
<tr class="listrow">
|
||
<td>[% L.link(SELF.url_for(action="edit_client", client_id=client.id), HTML.escape(client.name)) %]</td>
|
||
<td>[% L.link(SELF.url_for(action="edit_client", id=client.id), HTML.escape(client.name)) %]</td>
|
||
<td>[% HTML.escape(client.id) %]</td>
|
||
<td>[% HTML.escape(client.dbname) %]</td>
|
||
<td>[% HTML.escape(client.dbhost) %][% IF client.dbport %]:[%- HTML.escape(client.dbport) %][%- END %]</td>
|
||
<td>[% HTML.escape(client.dbuser) %]</td>
|
||
<td>[% IF client.is_default %][% LxERP.t8("Yes") %][%- ELSE %][% LxERP.t8("No") %][%- END %]</td>
|
||
</tr>
|
||
[%- END %]
|
||
</table>
|
templates/webpages/admin/test_db_connection.html | ||
---|---|---|
[%- USE T8 %]
|
||
[%- USE HTML %]
|
||
[%- USE HTML %][%- USE LxERP -%][%- USE L -%]
|
||
<h1>[% HTML.escape(title) %]</h1>
|
||
|
||
<h1>[% title %]</h1>
|
||
[%- IF ok %]
|
||
|
||
[%- IF connection_ok %]
|
||
<p class="message_ok">[% LxERP.t8('The connection was established successfully.') %]</p>
|
||
|
||
<p class="message_ok">[% 'The connection was established successfully.' | $T8 %]</p>
|
||
|
||
[%- ELSE %]
|
||
[%- ELSE %]
|
||
|
||
<p class="message_error">
|
||
[% 'The connection to the database could not be established.' | $T8 %]
|
||
[% 'Error message from the database driver:' | $T8 %]
|
||
[% LxERP.t8('The connection to the database could not be established.') %]
|
||
[% LxERP.t8('Error message from the database driver:') %]
|
||
</p>
|
||
|
||
<p>[% HTML.escape(errstr) %]</p>
|
||
<p>[% HTML.escape(error) %]</p>
|
||
|
||
[%- END %]
|
||
[%- END %]
|
||
|
||
<p>
|
||
<form>
|
||
<input type="button" class="submit" onclick="window.close()" value="[% 'Close Window' | $T8 %]">
|
||
</form>
|
||
</p>
|
||
<div>
|
||
[% L.button_tag("\$('#jqm_popup_dialog .close').trigger('click');", LxERP.t8("Close Window")) %]
|
||
</div>
|
Auch abrufbar als: Unified diff
Admin: Anlegen, Bearbeiten und Löschen von Mandanten implementiert