Inhaltsverzeichnis

Horde4 - Turba

Horde Groupware ist eine freie, für den professionellen Einsatz, Browser basierte Kommunikationsanwendung. Benutzer können e-Mails lesen, versenden und verwalten. Es können gemeinsam genutzte Kalender, Kontakte, Aufgaben und Notizen mit Standard Komponenten des Horde-Projekts realisiert werden.

Turba ist der Horde-Kontaktmanager (Adressbuch).

:!: HINWEIS - Die Original Installationsanleitung des Horde-Projekts ist unter nachfolgendem externen Link zu finden:

Ab hier werden root-Rechte zur Ausführung der nachfolgenden Befehle benötigt. Um root zu werden geben Sie bitte folgenden Befehl ein:

$ su -
Password: 

Installation

:!: WICHTIG - Eine Installation der Anwendung Horde4 - Turba kann nur mir einem funktionierenden Horde-Framework in der Version 4 durchgeführt werden.

:!: HINWEIS - Die Durchführung einer Installation des Horde-Framework in der Version 4 kann unter nachfolgenden internen Link, innerhalb dieses Dokiwikis nachgelesen werden:

Die Installation des Horde4 - Turba, und allen Abhängigkeiten, die automatisch von PEAR aufgelöst werden sollten, kann mit nachfolgendem Befehl durchgeführt werden.

Es sollen hier alle, auch optionalen Abhängigkeiten installiert werden, jedoch ohne die binären PECL-Pakete, welche kompiliert werden müssten. Dazu sind die Optionen -a und -B notwendig. Die Option -f ist der Befehl für force und führt die notwendigen Installationen auf jeden Fall durch.

:!: HIWNEIS - Dieser Vorgang kann einige Minuten in Anspruch nehmen und ggf. länger andauern!

# pear install -a -B -f horde/turba
downloading turba-3.0.11.tgz ...
Starting to download turba-3.0.11.tgz (2,074,676 bytes)
......done: 2,074,676 bytes
install ok: channel://pear.horde.org/turba-3.0.11

Konfiguration: Allgemein

Als erstes gilt es die Konfigurationsdateien im Verzeichnis /var/www/horde4/turba/config, welche die Endung *.dist haben zu kopieren und umzubenennen, was mit nachfolgendem Befehlen durchgeführt werden kann:

# cd /var/www/horde4/turba/config
# for f in *.dist; do cp -a $f `basename $f .dist`; done

Zuletzt sollte noch eine leere Sicherungsdatei der Konfigurationsdatei

angelegt werden, was mit nachfolgendem Befehl erledigt werden kann:

# touch /var/www/horde4/turba/config/conf.bak.php

Danach müssen die Besitz- und Dateirechte für das Verzeichnis

mit nachfolgendem Befehl so angepasst werden, das der Benutzer unter dem der Apache HTTP Webserver entsprechende Rechte hat. Zunächst die Besitzrechte:

# chown -R root:apache /var/www/horde4/turba/config

und die Dateirechte

# chmod -R g+w /var/www/horde4/turba/config

Konfiguration: Turba

Schritt 1

Es sollte ein Aufruf von Horde über die URL

durchgeführt werden, welcher nachfolgenden Bildschirm zeigen sollte (verkleinerte Darstellung):

Horde4 - Turba - Erster Aufruf

Schritt 2

Ausführen eines Klicks mit der [linken Maus]-Taste auf den im linken Bereich dargestellten

und anschließend auf den

so dass nachfolgende Darstellung im Browser erscheinen sollte:

Horde4 - Turba - Administration - Konfiguration - DB-Scheam aktualisieren

Schritt 3

Um die benötigten Datenbank-Tabellen anzulegen, kann nun ein Klick mit der [linken Maus]-Taste auf die

dies durchführen.

Horde4 - Turba - Administration - Konfiguration - DB-Schema aktualisieren - Fertig

Schritt 4

Anschließend sollte nun ein Klick mit der [linken Maus]-Taste auf den im Hauptfenster befindlichen, als Link verfügbaren

ausgeführt werden, worauf alle verfügbaren Konfigurationspunkte der Anwendung Horde - Turba sichtbar werden.

:!: HINWEIS - Bitte führen Sie die für Ihre Installation passenden Änderungen durch!

:!: HINWEIS - Eine lauffähige Konfiguration von Horde - Turba kann auch ohne Veränderungen der Konfiguration (Standardvorgaben) durch einen Klick mit der [linken Maus]-Taste auf die

erstellt werden!

Abschließend sollte nachfolgend dargestellter Bildschirm erscheinen:

Horde4 - Turba - Administration - Konfiguration - Abschluss

Konfiguration: Backend

Damit Horde - Turba die Verwaltung von Adressdaten übernehmen kann, ist es zusätzlich erforderlich das sogenannte „Backend“, hier z.B. einen MySQL Server zu definieren.

:!: WICHTIG - Ohne definiertes „Backend“ ist die Funktionalität von Horde - Turba NICHT gegeben !!!

Die Konfiguration eines „Backend“ erfolgt NICHT über die Web-Anwendung, sondern ist in nachfolgend genannter Konfigurationsdatei hinterlegt:

Von dieser Konfigurationsdatei kann mit nachfolgendem Befehl eine Kopie angefertigt werden, in der dann die tatsächliche Konfiguration statt finden kann:

# cp -a /var/www/horde4/turba/config/backends.php /var/www/horde4/turba/config/backends.local.php

