Nachrichtensystem

Dieser Bereich dient dazu, eure Tricks und Erweiterungen vorzustellen, damit diese auch andere Anwender nutzen können. // This area can be used to publish your tricks and extensions to the APF to be used by other developers.
Coach83
Beiträge: 271
Registriert: 13.05.2010, 17:33:12
Kontaktdaten:

Nachrichtensystem

Beitrag von Coach83 » 22.02.2011, 08:16:40

Guten Morgen,

ich möchte diese Woche mal versuchen ein Nachrichtensystem in meine Anwendung zu integrieren. Ich erinnere mich an die Anwendung von Screeze, die aber nicht alle Anforderungen erfüllen wird (so denke ich jedenfalls). Ich möchte folgende Dinge einbauen:

Code: Alles auswählen

- Nachrichten an einzelne Benutzer und an definierte Benutergruppen
- Benutzer können eigenen Ordner für Nachrichten anlegen
- Nachrichten im Standard-Ordner "Posteingang" werden nach 30 Tagen per CronJob gelöscht
- Das von Screeze genannte Channel-System hört sich gut an - alle zusammengehörenden Nachrichten sollen auch so angezeigt werden
- Caching
- Form-Validierung
- AJAX-Support (JQuery)
Was haltet ihr davon?
Gibt es mögliche Ergänzungen? Ich würde das System gerne "voll" ausbauen - um nachher in meinen Anwendungen nur noch Dinge zu deaktivieren, die nicht benötigt werden.

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Nachrichtensystem

Beitrag von Screeze » 22.02.2011, 09:22:23

hi, ich hab gestern auch beschlossen, nochmal ein neues pn system zu schreiben. Angelehnt wird es an das alte, aber im aufbau soll sich einiges ändern. Zusätzlich sollen die channels jetzt mehrnutzersupport bieten.
Das soll so funktionieren, dass jeder empfänger auf den channel zugriff hat und auch antworten der anderen sieht. Es sollen neue leute hinzugefügt werden können, und auch channel kopiert und weitergeleitet werden können.
Ein system dieser art habe ich noch nirgends gesehen, aber ich denke dass das ziemlich praktisch wäre. Ich hatte vor das als extension zu bauen, wenn dr.e einverstanden ist.

Wenn ich noch mehrordnersupport mit aufnehme, würde das deinen anwendungsfall abdecken?
Allerdings wollte ich keine gui mitliefern, da ich momentan nur eine ajax anwendung habe, aber ich werde das system so schreiben dass eine gui recht schnell aufgebaut wäre.

Auf caching wollte ich vorerst verzichten, da ich gemerkt habe dass der effektive nutzen an der stelle weniger wäre als der aufwand dafür.

Coach83
Beiträge: 271
Registriert: 13.05.2010, 17:33:12
Kontaktdaten:

Re: Nachrichtensystem

Beitrag von Coach83 » 22.02.2011, 09:27:29

Hört sich super an - dann lasse ich Dir natürlich den Vortritt :lol:

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Nachrichtensystem

Beitrag von Screeze » 22.02.2011, 10:53:17

wir können uns auch gemeinsam den aufbau mal überlegen, damit deine anforderungen auch abgedeckt werden. Ich meld mich heute nachmittag mal bei dir wenn du in icq bist.

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Nachrichtensystem

Beitrag von Screeze » 22.02.2011, 15:30:18

Folgendermaßen würde ich die Datenbank vorschlagen (siehe Anhang)

Erklärung:
PostboxFolder entspricht deinen Ordnern

Wo ich mir aber noch nicht ganz sicher bin:
Momentan verknüpfe ich jede neue Nachricht mit allen Empfängern als "User2UnreadMessage". Hat den Vorteil dass man in der GUI im eingang direkt zu der Nachricht springen kann, welche die 1. neue ist (wie in einem Forum teilweise). Einfacher wäre natürlich das nur Channelabhängig zu machen: "User2UnreadChannel", wären dann pro channel nurnoch 1 beziehung, auch wenn da 20 neue nachrichten drin auftauchen. Schränkt dann aber eben oben genannte Möglichkeiten ein.

