Revision c6dd542b
Von Moritz Bunkus vor etwa 9 Jahren hinzugefügt
SL/Controller/Admin.pm | ||
---|---|---|
|
||
use IO::Dir;
|
||
use List::Util qw(first);
|
||
use List::UtilsBy qw(sort_by);
|
||
|
||
use SL::Common ();
|
||
use SL::DB::AuthUser;
|
||
... | ... | |
return undef;
|
||
}
|
||
|
||
sub is_user_used_for_task_server {
|
||
my ($self, $user) = @_;
|
||
|
||
return undef if !$user;
|
||
return join ', ', sort_by { lc } map { $_->name } @{ SL::DB::Manager::AuthClient->get_all(where => [ task_server_user_id => $user->id ]) };
|
||
}
|
||
|
||
|
||
1;
|
SL/DB/MetaSetup/AuthClient.pm | ||
---|---|---|
__PACKAGE__->meta->schema('auth');
|
||
|
||
__PACKAGE__->meta->columns(
|
||
dbhost => { type => 'text', not_null => 1 },
|
||
dbname => { type => 'text', not_null => 1 },
|
||
dbpasswd => { type => 'text', not_null => 1 },
|
||
dbport => { type => 'integer', default => 5432, not_null => 1 },
|
||
dbuser => { type => 'text', not_null => 1 },
|
||
id => { type => 'serial', not_null => 1 },
|
||
is_default => { type => 'boolean', default => 'false', not_null => 1 },
|
||
name => { type => 'text', not_null => 1 },
|
||
dbhost => { type => 'text', not_null => 1 },
|
||
dbname => { type => 'text', not_null => 1 },
|
||
dbpasswd => { type => 'text', not_null => 1 },
|
||
dbport => { type => 'integer', default => 5432, not_null => 1 },
|
||
dbuser => { type => 'text', not_null => 1 },
|
||
id => { type => 'serial', not_null => 1 },
|
||
is_default => { type => 'boolean', default => 'false', not_null => 1 },
|
||
name => { type => 'text', not_null => 1 },
|
||
task_server_user_id => { type => 'integer' },
|
||
);
|
||
|
||
__PACKAGE__->meta->primary_key_columns([ 'id' ]);
|
||
... | ... | |
[ 'name' ],
|
||
);
|
||
|
||
__PACKAGE__->meta->foreign_keys(
|
||
task_server_user => {
|
||
class => 'SL::DB::AuthUser',
|
||
key_columns => { task_server_user_id => 'id' },
|
||
},
|
||
);
|
||
|
||
1;
|
||
;
|
SL/DBConnect/Cache.pm | ||
---|---|---|
%cache = ();
|
||
}
|
||
|
||
sub disconnect_all_and_clear {
|
||
$_->disconnect for values %cache;
|
||
%cache = ();
|
||
}
|
||
|
||
sub _args2str {
|
||
my (@args) = @_;
|
||
|
config/kivitendo.conf.default | ||
---|---|---|
openofficeorg_daemon_port = 2002
|
||
|
||
[task_server]
|
||
# kivitendo client (either its name or its database ID) for database
|
||
# access (both 'client' and 'login' are required)
|
||
client =
|
||
# kivitendo user (login) name to use for certain jobs (both 'client'
|
||
# and 'login' are required)
|
||
login =
|
||
# Set to 1 for debug messages in /tmp/kivitendo-debug.log
|
||
debug = 0
|
||
# Chose a system user the daemon should run under when started as root.
|
doc/UPGRADE | ||
---|---|---|
aktualisiert. Für Benutzer der empfohlenen FastCGI Anbindung ändert sich
|
||
nichts.
|
||
|
||
* Der Task-Server ist nun mandantenfähig. Für jeden Mandanten, für den
|
||
der Task-Server laufen soll, muss in der Administrationsoberfläche
|
||
in der Konfiguration des Mandanten hinterlegt werden, welchen
|
||
kivitendo-Benutzer der Task-Server nutzen soll. Ist bei einem
|
||
Mandanten kein Benutzer hinterlegt, so ignoriert der Task-Server
|
||
diesen Mandanten.
|
||
|
||
Im Gegenzug wurden die beiden Konfigurations-Einstellungen »client«
|
||
und »login« aus dem Abschnitt [task_server] entfernt. Der
|
||
Task-Server prüft beim Starten allerdings, ob diese Einstellungen
|
||
noch existieren und verweigert den Start mit einer hilfreichen
|
||
Fehlermeldung, solange sie noch vorhanden sind.
|
||
|
||
Upgrade auf v3.3.0
|
||
==================
|
||
|
doc/dokumentation.xml | ||
---|---|---|
<para>kivitendo bringt eine eigene Komponente zur zeitgesteuerten Ausführung bestimmter Aufgaben mit, den <link
|
||
linkend="config.task-server">Taskserver</link>. Er wird u.a. für Features wie die <link
|
||
linkend="features.periodic-invoices">wiederkehrenden Rechnungen</link> benötigt, erledigt aber auch andere erforderliche Aufgaben
|
||
und muss daher in Betrieb genommen werden. Der Taskserver benötigt zwei Konfigurationseinstellungen, die unter
|
||
<varname>[task_server]</varname> anzugeben sind: ein Mandant (entweder der Mandantenname oder eine Datenbank-ID, Variable
|
||
<varname>client</varname>), aus dem die Datenbankkonfiguration entnommen wird, sowie ein Login (Variable <varname>login</varname>)
|
||
eines Benutzers, der für gewisse Dinge wie die Rechnungserstellung als Verkäufer eingetragen wird.</para>
|
||
und muss daher in Betrieb genommen werden. Seine Einrichtung wird im Abschnitt <link linkend="config.task-server">Task-Server</link>
|
||
genauer beschrieben.</para>
|
||
|
||
<para>Für Entwickler finden sich unter <varname>[debug]</varname>
|
||
wichtige Funktionen, um die Fehlersuche zu erleichtern.</para>
|
||
... | ... | |
diese zu festgelegten Zeitpunkten abarbeitet (ähnlich wie Cron). Dieser Prozess wird u.a. für die Erzeugung der wiederkehrenden
|
||
Rechnungen und weitere essenzielle Aufgaben benutzt.</para>
|
||
|
||
<para>Der Task-Server muss einmalig global in der Konfigurationsdatei konfiguriert werden. Danach wird er für jeden Mandanten, für den
|
||
er laufen soll, in der Adminsitrationsmaske eingeschaltet.</para>
|
||
|
||
<para>Beachten Sie, dass der Task-Server in den Boot-Vorgang Ihres Servers integriert werden muss, damit er automatisch gestartet
|
||
wird. Dies kann kivitendo nicht für Sie erledigen.</para>
|
||
|
||
<sect2 id="Konfiguration-des-Task-Servers">
|
||
<title>Verfügbare und notwendige Konfigurationsoptionen</title>
|
||
|
||
... | ... | |
Optionen sind:</para>
|
||
|
||
<variablelist>
|
||
<varlistentry>
|
||
<term><varname>client</varname></term>
|
||
|
||
<listitem>
|
||
<para>Name oder Datenbank-ID eines vorhandenen kivitendo-Mandanten, der benutzt wird, um die zu verwendende
|
||
Datenbankverbindung auszulesen. Der Mandant muss in der Administration angelegt werden. Diese Option muss angegeben
|
||
werden.</para>
|
||
|
||
<para>Diese Option kam mit Release v3.x.0 hinzu und muss daher in Konfigurationen, die von älteren Versionen aktualisiert
|
||
wurden, ergänzt werden.</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry>
|
||
<term><varname>login</varname></term>
|
||
|
||
<listitem>
|
||
<para>gültiger kivitendo-Benutzername, der z.B. als Verkäufer beim Erzeugen wiederkehrender Rechnungen benötigt wird. Der
|
||
Benutzer muss in der Administration angelegt werden. Diese Option muss angegeben werden.</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry>
|
||
<term><varname>run_as</varname></term>
|
||
|
||
... | ... | |
Lese- und Schreibrechte haben, wie auch der Webserverbenutzer
|
||
(siehe see <xref
|
||
linkend="Manuelle-Installation-des-Programmpaketes" />). Daher
|
||
ist es sinnvoll, hier denselben Systembenutzer einzutragen,
|
||
ist es erforderlich, hier denselben Systembenutzer einzutragen,
|
||
unter dem auch der Webserver läuft.</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
... | ... | |
</variablelist>
|
||
</sect2>
|
||
|
||
<sect2 id="Konfiguration-der-Mandanten-fuer-den-Task-Servers">
|
||
<title>Konfiguration der Mandanten für den Task-Server</title>
|
||
|
||
<para>Ist der Task-Server grundlegend konfiguriert, so muss anschließend jeder Mandant, für den der Task-Server laufen soll,
|
||
einmalig konfiguriert werden. Dazu kann in der Maske zum Bearbeiten von Mandanten im Administrationsbereich eine
|
||
kivitendo-Benutzerkennung ausgewählt werden, unter der der Task-Server seine Arbeit verrichtet.</para>
|
||
|
||
<para>Ist in dieser Einstellung keine Benutzerkennung ausgewählt, so wird der Task-Server für diesen Mandanten keine Aufgaben
|
||
ausführen.</para>
|
||
</sect2>
|
||
|
||
<sect2 id="Einbinden-in-den-Boot-Prozess">
|
||
<title>Automatisches Starten des Task-Servers beim Booten</title>
|
||
|
doc/html/ch01.html | ||
---|---|---|
<html><head>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||
<title>Kapitel 1. Aktuelle Hinweise</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.3.0: Installation, Konfiguration, Entwicklung"><link rel="up" href="index.html" title="kivitendo 3.3.0: Installation, Konfiguration, Entwicklung"><link rel="prev" href="index.html" title="kivitendo 3.3.0: Installation, Konfiguration, Entwicklung"><link rel="next" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Kapitel 1. Aktuelle Hinweise</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Zurück</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch02.html">Weiter</a></td></tr></table><hr></div><div class="chapter" title="Kapitel 1. Aktuelle Hinweise"><div class="titlepage"><div><div><h2 class="title"><a name="Aktuelle-Hinweise"></a>Kapitel 1. Aktuelle Hinweise</h2></div></div></div><p>Aktuelle Installations- und Konfigurationshinweise gibt es:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>im Community-Forum: <a class="ulink" href="https://forum.kivitendo.org:32443" target="_top">https://forum.kivitendo.org:32443</a>
|
||
<title>Kapitel 1. Aktuelle Hinweise</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.3.0: Installation, Konfiguration, Entwicklung"><link rel="up" href="index.html" title="kivitendo 3.3.0: Installation, Konfiguration, Entwicklung"><link rel="prev" href="index.html" title="kivitendo 3.3.0: Installation, Konfiguration, Entwicklung"><link rel="next" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Kapitel 1. Aktuelle Hinweise</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Zurück</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch02.html">Weiter</a></td></tr></table><hr></div><div class="chapter" title="Kapitel 1. Aktuelle Hinweise"><div class="titlepage"><div><div><h2 class="title"><a name="Aktuelle-Hinweise"></a>Kapitel 1. Aktuelle Hinweise</h2></div></div></div><p>Aktuelle Installations- und Konfigurationshinweise gibt es:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>im Community-Forum: <a class="ulink" href="https://forum.kivitendo.de:32443" target="_top">https://forum.kivitendo.de:32443</a>
|
||
</p></li><li class="listitem"><p>im Kunden-Forum: <a class="ulink" href="http://redmine.kivitendo-premium.de/projects/forum/boards/" target="_top">http://redmine.kivitendo-premium.de/projects/forum/boards/</a>
|
||
</p></li><li class="listitem"><p>in der doc/UPGRADE Datei im doc-Verzeichnis der Installation</p></li><li class="listitem"><p>Im Schulungs- und Dienstleistungsangebot der entsprechenden kivitendo-Partner: <a class="ulink" href="http://www.kivitendo.de/partner.html" target="_top">http://www.kivitendo.de/partner.html</a>
|
||
</p></li></ul></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Zurück</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ch02.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">kivitendo 3.3.0: Installation, Konfiguration, Entwicklung </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> Kapitel 2. Installation und Grundkonfiguration</td></tr></table></div></body></html>
|
doc/html/ch02s04.html | ||
---|---|---|
<code class="varname">[periodic_invoices]</code> den Login eines Benutzers
|
||
angeben, der nach Erstellung der Rechnungen eine entsprechende E-Mail
|
||
mit Informationen über die erstellten Rechnungen bekommt.</p><p>kivitendo bringt eine eigene Komponente zur zeitgesteuerten Ausführung bestimmter Aufgaben mit, den <a class="link" href="ch02s07.html" title="2.7. Der Task-Server">Taskserver</a>. Er wird u.a. für Features wie die <a class="link" href="ch03.html#features.periodic-invoices" title="3.1. Wiederkehrende Rechnungen">wiederkehrenden Rechnungen</a> benötigt, erledigt aber auch andere erforderliche Aufgaben
|
||
und muss daher in Betrieb genommen werden. Der Taskserver benötigt zwei Konfigurationseinstellungen, die unter
|
||
<code class="varname">[task_server]</code> anzugeben sind: ein Mandant (entweder der Mandantenname oder eine Datenbank-ID, Variable
|
||
<code class="varname">client</code>), aus dem die Datenbankkonfiguration entnommen wird, sowie ein Login (Variable <code class="varname">login</code>)
|
||
eines Benutzers, der für gewisse Dinge wie die Rechnungserstellung als Verkäufer eingetragen wird.</p><p>Für Entwickler finden sich unter <code class="varname">[debug]</code>
|
||
und muss daher in Betrieb genommen werden. Seine Einrichtung wird im Abschnitt <a class="link" href="ch02s07.html" title="2.7. Der Task-Server">Task-Server</a>
|
||
genauer beschrieben.</p><p>Für Entwickler finden sich unter <code class="varname">[debug]</code>
|
||
wichtige Funktionen, um die Fehlersuche zu erleichtern.</p></div><div class="sect2" title="2.4.3. Versionen vor 2.6.3"><div class="titlepage"><div><div><h3 class="title"><a name="config.config-file.prior-versions"></a>2.4.3. Versionen vor 2.6.3</h3></div></div></div><p>In älteren kivitendo Versionen gab es im Verzeichnis
|
||
<code class="filename">config</code> die Dateien
|
||
<code class="filename">authentication.pl</code> und
|
doc/html/ch02s06.html | ||
---|---|---|
<html><head>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||
<title>2.6. Webserver-Konfiguration</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.3.0: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02s05.html" title="2.5. Anpassung der PostgreSQL-Konfiguration"><link rel="next" href="ch02s07.html" title="2.7. Der Task-Server"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.6. Webserver-Konfiguration</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s05.html">Zurück</a> </td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right"> <a accesskey="n" href="ch02s07.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.6. Webserver-Konfiguration"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="Apache-Konfiguration"></a>2.6. Webserver-Konfiguration</h2></div></div></div><div class="sect2" title="2.6.1. Grundkonfiguration mittels CGI"><div class="titlepage"><div><div><h3 class="title"><a name="d0e757"></a>2.6.1. Grundkonfiguration mittels CGI</h3></div></div></div><div class="note" title="Anmerkung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Anmerkung]" src="system/docbook-xsl/images/note.png"></td><th align="left">Anmerkung</th></tr><tr><td align="left" valign="top"><p>Für einen deutlichen Performanceschub sorgt die Ausführung
|
||
<title>2.6. Webserver-Konfiguration</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.3.0: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02s05.html" title="2.5. Anpassung der PostgreSQL-Konfiguration"><link rel="next" href="ch02s07.html" title="2.7. Der Task-Server"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.6. Webserver-Konfiguration</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s05.html">Zurück</a> </td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right"> <a accesskey="n" href="ch02s07.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.6. Webserver-Konfiguration"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="Apache-Konfiguration"></a>2.6. Webserver-Konfiguration</h2></div></div></div><div class="sect2" title="2.6.1. Grundkonfiguration mittels CGI"><div class="titlepage"><div><div><h3 class="title"><a name="d0e751"></a>2.6.1. Grundkonfiguration mittels CGI</h3></div></div></div><div class="note" title="Anmerkung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Anmerkung]" src="system/docbook-xsl/images/note.png"></td><th align="left">Anmerkung</th></tr><tr><td align="left" valign="top"><p>Für einen deutlichen Performanceschub sorgt die Ausführung
|
||
mittels FastCGI/FCGI. Die Einrichtung wird ausführlich im Abschnitt
|
||
<a class="xref" href="ch02s06.html#Apache-Konfiguration.FCGI" title="2.6.2. Konfiguration für FastCGI/FCGI">Konfiguration für FastCGI/FCGI</a> beschrieben.</p></td></tr></table></div><p>Der Zugriff auf das Programmverzeichnis muss in der Apache
|
||
Webserverkonfigurationsdatei <code class="literal">httpd.conf</code> eingestellt
|
||
... | ... | |
Alias /url/for/kivitendo-erp-fcgid/ /path/to/kivitendo-erp/</pre><p>Dann ist unter <code class="filename">/url/for/kivitendo-erp/</code>
|
||
die normale Version erreichbar, und unter
|
||
<code class="constant">/url/for/kivitendo-erp-fcgid/</code> die
|
||
FastCGI-Version.</p></div></div><div class="sect2" title="2.6.3. Weitergehende Konfiguration"><div class="titlepage"><div><div><h3 class="title"><a name="d0e902"></a>2.6.3. Weitergehende Konfiguration</h3></div></div></div><p>Für einen deutlichen Sicherheitsmehrwert sorgt die Ausführung von kivitendo
|
||
FastCGI-Version.</p></div></div><div class="sect2" title="2.6.3. Weitergehende Konfiguration"><div class="titlepage"><div><div><h3 class="title"><a name="d0e896"></a>2.6.3. Weitergehende Konfiguration</h3></div></div></div><p>Für einen deutlichen Sicherheitsmehrwert sorgt die Ausführung von kivitendo
|
||
nur über https-verschlüsselten Verbindungen, sowie weiteren Zusatzmassnahmen,
|
||
wie beispielsweise Basic Authenticate.
|
||
Die Konfigurationsmöglichkeiten sprengen allerdings den Rahmen dieser Anleitung, hier ein
|
doc/html/ch02s07.html | ||
---|---|---|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||
<title>2.7. Der Task-Server</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.3.0: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02s06.html" title="2.6. Webserver-Konfiguration"><link rel="next" href="ch02s08.html" title="2.8. Benutzerauthentifizierung und Administratorpasswort"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.7. Der Task-Server</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s06.html">Zurück</a> </td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right"> <a accesskey="n" href="ch02s08.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.7. Der Task-Server"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="config.task-server"></a>2.7. Der Task-Server</h2></div></div></div><p>Der Task-Server ist ein Prozess, der im Hintergrund läuft, in regelmäßigen Abständen nach abzuarbeitenden Aufgaben sucht und
|
||
diese zu festgelegten Zeitpunkten abarbeitet (ähnlich wie Cron). Dieser Prozess wird u.a. für die Erzeugung der wiederkehrenden
|
||
Rechnungen und weitere essenzielle Aufgaben benutzt.</p><div class="sect2" title="2.7.1. Verfügbare und notwendige Konfigurationsoptionen"><div class="titlepage"><div><div><h3 class="title"><a name="Konfiguration-des-Task-Servers"></a>2.7.1. Verfügbare und notwendige Konfigurationsoptionen</h3></div></div></div><p>Die Konfiguration erfolgt über den Abschnitt
|
||
Rechnungen und weitere essenzielle Aufgaben benutzt.</p><p>Der Task-Server muss einmalig global in der Konfigurationsdatei konfiguriert werden. Danach wird er für jeden Mandanten, für den
|
||
er laufen soll, in der Adminsitrationsmaske eingeschaltet.</p><p>Beachten Sie, dass der Task-Server in den Boot-Vorgang Ihres Servers integriert werden muss, damit er automatisch gestartet
|
||
wird. Dies kann kivitendo nicht für Sie erledigen.</p><div class="sect2" title="2.7.1. Verfügbare und notwendige Konfigurationsoptionen"><div class="titlepage"><div><div><h3 class="title"><a name="Konfiguration-des-Task-Servers"></a>2.7.1. Verfügbare und notwendige Konfigurationsoptionen</h3></div></div></div><p>Die Konfiguration erfolgt über den Abschnitt
|
||
<code class="literal">[task_server]</code> in der Datei
|
||
<code class="filename">config/kivitendo.conf</code>. Die dort verfügbaren
|
||
Optionen sind:</p><div class="variablelist"><dl><dt><span class="term">
|
||
<code class="varname">client</code>
|
||
</span></dt><dd><p>Name oder Datenbank-ID eines vorhandenen kivitendo-Mandanten, der benutzt wird, um die zu verwendende
|
||
Datenbankverbindung auszulesen. Der Mandant muss in der Administration angelegt werden. Diese Option muss angegeben
|
||
werden.</p><p>Diese Option kam mit Release v3.x.0 hinzu und muss daher in Konfigurationen, die von älteren Versionen aktualisiert
|
||
wurden, ergänzt werden.</p></dd><dt><span class="term">
|
||
<code class="varname">login</code>
|
||
</span></dt><dd><p>gültiger kivitendo-Benutzername, der z.B. als Verkäufer beim Erzeugen wiederkehrender Rechnungen benötigt wird. Der
|
||
Benutzer muss in der Administration angelegt werden. Diese Option muss angegeben werden.</p></dd><dt><span class="term">
|
||
<code class="varname">run_as</code>
|
||
</span></dt><dd><p>Wird der Server vom Systembenutzer <code class="literal">root</code>
|
||
gestartet, so wechselt er auf den mit <code class="literal">run_as</code>
|
||
angegebenen Systembenutzer. Der Systembenutzer muss dieselben
|
||
Lese- und Schreibrechte haben, wie auch der Webserverbenutzer
|
||
(siehe see <a class="xref" href="ch02s03.html" title="2.3. Manuelle Installation des Programmpaketes">Manuelle Installation des Programmpaketes</a>). Daher
|
||
ist es sinnvoll, hier denselben Systembenutzer einzutragen,
|
||
ist es erforderlich, hier denselben Systembenutzer einzutragen,
|
||
unter dem auch der Webserver läuft.</p></dd><dt><span class="term">
|
||
<code class="varname">debug</code>
|
||
</span></dt><dd><p>Schaltet Debug-Informationen an und aus.</p></dd></dl></div></div><div class="sect2" title="2.7.2. Automatisches Starten des Task-Servers beim Booten"><div class="titlepage"><div><div><h3 class="title"><a name="Einbinden-in-den-Boot-Prozess"></a>2.7.2. Automatisches Starten des Task-Servers beim Booten</h3></div></div></div><p>Der Task-Server verhält sich von seinen Optionen her wie ein
|
||
</span></dt><dd><p>Schaltet Debug-Informationen an und aus.</p></dd></dl></div></div><div class="sect2" title="2.7.2. Konfiguration der Mandanten für den Task-Server"><div class="titlepage"><div><div><h3 class="title"><a name="Konfiguration-der-Mandanten-fuer-den-Task-Servers"></a>2.7.2. Konfiguration der Mandanten für den Task-Server</h3></div></div></div><p>Ist der Task-Server grundlegend konfiguriert, so muss anschließend jeder Mandant, für den der Task-Server laufen soll,
|
||
einmalig konfiguriert werden. Dazu kann in der Maske zum Bearbeiten von Mandanten im Administrationsbereich eine
|
||
kivitendo-Benutzerkennung ausgewählt werden, unter der der Task-Server seine Arbeit verrichtet.</p><p>Ist in dieser Einstellung keine Benutzerkennung ausgewählt, so wird der Task-Server für diesen Mandanten keine Aufgaben
|
||
ausführen.</p></div><div class="sect2" title="2.7.3. Automatisches Starten des Task-Servers beim Booten"><div class="titlepage"><div><div><h3 class="title"><a name="Einbinden-in-den-Boot-Prozess"></a>2.7.3. Automatisches Starten des Task-Servers beim Booten</h3></div></div></div><p>Der Task-Server verhält sich von seinen Optionen her wie ein
|
||
reguläres SystemV-kompatibles Boot-Script. Außerdem wechselt er beim
|
||
Starten automatisch in das kivitendo-Installationsverzeichnis.</p><p>Deshalb ist es möglich, ihn durch Setzen eines symbolischen
|
||
Links aus einem der Runlevel-Verzeichnisse heraus in den Boot-Prozess
|
||
einzubinden. Da das bei neueren Linux-Distributionen aber nicht
|
||
zwangsläufig funktioniert, werden auch Start-Scripte mitgeliefert, die
|
||
anstelle eines symbolischen Links verwendet werden können.</p><div class="sect3" title="2.7.2.1. SystemV-basierende Systeme (z.B. Debian, ältere OpenSUSE, ältere Fedora Core)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e980"></a>2.7.2.1. SystemV-basierende Systeme (z.B. Debian, ältere OpenSUSE, ältere Fedora Core)</h4></div></div></div><p>Kopieren Sie die Datei
|
||
anstelle eines symbolischen Links verwendet werden können.</p><div class="sect3" title="2.7.3.1. SystemV-basierende Systeme (z.B. Debian, ältere OpenSUSE, ältere Fedora Core)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e965"></a>2.7.3.1. SystemV-basierende Systeme (z.B. Debian, ältere OpenSUSE, ältere Fedora Core)</h4></div></div></div><p>Kopieren Sie die Datei
|
||
<code class="filename">scripts/boot/system-v/kivitendo-task-server</code>
|
||
nach <code class="filename">/etc/init.d/kivitendo-task-server</code>. Passen
|
||
Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
|
||
... | ... | |
Boot-Prozess ein. Dies ist distributionsabhängig:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Debian-basierende Systeme:</p><pre class="programlisting">update-rc.d kivitendo-task-server defaults
|
||
# Nur bei Debian Squeeze und neuer:
|
||
insserv kivitendo-task-server</pre></li><li class="listitem"><p>Ältere OpenSUSE und ältere Fedora Core:</p><pre class="programlisting">chkconfig --add kivitendo-task-server</pre></li></ul></div><p>Danach kann der Task-Server mit dem folgenden Befehl gestartet
|
||
werden:</p><pre class="programlisting">/etc/init.d/kivitendo-task-server start</pre></div><div class="sect3" title="2.7.2.2. Upstart-basierende Systeme (z.B. Ubuntu)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e1009"></a>2.7.2.2. Upstart-basierende Systeme (z.B. Ubuntu)</h4></div></div></div><p>Kopieren Sie die Datei
|
||
werden:</p><pre class="programlisting">/etc/init.d/kivitendo-task-server start</pre></div><div class="sect3" title="2.7.3.2. Upstart-basierende Systeme (z.B. Ubuntu)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e994"></a>2.7.3.2. Upstart-basierende Systeme (z.B. Ubuntu)</h4></div></div></div><p>Kopieren Sie die Datei
|
||
<code class="filename">scripts/boot/upstart/kivitendo-task-server.conf</code>
|
||
nach <code class="filename">/etc/init/kivitendo-task-server.conf</code>.
|
||
Passen Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
|
||
<code class="literal">exec ....</code>).</p><p>Danach kann der Task-Server mit dem folgenden Befehl gestartet
|
||
werden:</p><pre class="programlisting">service kivitendo-task-server start</pre></div><div class="sect3" title="2.7.2.3. systemd-basierende Systeme (z.B. neure OpenSUSE, neuere Fedora Core)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e1027"></a>2.7.2.3. systemd-basierende Systeme (z.B. neure OpenSUSE, neuere Fedora Core)</h4></div></div></div><p>Verlinken Sie die Datei <code class="filename">scripts/boot/systemd/kivitendo-task-server.service</code> nach
|
||
werden:</p><pre class="programlisting">service kivitendo-task-server start</pre></div><div class="sect3" title="2.7.3.3. systemd-basierende Systeme (z.B. neure OpenSUSE, neuere Fedora Core)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e1012"></a>2.7.3.3. systemd-basierende Systeme (z.B. neure OpenSUSE, neuere Fedora Core)</h4></div></div></div><p>Verlinken Sie die Datei <code class="filename">scripts/boot/systemd/kivitendo-task-server.service</code> nach
|
||
<code class="filename">/etc/systemd/system/</code>. Passen Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
|
||
<code class="literal">ExecStart=....</code> und <code class="literal">ExecStop=...</code>). Binden Sie das Script in den Boot-Prozess ein.
|
||
</p><p>Alle hierzu benötigten Befehle sehen so aus:</p><pre class="programlisting">cd /var/www/kivitendo-erp/scripts/boot/systemd
|
||
ln -s $(pwd)/kivitendo-task-server.service /etc/systemd/system/</pre><p>Danach kann der Task-Server mit dem folgenden Befehl gestartet
|
||
werden:</p><pre class="programlisting">systemctl start kivitendo-task-server.service</pre></div></div><div class="sect2" title="2.7.3. Wie der Task-Server gestartet und beendet wird"><div class="titlepage"><div><div><h3 class="title"><a name="Prozesskontrolle"></a>2.7.3. Wie der Task-Server gestartet und beendet wird</h3></div></div></div><p>Der Task-Server wird wie folgt kontrolliert:</p><pre class="programlisting">./scripts/task_server.pl Befehl</pre><p>
|
||
werden:</p><pre class="programlisting">systemctl start kivitendo-task-server.service</pre></div></div><div class="sect2" title="2.7.4. Wie der Task-Server gestartet und beendet wird"><div class="titlepage"><div><div><h3 class="title"><a name="Prozesskontrolle"></a>2.7.4. Wie der Task-Server gestartet und beendet wird</h3></div></div></div><p>Der Task-Server wird wie folgt kontrolliert:</p><pre class="programlisting">./scripts/task_server.pl Befehl</pre><p>
|
||
<code class="literal">Befehl</code> ist dabei eine der folgenden
|
||
Optionen:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
||
<code class="literal">start</code> startet eine neue Instanz des
|
||
... | ... | |
<code class="literal">status</code> berichtet, ob der Task-Server
|
||
läuft.</p></li></ul></div><p>Der Task-Server wechselt beim Starten automatisch in das
|
||
kivitendo-Installationsverzeichnis.</p><p>Dieselben Optionen können auch für die SystemV-basierenden
|
||
Runlevel-Scripte benutzt werden (siehe oben).</p></div><div class="sect2" title="2.7.4. Task-Server mit mehreren Mandanten"><div class="titlepage"><div><div><h3 class="title"><a name="Prozesskontrolle2"></a>2.7.4. Task-Server mit mehreren Mandanten</h3></div></div></div><p>Beim Task-Server werden der zu verwendende Mandant und Login-Name des Benutzers, unter dem der Task-Server laufen soll, in die
|
||
Runlevel-Scripte benutzt werden (siehe oben).</p></div><div class="sect2" title="2.7.5. Task-Server mit mehreren Mandanten"><div class="titlepage"><div><div><h3 class="title"><a name="Prozesskontrolle2"></a>2.7.5. Task-Server mit mehreren Mandanten</h3></div></div></div><p>Beim Task-Server werden der zu verwendende Mandant und Login-Name des Benutzers, unter dem der Task-Server laufen soll, in die
|
||
Konfigurationsdatei geschrieben. Hat man mehrere Mandanten, muss man auch mehrere Konfigurationsdateien anlegen.</p><p>Die Konfigurationsdatei ist eine Kopie der Datei kivitendo.conf, wo in der Kategorie <code class="varname">[task_server]</code> die
|
||
gewünschten Werte für <code class="varname">client</code> und <code class="varname">login</code> eingetragen werden.</p><p>Der alternative Task-Server wird dann mit folgendem Befehl
|
||
gestartet:</p><pre class="programlisting">./scripts/task_server.pl -c config/DATEINAME.conf</pre></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s06.html">Zurück</a> </td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right"> <a accesskey="n" href="ch02s08.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.6. Webserver-Konfiguration </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 2.8. Benutzerauthentifizierung und Administratorpasswort</td></tr></table></div></body></html>
|
doc/html/ch02s08.html | ||
---|---|---|
<code class="varname">[authentication]</code>.</p><p>Sollen die Benutzerpasswörter in der Authentifizierungsdatenbank
|
||
gespeichert werden, so muss der Parameter <code class="varname">module</code>
|
||
den Wert <code class="literal">DB</code> enthalten. In diesem Fall können sowohl
|
||
der Administrator als auch die Benutzer selber ihre Psaswörter in
|
||
der Administrator als auch die Benutzer selber ihre Passwörter in
|
||
kivitendo ändern.</p><p>Soll hingegen ein externer LDAP- oder Active-Directory-Server
|
||
benutzt werden, so muss der Parameter <code class="varname">module</code> auf
|
||
<code class="literal">LDAP</code> gesetzt werden. In diesem Fall müssen
|
doc/html/ch03s03.html | ||
---|---|---|
<code class="varname">template_meta.language.description</code>
|
||
</span></dt><dd><p>Beschreibung der verwendeten Sprache</p></dd><dt><span class="term">
|
||
<code class="varname">template_meta.language.template_code</code>
|
||
</span></dt><dd><p>Vorlagenürzel der verwendeten Sprache, identisch mit dem
|
||
</span></dt><dd><p>Vorlagenkürzel der verwendeten Sprache, identisch mit dem
|
||
Kürzel das im Dateinamen verwendetet wird.</p></dd><dt><span class="term">
|
||
<code class="varname">template_meta.language.output_numberformat</code>
|
||
</span></dt><dd><p>Zahlenformat der verwendeten Sprache in der Form
|
||
... | ... | |
<code class="varname">invdate</code>
|
||
</span></dt><dd><p>Rechnungsdatum</p></dd><dt><span class="term">
|
||
<code class="varname">invnumber</code>
|
||
</span></dt><dd><p>Rechnungsnummer</p></dd></dl></div></div></div><div class="sect2" title="3.3.10. Variablen in anderen Vorlagen"><div class="titlepage"><div><div><h3 class="title"><a name="dokumentenvorlagen-und-variablen.andere-vorlagen"></a>3.3.10. Variablen in anderen Vorlagen</h3></div></div></div><div class="sect3" title="3.3.10.1. Einführung"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5115"></a>3.3.10.1. Einführung</h4></div></div></div><p>Die Variablen in anderen Vorlagen sind ähnlich wie in der
|
||
</span></dt><dd><p>Rechnungsnummer</p></dd></dl></div></div></div><div class="sect2" title="3.3.10. Variablen in anderen Vorlagen"><div class="titlepage"><div><div><h3 class="title"><a name="dokumentenvorlagen-und-variablen.andere-vorlagen"></a>3.3.10. Variablen in anderen Vorlagen</h3></div></div></div><div class="sect3" title="3.3.10.1. Einführung"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5100"></a>3.3.10.1. Einführung</h4></div></div></div><p>Die Variablen in anderen Vorlagen sind ähnlich wie in der
|
||
Rechnung. Allerdings heißen die Variablen, die mit
|
||
<code class="varname">inv</code> beginnen, jetzt anders. Bei den Angeboten
|
||
fangen sie mit <code class="varname">quo</code> für "quotation" an:
|
doc/html/ch04.html | ||
---|---|---|
<html><head>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||
<title>Kapitel 4. Entwicklerdokumentation</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.3.0: Installation, Konfiguration, Entwicklung"><link rel="up" href="index.html" title="kivitendo 3.3.0: Installation, Konfiguration, Entwicklung"><link rel="prev" href="ch03s05.html" title="3.5. Mandantenkonfiguration Lager"><link rel="next" href="ch04s02.html" title="4.2. Entwicklung unter FastCGI"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Kapitel 4. Entwicklerdokumentation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s05.html">Zurück</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch04s02.html">Weiter</a></td></tr></table><hr></div><div class="chapter" title="Kapitel 4. Entwicklerdokumentation"><div class="titlepage"><div><div><h2 class="title"><a name="d0e5753"></a>Kapitel 4. Entwicklerdokumentation</h2></div></div></div><div class="sect1" title="4.1. Globale Variablen"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="devel.globals"></a>4.1. Globale Variablen</h2></div></div></div><div class="sect2" title="4.1.1. Wie sehen globale Variablen in Perl aus?"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5759"></a>4.1.1. Wie sehen globale Variablen in Perl aus?</h3></div></div></div><p>Globale Variablen liegen in einem speziellen namespace namens
|
||
<title>Kapitel 4. Entwicklerdokumentation</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.3.0: Installation, Konfiguration, Entwicklung"><link rel="up" href="index.html" title="kivitendo 3.3.0: Installation, Konfiguration, Entwicklung"><link rel="prev" href="ch03s05.html" title="3.5. Mandantenkonfiguration Lager"><link rel="next" href="ch04s02.html" title="4.2. Entwicklung unter FastCGI"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Kapitel 4. Entwicklerdokumentation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s05.html">Zurück</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch04s02.html">Weiter</a></td></tr></table><hr></div><div class="chapter" title="Kapitel 4. Entwicklerdokumentation"><div class="titlepage"><div><div><h2 class="title"><a name="d0e5738"></a>Kapitel 4. Entwicklerdokumentation</h2></div></div></div><div class="sect1" title="4.1. Globale Variablen"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="devel.globals"></a>4.1. Globale Variablen</h2></div></div></div><div class="sect2" title="4.1.1. Wie sehen globale Variablen in Perl aus?"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5744"></a>4.1.1. Wie sehen globale Variablen in Perl aus?</h3></div></div></div><p>Globale Variablen liegen in einem speziellen namespace namens
|
||
"main", der von überall erreichbar ist. Darüber hinaus sind bareword
|
||
globs global und die meisten speziellen Variablen sind...
|
||
speziell.</p><p>Daraus ergeben sich folgende Formen:</p><div class="variablelist"><dl><dt><span class="term">
|
||
... | ... | |
<code class="varname">$PACKAGE::form</code>.</p></dd><dt><span class="term">
|
||
<code class="literal">local $form</code>
|
||
</span></dt><dd><p>Alle Änderungen an <code class="varname">$form</code> werden am Ende
|
||
des scopes zurückgesetzt</p></dd></dl></div></div><div class="sect2" title="4.1.2. Warum sind globale Variablen ein Problem?"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5860"></a>4.1.2. Warum sind globale Variablen ein Problem?</h3></div></div></div><p>Das erste Problem ist <span class="productname">FCGI</span>™.</p><p>
|
||
des scopes zurückgesetzt</p></dd></dl></div></div><div class="sect2" title="4.1.2. Warum sind globale Variablen ein Problem?"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5845"></a>4.1.2. Warum sind globale Variablen ein Problem?</h3></div></div></div><p>Das erste Problem ist <span class="productname">FCGI</span>™.</p><p>
|
||
<span class="productname">SQL-Ledger</span>™ hat fast alles im globalen
|
||
namespace abgelegt, und erwartet, dass es da auch wiederzufinden ist.
|
||
Unter <span class="productname">FCGI</span>™ müssen diese Sachen aber wieder
|
||
... | ... | |
dies hat, seit der Einführung, u.a. schon so manche langwierige
|
||
Bug-Suche verkürzt. Da globale Variablen aber implizit mit Package
|
||
angegeben werden, werden die nicht geprüft, und somit kann sich
|
||
schnell ein Tippfehler einschleichen.</p></div><div class="sect2" title="4.1.3. Kanonische globale Variablen"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5893"></a>4.1.3. Kanonische globale Variablen</h3></div></div></div><p>Um dieses Problem im Griff zu halten gibt es einige wenige
|
||
schnell ein Tippfehler einschleichen.</p></div><div class="sect2" title="4.1.3. Kanonische globale Variablen"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5878"></a>4.1.3. Kanonische globale Variablen</h3></div></div></div><p>Um dieses Problem im Griff zu halten gibt es einige wenige
|
||
globale Variablen, die kanonisch sind, d.h. sie haben bestimmte
|
||
vorgegebenen Eigenschaften, und alles andere sollte anderweitig
|
||
umhergereicht werden.</p><p>Diese Variablen sind im Moment die folgenden neun:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
|
||
... | ... | |
<code class="varname">$::request</code>
|
||
</p></li></ul></div><p>Damit diese nicht erneut als Müllhalde missbraucht werden, im
|
||
Folgenden eine kurze Erläuterung der bestimmten vorgegebenen
|
||
Eigenschaften (Konventionen):</p><div class="sect3" title="4.1.3.1. $::form"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5957"></a>4.1.3.1. $::form</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Ist ein Objekt der Klasse
|
||
Eigenschaften (Konventionen):</p><div class="sect3" title="4.1.3.1. $::form"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5942"></a>4.1.3.1. $::form</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Ist ein Objekt der Klasse
|
||
"<code class="classname">Form</code>"</p></li><li class="listitem"><p>Wird nach jedem Request gelöscht</p></li><li class="listitem"><p>Muss auch in Tests und Konsolenscripts vorhanden
|
||
sein.</p></li><li class="listitem"><p>Enthält am Anfang eines Requests die Requestparameter vom
|
||
User</p></li><li class="listitem"><p>Kann zwar intern über Requestgrenzen ein Datenbankhandle
|
||
... | ... | |
push @{ $form->{TEMPLATE_ARRAYS}{number} }, $form->{"partnumber_$i"};
|
||
push @{ $form->{TEMPLATE_ARRAYS}{description} }, $form->{"description_$i"};
|
||
# ...
|
||
}</pre></div><div class="sect3" title="4.1.3.2. %::myconfig"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6041"></a>4.1.3.2. %::myconfig</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Das einzige Hash unter den globalen Variablen</p></li><li class="listitem"><p>Wird spätestens benötigt wenn auf die Datenbank
|
||
}</pre></div><div class="sect3" title="4.1.3.2. %::myconfig"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6026"></a>4.1.3.2. %::myconfig</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Das einzige Hash unter den globalen Variablen</p></li><li class="listitem"><p>Wird spätestens benötigt wenn auf die Datenbank
|
||
zugegriffen wird</p></li><li class="listitem"><p>Wird bei jedem Request neu erstellt.</p></li><li class="listitem"><p>Enthält die Userdaten des aktuellen Logins</p></li><li class="listitem"><p>Sollte nicht ohne Filterung irgendwo gedumpt werden oder
|
||
extern serialisiert werden, weil da auch der Datenbankzugriff
|
||
für diesen user drinsteht.</p></li><li class="listitem"><p>Enthält unter anderem Listenbegrenzung vclimit,
|
||
... | ... | |
überwiegend die Daten, die sich unter <span class="guimenu">Programm</span>
|
||
-> <span class="guimenuitem">Einstellungen</span> befinden, bzw. die
|
||
Informationen über den Benutzer die über die
|
||
Administrator-Schnittstelle eingegeben wurden.</p></div><div class="sect3" title="4.1.3.3. $::locale"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6080"></a>4.1.3.3. $::locale</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "Locale"</p></li><li class="listitem"><p>Wird pro Request erstellt</p></li><li class="listitem"><p>Muss auch für Tests und Scripte immer verfügbar
|
||
Administrator-Schnittstelle eingegeben wurden.</p></div><div class="sect3" title="4.1.3.3. $::locale"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6065"></a>4.1.3.3. $::locale</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "Locale"</p></li><li class="listitem"><p>Wird pro Request erstellt</p></li><li class="listitem"><p>Muss auch für Tests und Scripte immer verfügbar
|
||
sein.</p></li><li class="listitem"><p>Cached intern über Requestgrenzen hinweg benutzte
|
||
Locales</p></li></ul></div><p>Lokalisierung für den aktuellen User. Alle Übersetzungen,
|
||
Zahlen- und Datumsformatierungen laufen über dieses Objekt.</p></div><div class="sect3" title="4.1.3.4. $::lxdebug"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6098"></a>4.1.3.4. $::lxdebug</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "LXDebug"</p></li><li class="listitem"><p>Wird global gecached</p></li><li class="listitem"><p>Muss immer verfügbar sein, in nahezu allen
|
||
Zahlen- und Datumsformatierungen laufen über dieses Objekt.</p></div><div class="sect3" title="4.1.3.4. $::lxdebug"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6083"></a>4.1.3.4. $::lxdebug</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "LXDebug"</p></li><li class="listitem"><p>Wird global gecached</p></li><li class="listitem"><p>Muss immer verfügbar sein, in nahezu allen
|
||
Funktionen</p></li></ul></div><p>
|
||
<code class="varname">$::lxdebug</code> stellt Debuggingfunktionen
|
||
bereit, wie "<code class="function">enter_sub</code>" und
|
||
... | ... | |
"<code class="function">message</code>" und "<code class="function">dump</code>" mit
|
||
denen man flott Informationen ins Log (tmp/kivitendo-debug.log)
|
||
packen kann.</p><p>Beispielsweise so:</p><pre class="programlisting">$main::lxdebug->message(0, 'Meine Konfig:' . Dumper (%::myconfig));
|
||
$main::lxdebug->message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form->{vc});</pre></div><div class="sect3" title="4.1.3.5. $::auth"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6135"></a>4.1.3.5. $::auth</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "SL::Auth"</p></li><li class="listitem"><p>Wird global gecached</p></li><li class="listitem"><p>Hat eine permanente DB Verbindung zur Authdatenbank</p></li><li class="listitem"><p>Wird nach jedem Request resettet.</p></li></ul></div><p>
|
||
$main::lxdebug->message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form->{vc});</pre></div><div class="sect3" title="4.1.3.5. $::auth"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6120"></a>4.1.3.5. $::auth</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "SL::Auth"</p></li><li class="listitem"><p>Wird global gecached</p></li><li class="listitem"><p>Hat eine permanente DB Verbindung zur Authdatenbank</p></li><li class="listitem"><p>Wird nach jedem Request resettet.</p></li></ul></div><p>
|
||
<code class="varname">$::auth</code> stellt Funktionen bereit um die
|
||
Rechte des aktuellen Users abzufragen. Obwohl diese Informationen
|
||
vom aktuellen User abhängen wird das Objekt aus
|
||
Geschwindigkeitsgründen nur einmal angelegt und dann nach jedem
|
||
Request kurz resettet.</p><p>Dieses Objekt kapselt auch den gerade aktiven Mandanten. Dessen Einstellungen können über
|
||
<code class="literal">$::auth->client</code> abgefragt werden; Rückgabewert ist ein Hash mit den Werten aus der Tabelle
|
||
<code class="literal">auth.clients</code>.</p></div><div class="sect3" title="4.1.3.6. $::lx_office_conf"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6164"></a>4.1.3.6. $::lx_office_conf</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
|
||
<code class="literal">auth.clients</code>.</p></div><div class="sect3" title="4.1.3.6. $::lx_office_conf"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6149"></a>4.1.3.6. $::lx_office_conf</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
|
||
"<code class="classname">SL::LxOfficeConf</code>"</p></li><li class="listitem"><p>Global gecached</p></li><li class="listitem"><p>Repräsentation der
|
||
<code class="filename">config/kivitendo.conf[.default]</code>-Dateien</p></li></ul></div><p>Globale Konfiguration. Configdateien werden zum Start gelesen
|
||
und danach nicht mehr angefasst. Es ist derzeit nicht geplant, dass
|
||
... | ... | |
file_name = /tmp/kivitendo-debug.log</pre><p>ist der Key <code class="varname">file</code> im Programm als
|
||
<code class="varname">$::lx_office_conf->{debug}{file}</code>
|
||
erreichbar.</p><div class="warning" title="Warnung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warnung]" src="system/docbook-xsl/images/warning.png"></td><th align="left">Warnung</th></tr><tr><td align="left" valign="top"><p>Zugriff auf die Konfiguration erfolgt im Moment über
|
||
Hashkeys, sind also nicht gegen Tippfehler abgesichert.</p></td></tr></table></div></div><div class="sect3" title="4.1.3.7. $::instance_conf"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6200"></a>4.1.3.7. $::instance_conf</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
|
||
Hashkeys, sind also nicht gegen Tippfehler abgesichert.</p></td></tr></table></div></div><div class="sect3" title="4.1.3.7. $::instance_conf"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6185"></a>4.1.3.7. $::instance_conf</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
|
||
"<code class="classname">SL::InstanceConfiguration</code>"</p></li><li class="listitem"><p>wird pro Request neu erstellt</p></li></ul></div><p>Funktioniert wie <code class="varname">$::lx_office_conf</code>,
|
||
speichert aber Daten die von der Instanz abhängig sind. Eine Instanz
|
||
ist hier eine Mandantendatenbank. Beispielsweise überprüft
|
||
</p><pre class="programlisting">$::instance_conf->get_inventory_system eq 'perpetual'</pre><p>
|
||
ob die berüchtigte Bestandsmethode zur Anwendung kommt.</p></div><div class="sect3" title="4.1.3.8. $::dispatcher"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6221"></a>4.1.3.8. $::dispatcher</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
|
||
ob die berüchtigte Bestandsmethode zur Anwendung kommt.</p></div><div class="sect3" title="4.1.3.8. $::dispatcher"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6206"></a>4.1.3.8. $::dispatcher</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
|
||
"<code class="varname">SL::Dispatcher</code>"</p></li><li class="listitem"><p>wird pro Serverprozess erstellt.</p></li><li class="listitem"><p>enthält Informationen über die technische Verbindung zum
|
||
Server</p></li></ul></div><p>Der dritte Punkt ist auch der einzige Grund warum das Objekt
|
||
global gespeichert wird. Wird vermutlich irgendwann in einem anderen
|
||
Objekt untergebracht.</p></div><div class="sect3" title="4.1.3.9. $::request"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6239"></a>4.1.3.9. $::request</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Hashref (evtl später Objekt)</p></li><li class="listitem"><p>Wird pro Request neu initialisiert.</p></li><li class="listitem"><p>Keine Unterstruktur garantiert.</p></li></ul></div><p>
|
||
Objekt untergebracht.</p></div><div class="sect3" title="4.1.3.9. $::request"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6224"></a>4.1.3.9. $::request</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Hashref (evtl später Objekt)</p></li><li class="listitem"><p>Wird pro Request neu initialisiert.</p></li><li class="listitem"><p>Keine Unterstruktur garantiert.</p></li></ul></div><p>
|
||
<code class="varname">$::request</code> ist ein generischer Platz um
|
||
Daten "für den aktuellen Request" abzulegen. Sollte nicht für action
|
||
at a distance benutzt werden, sondern um lokales memoizing zu
|
||
... | ... | |
<code class="varname">$::request</code>
|
||
</p></li><li class="listitem"><p>Muss ich von anderen Teilen des Programms lesend drauf
|
||
zugreifen? Dann <code class="varname">$::request</code>, aber Zugriff über
|
||
Wrappermethode</p></li></ul></div></div></div><div class="sect2" title="4.1.4. Ehemalige globale Variablen"><div class="titlepage"><div><div><h3 class="title"><a name="d0e6281"></a>4.1.4. Ehemalige globale Variablen</h3></div></div></div><p>Die folgenden Variablen waren einmal im Programm, und wurden
|
||
entfernt.</p><div class="sect3" title="4.1.4.1. $::cgi"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6286"></a>4.1.4.1. $::cgi</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>war nötig, weil cookie Methoden nicht als
|
||
Wrappermethode</p></li></ul></div></div></div><div class="sect2" title="4.1.4. Ehemalige globale Variablen"><div class="titlepage"><div><div><h3 class="title"><a name="d0e6266"></a>4.1.4. Ehemalige globale Variablen</h3></div></div></div><p>Die folgenden Variablen waren einmal im Programm, und wurden
|
||
entfernt.</p><div class="sect3" title="4.1.4.1. $::cgi"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6271"></a>4.1.4.1. $::cgi</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>war nötig, weil cookie Methoden nicht als
|
||
Klassenfunktionen funktionieren</p></li><li class="listitem"><p>Aufruf als Klasse erzeugt Dummyobjekt was im
|
||
Klassennamespace gehalten wird und über Requestgrenzen
|
||
leaked</p></li><li class="listitem"><p>liegt jetzt unter
|
||
<code class="varname">$::request->{cgi}</code>
|
||
</p></li></ul></div></div><div class="sect3" title="4.1.4.2. $::all_units"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6302"></a>4.1.4.2. $::all_units</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>war nötig, weil einige Funktionen in Schleifen zum Teil
|
||
</p></li></ul></div></div><div class="sect3" title="4.1.4.2. $::all_units"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6287"></a>4.1.4.2. $::all_units</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>war nötig, weil einige Funktionen in Schleifen zum Teil
|
||
ein paar hundert mal pro Request eine Liste der Einheiten
|
||
brauchen, und de als Parameter durch einen Riesenstack von
|
||
Funktionen geschleift werden müssten.</p></li><li class="listitem"><p>Liegt jetzt unter
|
||
<code class="varname">$::request->{cache}{all_units}</code>
|
||
</p></li><li class="listitem"><p>Wird nur in
|
||
<code class="function">AM->retrieve_all_units()</code> gesetzt oder
|
||
gelesen.</p></li></ul></div></div><div class="sect3" title="4.1.4.3. %::called_subs"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6321"></a>4.1.4.3. %::called_subs</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>wurde benutzt um callsub deep recursions
|
||
gelesen.</p></li></ul></div></div><div class="sect3" title="4.1.4.3. %::called_subs"><div class="titlepage"><div><div><h4 class="title"><a name="d0e6306"></a>4.1.4.3. %::called_subs</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>wurde benutzt um callsub deep recursions
|
||
abzufangen.</p></li><li class="listitem"><p>Wurde entfernt, weil callsub nur einen Bruchteil der
|
||
möglichen Rekursioenen darstellt, und da nie welche
|
||
auftreten.</p></li><li class="listitem"><p>komplette recursion protection wurde entfernt.</p></li></ul></div></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch03s05.html">Zurück</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ch04s02.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">3.5. Mandantenkonfiguration Lager </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 4.2. Entwicklung unter FastCGI</td></tr></table></div></body></html>
|
doc/html/index.html | ||
---|---|---|
<html><head>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||
<title>kivitendo 3.3.0: Installation, Konfiguration, Entwicklung</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.3.0: Installation, Konfiguration, Entwicklung"><link rel="next" href="ch01.html" title="Kapitel 1. Aktuelle Hinweise"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">kivitendo 3.3.0: Installation, Konfiguration, Entwicklung</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch01.html">Weiter</a></td></tr></table><hr></div><div lang="de" class="book" title="kivitendo 3.3.0: Installation, Konfiguration, Entwicklung"><div class="titlepage"><div><div><h1 class="title"><a name="kivitendo-documentation"></a>kivitendo 3.3.0: Installation, Konfiguration, Entwicklung</h1></div></div><hr></div><div class="toc"><p><b>Inhaltsverzeichnis</b></p><dl><dt><span class="chapter"><a href="ch01.html">1. Aktuelle Hinweise</a></span></dt><dt><span class="chapter"><a href="ch02.html">2. Installation und Grundkonfiguration</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch02.html#Installation-%C3%9Cbersicht">2.1. Übersicht</a></span></dt><dt><span class="sect1"><a href="ch02s02.html">2.2. Benötigte Software und Pakete</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s02.html#Betriebssystem">2.2.1. Betriebssystem</a></span></dt><dt><span class="sect2"><a href="ch02s02.html#Pakete">2.2.2. Benötigte Perl-Pakete installieren</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s03.html">2.3. Manuelle Installation des Programmpaketes</a></span></dt><dt><span class="sect1"><a href="ch02s04.html">2.4. kivitendo-Konfigurationsdatei</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s04.html#config.config-file.introduction">2.4.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#config.config-file.sections-parameters">2.4.2. Abschnitte und Parameter</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#config.config-file.prior-versions">2.4.3. Versionen vor 2.6.3</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s05.html">2.5. Anpassung der PostgreSQL-Konfiguration</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s05.html#Zeichens%C3%A4tze-die-Verwendung-von-UTF-8">2.5.1. Zeichensätze/die Verwendung von Unicode/UTF-8</a></span></dt><dt><span class="sect2"><a href="ch02s05.html#%C3%84nderungen-an-Konfigurationsdateien">2.5.2. Änderungen an Konfigurationsdateien</a></span></dt><dt><span class="sect2"><a href="ch02s05.html#Erweiterung-f%C3%BCr-servergespeicherte-Prozeduren">2.5.3. Erweiterung für servergespeicherte Prozeduren</a></span></dt><dt><span class="sect2"><a href="ch02s05.html#Datenbankbenutzer-anlegen">2.5.4. Datenbankbenutzer anlegen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s06.html">2.6. Webserver-Konfiguration</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s06.html#d0e757">2.6.1. Grundkonfiguration mittels CGI</a></span></dt><dt><span class="sect2"><a href="ch02s06.html#Apache-Konfiguration.FCGI">2.6.2. Konfiguration für FastCGI/FCGI</a></span></dt><dt><span class="sect2"><a href="ch02s06.html#d0e902">2.6.3. Weitergehende Konfiguration</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s07.html">2.7. Der Task-Server</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s07.html#Konfiguration-des-Task-Servers">2.7.1. Verfügbare und notwendige Konfigurationsoptionen</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Einbinden-in-den-Boot-Prozess">2.7.2. Automatisches Starten des Task-Servers beim Booten</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Prozesskontrolle">2.7.3. Wie der Task-Server gestartet und beendet wird</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Prozesskontrolle2">2.7.4. Task-Server mit mehreren Mandanten</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s08.html">2.8. Benutzerauthentifizierung und Administratorpasswort</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s08.html#Grundlagen-zur-Benutzerauthentifizierung">2.8.1. Grundlagen zur Benutzerauthentifizierung</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Administratorpasswort">2.8.2. Administratorpasswort</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Authentifizierungsdatenbank">2.8.3. Authentifizierungsdatenbank</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Passwort%C3%BCberpr%C3%BCfung">2.8.4. Passwortüberprüfung</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Name-des-Session-Cookies">2.8.5. Name des Session-Cookies</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Anlegen-der-Authentifizierungsdatenbank">2.8.6. Anlegen der Authentifizierungsdatenbank</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s09.html">2.9. Mandanten-, Benutzer- und Gruppenverwaltung</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s09.html#Zusammenh%C3%A4nge">2.9.1. Zusammenhänge</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Mandanten-Benutzer-Gruppen">2.9.2. Mandanten, Benutzer und Gruppen</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Datenbanken-anlegen">2.9.3. Datenbanken anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Gruppen-anlegen">2.9.4. Gruppen anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Benutzer-anlegen">2.9.5. Benutzer anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Mandanten-anlegen">2.9.6. Mandanten anlegen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s10.html">2.10. Drucker- und Systemverwaltung</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s10.html#Druckeradministration">2.10.1. Druckeradministration</a></span></dt><dt><span class="sect2"><a href="ch02s10.html#System">2.10.2. System sperren / entsperren</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s11.html">2.11. E-Mail-Versand aus kivitendo heraus</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s11.html#config.sending-email.sendmail">2.11.1. Versand über lokalen E-Mail-Server</a></span></dt><dt><span class="sect2"><a href="ch02s11.html#config.sending-email.smtp">2.11.2. Versand über einen SMTP-Server</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s12.html">2.12. Drucken mit kivitendo</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s12.html#Vorlagenverzeichnis-anlegen">2.12.1. Vorlagenverzeichnis anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s12.html#Vorlagen-RB">2.12.2. Der Druckvorlagensatz RB</a></span></dt><dt><span class="sect2"><a href="ch02s12.html#f-tex">2.12.3. f-tex</a></span></dt><dt><span class="sect2"><a href="ch02s12.html#Vorlagen-rev-odt">2.12.4. Der Druckvorlagensatz rev-odt</a></span></dt><dt><span class="sect2"><a href="ch02s12.html#allgemeine-hinweise-zu-latex">2.12.5. Allgemeine Hinweise zu LaTeX Vorlagen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s13.html">2.13. OpenDocument-Vorlagen</a></span></dt><dt><span class="sect1"><a href="ch02s14.html">2.14. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung:
|
||
<title>kivitendo 3.3.0: Installation, Konfiguration, Entwicklung</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.3.0: Installation, Konfiguration, Entwicklung"><link rel="next" href="ch01.html" title="Kapitel 1. Aktuelle Hinweise"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">kivitendo 3.3.0: Installation, Konfiguration, Entwicklung</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch01.html">Weiter</a></td></tr></table><hr></div><div lang="de" class="book" title="kivitendo 3.3.0: Installation, Konfiguration, Entwicklung"><div class="titlepage"><div><div><h1 class="title"><a name="kivitendo-documentation"></a>kivitendo 3.3.0: Installation, Konfiguration, Entwicklung</h1></div></div><hr></div><div class="toc"><p><b>Inhaltsverzeichnis</b></p><dl><dt><span class="chapter"><a href="ch01.html">1. Aktuelle Hinweise</a></span></dt><dt><span class="chapter"><a href="ch02.html">2. Installation und Grundkonfiguration</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch02.html#Installation-%C3%9Cbersicht">2.1. Übersicht</a></span></dt><dt><span class="sect1"><a href="ch02s02.html">2.2. Benötigte Software und Pakete</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s02.html#Betriebssystem">2.2.1. Betriebssystem</a></span></dt><dt><span class="sect2"><a href="ch02s02.html#Pakete">2.2.2. Benötigte Perl-Pakete installieren</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s03.html">2.3. Manuelle Installation des Programmpaketes</a></span></dt><dt><span class="sect1"><a href="ch02s04.html">2.4. kivitendo-Konfigurationsdatei</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s04.html#config.config-file.introduction">2.4.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#config.config-file.sections-parameters">2.4.2. Abschnitte und Parameter</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#config.config-file.prior-versions">2.4.3. Versionen vor 2.6.3</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s05.html">2.5. Anpassung der PostgreSQL-Konfiguration</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s05.html#Zeichens%C3%A4tze-die-Verwendung-von-UTF-8">2.5.1. Zeichensätze/die Verwendung von Unicode/UTF-8</a></span></dt><dt><span class="sect2"><a href="ch02s05.html#%C3%84nderungen-an-Konfigurationsdateien">2.5.2. Änderungen an Konfigurationsdateien</a></span></dt><dt><span class="sect2"><a href="ch02s05.html#Erweiterung-f%C3%BCr-servergespeicherte-Prozeduren">2.5.3. Erweiterung für servergespeicherte Prozeduren</a></span></dt><dt><span class="sect2"><a href="ch02s05.html#Datenbankbenutzer-anlegen">2.5.4. Datenbankbenutzer anlegen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s06.html">2.6. Webserver-Konfiguration</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s06.html#d0e751">2.6.1. Grundkonfiguration mittels CGI</a></span></dt><dt><span class="sect2"><a href="ch02s06.html#Apache-Konfiguration.FCGI">2.6.2. Konfiguration für FastCGI/FCGI</a></span></dt><dt><span class="sect2"><a href="ch02s06.html#d0e896">2.6.3. Weitergehende Konfiguration</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s07.html">2.7. Der Task-Server</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s07.html#Konfiguration-des-Task-Servers">2.7.1. Verfügbare und notwendige Konfigurationsoptionen</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Konfiguration-der-Mandanten-fuer-den-Task-Servers">2.7.2. Konfiguration der Mandanten für den Task-Server</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Einbinden-in-den-Boot-Prozess">2.7.3. Automatisches Starten des Task-Servers beim Booten</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Prozesskontrolle">2.7.4. Wie der Task-Server gestartet und beendet wird</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Prozesskontrolle2">2.7.5. Task-Server mit mehreren Mandanten</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s08.html">2.8. Benutzerauthentifizierung und Administratorpasswort</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s08.html#Grundlagen-zur-Benutzerauthentifizierung">2.8.1. Grundlagen zur Benutzerauthentifizierung</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Administratorpasswort">2.8.2. Administratorpasswort</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Authentifizierungsdatenbank">2.8.3. Authentifizierungsdatenbank</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Passwort%C3%BCberpr%C3%BCfung">2.8.4. Passwortüberprüfung</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Name-des-Session-Cookies">2.8.5. Name des Session-Cookies</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Anlegen-der-Authentifizierungsdatenbank">2.8.6. Anlegen der Authentifizierungsdatenbank</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s09.html">2.9. Mandanten-, Benutzer- und Gruppenverwaltung</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s09.html#Zusammenh%C3%A4nge">2.9.1. Zusammenhänge</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Mandanten-Benutzer-Gruppen">2.9.2. Mandanten, Benutzer und Gruppen</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Datenbanken-anlegen">2.9.3. Datenbanken anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Gruppen-anlegen">2.9.4. Gruppen anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Benutzer-anlegen">2.9.5. Benutzer anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#Mandanten-anlegen">2.9.6. Mandanten anlegen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s10.html">2.10. Drucker- und Systemverwaltung</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s10.html#Druckeradministration">2.10.1. Druckeradministration</a></span></dt><dt><span class="sect2"><a href="ch02s10.html#System">2.10.2. System sperren / entsperren</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s11.html">2.11. E-Mail-Versand aus kivitendo heraus</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s11.html#config.sending-email.sendmail">2.11.1. Versand über lokalen E-Mail-Server</a></span></dt><dt><span class="sect2"><a href="ch02s11.html#config.sending-email.smtp">2.11.2. Versand über einen SMTP-Server</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s12.html">2.12. Drucken mit kivitendo</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s12.html#Vorlagenverzeichnis-anlegen">2.12.1. Vorlagenverzeichnis anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s12.html#Vorlagen-RB">2.12.2. Der Druckvorlagensatz RB</a></span></dt><dt><span class="sect2"><a href="ch02s12.html#f-tex">2.12.3. f-tex</a></span></dt><dt><span class="sect2"><a href="ch02s12.html#Vorlagen-rev-odt">2.12.4. Der Druckvorlagensatz rev-odt</a></span></dt><dt><span class="sect2"><a href="ch02s12.html#allgemeine-hinweise-zu-latex">2.12.5. Allgemeine Hinweise zu LaTeX Vorlagen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s13.html">2.13. OpenDocument-Vorlagen</a></span></dt><dt><span class="sect1"><a href="ch02s14.html">2.14. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung:
|
||
EUR</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s14.html#config.eur.introduction">2.14.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch02s14.html#config.eur.parameters">2.14.2. Konfigurationsparameter</a></span></dt><dt><span class="sect2"><a href="ch02s14.html#config.eur.setting-parameters">2.14.3. Festlegen der Parameter</a></span></dt><dt><span class="sect2"><a href="ch02s14.html#config.eur.inventory-system-perpetual">2.14.4. Bemerkungen zur Bestandsmethode</a></span></dt><dt><span class="sect2"><a href="ch02s14.html#config.eur.knonw-issues">2.14.5. Bekannte Probleme</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s15.html">2.15. SKR04 19% Umstellung für innergemeinschaftlichen Erwerb</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s15.html#config.skr04-update-3804.introduction">2.15.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch02s15.html#config.skr04-update-3804.create-chart">2.15.2. Konto 3804 manuell anlegen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s16.html">2.16. Verhalten des Bilanzberichts</a></span></dt><dt><span class="sect1"><a href="ch02s17.html">2.17. Einstellungen pro Mandant</a></span></dt><dt><span class="sect1"><a href="ch02s18.html">2.18. kivitendo ERP verwenden</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch03.html">3. Features und Funktionen</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch03.html#features.periodic-invoices">3.1. Wiederkehrende Rechnungen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.introduction">3.1.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.configuration">3.1.2. Konfiguration</a></span></dt><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.variables">3.1.3. Spezielle Variablen</a></span></dt><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.reports">3.1.4. Auflisten</a></span></dt><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.task-server">3.1.5. Erzeugung der eigentlichen Rechnungen</a></span></dt><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.create-for-current-month">3.1.6. Erste Rechnung für aktuellen Monat erstellen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s02.html">3.2. Bankerweiterung</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s02.html#features.bank.introduction">3.2.1. Einführung</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s03.html">3.3. Dokumentenvorlagen und verfügbare Variablen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s03.html#dokumentenvorlagen-und-variablen.einf%C3%BChrung">3.3.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#dokumentenvorlagen-und-variablen.variablen-ausgeben">3.3.2. Variablen ausgeben</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#dokumentenvorlagen-und-variablen.verwendung-in-druckbefehlen">3.3.3. Verwendung in Druckbefehlen</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#dokumentenvorlagen-und-variablen.tag-style">3.3.4. Anfang und Ende der Tags verändern</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#dokumentenvorlagen-und-variablen.zuordnung-dateinamen">3.3.5. Zuordnung von den Dateinamen zu den Funktionen</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#dokumentenvorlagen-und-variablen.dateinamen-erweitert">3.3.6. Sprache, Drucker und E-Mail</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#dokumentenvorlagen-und-variablen.allgemeine-variablen">3.3.7. Allgemeine Variablen, die in allen Vorlagen vorhanden
|
||
sind</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#dokumentenvorlagen-und-variablen.invoice">3.3.8. Variablen in Rechnungen</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#dokumentenvorlagen-und-variablen.dunning">3.3.9. Variablen in Mahnungen und Rechnungen über Mahngebühren</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#dokumentenvorlagen-und-variablen.andere-vorlagen">3.3.10. Variablen in anderen Vorlagen</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#dokumentenvorlagen-und-variablen.bloecke">3.3.11. Blöcke, bedingte Anweisungen und Schleifen</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#dokumentenvorlagen-und-variablen.markup">3.3.12. Markup-Code zur Textformatierung innerhalb von
|
||
Formularen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s04.html">3.4. Excel-Vorlagen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s04.html#excel-templates.summary">3.4.1. Zusammenfassung</a></span></dt><dt><span class="sect2"><a href="ch03s04.html#excel-templates.usage">3.4.2. Bedienung</a></span></dt><dt><span class="sect2"><a href="ch03s04.html#excel-templates.syntax">3.4.3. Variablensyntax</a></span></dt><dt><span class="sect2"><a href="ch03s04.html#excel-templates.limitations">3.4.4. Einschränkungen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s05.html">3.5. Mandantenkonfiguration Lager</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch04.html">4. Entwicklerdokumentation</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch04.html#devel.globals">4.1. Globale Variablen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04.html#d0e5759">4.1.1. Wie sehen globale Variablen in Perl aus?</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e5860">4.1.2. Warum sind globale Variablen ein Problem?</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e5893">4.1.3. Kanonische globale Variablen</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e6281">4.1.4. Ehemalige globale Variablen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s02.html">4.2. Entwicklung unter FastCGI</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.general">4.2.1. Allgemeines</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.exiting">4.2.2. Programmende und Ausnahmen</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.globals">4.2.3. Globale Variablen</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.performance">4.2.4. Performance und Statistiken</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s03.html">4.3. SQL-Upgradedateien</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.introduction">4.3.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.format">4.3.2. Format der Kontrollinformationen</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.format-perl-files">4.3.3. Format von in Perl geschriebenen Datenbankupgradescripten</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.dbupgrade-tool">4.3.4. Hilfsscript dbupgrade2_tool.pl</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s04.html">4.4. Translations and languages</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s04.html#translations-languages.introduction">4.4.1. Introduction</a></span></dt><dt><span class="sect2"><a href="ch04s04.html#translations-languages.character-set">4.4.2. Character set</a></span></dt><dt><span class="sect2"><a href="ch04s04.html#translations-languages.file-structure">4.4.3. File structure</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s05.html">4.5. Die kivitendo-Test-Suite</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.intro">4.5.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.prerequisites">4.5.2. Voraussetzungen</a></span></dt><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.execution">4.5.3.
|
||
Formularen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s04.html">3.4. Excel-Vorlagen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s04.html#excel-templates.summary">3.4.1. Zusammenfassung</a></span></dt><dt><span class="sect2"><a href="ch03s04.html#excel-templates.usage">3.4.2. Bedienung</a></span></dt><dt><span class="sect2"><a href="ch03s04.html#excel-templates.syntax">3.4.3. Variablensyntax</a></span></dt><dt><span class="sect2"><a href="ch03s04.html#excel-templates.limitations">3.4.4. Einschränkungen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s05.html">3.5. Mandantenkonfiguration Lager</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch04.html">4. Entwicklerdokumentation</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch04.html#devel.globals">4.1. Globale Variablen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04.html#d0e5744">4.1.1. Wie sehen globale Variablen in Perl aus?</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e5845">4.1.2. Warum sind globale Variablen ein Problem?</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e5878">4.1.3. Kanonische globale Variablen</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e6266">4.1.4. Ehemalige globale Variablen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s02.html">4.2. Entwicklung unter FastCGI</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.general">4.2.1. Allgemeines</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.exiting">4.2.2. Programmende und Ausnahmen</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.globals">4.2.3. Globale Variablen</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.performance">4.2.4. Performance und Statistiken</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s03.html">4.3. SQL-Upgradedateien</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.introduction">4.3.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.format">4.3.2. Format der Kontrollinformationen</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.format-perl-files">4.3.3. Format von in Perl geschriebenen Datenbankupgradescripten</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.dbupgrade-tool">4.3.4. Hilfsscript dbupgrade2_tool.pl</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s04.html">4.4. Translations and languages</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s04.html#translations-languages.introduction">4.4.1. Introduction</a></span></dt><dt><span class="sect2"><a href="ch04s04.html#translations-languages.character-set">4.4.2. Character set</a></span></dt><dt><span class="sect2"><a href="ch04s04.html#translations-languages.file-structure">4.4.3. File structure</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s05.html">4.5. Die kivitendo-Test-Suite</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.intro">4.5.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.prerequisites">4.5.2. Voraussetzungen</a></span></dt><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.execution">4.5.3.
|
||
Existierende Tests ausführen
|
||
</a></span></dt><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.meaning_of_scripts">4.5.4.
|
||
Bedeutung der verschiedenen Test-Scripte
|
locale/de/all | ||
---|---|---|
'Do not check for duplicates' => 'Nicht nach Dubletten suchen',
|
||
'Do not link to a project.' => 'Nicht mit einem Projekt verknüpfen.',
|
||
'Do not modify this position' => 'Diese Position nicht verändern',
|
||
'Do not run the task server for this client' => 'Task-Server nicht für diesen Mandanten ausführen',
|
||
'Do not set default buchungsgruppe' => 'Nie Standardbuchungsgruppe setzen',
|
||
'Do not set this bin' => 'Diesen Lagerplatz nicht setzen',
|
||
'Do not set this comment' => 'Diesen Kommentar nicht setzen',
|
||
... | ... | |
'Rule for vendor must not be empty' => 'Eine Lieferantenbedingung darf nicht leer sein',
|
||
'Run JavaScript unit tests' => 'JavaScript-Unit-Tests ausführen',
|
||
'Run at' => 'Ausgeführt um',
|
||
'Run task server for this client with the following user' => 'Task-Server für diesen Mandanten mit der folgenden BenutzerIn ausführen',
|
||
'Run tests' => 'Tests ausführen',
|
||
'SAVED' => 'Gespeichert',
|
||
'SAVED FOR DUNNING' => 'Gespeichert',
|
||
... | ... | |
'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 cannot be deleted as it is used in the following clients: #1' => 'Die BenutzerIn kann nicht gelöscht werden, da sie für die folgenden Mandanten benötigt wird: #1',
|
||
'The user could not be deleted.' => 'Der Benutzer konnte nicht gelöscht werden.',
|
||
'The user group could not be deleted.' => 'Die Benutzergurppe konnte nicht gelöscht werden.',
|
||
'The user group has been created.' => 'Die Benutzergruppe wurde erstellt.',
|
scripts/task_server.pl | ||
---|---|---|
use List::Util qw(first);
|
||
use POSIX qw(setuid setgid);
|
||
use SL::Auth;
|
||
use SL::DB::AuthClient;
|
||
use SL::DB::BackgroundJob;
|
||
use SL::BackgroundJob::ALL;
|
||
use SL::Form;
|
||
... | ... | |
|
||
sub debug {
|
||
return if !$lx_office_conf{task_server}->{debug};
|
||
$::lxdebug->message(0, @_);
|
||
$::lxdebug->message(LXDebug::DEBUG1(), join(' ', "task server:", @_));
|
||
}
|
||
|
||
sub enabled_clients {
|
||
return SL::DB::Manager::AuthClient->get_all(where => [ '!task_server_user_id' => undef ]);
|
||
}
|
||
|
||
sub initialize_kivitendo {
|
||
chdir $exe_dir;
|
||
my ($client) = @_;
|
||
|
||
my $login = $lx_office_conf{task_server}->{login};
|
||
my $client = $lx_office_conf{task_server}->{client};
|
||
chdir $exe_dir;
|
||
|
||
package main;
|
||
|
||
... | ... | |
$::locale = Locale->new($::lx_office_conf{system}->{language});
|
||
$::form = Form->new;
|
||
$::auth = SL::Auth->new;
|
||
die "No client configured or no client found with the name/ID '$client'" unless $::auth->set_client($client);
|
||
|
||
return if !$client;
|
||
|
||
$::auth->set_client($client->id);
|
||
|
||
$::form->{__ERROR_HANDLER} = sub { die @_ };
|
||
|
||
$::instance_conf = SL::InstanceConfiguration->new;
|
||
$::request = SL::Request->new(
|
||
cgi => CGI->new({}),
|
||
... | ... | |
$::auth->restore_session;
|
||
$::auth->create_or_refresh_session;
|
||
|
||
my $login = $client->task_server_user->login;
|
||
|
||
die "cannot find user $login" unless %::myconfig = $::auth->read_user(login => $login);
|
||
die "cannot find locale for user $login" unless $::locale = Locale->new($::myconfig{countrycode} || $::lx_office_conf{system}->{language});
|
||
|
||
$::form->{__ERROR_HANDLER} = sub { die @_ };
|
||
}
|
||
|
||
sub cleanup_kivitendo {
|
||
... | ... | |
$::form = undef;
|
||
$::myconfig = ();
|
||
$::request = undef;
|
||
$::auth = undef;
|
||
}
|
||
|
||
sub clean_before_sleeping {
|
||
Form::disconnect_standard_dbh;
|
||
SL::DBConnect::Cache->disconnect_all_and_clear;
|
||
SL::DB->db_cache->clear;
|
||
}
|
||
|
||
sub drop_privileges {
|
||
... | ... | |
|
||
$params{client} = $::auth->client;
|
||
|
||
my $body;
|
||
$template->process($cfg->{email_template}, \%params, \$body);
|
||
|
||
Mailer->new(
|
||
from => $cfg->{email_from},
|
||
to => $email_to,
|
||
subject => $cfg->{email_subject},
|
||
content_type => 'text/plain',
|
||
charset => 'utf-8',
|
||
message => Encode::decode('utf-8', $body),
|
||
)->send;
|
||
eval {
|
||
my $body;
|
||
$template->process($cfg->{email_template}, \%params, \$body);
|
||
|
||
Mailer->new(
|
||
from => $cfg->{email_from},
|
||
to => $email_to,
|
||
subject => $cfg->{email_subject},
|
||
content_type => 'text/plain',
|
||
charset => 'utf-8',
|
||
message => Encode::decode('utf-8', $body),
|
||
)->send;
|
||
|
||
1;
|
||
} or do {
|
||
debug("Sending a failure notification failed with an exception: $@");
|
||
};
|
||
}
|
||
|
||
sub gd_preconfig {
|
||
... | ... | |
|
||
SL::LxOfficeConf->read($self->{configfile});
|
||
|
||
die "Missing section [task_server] in config file" unless $lx_office_conf{task_server};
|
||
die "Missing key 'login' in section [task_server] in config file" unless $lx_office_conf{task_server}->{login};
|
||
die "Missing key 'client' in section [task_server] in config file" unless $lx_office_conf{task_server}->{client};
|
||
die "Missing section [task_server] in config file" unless $lx_office_conf{task_server};
|
||
|
||
if ($lx_office_conf{task_server}->{login} || $lx_office_conf{task_server}->{client}) {
|
||
print STDERR <<EOT;
|
||
ERROR: The keys 'login' and/or 'client' are still present in the
|
||
section [task_server] in the configuration file. These keys are
|
||
deprecated. You have to configure the clients for which to run the
|
||
task server in the web admin interface.
|
||
|
||
The task server will refuse to start until the keys have been removed from
|
||
the configuration file.
|
||
EOT
|
||
exit 2;
|
||
}
|
||
|
||
drop_privileges();
|
||
initialize_kivitendo();
|
||
|
||
return ();
|
||
}
|
||
|
||
sub gd_run {
|
||
while (1) {
|
||
my $ok = eval {
|
||
initialize_kivitendo();
|
||
sub run_once_for_all_clients {
|
||
initialize_kivitendo();
|
||
|
||
my $clients = enabled_clients();
|
||
|
||
foreach my $client (@{ $clients }) {
|
||
debug("Running for client ID " . $client->id . " (" . $client->name . ")");
|
||
|
||
debug("Retrieving jobs");
|
||
my $ok = eval {
|
||
initialize_kivitendo($client);
|
||
|
||
my $jobs = SL::DB::Manager::BackgroundJob->get_all_need_to_run;
|
||
|
||
debug(" Found: " . join(' ', map { $_->package_name } @{ $jobs })) if @{ $jobs };
|
||
if (@{ $jobs }) {
|
||
debug(" Executing the following jobs: " . join(' ', map { $_->package_name } @{ $jobs }));
|
||
} else {
|
||
debug(" No jobs to execute found");
|
||
}
|
||
|
||
foreach my $job (@{ $jobs }) {
|
||
# Provide fresh global variables in case legacy code modifies
|
||
# them somehow.
|
||
initialize_kivitendo();
|
||
initialize_kivitendo($client);
|
||
|
||
my $history = $job->run;
|
||
|
||
... | ... | |
}
|
||
|
||
cleanup_kivitendo();
|
||
}
|
||
}
|
||
|
||
sub gd_run {
|
||
while (1) {
|
||
run_once_for_all_clients();
|
||
|
||
debug("Sleeping");
|
||
|
||
clean_before_sleeping();
|
||
|
||
my $seconds = 60 - (localtime)[0];
|
||
if (!eval {
|
||
local $SIG{'ALRM'} = sub {
|
sql/Pg-upgrade2-auth/client_task_server.sql | ||
---|---|---|
-- @tag: client_task_server
|
||
-- @description: Einstellungen, um eine Task-Server-Instanz für mehrere Mandanten laufen zu lassen
|
||
-- @depends: release_3_3_0
|
||
ALTER TABLE auth.clients ADD COLUMN task_server_user_id INTEGER;
|
||
ALTER TABLE auth.clients ADD FOREIGN KEY (task_server_user_id) REFERENCES auth.user (id);
|
templates/webpages/admin/edit_client.html | ||
---|---|---|
[% L.input_tag("client.dbpasswd", SELF.client.dbpasswd, class="contains_dbsettings", type="password") %]
|
||
</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<th align="right">[% LxERP.t8("Run task server for this client with the following user") %]</th>
|
||
<td>
|
||
[% L.select_tag("client.task_server_user_id", SELF.all_users, with_empty=1, empty_title=LxERP.t8("Do not run the task server for this client"), title_key="login", default=SELF.client.task_server_user_id) %]
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
|
||
<div>
|
templates/webpages/admin/edit_user.html | ||
---|---|---|
[%- USE HTML %]
|
||
[%- USE L %][%- USE LxERP -%]
|
||
[%- USE L %][%- USE LxERP -%][%- USE JavaScript -%]
|
||
|
||
[%- INCLUDE 'common/flash.html' %]
|
||
|
||
... | ... | |
[% L.button_tag("submit_with_action('save_user')", LxERP.t8("Save")) %]
|
||
[% IF SELF.user.id %]
|
||
[% L.button_tag("save_as_new()", LxERP.t8("Save as new")) %]
|
||
[% L.button_tag("submit_with_action('delete_user')", LxERP.t8("Delete"), confirm=LxERP.t8("Are you sure?")) %]
|
||
[% L.button_tag("submit_delete()", LxERP.t8("Delete"), confirm=LxERP.t8("Are you sure?")) %]
|
||
[%- END %]
|
||
</p>
|
||
|
||
... | ... | |
$("#form").submit();
|
||
}
|
||
|
||
function submit_delete() {
|
||
[% SET used_for_task_server_in_clients = SELF.is_user_used_for_task_server(SELF.user) %]
|
||
[% IF used_for_task_server_in_clients %]
|
||
alert('[% LxERP.t8('The user cannot be deleted as it is used in the following clients: #1', used_for_task_server_in_clients) | js %]');
|
||
return false;
|
||
[% ELSE %]
|
||
submit_with_action('delete_user');
|
||
[% END %]
|
||
}
|
||
|
||
function save_as_new() {
|
||
$("#user_id").val("");
|
||
submit_with_action("save_user");
|
Auch abrufbar als: Unified diff
Task-Server: Mandantenfähigkeit