Nachfolgend dargestelltes Beispiel ist für eine Anbindung eines MySQL Server an Horde - Turba:

/* Tachtler configurations: */
 
$cfgSources['localsql'] = array(
    // ENABLED by default
    'disabled' => false,
    // Tachtler
    // default: 'title' => _("Shared Address Books"),
    'title' => _("Gemeinsames Adressbuch"),
    'type' => 'sql',
    'params' => array(
        // The default connection details are pulled from the Horde-wide SQL
        // connection configuration.
        // To use another DB connection, you must provide configuration
        // information here - for example,
        //'sql' => array(
        //    'persistent' => false,
        //    'username' => 'horde',
        //    'password' => 'secret',
        //    'socket' => '/var/run/mysqld/mysqld.sock',
        //    'protocol' => 'unix',
        //    'database' => 'horde',
        //    'charset' => 'utf-8',
        //    'ssl' => false,
        //    'splitread' => false,
        //    'phptype' => 'mysql'
        //),
        'table' => 'turba_objects'
    ),
    'map' => array(
        '__key' => 'object_id',
        '__owner' => 'owner_id',
        '__type' => 'object_type',
        '__members' => 'object_members',
        '__uid' => 'object_uid',
        'firstname' => 'object_firstname',
        'lastname' => 'object_lastname',
        'middlenames' => 'object_middlenames',
        'namePrefix' => 'object_nameprefix',
        'nameSuffix' => 'object_namesuffix',
        'name' => array('fields' => array('namePrefix', 'firstname',
                                          'middlenames', 'lastname',
                                          'nameSuffix'),
                        'format' => '%s %s %s %s %s',
                        'parse' => array(
                            array('fields' => array('firstname', 'middlenames',
                                                    'lastname'),
                                  'format' => '%s %s %s'),
                            array('fields' => array('firstname', 'lastname'),
                                  'format' => '%s %s'))),
        // This is a shorter version of a "name" composite field which only
        // consists of the first name and last name.
        // 'name' => array('fields' => array('firstname', 'lastname'),
        //                 'format' => '%s %s'),
        'alias' => 'object_alias',
        'birthday' => 'object_bday',
        'anniversary' => 'object_anniversary',
        'spouse' => 'object_spouse',
        'photo' => 'object_photo',
        'phototype' => 'object_phototype',
        'homeStreet' => 'object_homestreet',
        'homePOBox' => 'object_homepob',
        'homeCity' => 'object_homecity',
        'homeProvince' => 'object_homeprovince',
        'homePostalCode' => 'object_homepostalcode',
        'homeCountry' => 'object_homecountry',
        'homeAddress' => array('fields' => array('homeStreet', 'homeCity',
                                                 'homeProvince',
                                                 'homePostalCode'),
                               'format' => "%s \n %s, %s  %s"),
        'workStreet' => 'object_workstreet',
        'workPOBox' => 'object_workpob',
        'workCity' => 'object_workcity',
        'workProvince' => 'object_workprovince',
        'workPostalCode' => 'object_workpostalcode',
        'workCountry' => 'object_workcountry',
        'workAddress' => array('fields' => array('workStreet', 'workCity',
                                                 'workProvince',
                                                 'workPostalCode'),
                               'format' => "%s \n %s, %s  %s"),
        'department' => 'object_department',
        'timezone' => 'object_tz',
        'email' => 'object_email',
        'homePhone' => 'object_homephone',
        'homeFax' => 'object_homefax',
        'workPhone' => 'object_workphone',
        'cellPhone' => 'object_cellphone',
        'assistPhone' => 'object_assistantphone',
        'fax' => 'object_fax',
        'pager' => 'object_pager',
        'title' => 'object_title',
        'role' => 'object_role',
        'company' => 'object_company',
        'logo' => 'object_logo',
        'logotype' => 'object_logotype',
        'category' => 'object_category',
        'notes' => 'object_notes',
        'website' => 'object_url',
        'freebusyUrl' => 'object_freebusyurl',
        'pgpPublicKey' => 'object_pgppublickey',
        'smimePublicKey' => 'object_smimepublickey',
        'imaddress' => 'object_imaddress',
        'imaddress2' => 'object_imaddress2',
        'imaddress3' => 'object_imaddress3'
    ),
    'tabs' => array(
        _("Personal") => array('firstname', 'lastname', 'middlenames',
                               'namePrefix', 'nameSuffix', 'name', 'alias',
                               'birthday', 'spouse', 'anniversary', 'photo'),
        _("Location") => array('homeStreet', 'homePOBox', 'homeCity',
                               'homeProvince', 'homePostalCode', 'homeCountry',
                               'homeAddress', 'workStreet', 'workPOBox',
                               'workCity', 'workProvince', 'workPostalCode',
                               'workCountry', 'workAddress', 'timezone'),
        _("Communications") => array('email', 'homePhone', 'workPhone',
                                     'assistPhone', 'homeFax',
                                     'cellPhone', 'fax', 'pager', 'imaddress',
                                     'imaddress2', 'imaddress3'),
        _("Organization") => array('title', 'role', 'company', 'department', 'logo'),
        _("Other") => array('category', 'notes', 'website', 'freebusyUrl',
                            'pgpPublicKey', 'smimePublicKey'),
    ),
    'search' => array(
        'name',
        'email'
    ),
    'strict' => array(
        'object_id',
        'owner_id',
        'object_type',
    ),
    'export' => true,
    'browse' => true,
    'use_shares' => true,
    'list_name_field' => 'lastname',
    'alternative_name' => 'company',
);