und erstmal ein dickes Lob von mir für dieses tolle Projekt. Da ich in mehreren Vereinen aktiv bin, habe ich lange nach einer Open-Source Lösung für eine Mitglieder-(Selbst-)Verwaltung gesucht, und alle mögliche Groupwares und ähnliche getestet, und ich muss zugeben dass Admidio die schlankeste und einfachste Lösung war, die meine Anforderungen entsprach. Einfach zu konfigurieren, zu bedienen, sehr übersichtlich, modular, so dass man alles nach dem Prinzip "What You See Is What You Need" gestalten kann.
Ich habe mir auch den Quellcode angeschaut, und das finde ich sehr übersichtlich, und einfach anpassbar. Mir fehlten allerdings folgendes :
- Eine Abstrahierung der Datenhaltungsschicht : So könnte man theoretisch das Datenbanktyp ändern, oder Benutzerdaten aus anderen Systemen holen, um Redundanzen zu vermeiden. Es wird teilweise durch die Klasse "TableAccess" gemacht, ich finde allerdings viele andere Klassen (unter "adm_program/system/classes/table_*" und sonst überall in den einzelnen Modulen), die direkt mit der Datenbank kommunizieren.
- Eine Trennung zwischen Präsentations- und Anwendungsschicht : Das wird schon durch die "Themes" gemacht. Die Datei "adm_program/system/message_text.php" wäre auch ein gutes Beispiel für die Trennung. Das ist allerdings schade dass die Datein "adm_program/system/message_text.php" und "adm_program/system/common.php" oder "adm_program/system/logout.php" im selben Verzeichnis sind, da sie eigentlich total verschiedene Aufgaben implementieren. Ein ganz schlechtes Beispiel ist die Datei "adm_program/modules/mail/mail.php" die gleichzeitig SQL-Anfragen, Anwendungslogik und HTML-Ausgaben beinhaltet...
- Man hat eben öfters den Bedarf, die Grafische-Oberfläche, Texte, Fehlermeldungen usw... anzupassen. (Wie ein Formular, eine Liste, ein Profil aussieht, lieber Popup-Fenster oder Thickboxes...). Und wenn man so viele Anpassungen in verschiedene Verzeichnisse und Dateien vornimmt, wird ein Upgrade in die nächste Version sehr erschwert.
- Durch eine Trennung könnte man die Software auch sehr einfach in eine andere Sprache übersetzen, und trotzdem upgraden können.
- Ein neues Modul für Todos : Ähnlich wie im Trac-Projekt sollten die Benutzer Aufgaben im Rahmen eines Projekts (Rolle) an andere Benutzer vergeben können, und danach kontrollieren. Eine Aufgabe hat also ein "Reporter" ein "Owner" und eine "Deadline" und bezieht sich auf eine Rolle. Der Benutzer hat ein Übersicht über die von ihm "owned", "reported" Aufgaben, und die von seinen Rollen. Deadlines könnten im Kalender ausgezeichnet werden. Wer Aufgaben für wen vergeben darf, sollte man bestimmen.
- Authentifizierung gegen LDAP : So könnte man die Zugangsdaten mit anderen Systemen (z.B. pop3/smtp, ftp, ssh, samba...) koordinieren.
- Verwaltung der Mitgliederbeiträge : Eine berechtigte Rolle kann melden, wenn ein Mitglied sein Beitrag bezahlt hat. Wenn eine bestimmte Deadline überschritten wird, werden die Mitglieder die noch nicht bezahlt haben in eine andere Rolle automatisch verschoben und benachrichtigt (ehemalige Mitglieder). Die berechtigte Rolle hat die Übersicht drüber, wer, wann und was gezahlt hat.
- Integration in anderen CMS wie typo3 oder Drupal.
- Schreibe und Leserechte trennen in Downloads, Fotogalerien, Ankündigungen und Termine.
- Zugriffsrechte an Rollen binden : für Fotogalerien (wie in Downloads) und für Termine und Ankündigungen (man kann dann bestimmen, für welche Rollen die Ankündigungen angezeigt werden, und wie für Listen und Emails, ob jederAnkündigungen/Termine für eine Rolle hinzufügen kann, oder nur Rollenmitglieder, oder niemand?)
- Zugriffsrechte fein-granular bearbeiten : Für Email, Listen, Termine, Ankündigung. Man hat (bzw. hätte für Termine und Ankündigung) ja nur die Auswahl zwischen {niemand, rollenmitglieder, alle} mit einer Ausnahme für "superuser". Besser wäre wenn man für jede Rolle bestimmt, an welche andere Rollen Emails schreiben darf, die Liste von welchen anderen Rollen anschauen darf, die Termine/Ankündigungen von welchen anderen Rollen bearbeiten kann. So hätten wir für jedes Modul eine Matrix von Zugriffsrechten. Und wenn man eine Rolle "A" anlegen möchte bestimmt man zum Beispiel :
- An welche andere Rollen darf die Rolle A schreiben : [_] A ; [_] B ; [_] C ; [_] D
- Von welchen anderen Rollen darf die Rolle A angeschrieben werden : [_] A ; [_] B ; [_] C ; [_] D
Gruß
Wassim