Optimierter Installer für ContentLion

Wie ihr vielleicht mitbekommen habt, bin ich derzeit dabei die Verteilung von ContentLion (Updates + Installation) zu optimieren. So möchte ich Komplikationen beim nächsten Update vermeiden.

Wer mal einen Blick in unserem Installer wirft, wird feststellen, dass hier großes Chaos herrscht. Neben der Unübersichtlichkeit stört mich aber auch noch folgendes bei der Verteilung:

  • Durch den Installer kann man ContentLion nicht richtig in Netbeans und Co entwickeln, da z.B. die index.php während der Installation noch umbenannt wird
  • Jede SQL-Änderung muss quasi zweimal angegeben werden. Einmal im Installer und einmal im Update. So können ganz schnell Fehler passieren, die es zu vermeiden gibt.

Aus diesem Grund möchte ich den Installer auslagern und nach dem Commit automatisiert zusammenbasteln lassen. Neben dem normalen Installer soll auf die Dauer auch noch ein Installer über APS her, damit wir ContentLion in die 1-Klick-Installationen der Webhoster integrieren können.

In ContentLion selbst soll es dann einfach eine Datei geben, in der man dann den Datenbankaufbau und die Dateiberechtigungen angeben kann.

Der Plan steht, jetzt kommt die Umsetzung. Wie soll eine solche Datei aussehen? Dabei könnt ihr gerne helfen.

Mein Vorschlag

Als Format würde ich XML nehmen, da es im Gegensatz zu JSON von Menschen leicht lesbar und bearbeitbar ist.

Der Inhalt könnte ungefähr so aussehen:

<?xml version="1.0" encoding="UTF-8"?>
<contentlion_package>
    <file_system>
        <path url="system/dbsettings.php">
            <permission name="writeable" />
        </path>
        <path url="content/articles" recursive="true">
            <permission name="writeable" />
        </path>
        <path url="content/uploads" recursive="true">
            <permission name="writeable" />
        </path>
    </file_system>
    <database>
        <table name="activated_plugins">
            <description lang="de">
                Hier sind die Verzeichnisse der aktivieren Plugins.
            </description>
            <description lang="en">
                Here are the dictionary of the enabled plugins.
            </description>
            <column name="path" type="text" chars="100" allow_null="false">
                <description lang="de">
                    Path
                </description>
                <description lang="de">
                    Path
                </description>
            </column>
            <primary_key>
                <column name="path" />
            </primary_key>
        </table>
    </database>
</contentlion_package>

Als erstes werden die Verzeichnisse angegeben, die Schreibrechte brauchen. Im Beispiel habe ich die Sachen des Installers rausgenommen, weil der dann ja nicht mehr zum Projekt gehören würde. Als Path können Dateien und Ordner angegeben werden. Wildcards sollen in der ersten Version noch nicht unterstützt werden. Mit recrusive gibt man an, ob Unterverzeichnisse und Dateien die gleichen Rechte bekommen sollen.

Bei der Datenbank habe ich mich gegen eine Auflistung von SQL-Statements entschieden, da wir so die Updates leichter machen können. Außerdem werden automatisch Kodierungen usw. eingehalten. Einige von euch kennen bestimmt unsere so genannte Datenzentrale. Hier werden alle Datensätze mit Beschreibung erklärt. Deren Beschreibungen sollen direkt in die XML-Datei geschrieben werden, damit auch jeder weiß wofür die Spalte / Tabelle ist.

Die Spaltentypen sollen nicht unbedingt genauso heißen wie in MySQL, um das Ganze später auch auf fremde Datenbanksysteme ausweiten zu können. Die genauen Definitionen würde ich dann beim Erstellen der Datei festlegen. Auch jede Spalte hat wieder eine Beschreibung, diese kann aber kürzer ausfallen.

Ist die Basis erst einmal da, könnte man dies später auch für die Plugins nutzen. Was meint ihr dazu? Habt ihr Verbesserungsvorschläge?

Dieser Beitrag wurde unter Planung veröffentlicht. Setze ein Lesezeichen auf den Permalink.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>