maelzerdata TOMMPS

Das multi-user, multi-Instanz Framework
schnelle Entwicklung, einfache Implementierung - gerüstet für jeden Anwendungsfall

TOMMPS

modulares PHP-Framework


Warum Tommps?

Im Jahre 2012 bin ich beauftragt worden für ein bestehendes Webprojekt eine umfassende und skalierbare Benutzer- und Rechteverwaltung nach zu implementieren. Das System besaß zwar schon eine zentrale Benutzerverwaltung, jedoch ließ das System nur Administratoren und Standardbenutzer (mit gleichen Rechten) zu. Benötigt wurde jedoch eine je nach Kundenwunsch anpassbare Oberfläche.

Nachdem nun die Basisfunktionen des Programms komplett neu implementiert wurden, stand nun ein vollständig skalierbares System aus

Benutzerverwaltung
Entrypoint- und Rollenverwaltung
Triggermanagement
Systemparameter
Schnittstellen-Bibliothek

Nach Abnahme des Projekts zeigte sich, dass die Komplexität des neuen Rechtesystems nicht schlanker hätte umgesetzt werden dürfen. Die Anforderungen der Firmen an die Rechte der einzelnen Anwender reichte vom Azubi (geringste Rechte) bis hin zum Superuser je Standort. Das Rechtesystem ließ dies zu und blieb trotzdem administrierbar und performant.

Ein weiterer Auftrag führte dann letztendlich zur Implementierung von Tommps. in einer Agentur wurden mehrere Webprojekte betrieben. Das waren zum einen Shopsysteme, CMS-Systeme und administrative Systeme wie Datenbankbackups und ähnliches.+ Es stellte sich die Frage, wie man die Anweisungen zusammenführen könnte, um z.B.:

Single Sign On
Datawarehouse
Testsysteme

zu implementieren.

Was kann Tommps?

Tommps ist ein modular aufgebautes Web-Framework mit einer umfassenden Klassenbibliothek. Tommps stellt ein administratives Backend zur Verfügung, welches die Basisfunktionen für jedes nur erdenkliche mehrbenutzer- und mehrmandantenfähigen Websystems beinhaltet.

Tommps stellt also das Rahmenwerk für Ihre Entwicklung bereit. Sie implementieren nur noch die Logik für Ihr Projekt. Sie beschränken sich also nur auf das Wesentliche und kümmern sich nicht Backups, Benutzer- oder Rechteverwaltung oder ähnliches. Ihnen stehen damit alle gängigen Webtechnologien wie z.B.: JSON, Ajax, SOAP oder ähnliches zur Verfügung.

Die Art der Programmierung ist Ihnen auch weitestgehend freigestellt. Sie wollen klassich objektorientiert programmieren oder doch lieber nach MVC-Pattern. Kein Problem, Ihre Entscheidung.

Durch den modularen Aufbau werden alle Ihre Programmfunktionen (CSS, JS, PHP-Modulklassen) erst zur Laufzeit Ihres Moduls geladen. Seiteneffekte auf andere Module sind dadurch weitestgehend ausgeschlossen.

Folgende Funktionalitäten stellt Ihnen Tommps zur Verfügung:

Administratives Front- bzw. Backend mit Benutzeranmeldung
Systemmodul für Benutzerverwaltung
... Rollen- und Rechtemanagement
... Backup & beliebig viele Produktiv- odet Testinstanzen
Personen- und Adressverwaltung
Debugger
Benutzerspezifisch überladbare Systemparameter
implementierte Standardbibliotheken (mPDF, Xajax, JQuery-UI, Bootstrap u.a.)
Multidatabase Unterstützung durch java JDBC-JSON Bridge (unabhängig von Ihrer PHP-Konfiguration)

Durch die über Jahre gewachsene und ständig weiter entwickelte Klassenbibliothek ist der Umgang mit

