Inhaltsverzeichnis

Horde3 - SyncML

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.

SyncML ist ein Zusatzpaket von Horde, welches einen Server emuliert, welcher als Synchronisationsserver für z.B. PoketPC, SmartPhones usw. dienen kann.

:!: WICHTIG - Die Verwendung setzte einen Funambol-Client voraus !!!

Installation

Nachfolgende Befehle installieren alle benötigten PHP Extension and Application Repository's (PEAR)-Module, aus denen SyncML prinzipiell besteht:

# pear channel-discover pear.horde.org; pear install --force horde/SyncML horde/XML_WBXML
...
# pear install --force horde/iCalendar
...

Nachfolgend muss eine Datei im z.B. Verzeichnis /tmp mit nachfolgendem Inhalt angelegt werden, was mit dem Befehl z.B. vim durchgeführt werden kann - der Name ist hier z.B.

CREATE DATABASE syncml;
 
USE syncml;
 
CREATE TABLE syncml_data(
    syncml_id            VARCHAR(255),
    syncml_db            VARCHAR(255),
    syncml_uid           VARCHAR(255),
    syncml_data          TEXT,
    syncml_contenttype   VARCHAR(255),
    syncml_created_ts    INTEGER,
    syncml_modified_ts   INTEGER
);
 
CREATE TABLE syncml_map(
    syncml_syncpartner VARCHAR(255),
    syncml_db          VARCHAR(255),
    syncml_uid         VARCHAR(255),
    syncml_cuid        VARCHAR(255),
    syncml_suid        VARCHAR(255),
    syncml_timestamp   INTEGER
);
 
CREATE INDEX syncml_syncpartner_idx ON syncml_map (syncml_syncpartner);
CREATE INDEX syncml_db_idx ON syncml_map (syncml_db);
CREATE INDEX syncml_uid_idx ON syncml_map (syncml_uid);
CREATE INDEX syncml_cuid_idx ON syncml_map (syncml_cuid);
CREATE INDEX syncml_suid_idx ON syncml_map (syncml_suid);
 
CREATE TABLE syncml_anchors(
    syncml_syncpartner   VARCHAR(255),
    syncml_db            VARCHAR(255),
    syncml_uid           VARCHAR(255),
    syncml_clientanchor  VARCHAR(255),
    syncml_serveranchor  VARCHAR(255)
);
 
CREATE TABLE syncml_suidlist(
    syncml_syncpartner    VARCHAR(255),
    syncml_db             VARCHAR(255),
    syncml_uid            VARCHAR(255),
    syncml_suid           VARCHAR(255)
);
 
CREATE TABLE syncml_uids(
    syncml_uid      VARCHAR(255),
    syncml_password VARCHAR(255)
);

Anschließend werden mit nachfolgendem Befehl alle relevanten Komponenten in der Datenbank - hier MySQL angelegt:

# mysql -h localhost -u root -p horde < /tmp/syncml.sql
Enter password: 

Konfiguration

HINWEIS - Die Original-Installationsanleitung kann unter folgendem Link gefunden werden:

Hier wie wesentliche Schritte in komprimierter Form.

Folgende Verzeichnisse müssen als erstes angelegt werden, was mit nachfolgenden Befehlen durchgeführt werden kann:

# mkdir /usr/share/horde/syncconf
# mkdir /usr/share/horde/syncconf/config
# mkdir /usr/share/horde/syncconf/lib

Als erstes muss eine Datei in folgendem Verzeichnis

mit folgendem Namen

mit nachfolgendem Inhalt, z.B. mit dem Editor vi erstellt werden:

<?php
 
$_services['import'] = array(
 'args' => array('content' => 'string', 'contentType' => 'string', 'source' => 'string'),
 'type' => 'string',
);
 
$_services['listBy'] = array(
 'type' => '{urn:horde}stringArray'
);
 
$_services['list'] = array(
 'type' => '{urn:horde}stringArray'
);
 
function _syncconf_import($content, $contentType = 'array', $import_source = null)
{
  $result="";
  return $result;
}
 
function _syncconf_listBy()
{
  $ar=array();
  return $ar;
}
 
function _syncconf_list()
{
  $ar=array();
  return $ar;
}

:!: HINWEIS - Es darf kein schließendes ?> am Ende der Datei vorkommen !!!

Als nächstes muss eine Datei in folgendem Verzeichnis

mit folgendem Namen

mit nachfolgendem Inhalt, z.B. mit dem Editor vi erstellt werden:

<?php
  $conf['syncconf']['Funambol'] = true;

:!: HINWEIS - Es darf kein schließendes ?> am Ende der Datei vorkommen !!!

Zusätzlich muss die Konfigurationsdatei

am nachfolgenden Eintrag ergänzt werden (nur relevanter Ausschnitt):

...
$this->applications['syncconf'] = array(
 'fileroot' => dirname(__FILE__) . '/../syncconf', 
 'name' => 'Funambol Configuration',
 'status' => 'hidden',
 'provides' => array('configuration/listBy','configuration/list','configuration/import')
);
...

Die Konfigurationsdatei

muss ebenfalls an gezeigter Stelle wie folgt ergänzt werden (nur relevanter Ausschnitt):

...
    function isValidDatabaseURI($databaseURI)
    {
        $database = $this->_normalize($databaseURI);
 
        switch($database) {
        case 'tasks':
        case 'calendar':
        case 'notes':
        case 'contacts':
        case 'configuration':
            return true;
 
        default:
            $this->logMessage('Invalid database "' . $database
                              . '". Try tasks, calendar, notes or contacts.',
                              __FILE__, __LINE__, PEAR_LOG_ERR);
            return false;
        }
    }
 
...

Die Ergänzung lautet hier

        // Tachtler
        case 'configuration':

Die Konfigurationsdatei

muss ebenfalls an gezeigter Stelle wie folgt ergänzt werden (nur relevanter Ausschnitt):

...
    function isValidDatabaseURI($databaseURI)
    {
        $database = $this->_normalize($databaseURI);
 
        switch($database) {
        case 'tasks':
        case 'calendar':
        case 'notes':
        case 'contacts':
        case 'configuration':
        case 'events':
        case 'memo':
            return true;
 
        default:
            $this->logMessage('Invalid database "' . $database
                              . '". Try tasks, calendar, notes or contacts.',
                              __FILE__, __LINE__, PEAR_LOG_ERR);
            return false;
        }
    }
 
...

Die Ergänzung lautet hier ebenfalls

        // Tachtler
        case 'configuration':

:!: HINWEIS - Damit sollte der Kontakt via SyncML hergestellt werden können !!!