Verzeichnisstrukturen, Navigation und Bearbeitungsrechte für Bereiche
Vorbemerkungen
Bei einem Bereich "xxx", zu dem ein Mitgliederbereich gehört, enthält der Stammordner des Systems jeweils die beiden Ordner "xxx" und "_mb_xxx" auf der obersten Verzeichnisebene. In dem Ordner "xxx" und dessen Unterordnern werden die PHP-Dateien gespeichert, die von jedermann aufrufbar sind. Die PHP-Dateien aus dem Order "_mb_xxx" und dessen Unterordnern sind dagegen, sofern sie korrekt geschrieben wurden, nur von Bereichsmitgliedern aufrufbar. Bei Bereichen ohne Mitgliederbereich fehlt der Ordner, der mit der Zeichenfolge "_mb_" beginnt.
Verzeichnisse
Verzeichnisstruktur im öffentlichen Bereichsverzeichnis "xxx"
In dem öffentlichen Bereichsverzeichnis muss immer die Datei "index.php" vorhanden sein. Außerdem wird in diesem Ordner die Datei "navigation.php" gespeichert, wenn die Navigationsdatei formularbasiert erzeugt wird. Mehr Dateien sollten dort nicht enthalten sein. Andere Dateien sind in den Unterverzeichnissen zu speichern.
PHP-Dateien können in den Kernordnern "_admin" und "_red" (oder einem Unterverzeichnis davon) gespeichert werden. Die Dateien in "_admin" dürfen formularbasiert nur von denjenigen mit dem Recht "admin" verändert werden, die Dateien in "_red" von allen, die mindestens das Recht "redaktion_offen" besitzen.
Soll in einem dieser Kernordner erstmalig eine Gliederungsseite gespeichert werden, wird im ausgewählten Kernordner automatisch der Unterordner "_linkpages" angelegt, der dann als Speicherort für die Gliederungsseite ausgewählt wird. Analoges gilt für die Speicherung von Seiten des Typs "Formular" (Unterordner "_forms") und die Speicherung der per Javascript aufrufbaren Dateien (Unterordner "_ajax").
Mit dem Redaktionsformular können weitere Unterordner innerhalb der Kernordner und deren Unterverzeichnisse angelegt werden. Die Namen dieser Unterverzeichnisse, dürfen aber nicht mit einem Unterstrich beginnen.
Damit mit dem integrierten Redaktionsformular PHP-Dateien erstellt und verändert werden können, müssen die beiden Ordner "_drafts" und "_drafts_temp" vorhanden sein. In dem Ordner "_drafts" werden die Entwürfe für die PHP-Dateien gespeichert. Der Ordner "_drafts_temp" nimmt die Hilfsdateien auf, die nur während der Bearbeitung von php-Dateien vorhanden sind und nach Abschluss der Bearbeitung gelöscht werden.
In den Ordner "Bilder" können formularbasiert Bilder hochgeladen werden und in die Unterverzeichnisse "typ_1, "typ_2" und "typ_3" des Ordners "_upload" sonstige Dateien, sofern sie den Einschränkungen für die Dateitypen genügen, die in den Vorgabedateien __wm/__variablen/upload_vorgaben_X.php (X aus {1, 2, 3} ) notiert sind. Auch innerhalb der Ordner "Bilder" und "_upload" können formularbasiert Unterordner erstellt werden für die strukturierte Ablage der Dateien. Sobald ein Video oder eine Audio-Datei mit den System-Formularen hochgeladen wird, damit sie über die Redaktionsformulare in öffentliche Seiten des Bereichs eingebaut werden können, wird der Ordner "_medien" und der erforderliche Unterordner "_video" bzw. "_audio" angelegt, falls der für den Upload benötigte Ordnerpfad nicht vorhanden ist.
Der Ordner _backup wird benötigt, um auf dem PHP-Server Backup-Dateien zu den Datenbanktabellen des Bereichs speichern zu können.
Verzeichnisstruktur im Mitgliederbereichsverzeichnis "_mb_xxx"
In diesem Verzeichnis muss immer die Startseite index.php des jeweiligen Mitgliederbereichs enthalten sein. Die Navigationsdateien "navigation.php", "navigation_pruefling", "navigation_redation_intern.php", "navigation_redaktion_offen.php", "navigation_verwalten.php" und "navigation_admin.php" werden ebenfalls in diesem Ordner gespeichert, wenn sie formularbasiert angelegt werden. Andere Dateien sind in den Unterverzeichnissen zu speichern.
PHP-Dateien können in den Kernordnern "_ad_int", "_red_int" und "_ad_rva" (oder einem Unterverzeichnis davon), gespeichert werden. In diesen drei Kernordnern werden - wie in den Kernordnern "_red" und "_admin" des öffentlichen Bereichs - bei Bedarf automatisch die Unterordner "_ajax", "_forms" und "_linkpages" angelegt. Im Kernordner "_red_int" wird außerdem automatisch der Unterordner "_test" angelegt, wenn in dem Bereich ein Arbeitsblatt aus einer Inhaltsseite oder einem Formular erstellt wird. Detaillierte Hinweise zu dem Unterordner "_test" enthält die Datei Arbeitsblätter
Die Dateien in "_ad_int" und "_ad_rva" dürfen nur von denjenigen mit dem Recht "admin" verändert werden, die Dateien in "_red_int" von allen, die mindestens das Recht "redaktion_intern" besitzen. Für die aufrufbaren Dateien in "_ad_int" und "_red_int" sollte gelten, dass das Recht "mitglied" für dem Aufruf erforderlich ist, aber es sollte niemals zwangsläufig ein höheres Recht für dieses Seiten gefordert werden. Es sind aber innerhalb der aufrufbaren Seiten aus diesen Verzeichnissen gestufte Ausgaben/Verareitungsschritten in Abhängigkeit von dem Maximal-Recht des Aufrufers möglich.
Wie in dem öffentlichen Ordner gibt es für den Mitgliederbereich die Unterordner "_drafts", "_drafts_temp", "Bilder" und "_medien".
Und wenn in einem Chat des Bereichs ein Bild, ein Video oder eine Audio-Datei als Chat-Beitrag veröffentlicht wird, legt das System automatisch den Ordner "_chat_medien" und den benötigten Unterordner "bild", "video" oder "audio" an, wenn der benötigte Ordnerpfad noch nicht existiert.
Unterverzeichnisse
Mit den Formularen des System können Unterordner zu einem der Hauptordner oder deren Unterordnern erstellt werden. Allerdings wird die Anzahl der Hierarchieebenen unterhalb der Hauptordner xxx/_admin, xxx/_red, xxx/Bilder, xxx/_upload, _mb_xxx/_ad_int, _mb_xxx/_red_int, _mb_xxx/_ad_rva und _mb_xxx/Bilder durch die Konstante "hierarchie_max" beschränkt. Der Wert der Konstanten kann von System-Administratoren verändert werden.
Ein leeres Unterverzeichnis zu den zuvor genannten Hauptordnern, welches kein Systemverzeichnis ist (_drafts ist z.B. ein Systemverzeichnis) darf von den Redaktionsberechtigten nur dann gelöscht werden, wenn der Redaktionsberechtigte eine Reservierung vom Typ aendern = 1 für dieses Verzeichnis eintragen konnte.
Reservierungen für die formularbasierte Bearbeitung von Verzeichnissen
Ein Verzeichnis x/y/z kann nur dann in _reservierte_verzeichnisse mit dem Typ aendern = 1 eingetragen werden, wenn das Verzeichnis noch nicht reserviert ist, das Verzeichnis nicht Kindelement eines Verzeichnisses (x oder x/y) ist, welches schon in _reservierte_verzeichnisse mit dem Typ aendern = 1 reserviert ist und wenn kein Kindelement des Verzeichnisses x/y/z (z.B. das Verzeichnis x/y/z/a oder die Datei x/y/z/b/datei.php) in _reservierte_verzeichnisse oder _reservierte_dateien eingetragen ist, unabhängig vom Wert von aendern für das Kindverzeichnis von x/y/z.
Ein Verzeichnis x/y/z darf dann in _reservierte_verzeichnisse mit dem Typ aendern = 0 eingetragen werden, wenn das Verzeichnis nicht Kindelement eines Verzeichnisses (x oder x/y) ist, welches schon in _reservierte_verzeichnisse mit dem Typ aendern = 1 reserviert ist. Weitere Restriktionen sind nicht vorhanden. Für ein Verzeichnis x/y/z dürfen gleichzeitig mehrere Reservierungen, die zu verschiedenen session_ID's gehören, mit dem Wert aendern = 0 vorhanden sein.
Die Reservierung eines Verzeichnisses mit aendern = 0 ist dann sinnvolll, wenn klar ist, dass ein Kindelement von x/y/z in einem nachfolgenden Schritt erstellt/verändert werden soll, aber der Name des Kindelementes noch nicht bekannt ist.
Die Reservierung eines Verzeichnisses mit aendern = 1 ist für ein Verzeichnis dann nötig, wenn eine Aktion auf dem Verzeichnis ausgeführt werden soll, welche Auswirkungen auf sämtliche Kindelemente des Verzeichnisses hat, z.B. "löschen".
Reservierungen für Verzeichnisse und Dateien sind allerdings nur möglich, wenn keine dauerhafte Sperre die Veränderung von Dateien und Verzeichnissen verhindern. (vgl. Sperren und reservieren.)
Formularbasiertes Bearbeiten von Verzeichnissen
Um ein Verzeichnis zu erstellen, muss zuvor der zugehörige Verzeichnispfad des Elternverzeichnisses mit aendern = 0 reserviert werden. Wenn der Nutzer einen zulässigen Verzeichnisnamen angegeben und den Schalter "erstellen" angeklickt hat, wird sofort das Verzeichnis erstellt. Ob die Reservierung für das Elternverzeichnis aufgehoben wird, hängt vom Kontext ab.
Formularbasiert wird für ein Verzeichnis die Möglichkeit zum Anlegen eines neuen Unterverzeichnisses nur so lange angeboten, bis die Anzahl der zulässigen Verzeichnisebenen erschöpft ist.
Verzeichnisse können nachträglich nicht formularbasiert umbenannt werden, weil durch die Umbenennung vorhandene Links, die auf Seiten in dem Verzeichnis oder einem Unterverzeichnis davon verweisen, nicht mehr korrekt wären und zum Aufruf einer Fehlerseite führen würden.
Löschen von Verzeichnissen
Wenn ein Nutzer ein Verzeichnis löschen möchte, muss dieses für den Nutzer mit aendern = 1 reserviert werden, bevor die Aktion ausgeführt wird.
Systemordner, wie z.B. xxx/_admin/ oder xxx/_drafts dürfen niemals formularbasiert zum Löschen ausgewählt werden, auch dann nicht wenn sie leer sind. Diese Ordner können nur zusammen mit dem Bereich xxx im Rahmen der Bereichspflege gelöscht werden. Das System verhindert allerdings, dass der Bereich "home" gelöscht werden kann, wodurch auch die Verzeichnisse "home" und "_mb_home" immer erhalten bleiben.
Alle System-Ordner dürfen allerdings geleert werden, falls der Aufrufer über das Recht zum Leeren des Ordners verfügt. Beim Leeren eines System-Ordners bleiben in dem System-Ordner nur jene Dateien und Unterordner enthalten, die bei der Anlage des System-Ordners ebenfalls automatisch erstellt wurden.
Die anderen Ordner eines Bereichs können formularbasiert gelöscht oder geleert werden, sofern der Aufrufer im Bereich das Zugriffsrecht für die Aktion auf dem Ordner besitzt.
Wenn ein Ordner geleert wird, werden nicht nur die im Ordner enthaltenen Dateien und Unterverzeichnisse endgültig gelöscht, sondern auch alle Entwürfe, die zu diesem Ordner oder einem Unterordner davon gehören, und jene Dateien, die zuvor nur scheinbar gelöscht wurden. Soll auch der Ordner selber gelöscht werden, wird dieses durchgeführt, nachdem alle enthaltenen und dem Ordner zugeordneten Entwürfe und scheinbar gelöschten Dateien entfernt wurden.
Vor dem Löschen von Ordnern, die nicht leer sind, erfolgt ein allgemeiner Hinweis, dass Links in anderen Dateien, welche auf eine Datei verweisen, die mit dem Ordner gelöscht wird, erhalten bleiben, und dass diese Links einen Fehler vom Typ "file not found" ausgelösen, wenn sie ausgewählt werden.
Die System-Administratoren legen fest, ob automatisch E-mails verschickt werden und an wen (Aufrufer, Administrator, Webmaster), wenn Ordner gelöscht werden.
Dateien
Das System differenziert bei den Dateien zwischen Navigations-Dateien, PHP-Dateien, Videos, Audio-Dateien und sonstigen Dateien. Arbeitsblätter und Bilder sind technisch gesehen zwar ebenfalls Dateien, doch weicht die formularbasierte Bearbeitung der Arbeitsblätter und Bilder von denen der anderen Dateien ab. Daher wird den Arbeitsblättern und den Bildern weiter unten jeweils ein eigenes Kapitel gewidmet. Chat-Medien-Dateien sind Bilder, Videos oder Audio-Dateien, doch aufgrund der speziellen Verwendung als Chat-Beitrag gelten für diese Dateien in diesem System andere Regeln, daher werden auch diese in einem eigenständigen Kapitel behandelt.
Außerdem differenziert das System zwischen aktiven Versionen, ersetzten Versionen und Entwurfs-Versionen. Zu einer Kombination von Verzeichnispfad und Dateiname kann es maxmimal eine aktive Version,aber beliebig viele ersetzte Versionen geben. Und nur für PHP-Dateien kann außerdem maximal ein Entwurfs-Version existieren. Die PHP-Entwurfs-Dateien werden immer in einem der Ordner "xxx/_drafts" oder "_mb_xxx/_drafts" gespeichert und die ersetzten Versionen aller Dateiarten inmmer in einem Unterordner des Ordners "__ersetzt".
Werden PHP-Dateien formularbasiert erstellt oder verändert erzeugt das System für diese Dateien zunächst eine Entwurfs-Version. Durch den Befehl "veröffentlichen" wird aus der Entwurfs-Version eine aktive Version. War zuvor eine gleichnamige aktive Version vorhanden wird diese umbenannt und damit zur ersetzten Version.
Wird eine Datei formularbasiert hochgeladen, ist die hochgeladene Datei immer eine aktive Version. War schon eine gleichnamige aktive Version vorhanden, wird diese umbenannt und damit zur ersetzten Version, falls sie nicht überschrieben werden soll.
Alle aktiven Dateien, die keine System-Dateien sind, können formularbasiert durch Umbenennen versteckt und damit scheinbar gelöscht werden. Diese versteckten Dateien zählen auch zu den ersetzten Versionen.
Damit beim "Ersetzen" einer Datei die zuvor schon vorhandene ersetzte Version zu dieser Datei nicht überschrieben wird, wird in den Dateinamen der ersetzten Versionen immer der UNIX-Zeitstempel des Zeitpunkts integriert, an dem die Datei-Version im Ordner "__ersetzt" gespeichert wird.
Dateien reservieren
Um eine Datei hochladen, erstellen, bearbeiten, löschen oder reaktivieren zu können, muss für die Datei ein Datensatz in _reservierte_dateien eingetragen werden.
In der Spalte "verzeichnis" ist dabei immer der vollständige Verzeichnispfad der veröffentlichten/aktiven Datei bzw. das Zielverzeichnis des Upload-Vorgangs / das Zielverzeichnis für den Entwurf zu notieren.
Obwohl also Entwürfe immer in einem Unterordner _drafts gespeichert werden, taucht der Name dieses Verzeichnisses niemals in dem vollständigen Verzeichnispfad in _reservierte_dateien auf und der Dateiname der Datei aus _drafts wird immer zerlegt in den Verzeichnisanteil und den eigentlichen Dateinamen mit Kennung. Für die Zerlegung werden die "-" im Dateinamen der Entwurfsdatei durch "/" ersetzt. Der Verzeichnisanteil des Entwurfsdateinamens ergänzt immer den Verzeichnispfad, der sich aus dem Hauptverzeichnis von _drafts ergibt (Beispiel: Es existiert bislang nur der Entwurf "home/_drafts/_admin-2015-mai-heute.php", dann ist in _reservierte_dateien in die Spalte "verzeichnis" folgendes einzutragen: "home/_admin/2015/mai" und in die Spalte "datei" der eigentliche Dateiname "heute.php".) Auf diese Weise kann sichergestellt werden, dass es maximal einen Entwurf zu einer veröffentlichten Datei gibt und bei der Neuanlage eines Entwurfs nicht versehentlich der Name einer bereits veröffentlichten Datei verwendet wird. Weiterhin erleichtert diese Vorgehensweise die Überprüfung, ob die Datei als Kindelement eines Verzeichnisses reserviert ist, wenn ein Verzeichnis mit dem Typ aendern = 1 reserviert ist / resrviert werden soll.
Für ersetzte Dateien gelten diese Aussagen zur Reservierung analog. Zusätzlich ist für diese Dateien der Zeitstempel für die Reservierung aus dem Dateinamen zu entfernen.
Eine Datei darf nur dann reserviert werden, wenn sie als aktive Datei nicht Kindelement eines Verzeichnisses ist/wäre, welches in _reservierte_verzeichnisse mit dem Typ aendern = 1 reserviert ist.
Löschen und Reaktivieren von Dateien
Wenn PHP-Dateien oder Navigationsdateien formularbasiert verändert werden, wird die vorher aktive Version der Datei umbenannt und dadurch in einen Unter-Ordner des Ordner "__ersetzt" verschoben. Auch wenn durch einen Upload-Vorgang eine PHP-Datei oder eine sonstige Datei ersetzt wird, wird die ersetzte Version oftmals in einen Unter-Ordner des Ordner "__ersetzt" verschoben.
Sofern eine Person über die nötigen Rechte verfügt, kann sie diese Dateien durch Umbenennen aktivieren oder endgültig löschen. Beim Aktivieren erhält die Datei wieder ihren ursprünglichen Namen. Damit durch das Aktivieren einer Datei aus dem Ordner "__ersetzt" keine aktive Datei überschrieben wird, wird -, wenn eine gleichnamige aktive Version der Datei existiert, - zuvor eine Kopie der aktive Version in einen Unter-Ordner des Ordner "__ersetzt" gespeichert.
Alle Dateien, die sich im Ordner "__ersetzt" befinden, dürfen formularbasiert auch endgültig gelöscht werden, sofern der Aufrufer über die nötigen Rechte für die Datei verfügt.
Die aktiven Versionen der Dateien, die bei der Neuanlage eines Bereichs automatisch angelegt werden (index.php und die Navigations-Dateien), können allerdings von niemandem formularbasiert gelöscht werden. Nur wenn der Bereich gelöscht wird, zu dem sie gehören, werden sie gelöscht.
Ansonsten können Dateien und Ordner formularbasiert gelöscht werden, sofern der Aufrufer im Bereich mindestens das Zugriffsrecht besitzt, welches von den System-Administratoren für die Aktion vorgeschrieben ist. Dabei differenziert das System auch nach der Art des Ordners, in dem die Datei gespeichert ist.
Mit den System-Formularen können Dateien endgültig oder nur scheinbar gelöscht werden. Beim scheinbaren Löschen werden die Dateien umbenannt und in einen Unterordner des Verzeichnisses "__ersetzt" verschoben. Beim Umbennen wird immer der Zeitstempel im Dateinamen integriert, damit beim erneuten Löschen einer gleichnamigen Datei nicht die zuvor gelöschte Version überschrieben wird. Abhängig von den Löschrechten einer Person kann sie Dateien nur scheinbar löschen oder wählen, ob eine Datei scheinbar oder endgültig gelöscht werden soll.
Vor dem Löschen von Dateien erfolgt ein allgemeiner Hinweis, dass Links in anderen Dateien, welche auf die zu löschende Datei verweisen, erhalten bleiben, und dass diese Links einen Fehler vom Typ "file not found" ausgelösen, wenn sie ausgewählt werden.
Die System-Administratoren legen fest, ob automatisch mails verschickt werden und an wen (Aufrufer, Administrator, Webmaster), wenn Dateien aktiviert oder gelöscht werden.
PHP-Dateien
PHP-Dateien können sehr unterschiedlich aufgebaut sein. Damit die Dateien mit den Systermformularen bearbeitet werden können, müssen die Dateien abhängig vom Speicherort genau definierte Strukturen einhalten. Wenn abweichende Strukturen für eine Datei geplant sind, muss die Datei offline z.B. mit einem einfachen Text-Editor geschrieben. Soll die Datei in eines der Verzeichnisse, in denen das System die PHP-Dateien speichert, hochgeladen werden, muss die Person, welche, die Datei hochlädt, im System PHP-Code schreiben dürfen. Fehlt das Recht zum Schreiben von PHP-Code, kann der Upload der PHP-Datei in diese Verzeichnisse von dieser Person nur per FTP-Befehl (z.B. mit einem Programm wie Filezilla) erfolgen.
Das System unterscheidet bei den PHP-Dateien anhand des Dateiaufbaus zwischen aufrufbaren Dateien und den sogenannten "nicht-aufrufbaren" Dateien. Letztere sind Dateien, die nur von einem anderen php-Skript eingebunden werden dürfen. Werden diese Dateien über die Adresszeile eines Browser direkt aufgerufen, erfolgt eine Umleitung auf die Startseite des Systems.
Aufrufbare PHP-Dateien
Aufrufbare Seiten, die formularbasiert bearbeitet werden können, müssen immer mit einem php-Abschnitt beginnen, in dem einige Konstanten und die sogenannten "Kopf-Variablen" stehen, die für die Ausgabensteuerung benötigt werden. Etliche der Kopf-Variablen sind fakultativ. Fehlen sie, verwendet das System zur Ausgabensteuerung Standardwerte. Sofern den Konstanten und Variablen als Werte Zeichenfolgen (Dateityp: String) zugewiesen werden, müssen die Zeichenfolgen in Apostrophs stehen und nicht in doppelten Anführungszeichen.
Wenn die Datei bearbeitet werden soll, versucht das System, aus diesem Abschnitt die Werte der Konstanten und Variablen auszulesen. Wenn Zeilen mit Variablen, die fakultativ sind, in der Datei fehlen, werden im Bearbeitungsformular die Standardwerte eingetragen bzw. markiert. Fehlen allerdings die Pflichtangaben oder ist die Struktur für eine Zeile falsch, hört das System auf, den weiteren Inhalt der Datei für die Bearbeitung aufzubereiten und meldet, dass die Datei nicht mit dem Redaktionsformular bearbeitet werden kann.
Nach dem ersten php-Abschnitt muss bei einer Entwurfsdatei ein einzeiliger php-Abschnitt folgen, der mit der Zeichenfolge "<?php include_once zac4web_pfad."__zac4web/_redaktion/_inc/draft_kopf_" beginnt. Bei veröffentlichten Dateien, darf diese Zeile nicht enthalten sein.
Dann folgt der spezifische Inhalt der aufrufbaren Datei. Im Ausgabemodus verarbeitet das System sämtliche Informationen aus diesen Zeilen, es sei denn, im PHP-Code sind syntaktische oder inhaltliche Fehler enthalten. Soll die Datei dagegen formularbasiert bearbeitet werden, muss die erste Zeile in diesem Abschnitt nach dem Trimmen mit der Zeichenfolge "<?php //<block>:" beginnen. Nur dann wird im Bearbeitungsmodus geprüft, ob die Struktur des Blocks eingehalten wird. Falls dieses zutrifft, wird der weitere Inhalt ebenfalls daraufhin geprüft, ob die vorgegebenen Block-Strukturen eingehalten werden. Sobald dies für einen Block einmal nicht zutrifft, kann die Datei nicht formularbasiert bearbeitet werden.
Als vorletzte Zeile muss bei einer Entwurfsdatei <?php include_once zac4web_pfad."__zac4web/_redaktion/_inc/draft_ende.php"; ?> notiert werden. Es sind keine weiteren Zeichen in der Zeile erlaubt, auch kein whitespace. Bei veröffentlichten Dateien, darf diese Zeile nicht enthalten sein.
Die letzte Zeile muss immer genau folgenden Inhalt enhalten, damit die Datei bei der Ausgabe optisch korrekt beendet wird und formularbasiert bearbeitet werden kann: "<?php include zac4web_pfad."__zac4web/_wm/html_ende.php"; ?>". Die Datei kann allerdings nur dann formularbasiert bearbeitet werden, wenn in der Zeile keine weiteren Zeichen enthalten sind, also auch kein Leerzeichen und kein Zeilenumbruch.
- Die erste Zeile der Datei muss die folgende Zeichenfolge enthalten:
<?php
wobei vor dem Zeichen < kein anderes Zeichen stehen darf, auch kein Leerzeichen. - Danach werden zunächst die Konstanten definiert zur Steuerung der Ausgabe
- zac4web_pfad - ist entweder eine leere Zeichenkette '' oder enthält ein Vielfaches der Zeichenkette '../' . Jedes ../ steht für eine Verzeichnisebene, welche die Datei von dem Hauptverzeichnis des Systems entfernt ist.
- zac4web_bereich - Angabe zu welchem Bereich(auch zugehöriger Mitgliederbereich) die Datei gehört, bestimmt, welche Navigationsdatei in der Navigationsspalte angezeigt wird, wenn die Datei geöffnet ist und die Navigationsspalte angezeigt wird / bzw. welches Navigationsmenü geöffnet ist, wenn bei der mobilen Ansicht, die Gesamtnavigation aufgerufen wird.
- zac4web_seiten_autor - enthält den Namen des jenigen, der die Datei als letztes formularbasiert bearbeitet hat (oder falls dieser das Recht "admin" besaß, ist auch eine andere Angabe möglich - z.B. "System")
- zac4web_datei_datum - der Zeitpunkt (in der Form Tag.Monat.Jahr), in dem die Datei als letztes formularbasiert bearbeitet wurde (oder falls der Aufrufer das Recht "admin" besaß ist auch eine andere Angabe möglich, z.B. "auto-wert", anhand deren das Skript html_ende.php dann die Ausgabe erstellt.
- Nun folgen die Zeilen mit den Variablen zur Steuerung der Ausgabe. Die Variablen "$seiten_titel", "$seiten_sprache" und "$verfaellt_nach_sec" müssen in diesem Abschnitt deklariert werden, alle anderen Variablen dürfen fehlen.
- $seiten_titel - eine vom Nutzer eingetragene Zeichenkette, die vom Browser in der Titelzeile des Fenters angezeigt werden soll, wenn die Datei geöffnet ist.
- $seiten_sprache - das Kürzel für die Sprache, in welcher der Dateiinhalt geschrieben ist, Vorgabewert 'de'.
- $verfaellt_nach_sec - einer der folgenden Werte: 0, 60, 600, 1200, 86400 - der Hinweis für den Browser, wie viele Sekunden lang er eine aufgerufene Datei als gültig ansehen soll, ohne sie neu zu laden.
- $max_style - einer der folgenden Werte: 0, 1, 2
Vorgabewert ist 2. Der Nutzer darf dabei zwischen drei verschiedenen Größenansichten für den Seiteninhalt wählen, auch die maximale Größe ist dann möglich. Bei 0 ist nur die minimale Größe möglich. - $formular - entweder direkt gefolgt von einem Semikolon oder gefolgt von einem Gleichheitszeichen und dem Wert "true" (oder einem beliebigen Wert). Wenn die Seite ein aufrufbares Formular enthält, welches Eingabefelder, Checkboxen oder Radiobuttons enthält, ist es in der Regel sinnvoll, wenn nach dem Variablennamen ein Gleichheitszeichen mit einem Wert folgt. Dann werden nämlich die Größenschalter nicht angeboten. Denn wenn der Nutzer auf einen Größenschalter klickt, wird die Seite neu geladen und die bisher vom Nutzer getätigten Eingaben im Formular gehen verloren.
- $ohne_nav_spalte - entweder direkt gefolgt von einem Semikolon oder gefolgt von einem Gleichheitszeichen, dem Wert "true" und einem Semikolon. Wenn kein Wert der Variablen zugewiesen ist, wird die Navigationsspalte angezeigt, wenn das Browserfenster breit genug ist. Wenn ein Wert zugewiesen ist, wird die Navigationsspalte nicht angezeigt, um die Breite des gesamten Browserfenster für die Anzeige des Seiteninhalts zu nutzen, dies ist z.B. sinnvoll bei breiten Tabellen.
- $horizontal_scroll - entweder direkt gefolgt von einem Semikolon oder gefolgt von einem Gleichheitszeichen, dem Wert "true" und einem Semikolon. Wenn kein Wert der Variablen zugewiesen ist, wird die Breite des Inhaltsbereichs an die Breite des Browserfensters angepasst und der Inhalt innerhalb des Inhaltsbereichs passend umgebrochen. Bei einem zugewiesenen Wert, wird eine zusätzliche Style-Datei eingebunden. Der Inhaltsbereich passt sich nicht an die Breite des Browserfensters an und dem Nutzer wird die Möglichkeit geboten, horizontal zu scrollen. Diese Einstellung ist wichtig, wenn breitere Tabellen oder Formulare in Tabellen angezeigt werden sollen und der Nutzer auch bei schmalen mobilen Geräten alle Inhalte einer Seite (gut erreichen und) lesen soll, da bei einer Tabelle die rechten Tabellenspalten sonst u.U. nicht mehr angezeigt werden.
- $pruefen_mitglied - entweder direkt gefolgt von einem Semikolon oder gefolgt von einem Gleichheitszeichen und dem Wert "true" oder einem der Bezeichnungen für die Zugriffsrechte (z.B. "mitglied" oder "verwalten") und einem Semikolon. Wenn der Variablen kein Wert zugewiesen ist, wird beim Aufruf der Seite nicht geprüft, ob der Nutzer eingeloggt ist. Wenn der Wert "true" ist, kann die Seite von jedem aufgerufen werden, aber es wird gerprüft, ob der Aufrufer eingeloggt ist und welche Zugriffsrechte er für diesen Bereich besitzt. Dadurch kann innerhalb des zweiten Abschnittes anhand der Zugriffsrechte des Aufrufers gesteuert werden, welche Aktionen ausgeführt werden und welche Inhalte dem Aufrufer angezeigt werden. Steht dagegen nach dem Gleichheitszeichen die Bezeichnung für ein Zugriffsrecht, wird die Seite dem Aufrufer nur angezeigt, wenn er mindestens über das geforderte Zugriffsrecht in dem Bereich "zac4web_bereich" verfügt, ansonsten erfolgt ein Hinweis, dass Zugriffsrechte fehlen.
- $robots_no - entweder direkt gefolgt von einem Semikolon oder gefolgt von einem Gleichheitszeichen, dem Wert "true" und einem Semikolon. Nur wenn der Variablen kein Wert oder ein anderer Wert als "true" zugewiesen ist, und gleichzeitig $pruefen_mitglied !== true gesetzt ist, dürfen robots von Suchmaschinen die Seite indizieren und nach links durchsuchen.
- $style_datei - gefolgt von ' = array();' zur Deklaration des numerischen eindimensionalen Feldes. In den nächsten Zeilen folgen dann die Elemente des Feldes $style_datei, wobei die css-Dateien alle im Ordner "__wm/styles" oder einem Unterordner davon gespeichert sein müssen. Als Wert ist der vollständige Pfad zur css-Datei, der auf die Zeichenkette "__wm/styles/" folgt, anzugeben.
- $style_bereich - gefolgt von einem Gleichheitszeichen, einem Abschnitt mit css-Befehlen und einem Semikolon.
- $js_dateien - gefolgt von ' = array();' zur Deklaration eines zweidimensionalen Feldes(numerisch/assoziativ). In den nächsten Zeilen folgen dann die Angaben zu den Javascript-Dateien, die eingebunden werden sollen.
- $script_js_head - gefolgt von einem Gleichheitszeichen, einem Abschnitt mit javascript-Befehlen, die im Bereich "head" der auszugebenen Datei notiert werden sollen, und einem Semikolon.
- $login_protocol - wenn dieser Variablen der Wert true zugewiesen ist, wird erwungen, dass bei der Ausgabe der Seite allen Links bei denen kein Protokoll explizit zugewiesen ist, das Protokoll zugeordnet wird, welches in der Datei "__wm/kern/__variablen/system.php" für Seiten aus dem Mitgliederbereich vorgesehen ist.
- Schließlich folgt die Zeile mit der Zeichenfolge:
include zac4web_pfad."__zac4web/_wm/html_anfang.php";
Durch den Befehl wird die Datei html_anfang.php eingebunden, welche unter anderem prüft, ob der Aufrufer für die Seite zugriffsberechtigt ist und die header-Informationen ausgibt. - Die letzte Zeile des Abschnitts enthält die Zeichenfolge:
?>
PHP-Dateien, die nicht aufrufbar sind
Die nicht-aufrufbaren Dateien müssen mit einem php-Abschnitt beginnen, für den Folgendes gilt: In der ersten Zeile muss direkt zu Beginn die Zeichenfolge "<?php" stehen. Die nachfolgende Zeile muss nach dem Trimmen der Zeile mit der Zeichenfolge
if (!defined('zac4web_pfad'))
beginnen.
Im Ausgabemodus werden die übrigen Zeilen des ersten php-Abschnittes übersprungen, wenn die Konstante definert ist. Dann wird der Code ausgeführt, welcher auf das erste Vorkommen der Zeichenfolge ?> folgt.
Ist die Konstante "zac4web_pfad" nicht definiert ist, wird die Bearbeitung der nicht-aufrufbaren Datei sofort abgebrochen, und die Startseite des System mit dem Befehl header("location: ../index.php") aufgerufen.
Soll die Datei allerdings formularbasiert bearbeitet werden, sucht das System nach dem ersten Auftreten der Zeichenfolge ?>, welche das Ende des ersten php-Abschnitts markiert.
Wenn die erste Zeile, die auf den ersten php-Abschnitt folgt, nach dem Trimmen nicht mit der Zeichenfolge "<?php //<block>:" beginnt, kann die Datei nicht formularbasiert bearbeitet werden. Sofern die Zeichenfolge eingehalten wird, wird geprüft, ob die Struktur des Blocks eingehalten wird. Falls dieses zutrifft, wird der weitere Inhalt ebenfalls daraufhin geprüft, ob die vorgegebenen Block-Strukturen eingehalten werden. Sobald dies für einen Block einmal nicht zutrifft, kann die Datei nicht formularbasiert bearbeitet werden.
Die letzte Zeile muss genau folgenden Inhalt enthalten, damit die Datei formularbasiert bearbeitet werden kann: "<?php //Ende include ?>". Es sind keine weiteren Zeichen in der Zeile erlaubt, auch kein Leerzeichen oder ein Zeilenumbruch.
In Dateien, die in den Verzeichnissen mit folgendem Namen gespeichert sind "__funktionen", "__variablen" und "__konstanten" dürfen nur php-Blöcke stehen. Dateien in Verzeichnissen, die "_inc" heißen, dürfen beliebige Blöcke enthalten.
Die Entwurfs-Version und die aktive Version einer nicht-aufrufbaren PHP-Datei unterscheiden sich strukturell lediglich in der Anzahl der Zeichenfolge "../" vor der Zeichenfolgte "index.php" im header-Befehl und dem Dateipfad. In der Entwurfs-Version der nicht-aufrufbaren Dateien sind im Gegensatz zu den Entwurfs-Versionen der aufrufbaren Dateien also keine zusätzlichen Blöcke enthalten, welche für die Ausgabe der Schalterzeilen zuständig sind.
Verwendung des Befehls header() in einer PHP-Datei
Mit dem Befehl "header("location: ".zac4web_pfad.$seite);" wird eine Umleitung zu der Datei $seite erzwungen.
Bei den nicht-aufrufbaren Seiten wird dieser Befehl genutzt, um die Ausführung der Befehle in der Datei zu verhindern, falls die Datei per Adresszeile eines Browsers direkt aufgerufen und nicht mit einem php-Befehl in eine aufrufbare Datei eingebunden wird. Auch einige System-Dateien nutzen die Möglichkeit der Umleitung mit dem Befehl header().
Wenn mit dem header-Befehl eine PHP-Datei aufgerufen wird, die das HTML-TAG <header> erzeugt, sollte vor dem header-Befehl keinerlei Ausgabe stattgefunden haben.
Um jegliche Ausgabe vor dem header-Befehl zu vermeiden, sollten in der Datei vor dem header-Befehl außerhalb von php-Abschnitten keinerlei Zeichen stehen, auch kein einziges Leerzeichen und keine Leerzeile. Auch sollte vor dem header-Befehl in keinem php-Abschnitt ein Befehl wie z.B. echo "abc"; ausgeführt werden, welcher eine Ausgabe erzeugt.
Wird die PHP-Datei, welche den header-Befehl ausführen soll, von einer anderen PHP-Datei eingebunden, sollte auch diese PHP-Datei keinerlei Ausgabe erzeugen, und keinerlei Zeichen außerhalb von php-Abschnitten enthalten, bevor sie die Datei mit dem header-Befehl einbindet.
Denn erfolgt vor der Umleitung mit dem Befehl header() eine Ausgabe, kann dies bei entsprechender Server-Einstellung dazu führen, dass eine Fehlermeldung ausgegeben wird und/oder dass das Feld $_SESSION nicht korrekt geschrieben wird. Ist der Aufrufer der Dateim im System eingeloggt, kann letzteres dazu führen, dass notwendige Informationen fehlen, um die gewünschte Seite aus einem Mitgliederbereich aufrufen zu können.
Bearbeitungsrechte für PHP-Dateien und Zuordnung zu Verzeichnissen
Die Dateien "xxx/index.php" und "_mb_xxx/index.php" dürfen nur diejenigen formularbasiert bearbeiten und ersetzen, die für den Bereich "xxx" Administrator-Rechte besitzen
Die anderen php-Dateien, die von Nutzern erstellt/hochgeladen/bearbeitet werden (dürfen), sind in einem der "Hauptordner" des jeweiligen Bereichs "xxx" also in xxx/_admin, xxx/_red, xxx/_ad_int, _mb_xxx/_red_int und _mb_xxx/_ad_rva oder einem Unterordner davon zu speichern, damit sie ggf. formularbasiert bearbeitet werden können.
Inhaltsseiten (vom Nutzer direkt aufrufbare Seiten) dürfen formularbasiert innerhalb der Hauptordner eines Bereichs oder in einem beliebigen Unterverzeichnis davon gespeichert/abgelegt werden, sofern der Name des Unterverzeichnisses nicht für eine bestimmte Dateiart reserviert ist. So dürfen z.B. Gliederungsseiten (Seiten, in denen formularbasiert eine erweiterte Navigation erstellt werden kann - mit Hinweistexten zu den verlinkten Seiten) nur in dem Unterordner "_linkpages" der fünf Hauptordner" abgelegt werden, damit sie formularbasiert bearbeitet werden können.
Soll php-Code geschrieben werden, der in verschiedenen php-Dateien verwendet werden soll, oder möchte man den Inhalt einer aufrufbaren Datei zur leichteren Bearbeitung auf mehrere Dateien verteilen, ist dieser php-Code in sogeannten nicht-aufrufbaren Dateien zu speichern, die dann bei Bedarf mit dem Befehl include, include_once, require oder require_once in die aufrufbaren php-Dateien eingebunden werden können. Diese Dateien werden als nicht aufrufbar bezeichnet, weil sofort eine Umleitung auf die Startseite des System erfolgt, wenn die Adressse der Datei in die Adresszeile eines Browsers eingegeben wird. Sofern eine nicht-aufrufbare Datei nur Funktionsdeklarationen, Variablendeklarationen oder Konstantendefinitionen enthält, sollte sie im gleichnamigen Ordner "__funktionen", "__variablen" bzw. "__konstanten" gespeichert werden. Alle anderen nicht-aufrufbaren Dateien sind im Ordner "_inc" abzulegen. Die Zuordnung zu den Ordnern erleichtert den Anwendern die Auswahl und die Einbindung der nicht aufrufbaren Dateien in die aufrufbaren Seiten.
Entwürfe für php-Dateien des öffentlichen Bereichs werden immer, also unabhängig von dem späteren Speicherort für die Datei, in dem Unterordner "xxx/_drafts" gespeichert, Entwürfe für php-Dateien des Mitgliederbereichs in dem Unterordner "_mb_xxx/_drafts".
Zu den Ordnern mit dem Namen _inc, __funktionen, __variablen, __konstanten und _drafts können formularbasiert keine Unterordner erstellt werden. Auch werden diese Ordner (und falls Unterordner manuell erstellt wurden) formularbasiert niemals nach aufrufbaren Seiten durchsucht.
Formularbasiertes Erstellen, Bearbeiten und Veröffentlichen von PHP-Dateien
Wenn eine vorhandene Datei bearbeitet werden soll (und der Nutzer berechtigt ist, die Datei zu bearbeiten) oder eine neue Datei erstellt wird, wird bei jedem Speichervorgang die (Entwurfs-)Datei in dem Unterordner __drafts des relevanten Bereichsordners "xxx oder "_mb_xxx" gespeichert. Der Dateiname besteht aus dem vollständigen Pfad ab diesem Bereichsordner und dem Dateinamen mit der Dateikennung. Statt des Zeichens "/", mit welchem die Verzeichnisebenen voneinander abgetrennt werden, wird der Bindestrich "-" im Dateinamen verwendet. Auf diese Weise brauchen keine Unterverzeichnisse in _drafts angelegt zu werden und dennoch ist aus dem Dateinamen sofort erkennbar, zu welcher veröffentlichten / zu veröffentlichenden Datei ein Entwurf gehört. (Beispiel: Wenn die veröffentlichte Datei "home/_admin/2015/mai/heute.php" heißt, so hat die zugehörige Entwurfsdatei folgenden Namen "home/_drafts/_admin-2015-mai-heute.php").
Entwürfe können von denjenigen, welche die Datei redaktionell bearbeiten dürfen, gelöscht werden, dann wird nur der Befehl unlink() auf der Entwurfsdatei ausgeführt. Existiert zu dem Entwurf eine veröffentlichte Datei, wird diese durch den Löschvorgang in keiner Weise verändert.
Entwürfe dürfen nur von den Personen, die laut der Festletung in __wm/__konstanten/redaktion.php dazu berechtigt sind, veröffentlicht werden.
Ein Entwurf kann nur aus der Vorschau heraus veröffentlicht/gelöscht werden. Dem Redaktionsberechtigten muss dabei die Datei so angezeigt werden, wie sie in Zukunft aussehen wird. Allerdings sind in der Vorschau jeweils am Kopf und am Ende der Seite eine Schalterleiste anzuzeigen, mit denen der Redaktionsberechtigte bestätigen kann, ob er die Datei löschen oder veröffentlichen oder bearbeiten oder den Vorgang ganz abbrechen möchte.
Damit die Vorschau in dieser Weise möglich ist, muss der Entwurf für aufrufbare Dateien wie folgt aufgebaut sein: erster php-Abschnitt mit den Kopfvariablen der Datei, zweiter php-Abschnitt mit der Schalterleiste, vorletzter php-Abschnitt mit der Schalterleiste, letzter php-Abschnitt mit den Anweisungen zur Beendigung der html-Ausgabe. Zwischen dem zweiten php-Abschnitt und dem vorletzten php-Abschnitt steht der spezifische Inhalt der Datei. Er beginnt immer mit einem php-Block, es können aber beliebig viele php-Blöcke enthalten sein. Zwischen und nach diesen php-Abschnitten muss - abhängig vom Abschnittstyp oftmals HTML-Code stehen, in dem teilweise auch Javascript-Code eingebettet sein kann.
Entwürfe für nicht-aufrufbare Dateien sind für die Vorschau in eine spezifische Datei einzubinden, welche die Schalterzeilen bereitstellt.
Um Fehler im PHP-Code des Entwurfs entdecken zu können, wird die Fehleranzeige für die Skriptausführung so umgestellt, dass sämtliche Meldungen zu Fehlern im php-Code ausgegeben werden können.
- den Entwurf löschen möchte:
wird -, wenn auch die Sicherheitsabfrage bestätigt wird, - auf der Entwufsdatei der Befehl unlink() ausgeführt. - den Entwurf bearbeiten möchte:
wird der Inhalt der Datei so aufbereitet, dass die Informationen aus dem Entwurf in einem Formular ausgegeben und vom Nutzer in diesem Formular verändert werden können. - den Entwurf veröffentlichen möchte:
wird - sofern eine veröffentlichte Datei zu dem Entwurf existiert - eine Kopie der Datei in dem Systemordner __ersetzt/formular_php im Basisverzeichnis des Systems abgelegt, wobei im vollständigen Pfad der ersetzten Datei alle Schrägstriche, die einen Verzeichniswechsel kennzeichnen, durch einen Bindestrich ersetzt werden (analog zum Dateinamen in den Ordnern _drafts). An den so erzeugten Dateinamen wird hinter der Dateikennung ein Punkt und der UNIX-Zeitstempel angehängt, damit bei aufeinanderfolgenden Veröffentlichungen von Datei-Versionen alle vorherigen Versionen erhalten bleiben und jede ersetzte Version bei Bedarf wieder reaktiviert werden kann.
Im nächsten Schritt werden die Informationen aus der Entwurfsdatei in Variablen eingelesen und die Werte dieser Variablen verändert, soweit es erforderlich ist. Danach wird die Datei __zac4web/_redaktion/leere_datei.php in den Systemordner __temp kopiert, der ebenfalls im Basisverzeichnis existiert. Die angelegte Kopie aus _temp wird dann zum Schreiben geöffnet und die Werte der zuvor erzeugten Variablen fortlaufend in die geöffnete Kopie geschrieben. Nach Abschluss des Schreibvorgangs wird die Datei aus __temp geschlossen und umbenannt. Dadurch erhält sie den vom Nutzer gewünschten Dateinamen und wird im gewünschter Verzeichns gespeichert. Wenn die Umbenennung erfolgereich durchgeführt wurde, wird der zugehörige Entwurf per unlink() gelöscht.
Navigationsdateien und ihre formularbasierte Bearbeitung
Navigationsdateien sind zwar auch PHP-Dateien innerhalb des Systems, werden aber auftrund ihrer spezifischen Eigenschaften nicht wie die anderen PHP-Dateien behandelt. Die Navigations-Dateien müssen den Dateityp "php" besitzen, damit sie von den php-Skripten, welche die Ausgabe der Navigationsmenüs steuern, eingebunden werden können. Die Navigationsdateien dürfen nur stark strukturieren reinen html-Code enthalten, damit die Navigationsmenüs in einer Anwendung optisch immer identisch aussehen. Daher gibt es für die Navigations-Dateien ein eigenständiges Bearbeitungsformular.
Allgemeine Navigationsdateien, die unabhängig vom Bereich ausgegeben werden können, dürfen von System-Administratoren formularbasiert erstellt und bearbeitet werden. Diese Dateien werden unmittelbar im Verzeichnis __wm gespeichert.
Zu jedem Bereich "xxx" kann es im Ordner "xxx" die Navigationsdatei "navigation.php" geben. Diese Navigationsdatei kann für den Kernbereich "home" des Systems nur von System-Administratoren formularbasiert bearbeitet werden. Für alle anderen Bereiche reicht dagegen schon das Recht "redaktion_offen" für die Bearbeitung aus. Jeder, der die Datei "xxx/navigation.php" formularbasiert verändern darf, kann über Auswahllisten Links zu allen aufrufbaren Seiten aus den Verzeichnissen "xxx/_admin" und "xxx/_red" sowie deren Unterordnern in diese Navigationsdatei einfügen. Bereichs-Administratoren können außerdem beliebige Sprungziele in der Navigationsdatei notieren.
Wenn zu einem Bereich ein Mitgliederbereich vorhanden ist, können in dem Ordner "_mb_xxx" die sechs Navigationsdateien "navigation.php", "navigation_pruefling.php", "navigation_redaktion_intern.php", "navigation_redakation_offen.php", "navigation_verwalten.php" und "navigation_admin.php" gespeichert sein, die ebenfalls formularbasiert bearbeitet werden können.
Einfachen Mitglieder des Bereichs "xxx" werden beim Aufruf einer Seite aus dem Mitgliederbereich in der Navigationsspalte nur die Einträge aus der Datei "_mb_xxx/navigation.php" angezeigt. Die Namen der übrigen Navigations-Dateien weisen darauf hin, welches Zugriffsrecht ein Aufrufer mindestens im Bereich besitzen muss, damit ihm auch die Einträge aus diesen Navigationsdateien angezeigt werden.
Für die Bearbeitung der Navigationsdatei "_mb_xxx/navigation.php" reicht das Zugriffsrecht "redaktion_intern" aus. In diese Navigationsdatei kann jeder, der diese Datei formularbasiert bearbeiten darf, per Auswahlliste Sprunglinks zu allen aufrufbaren Dateien aus "_mb_xxx/_ad_int" und "_mb_/_red_int" und deren Unterordnern einfügen. Die Navigationsdatei navigation.php darf nur Schalter zu den Seiten enthalten, für die das Zugriffsrecht "mitglied" ausreicht.
Alle anderen Navigations-Dateien können nur von Bereichs-Administratoren verändert werden. In diese Navigationsdateien können die Bereichs-Administratoren per Auswahlliste auch die Dateien aus dem Ordner "_mb_xxx/_ad_rva" als Sprungziele "eingebaut" werden. Dabei sollte darauf geachtet werden, dass das jeweils benötigte Minimalrecht für den Aufruf der verlinkten Datei zu dem Recht passt, welches für die Anzeige der Navigationsdatei nötig ist (erkennbar an dem Teil des Dateinamens nach der Zeichenfolge "navigation_").
Bereichs-Administratoren können in allen Navigationsdateien außerdem beliebige Sprungziele notieren.
Die Navigationsdateien dürfen fehlen oder leer sein. Wenn das System den Inhalt für das Navigationsmenü des Bereichs oder die mobile Navigation/Sitemap erzeugt, liest es - sofern die Dateien vorhanden sind und der Aufrufer den erforderlichen Rechtestatus besitzt - den Inhalt aus diesen Dateien ein. Außerdem schreibt das System - abhängig von dem Login-Status und den Zugriffsrechten des Aufrufers im Bereich - in das Navigationsmenü immer mindestens einen der Standard-Schalter, die für die Funktionsweise von "zac4web" benötigt werden.
Wenn für einen Link in einem Navigationsmenü ein bestimmtes Protokoll erzwungen werden soll, kann dieser Link-Eintrag nur von den Bereichs-Administratoren in das Navigationsmenü eingefügt werden, weil in diesem Fall der vollständige Pfad zu der Datei inklusive des Protokolls in die Navigationsdatei eingetragen werden muss. Das Erzwingen des Protokolls "https" für Links, die auf Dateien des Systems verweisen, ist allerdings nur dann sinnvoll, wenn vom System das Protokoll "https" genutzt werden darf. Dass Erzwingen des Protokolls "http" kann zu einer Sicherheits-Warnung des Browsers führen, wenn eine Seite mit dem eingebetteten Navigationsmenü selber mit dem Protokoll "https" im Browser aufgerufen wird.
Bei kleineren Webanwendungen enthält u.U. die öffentliche Navigationsdatei des Bereichs "home" auch die Namen der anderen Bereiche. Um irritierende Doppelnennungen dieser Bereichsnamen in der mobilen Gesamtnavigation und der Sitemap zu vermeiden, können die System-Administratoren wählen, ob die Einträge aus der öffentlichen Navigationsdatei des Bereichs "home" wie die Einträge aus den öffentlichen Navigationsdateien der allgemeinen Bereiche in der mobilen Gesamtnavigation und der Sitemap ausgegeben werden sollen, oder nicht. Damit aber die Einträge aus der unterdrückten öffentlichen Navigationsdatei "home" in der mobilen Gesamtnavigation und der Sitemap angezeigt werden können, die nicht die Startseite eines Bereichs mit öffenlicher Navigations-Datei sind, gibt es die zweidimensionalen Felder (numerisch/assoziativ) $erste_Schalter und $letzte_Schalter. Die Einträge aus diesen Feldern werden automatisch in die mobile Gesamtnavigation bzw. in die Ausgabe der Navigation auf der Seite Sitemap eingefügt.
Navigations-Dateien für Inhaber-Bereiche werden niemals in der mobilen Navigation und auch nicht in der Sitemap aufgelistet. Auch für allgemeine Bereiche kann die Ausgabe der Navigations-Dateien in der mobilen Navigation und der Sitemap unterdrückt werden, damit die Gesamtnavigation nicht zu umfangreich wird. Die Seiten der Inhaber-Bereiche und dieser allgemeinen Bereiche sind für die Mitglieder der Bereiche immer über die Seite "__zac4web/_System/bereich_wechseln.php", die per Schalter aus der Gesamtnavigation und auch der Bereichsnavigation aufrufbar ist. Außerdem kann auf die Seiten u.U. auch über die Bereichssuche zugegriffen werden. Die Erreichbarkeit für die Seiten dieser Bereiche kann erhöht werden, indem Links zu den öffentlichen Startseiten dieser Bereiche in Gliederungsseiten oder in Navigationsdateien jener allgemeinen Bereiche notiert werden, deren Navigationsmenüs in der Sitemap/mobilen Navigation ausgegeben werden.
Videos und Audio-Dateien
Die System-Administratoren legen fest, welche Kombination von Datei-Kennung und Mime-Typ eine Datei aufweisen muss und wie groß die Dateien maximal sein dürfen, damit sie als Video oder als Audio-Datei gespeichert werden kann. Der Mimetyp kann beim Upload allerdings nur geprüft werden, wenn die Erweiterung fileinfo geladen ist. Fehlt die Erweiterung kann eine sonstige Datei nur dann hochgeladen werden, wenn die System-Administratoren ausdrücklich festgelegt haben, dass der Mime-Typ nicht geprüft werden muss.
Videos und Audio-Dateien werden in den Unterordnern "_video" bzw. "_audio" des Ordners "_medien" gespeichert, der sowohl im öffentlichen Bereichsverzeichnis als auch im Verzeichnis für den Mitgliederbereich bei der Neuanlage eines Bereichs / Mitgliederbereichs erzeugt wird. Videos und Audio-Dateien, die in diesen Ordnern, oder einem Unterordner davon gespeichert sind, können mit dem Redaktionssystem formularbasiert so in PHP-Dateien "eingebaut" werden, dass sie beim Abruf der Datei im Browser direkt angezeigt/abgespielt werden können.
Videos und Audio-Dateien können durch Umbenennung und Verschiebung in ein Unterverzeichnis des Ordners "__ersetzt" scheinbar gelöscht werden. Weil sie aber auch als "versteckte" Dateien weiterhin (viel) Speicherplatz belegen, sollten sie möglichst immer endgültig gelöscht werden, sobald feststeht, dass eine versteckte Datei nicht mehr reaktiviert werden soll.
Sonstige Dateien
Welche Dateitypen, der unspezifische Begriff "sonstige Dateien" umfasst, legen die System-Administratoren für das System fest. Die "sonstigen Dateien" werden vom System formularbasiert in den Unterverzeichnissen von "xxx/_upload" gespeichert. Der Inhalt der Dateien, die in einem Unterverzeichnis von "xxx/_upload" gespeichert sind, kann nicht mit den Systemformularen verändert werden, selbst wenn es PHP-Dateien sind.
Das System stellt den System-Administratoren drei Vorgabe-Dateien zur Verfügung, mit denen sie steuern können, welche Dateitypen die Dateien aufweisen müssen und wie groß die Dateien maximal sein dürfen, die in den Upload-Verzeichnissen "xxx/_upload" gespeichert werden dürfen. Für die Prüfung auf den Mime-Typ gelgen die gleichen Regeln, wie sie schon zuvor für Videos und Audio-Dateien genannt wurden.
Arbeitsblätter
Arbeitsblätter sind technisch gesehen aufrufbare php-Dateien, die mit dem Redaktionsformular bearbeitet werden können. Allerdings unterscheiden sie sich von anderen aufrufbaren Dateien in vielerlei Hinsicht. Außerdem werden für die Steuerung der Arbeitsblattverwaltung zusätzliche php-Dateien benötigt.
Arbeitsblätter können von Bereichsadministratoren aus veröffentlichten PHP-Dateien des Typs "Inhaltsseite" formularbasiert erzeugt werden. Die Ausgangsdatei wird durch diesen Vorgang nicht verändert.
Während der Erzeugung der Arbeitsblätter wird festgelegt, ab welchem Zeitpunkt das Arbeitsblatt angezeigt werden darf und bis wann es von den Personen, an die das Arbeitsblatt verteilt wird, mit dem Redaktionssystem bearbeitet, also um Antworten ergänzt werden darf. Außerdem legt der Administrator fest, welche Bereichsmitglieder das Arbeitsblatt bearbeiten sollen. Diese müssen mindestens das Login-Recht "pruefling" besitzen.
Die Erzeugung und Verwaltung der Arbeitsblätter wird über das Skript "__zac4web/_redaktion/ab_und_umfrage_verwalten.php" gesteuert. Mitglieder können auf ihre Arbeitsblätter über das Skript "__zac4web/_redaktion/arbeitsblatt.php" zugreifen.
Arbeitsblätter und die zugehörigen Steuerungsdateien werden immer in Unterverzeichnissen des Unterordners "_test" im Ordner "_red_int" im Mitgliederbereich gespeichert. Sobald das erste Arbeitsblatt erzeugt wird, wird der Unterordner "_test" für den Mitgliederbereich angelegt. Der Ordner "_test" und dessen Inhalt kann formularbasiert nur über das Skript zur Verwaltung von Arbeitsblättern angezeigt und gelöscht werden.
Detailliertere Hinweise zu Arbeitsblättern enthält die Datei Hinweise - Arbeitsblätter.
Bilder
Damit Bilder formularbasiert eingebaut werden können, sind diese grundsätzlich in einem Ordner "Bilder" oder einem Unterordner davon abzulegen. Die Ordner "Bilder" sind jeweils direkte Unterordner zu den Bereichsverzeichnissen "xxx" und Mitgliedsverzeichnissen "_mb_xxx". Die Bilder aus dem Verzeichnis "home/Bilder" können formularbasiert in allen Seiten eingebettet werden, die Bilder aus dem Verzeichnis "_mb_home/Bilder" nur in den Seiten aus einem Verzeichnis "_mb_xxx" oder deren Unterverzeichnissen. Bilder, die in den Verzeichnissen anderer Bereiche gespeichert sind, können formularbasiert nur für die Seiten jenes Bereichs/Mitgliederbereichs-Verzeichnis verwendet werden. Der formularbasierte Einbau der Bilder per Auswahlliste ist allerdings nur möglich, wenn die Bilder so strukturiert abgelegt werden, wie dies im Abschnitt Bilder hochladen beschrieben ist.
Bilder hochladen
Bilder der Typen .JPG und .PNG können -, wenn das System die Bildmanipulation unterstützt, - während des Upload-Vorgangs vom Nutzer gedreht, mit einem Copy-Right-Hinweis beschriftet und in verschiedenen Größenvarianten abgespeichert werden. Für jedes Bild wird im Ordner "Bilder" oder einem seiner Unterordner ein Verzeichnis angelegt, welches als Namen den vom Nutzer gewünschten Bildnamen besitzt. Dieser Name darf nicht mit einem Unterstrich beginnen. In den Verzeichnissen für die Bilddateien sind die Größenvarianten der Bilder jeweils anhand des Dateinamens zu erkennen: "original" (z.B. original.JPG) steht für die Originalgröße des Bildes, "miniatur" steht für ein Bild in thumbnail-Größe, damit bei Bildsuchen mit wenig Datenvolumen eine große Anzahl an Bildern zur Auswahl präsentiert werden kann. Ein Dateiname von z.B. 160. steht für eine Verkleinerung des Original-Bildes auf die Breite auf eine Pixelbreite von 160. Sinnvolle Werte für Verkleinerungen sind 160, 256, 320, 512, 800 und 1024 bei einer Breite des HTML-Tags <body> von ca. 1000 Pixel. Eine Vergrößerung des Original-Bildes sollte nicht durchgeführt werden, weil das Bild dann unscharf wird. Die Dateiendung "endung" ist identisch mit der Dateiendung des Original-Bildes, sofern der Nutzer nicht die Änderung des Bildtyps von JPG zu PNG wünscht.
Wenn auf dem Server die Erweiterung zum Manipulieren installiert ist, wird - sofern das Bild, welches gespeichert werden soll, die Größe von "bild_size_miniatur" px in der Breite oder "bild_size_miniatur" px in der Höhe überschreitet, in jedem Fall eine verkleinerte Version des Bildes gespeichert. Das Bild wird dabei so verkleinert, dass die Relationen Höhe:Breite des Originalbildes beibehalten werden und die größere der beiden Dimensionen (Höhe, Breite) im verkleinerten Bild genau "bild_size_miniatur" px groß ist. Der Dateiname für diese Bildversion lautet "miniatur". Ist das Bild kleiner als die vom System verwendete Standardgröße für Miniaturbilder, wird das Bild nur in der Originalgröße gespeichert (Dateiname: "original"). Miniaturbilder werden vom System verwendet, wenn ein Nutzer formularbasiert ein Bild auswählen möchte, um es in eine Seite einbinden zu können.
Wenn auf dem Server die Erweiterung zum Manipulieren fehlt, wird das Bild nur unverändert in der Originalgröße gespeichert und das Bild erhält den Namen original, sofern das Bild nicht in der Breite oder Höhe die anwendungs-spezifische Vorgabe der maximal zulässigen Pixel überschreitet. Ist das Bild in einer Dimension größer als die anwendungs-spezifische Vorgabe wird das Bild nicht gespeichert. Der vom Nutzer gewünschte Bildname wird auch in diesem Fall als Ordnername verwendet, in dem die Bilddatei gespeichert wird.
Die Namen der Unterverzeichnisse im Ordner "Bilder", welche nicht unmittelbar Bilddateien enthalten, sondern Bild-Verzeichnisse aufnehmen (sollen), müssen mit einem Unterstrich beginnen, damit das System beim Erstellen von Listen mit Bildverzeichnissen, die zur Auswahl angeboten werden, diese selber nicht anzeigt, sondern nur deren Unterordner, die echte Bildverzeichnisse sind.
Wenn der Nutzer formularbasiert einen derartigen Unterordner im Verzeichnis "Bilder" oder einem Unterordner davon anlegt, darf er den führenden Unterstrich für den Dateinamen nicht mit eingeben. Der Unterstrich wird vom System automatisch ergänzt, wenn der vom Nutzer eingegebene Name als Ordnername zulässig ist.
Bilder löschen
Weil pro Bild immer ein Ordner angelegt wird, in dem u.U. verschiedene Versionen eines Bildes gespeichert sind, können Bilder formularbasiert nur endgültig gelöscht werden.
Vor dem Löschen von Bildern erfolgt ein allgemeiner Hinweis, dass Links in anderen Dateien, welche auf eine der Bildversionen in dem Bild-Ordner verweisen, erhalten bleiben, und dass diese Links einen Fehler vom Typ "file not found" ausgelösen, wenn sie ausgewählt werden.
Die System-Administratoren legen fest, ob automatisch mails verschickt werden und an wen (Aufrufer, Administrator, Webmaster), wenn Bilder gelöscht werden.
Chat-Medien-Dateien
Innerhalb von Chats können Bilder, Videos und Audio-Dateien als Chat-Beiträge veröffentlicht werden. In der Datenbanktabelle für den Chat wird in diesen Fällen, immer nur die Adresse der Datei innerhalb des Systems als Inhalt des Beitrags gespeichert. Beim Abruf des Chat-Beitrags wird der Link zur Datei für die Ausgabe in das HTML-Element eingebettet, mit dem es im Browser ausgegeben werden kann. Weil die Entwickler davon ausgehen, dass Chat-Medien-Dateien innerhalb des Systems nur "kurzlebig" sind, wird die Verlinkung von Chat-Medien-Dateien ansonsten nicht unterstützt.
Der Upload der Chat-Medien-Dateien ist nur über das Chat-Formular möglich. Damit in den Chat keine anderen Dateien als Beiträge hochgeladen werden können, werden die Dateien beim Upload-Vorgang auf zulässige Kombinationen von Datei-Kennung und Mimetyp geprüft, wenn die Erweiterung fileinfo geladen ist. Fehlt auf dem Server diese Erweiterung können Chat-Medien-Dateien nur dann hochgeladen werden, wenn die System-Administratoren eingestellt haben, dass bei einem Datei-Upload nicht der Mimetyp der Datei geprüft werden muss. Für Bilder als Chat-Beitrag gelten die gleichen Kombinationen von Datei-Kennung und Mime-Typ, wie sie vom System für den Upload von Bildern vorgegeben werden. Für Audio-Dateien und Video-Dateien gelten die von den System-Administratoren vorgegeben Kombinationen.
Mit den Formularen des Chat-Bereichs können nicht nur Chat-Beiträge veröffentlicht werden, sondern auch Chat-Beiträge gelöscht werden. Wird dabei ein Chat-Beitrag gelöscht, dessen Inhalt nur ein Dateipfad ist, so wird automatisch versucht, auch die zugehörige Chat-Medien-Datei zu löschen.
Den Bereichs-Administratoren wird - um ihnen die Verwaltung ihres Bereiches zu erleichtern - ein Formular angeboten, mit dem Sie den Ordner leeren können, in dem die Chat-Medien-Dateien des Bereichs gespeichert werden. Über dieses Formular können sie auch gezielt einzelne Chat-Medien-Dateien löschen. Wenn über dieses Formular eine Chat-Medien-Datei gelöscht wird, versucht das System, auch den zugehörigen Chat-Beitrag zu löschen, damit im Chat kein verwaister Link verbleibt bzw. bei Chat-Mitgliedern, die den Chat-Beitrag ein weiteres Mal abrufen, nicht die im Browser-Cache schon gespeicherte Datei erneut als Chat-Beitrag ausgegeben wird.
Wird eine Chat-Medien-Datei gelöscht, so ist dieses immer unwiderruflich, sie wird also beim Löschen niemals in einen Unterordner des Verzeichnisses "__ersetzt" verschoben.
© zacher-info.de
- Seite zuletzt geändert: 05.01.2021 - Elisabeth Zacher