Mailing (IMAP, SMTP, POP3)
Verschlüsselung (Blowfish, MD5(+/+ Salt)
Datenbankhandling (MySQL, SQLite, JDBC-JSON)
Dateioperationen
Datumsfunktionen
Bildmanipulation
SOAP & REST
HL7
CURL-Funktionen

kein Problem mehr.

Wie funktioniert Tommps?

Jedem Modul liegt von Hause aus

eine Dialogdatei
eine Klassendatei
eine Stylesheet-Datei
eine Javascript-Datei
eine Xajax-Datei

anbei. Der Zugriff auf das Modul wird mit einem Entrypoint geschützt. Dieser ist von Hause aus nur dem Superuser zugeordnet. Sie entscheiden im Systemmodul wer diesen Entrypoint erhält und setuern so den Zugriff auf Ihr Programm. Sie können nun beliebig viele Dialoge (dialogue.NAME.php) anlegen. In der Modulsteuerung können Sie nun einen Aufrufnamen vergeben und die Dialogdatei zuordnen. Z.B: Dashboard lädt die Datei dialogue.dashboard.php.

Innerhalb Ihrer Dialoge können Sie nun programmieren wie oder was Sie wollen. Sie können immer auf Basisfunktionen zugreifen oder auf die für diesen Modul instanzierte Modulklasse $me.

Einige Beispiele:

Zugriffssteuerung auf einen Dialog mittels Entrypoint:

$glob = new Globals
if($glob -> hasRight("ZEIGE.DIALOG") == false){
  echo '<div class="failure">Fehlender Entrypoint \'ZEIGE.DIALOG\'</div>';
  die();
}                      
                        

Zugriffssteuerung auf einen Dialogbutton:

$glob = new Globals
if($glob -> hasRight("KANN.LOESCHEN") == true){
  echo '<inut type="submit" value="löschen"/>';
}                      
                        

Zugriff auf einen Systemparameter:

$glob = new Globals
$intervall = (int)$glob -> getParam("INTERVALL");             
                        

Link zum Laden eines Dialogs

<a href="#" onclick="loadDialogue('Startseite', ''); return true">
Startseite 
</a>            
                        

Wechsel eines Moduls

<a href="#" 
onclick="loadModuleAndDialogue('Anderes Module', 'Startseite', ''); 
return true">
Startseite 
</a>            
                        

Wechsel eines Dialogs mit Übergabe einer alphanummerischen ID

<a href="#" 
onclick="loadModuleAndDialogue('Anderes Module', 'Startseite', 'ID_NUMMER'); 
return true">
Startseite 
</a>   
<?php
$id = $_SESSION['current_id'];
// $id ist ID_NUMMER;
?>         
                        

Datenbankzugriff

// Einzelwert
$val = null;
$sql = 'SELECT [SPALTE]  FROM ' . $con->dbPref . '[TABELLENNAME] ...';
$con = new Connector;
$val = $con -> getValue($sql);
        
// Datenreihe
$val = array;
$sql = 'SELECT [SPALTE] FROM ' . $con->dbPref . '[TABELLENNAME] ...';
$con = new Connector;
$val = $con -> getRow($sql);
for($i = 0; $i < sizeof($val); $i++){
  echo $val[$i] . '';
}
        
// Datenmatrix (mehrdim. Array)
$val     = array;
$spalte1 = null;
$spalte2 = null;
$sql     = 'SELECT [SPALTE1,SPALTE2 ...] FROM ' . $con->dbPref . '[TABELLE]';
$con     = new Connector;
$val     = $con -> getRow($sql);
for($i = 0; $i < sizeof($val); $i++){
  $spalte1 = $val[$i][0];
  $spalte1 = $val[$i][1];
  echo $spalte1 . ' ' . $spalte2 . '';
}
        
// Datenmanipulationen
$con = new Connector;
$sql = 'UPDATE ' . $con -> dbPref . '[TABELLENNAME] ...';
$con -> update($sql); // $con -> insert($sql); | $con -> delete($sql);