JWChat für Drupal

Kurzinfo
Lizenz: GNU General Public License
Aktuelle Version: 0.1 Beta
Lauffähig: ejabberd 2, Drupal 6
Kurzbeschreibung: Integriert den JWChat in Drupal und ermöglicht somit Instant Messaging auf der Plattform via Jabber.

JWChat in Drupal
JWChat in Drupal Zoom

» Demo des Moduls als Elgg Plugin ansehen

Allgemein

Hier beschreibe ich wie man die User seiner Drupal Installation via Jabber kommunizieren lässt. Das Frontend stellt eine teilweise modifizierte Version des JWChat da. Im Backend kommuniziert das Modul auf Datanbankebene mit dem Jabberserver und kümmert sich um korrekte Buddylisten und Registrierungen.

Bitte Beachten

  • Es handelt sich um eine Beta Version. Ich würde mich jedoch freuen, wenn ich möglichst viel Feedback bekomme damit sich das ändert.
  • Derzeit läuft das PlugIn nur mit ejabberd 2. Unterstützung für weitere Jabberserver ist geplant oder auch dem geneigtem Entwickler überlassen. Siehe hierzu das engines Unterverzeichnis.
  • Die Browserunterstützung vom JWChat sollte mit der des PlugIns identisch sein.
  • Das PlugIn braucht Zugriff auf die vom Jabberserver verwendete Datenbank.
  • Auch Gruppenchats (muc) sind möglich. Dazu müssen jedoch noch derzeit die Admins hardcodiert in die ejabberd Konfigurationsdatei eingetragen werden.

Beispielinstallation

  • ejabberd mit MySQL Unterstützung aufsetzen. Welche Schritte dazu notwendig sind erfährt man am Besten hier. Die zusätzlichen Module mod_last, mod_offline, mod_roster und mod_vcard sollten auch auf ihre odbc Varianten umgestellt werden (wie zum Schluss beschrieben). Wenn Drupal ein anderes DBMS nutzt muss auch der Jabber Server dieses DBMS benutzen, da Drupal die Verwendung zweier verschiedene DBMS gleichzeitig nicht unterstützt. Tipp: Debian packages für Erlang MySQL support gibt es hier.
  • Stelle sicher, dass HTTP-Polling oder HTTP-Binding im ejabberd aktiviert ist. Hier hilft Google oder die Doku vom ejabberd weiter.
  • Webserver konfigurieren. Dazu ein Zitat aus der README vom JWChat.
    • Setup your web server so that it redirects some local address like http://jabber.example.com/http-poll/ to some service that either implements HTTP Polling or HTTP Binding.

      Here is an example that should work with a default ejabberd installation on the same host:


      <VirtualHost *>
      ServerName jabber.example.com
      # (...)
      AddDefaultCharset UTF-8
      RewriteEngine on
      RewriteRule http-poll/ http://127.0.0.1:5280/http-poll/ [P]
      </VirtualHost>

      (...)

      Note 1: You need to enable mod_rewrite and mod_proxy at your apache configuration. Apache2 users also need to enable the protocol specific proxy module mod_proxy_http.

      Note 2: With JabberHTTPBind you don't need to do this sort of address rewriting if you're serving JWChat's files from within your servlet container directly or you're using some technique like mod_jk to mount a remote servlet engine directory transparently into your apache's domain of served addresses.

    • Restart your web server.

    • Test if this redirect works. Following the example above point your browser to http://jabber.example.com/http-poll/. You should see the same response as if you you're pointing it to http://jabber.example.com:5280/http-poll/.

    Ich wurde mit dieser Konfiguration nicht glücklich, bei mir erweisen jedoch folgende Zeilen ihre Dienste.

    <VirtualHost *>
    ProxyPass /http-bind/ http://127.0.0.1:5280/http-bind/
    ProxyPassReverse /http-bind/ http://127.0.0.1:5280/http-bind/
    # und sehr viel mehr zeugs..
    (...)
    </VirtualHost>

    Wobei 127.0.0.1 mit der Serveradresse des ejabberd ersetzt werden muss.

  • Nun kommt das Modul ins Spiel. Downloaden, entpacken und den Ordner jabber in das Modul Verzeichnis kopieren.
  • Die Datenbankverbindung zum Jabber Server in die settings.php (sollte in sites/default liegen) eintragen. Wenn zum Beispiel die settings.php aktuell so aussieht:


    $db_url = 'mysql://username:password@localhost/databasename';

    so muss dies abgeändert werden in


    $db_url['default'] = 'mysql://username:password@localhost/databasename';
    $db_url['jabber'] = 'mysql://jabberuser:jabberpass@jabber.example.com/jabberdb';

  • Modul aktivieren (Administer > Site building > Modules).
  • Berechtigungen eintragen (Administer > User management > Access control). Dazu muss hier das Recht access jabber vergeben werden.
  • Serverparameter eintragen (Administer > Site configuration > Jabber server parameters). Meine Testkonfiguration sieht beispielsweise so aus. Beachte, dass es im Allgemeinen nicht gut gehen wird den Jabber Server unter localhost laufen zu lassen, da sich dann die User nicht zu ihm verbinden können.
  • Wenn alles läuft sollte das Modul mod_register aus dem ejabberd entfernt werden, damit das Ändern von Passwörtern und Registrierungen über den Jabberserver nicht mehr möglich sind.
  • Thats it! Auf dem Weg bis hierher kann sicher einiges schiefgehen, auch ich hatte einige Probleme bis ich den ejabberd dazu hatte zu tun was ich will. Bei Problemen Mail oder Kommentar, damit alle was von haben :)

Download