Die Assoziation User2MessageChannel könnte man sich zwar evtl. auch sparen, dann muss man aber jedesmal über die Postboxen gehen, ich denke deshalb macht die assoc hier schon sinn (performance?)
Dateianhänge
PrivateMessages.png
DB-schema Postbox v2
PrivateMessages.png (15.71 KiB) 2025 mal betrachtet

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Nachrichtensystem

Beitrag von Screeze » 22.02.2011, 20:07:19

Hab das UML nochmal angepasst, hatte den Name bei PostboxFolder vergessen.

Bin bereits an einer Implementierung, basierend auf dem den GORM Funktionen welche in 1.14 offiziell dabei sein werden (momentan im 1.13-gorm branch zu finden).

Meine Struktur momentan:

Code: Alles auswählen

/extension/postbox
---/biz
-------/abstractdomainobjects -> Hier befinden sich Klassen welche für die ServiceObjects als basis-klassen definiert werden. Diese enthalten die wichtigsten Funktionen der Erweiterung. Dass die Vom GORM erzeugte Basisklasse dann auf diesen Aufbaut ist nicht ganz sauber denke ich, aber die einzige Möglichkeit sicherzustellen, dass man bei Updates nicht immer selbst Hand anlegen muss, wenn man etwas anpasst, was v.a. für die GUI wichtig sein wird.
-------Postbox.php -> Die zentrale Klasse der extension, von dieser aus lässt sich alles regeln.
-------PostboxFactory.php -> die Factory für die Postbox

---/data -> enthält die 3 dateien für den GORM, deren Inhalt muss in die bereits bestehenden GORM dateien kopiert werden
---/config -> enthält config dateien (bisher nur sql statements) die in den korrekten config ordner kopiert werden müssen.
Der Aufbau der Objekte wäre dann wie folgt, am Beispiel von MessageChannel:

MessageChannel----erbt von----->baseMessageChannel----erbt von----->AbstractMessageChannel---erbt von----->GenericDomainObject

MessageChannel: Hier können die eigenen Anpassungen vorgenommen werden.
baseMessageChannel: Die vom GORM erzeugte basisklasse mit gettern und settern für die Attribute etc. (darf nicht bearbeitet werden)
AbstractMessageChannel: Stellt die standartfunktionalität bereit (anpassungen hier nicht erlaubt, aber überschreiben in MessageChannel ermöglichen änderungen)


Mit der GUI habe ich mir das dann wie folgt überlegt:
In MessageChannel (beispielsweise) kann man selbst eine Funktion "->render()" schreiben, welche die Templates läd etc. oder einfach eine AJAX-Konforme Antwort ausgibt.
Alternativ kann man auch in eigenen Templates die Postbox-API verwenden, um die Daten zu laden.

Ich denke das ist die beste Möglichkeit das Modul für jegliche Anwendung flexibel genug zu schreiben.

Ich werde das mal fertig machen und mich dann die nächsten Tage mit einem kleinen Paket melden.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Nachrichtensystem

Beitrag von dr.e. » 22.02.2011, 22:52:00

Klingt vernünftig, ich bin gespannt.
Viele Grüße,
Christian

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Nachrichtensystem

Beitrag von Screeze » 25.02.2011, 13:38:11

Ich möchte eine Änderung machen:

Damit Auch Nachrichten noch angezeigt werden können, deren Benutzer nichtmehr existieren, soll ein Fallback von dessen Name in der Nachricht enthalten sein, der benutzt wird wenn der User nichtmehr gefunden wird (Fallback).

