Hallo an alle professionellen und Hobby-Pluginentwickler, sowie an jene, die es noch werden wollen!
Im Folgenden möchte ich ein Hilfsmittel zur Pluginentwicklung vorstellen, welches sich im Moment auf der Zielgerade zur Veröffentlichung befindet. Angepeilt ist das erste Quartal 2016. Vor der ersten Veröffentlichung gibt es für mich allerdings noch ein paar Fragen abzuklären und ich möchte schon mal erstes Feedback einholen, um gegebenenfalls direkt darauf reagieren zu können.
Projekt Manager
Zuerst ein mal möchte ich erklären, was der Projekt Manager ist, was er macht und auch was er nicht ist. Der Projekt Manager ist ein Plugin für das WCF 2.1, welches man sich als Entwickler in seiner lokalen WCF Installation hinzufügt. Der Projekt Manager bietet dann über das ACP die folgenden grundlegenden Funktionen, auf welche ich noch näher eingehen werde:
- Pakete hinzufügen
- Daten von PIPs (wie Optionen und Sprachvariablen) dem Paket hinzufügen und die Datenbankstruktur des Pakets anlegen
- Das Paket exportieren
- Eine neue Version des Pakets anlegen und diese mit entsprechenden (automatisch generierten) Update Anweisungen erneut exportieren
- Live zwischen Versionen des Pakets wechseln
Der Projekt Manager ist keine IDE! Die Nutzung einer IDE wird durch den Projekt Manager in keiner Weise eingeschränkt.
Paket hinzufügen
Ein Paket wird über ein Formular im ACP angelegt. Nachdem das Paket hinzugefügt wurde, ist es wie ein frisch installiertes leeres Paket in der WCF Installation vorhanden. Das heißt, es wird ein Eintrag in der wcf1_package Tabelle vorgenommen (ebenso, je nach Angaben, auch in den Tabellen wcf1_package_exclusion und wcf1_package_requirement sowie in der vom Projekt Manager stammenden Tabelle wcf1_package_optional). Pakete, an welchen gearbeitet wird, werden als Projekte bezeichnet. Ein Projekt kann deaktiviert werden, damit es nicht mehr unter "Projekte auflisten" zu sehen ist. In der Paketliste kann jedes Paket als Projekt aktiviert werden.
Projekt Übersicht
Gehen wir davon aus, wir haben ein Paket hinzugefügt und es steht nun als Projekt zur Verfügung. Unter "Projekte auflisten" finden wir das Projekt und klicken es an, um in die Übersicht des Projekts zu kommen. In der Übersicht bekommen wir alles angezeigt, was zu dem Paket des Projekts gehört, das umfasst aktuell:
- Optionen
- Optionen
- Benutzergruppenoptionen
- Benutzeroptionen
- ACL Optionen
- Menüeinträge
- ACP Menüpunkte
- Seiten Menüpunkte
- Benutzereinstellungen Menüpunkte
- Benutzerprofil Menüpunkte
- System
- EventListener
- TemplateListener
- Cronjobs
- Sprachvariablen
- ACP Suchanbieter
- Benutzer Benachrichtigungsereignisse
- Objekte
- Objekt Typen
- Objekt Typen Definitionen
- Core Objects
- Zwischenablage
- Darstellung
- Stile
- BBCodes
- Smileys
- Dashboard Boxen
- Sitemap
Hier Beispielhaft die Übersicht für ein Plugin, welches ich für meine Community mithilfe des Projekt Managers entwickelt habe. Zu beachten ist, dass es ein paar nette Features wie die Filter Funktion oder das Ändern der ShowOrder per Drag 'n' Drop gibt.
Die Datenbank Struktur, welche das Plugin mitbringen soll, wird ebenfalls vollständig über den Projekt Manager verwaltet. Der Projekt Manager lässt dabei in den Formularen nur Eingaben zu, welche der SQLParser des WCF auch versteht.
PIP Daten hinzufügen
Für jedes PIP, welches in der Übersicht zu sehen ist, sowie für die Datenbank gibt es entsprechende Formulare, über welches man Einträge hinzufügen oder bearbeiten kann. Beispielsweise:
Dateien
Bleibt die Frage zu klären, wie man eigentlich seine PHP und Javascript Dateien verwaltet. Hierbei gibt es zwei Optionen: Entweder kann man die Dateien direkt in der WCF Installation anlegen und bearbeiten oder mit einer Erweiterung für den Projekt Manager können die Dateien pro Projekt auch extern abgelegt werden und der Projekt Manager sorgt dafür, dass das WCF darauf zugreifen kann. Entscheidend ist hierbei, dass man einen beliebigen Editor beziehungsweise eine frei wählbare IDE benutzen kann, um die Dateien zu bearbeiten.
Meine Projektstruktur sieht beispielsweise so aus, dass die WCF Installation im Verzeichnis xampp\htdocs\workspace\wcf2_1 liegt und die Projekte sind alle in eigenen Ordnern im workspace, beispielsweise xampp\htdocs\workspace\LatestPostsAndThreads. Als IDE nutze ich Eclipse und dort sieht das dann so aus:
Der Projekt Manager erkennt bei extern abgelegten Projekten automatisch über die Ordner, zu welcher Anwendung die Dateien gehört. Daher befindet sich im LatestPostsAndThreads Projekt der Ordner wbb, damit der Projekt Manager weiß, dass die Dateien in das WBB sollen. Auf diese Weise kann man leicht die Dateien seines Plugins auch in mehreren Anwendungen ablegen, wenn dies sinnvoll erscheint. Diesen Fall hatte ich zum Beispiel gerade bei den Neuesten Beiträgen und Themen mit der .less Datei, welche ins WCF muss, obwohl das Plugin eigentlich für das WBB gedacht ist.
Live Testen
Da alle Teile des Pakets sich in einer WCF Installation befinden, sowie alle Angaben wie Optionen und Sprachvariablen vorhanden sind, können alle Änderungen am Paket live beobachtet und getestet werden. Man kann auch einfach mal eine Debug Ausgabe einbauen (beispielsweise ein print_r($var); exit;) und sich das Ergebnis ansehen.
Paket exportieren
Sobald alles funktioniert wie es soll, alle Sprachvariablen, Datenbanktabellen und Listener angelegt sind, alle PHP Dateien sauber kommentiert und das Plugin live getestet wurde, geht es ans exportieren. Durch das Exportieren wird der aktuelle Zustand des Plugins zusammen mit der aktuellen Versionsnummer fixiert und als .tar Archiv exportiert, welches im WCF installiert werden kann.
Versionierung
Aktuell kann der Projekt Manager nur damit umgehen, wenn die Versionsnummer des Pakets immer weiter erhöht wird. Das heißt, nachdem die erste Version des Pakets exportiert wurde, gibt man eine höhere Versionsnummer für das Paket an. Man behebt im Anschluss Fehler, fügt neue Funktionen hinzu und stellt die nächste Version fertig. Exportiert man diese, wird das Paket automatisch mit den richtigen Update Anweisungen in der package.xml ausgestattet.
Was aktuell noch nicht möglich ist, aber bis zum Erscheinen Möglich sein soll: Nachdem man beispielsweise Version 1.0 seines Pakets exportiert hat, legt man Version 2.0 an, um mit der Entwicklung der neuen Major Version mit neuen Features zu arbeiten. Man beginnt mit der Arbeit, legt neue Optionen an und verändert bestehende Dateien. Jetzt bekommt man Fehlerberichte über Version 1.0 und möchte eine Version 1.1 mit behobenen Fehlern rausbringen. Es soll nun mit dem Projekt Manager möglich sein, eine Version 1.1 des Pakets anzulegen und von Version 2.0 auf 1.1 zu wechseln, ohne dass die Änderungen, welche man für 2.0 vorgenommen hat, Einfluss auf 1.1 haben oder verloren gehen. Nachdem man die Fehler behoben hat, exportiert man Version 1.1 und kann wieder zu 2.0 wechseln. Dabei fügt man die Änderungen von 1.1 und 2.0 zusammen (ein Merge, ähnlich wie mit Git oder SVN, nur dass man hier neben Dateien auch Optionen, Sprachvariablen und ähnliches zusammenführt). Jetzt kann man weiter an Version 2.0 arbeiten. Hierbei ist allerdings für mich noch die Frage ungeklärt, in wie weit das mit Repository Systemen wie Git und SVN funktionieren wird. Gegebenenfalls müsste dann auch der Entwickler für jede Version seines Pakets einen entsprechenden Zweig anlegen und wenn er die Version im Projekt Manager wechselt auch den Zweig bei seinem Repository wechseln.
Lizenz und Kosten
Hier habe ich Fragen an die Fachkundigen unter uns. Ich strebe folgendes Modell an: Der Projekt Manager soll an sich kostenfrei erhältlich und nutzbar sein. Benutzt man den Projekt Manager aber kommerziell, um entweder Plugins zu verkaufen oder Plugins herzustellen, welche auf kommerziellen Plattformen benutzt werden, soll eine extra Lizenz erforderlich sein. Mit ist klar, dass es einige schwarze Schafe geben wird, welche die Lizenz trotz kommerzieller Nutzung nicht erwerben werden, aber ich möchte es für Hobbyentwickler und Einsteiger so einfach wie möglich machen. Unter welcher Lizenz sollte der Projekt Manager veröffentlicht werden, damit ich das genannte Modell umsetzen kann? Was gilt es dabei zu beachten?
Zweiter Punkt ist meine persönliche Absicherung: Angenommen der Projekt Manager macht irgendetwas falsches, löscht beispielsweise alle Dateien eines Projekts unwiederbringlich. Kann ich Haftung in diese Richtung ausschließen? (Natürlich nicht für Fälle, bei welchen ich absichtlich so etwas eingebaut oder grob fahrlässig gehandelt hätte) Wie müsste ein solcher Haftungsausschluss aussehen, damit ich vor Ansprüchen gesichert bin?
Zusammenfassung
Der Projekt Manager ist ein WCF Plugin, welches Entwicklern eine Oberfläche zum Anlegen, Verwalten, Exportieren und Versionieren ihrer Plugins bietet. Er soll im ersten Quartal 2016 veröffentlicht werden. Die Wahl des Texteditors oder der IDE wird durch ihn nicht eingeschränkt. Die Nutzung von Git oder SVN wir durch die Versionierung des Projekt Managers beeinflusst, aber nicht verhindert. Der Projekt Manager soll für nicht-kommerzielle Entwickler kostenfrei sein. Bitte beachtet meine Fragen unter "Lizenz und Kosten".
Ich bin gespannt, was euer erster Eindruck ist, was für Fragen und Feedback ihr habt. Zudem würde ich mich freuen, wenn ihr mir bezüglich Lizenz und Haftung weiterhelfen könnt