Demnach sieht das UML nun aus wie folgt:
Dateianhänge
PrivateMessages.png
Db schema Postbox v3
PrivateMessages.png (16.92 KiB) 2012 mal betrachtet

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Nachrichtensystem

Beitrag von Screeze » 25.02.2011, 16:32:01

Bei der Implementierung fällt mir grad ein absoluter Fail in dem Schema auf, welcher die Performance in den Keller drücken würde:

Bei der Ausgabe einer Channelliste muss man zu jedem channel wissen ob darin eine ungelesene nachricht ist.
Gehen wir von 30 Channels pro seite aus die angezeigt werden, müssen 30 anfragen an die db geschickt werden, die sich jeweils vom channel über alle darin enthaltenen nachrichten zu der beziehung zum user durchhangeln müssten - FAIL!!

Ich werde deshalb ZUSÄTZLICH die Beziehung User2UnreadChannel einführen, ist zwar etwas mehr Aufwand beim Schreiben, aber gelesen werden die Daten deutlich öfter.

Ich würde auch fast dazu tendieren ein Author2MessageChannel einzuführen, wegen des selben effekts... (abrufen des usernamen) Was meint ihr?
Dateianhänge
PrivateMessages.png
DB schema Postbox v4
PrivateMessages.png (18.65 KiB) 2006 mal betrachtet

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Nachrichtensystem

Beitrag von Screeze » 25.02.2011, 20:13:30

Ich hätte eine kleine Bitte für jemanden der etwas Zeit hat und mir etwas helfen möchte.

Ich bräuchte eine kleine Testumgebung in der ich das Nachrichtenmodul testen und fertigstellen kann. Allgemein wäre so ein Modul manchmal hilfreich. Kann da jemand mal eins aufsetzen, ich hab momentan nicht die Zeit dafür.

Benötigt wird eine simple Seite auf der ein Login (und eine registration!) ist, nach dem einloggen soll man auf ein leeres template kommen (dort werde ich dann das Nachrichtenmodul einsetzen).
Am besten wäre wenn ihr die Datenbank mit aufsetzt und als .sql export mit ins paket legt.

Mag das mal jemand übernehmen?
Wäre nett, dann kommen wir hier schneller voran.

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: Nachrichtensystem

Beitrag von dave » 25.02.2011, 20:41:53

Wenn das keiner auf die Schnelle fertig und liegen hat, kann ich das am Ende des Wochenendes liefern.

Arbeite für mein Projekt gerade an der Registrierung, kann dir das dann soweit abgespeckt zum Testen zur Verfügung stellen.

Sollte jemand jedoch etwas schon fertig in der Pipe haben, wäre das natürlich die schnellere Lösung ;).

Coach83
Beiträge: 271
Registriert: 13.05.2010, 17:33:12
Kontaktdaten:

Re: Nachrichtensystem

Beitrag von Coach83 » 26.02.2011, 23:55:14

Hallo!ist das noch aktuell?Hab ab Montag Zeit dafür- vorher bin ich nem Freund bei der Diplomarbeit helfen (als Abtipper und Formatierer - kein Plagiat ;-))...

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Nachrichtensystem

Beitrag von Screeze » 27.02.2011, 00:06:42

wenn dave dass vorher schafft wär natürlich super, ansonsten sprecht euch ab ;)

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: Nachrichtensystem

Beitrag von dave » 27.02.2011, 07:13:49

Moin Moin :)

wenn das bei mir soweit mit dem Captcha geklärt ist, kann ich alles zusammen packen und dann ist das fertig.

Bin aber im Moment auf Arbeit, kann also nicht daran arbeiten, nur schonmal hier im Forum lesen und das heute Abend dann umsetzen ;).

Ich denke, das Design ist weniger wichtig, oder?

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Nachrichtensystem

Beitrag von Screeze » 27.02.2011, 10:31:48

design is egal, kann ne weise seite mit inputfeldern sein, braucht auch kein captcha, kommt ja nicht online.

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast