
    Wichtige adresSQL-Variablen
    ---------------------------

    AdresSQL bietet eine Vielzahl an vorbelegten Variablen, die für Prüfungen und andere Zwecke herangezogen werden können. Der grösste
    Teil ist in SESSION  Variablen untergebracht, einige Variablen (zB. Pfade zu Modulen) haben feste Namen.

    Hier nun eine Auflistung der wichtigsten:


        * <b>$_SESSION['login']</b>

        Bei einem korrekten Login wird diese Variable mit den Kontrolldaten aus der Konfiguration ($config['is_logged_in']) belegt.
        Damit das passiert, muss man die datei auth.php durchlaufen. Ist diese Variable ungleich den Einstellungen aus der Konfiguration,
        kann man davon ausgehen, dass sich jemand unberechtigten Zugriff auf das Script verschafft hat oder ein Script direkt aufgerufen hat.
        Bei Admin-Scripten prüfe ich also, ob diese Variable gleich der Konfigurationseinstellung ist, wenn nein, wird die Verarbeitung
        abgebrochen. In allen Admin.Scripten findet sich daher der Eintrag:

            if($_SESSION['login'] != $config['is_logged_in'])
            {
                no_access_allowed();
                exit;
            }



        * <b>$_SESSION['is_admin']</b>

        Beim Login wird festegestellt, ob ein User Adminrechte besitzt oder nicht. Entsprechend wird die Variable mit 1=ja und 0=nein belegt.

            if($_SESSION['login'] != $config['is_logged_in'] OR ($_SESSION['is_admin'] != 1))
            {
                no_access_allowed();
                exit;
            }

        prüft nicht nur, ob ein User eingeloggt ist, sondern auch, ob er Admin ist, wenn nein, wird das Script beendet.



        * <b>$_SESSION['user_is_readonly']</b>

        Beim Login wird (ähnlich dem Adminstatus) festgelegt, ob ein User nur Leserechte hat. Auch hier gilt 1=ja 0=nein. Readonly hat
        zur Konsequenz, dass keine Eingaben und Ausdrucke getätigt werden können und man nur Zugriff auf Daten hat, die einem selber gehören
        oder öffentlich zugängig sind.



        * <b>$_SESSION['user_mail_ad']</b>

        Belegt mit der Mailadresse des eingeloggten Users



        * <b>$_SESSION['user_data']</b>

        In dieser Variablen liegt ein Array mit allen Anmelde-Userdaten aus der Tabelle user.



        * <b>$_SESSION['temp_userhash']</b>

        Ist ein MD5 Hash bestehend aus Userid, Vor und Nachname eines Users und wird dazu verwendet einem User ein Temporäres Verzeichnis
        zuzuordnen, in dem usereigene Daten, z.B. seine eigenen Downloads, Vorschaubilder für PDF-Dateien, oder User-Einstellungen abgelegt
        werden. Das Verzeichnis befindet sich unter dem Pfad:

                templates/adressenscript/temp



        * <b>$_SESSION['script_name']</b>

        Der hier eingetragene Name wird verwendet, um bei Fehlern den Scriptnamen, wo der Fehler aufgetreten ist, angeben zu können. Ich belege
        in nahezu jedem Script diese Variable mit dem Namen des Scripts um die Fehlerquelle identifizieren zu können. In der install.php findet
        sich z.B. ein Eintrag

            $_SESSION['script_name'] = 'install.php';

        Produziert diese Datei einen SQL-Fehler erzeugt diese Variable dann z.B. einen Eintrag wie:

            1464782774  --> <b><font color="red">install.php</font></b>  (1046) No database selected SELECT * FROM `ad_inst`



        * <b>$_SESSION['backpath']</b>

        Module werden von mir "eingesperrt", indem ich mit chdir() in das Modulverzeichnis wechsle. Damit ändern sich permanent die Pfade zu
        einigen wichtigen Dateien/Funktionen (z.B. das Fehlerlogging für SQL-Fehler oder die Sprachdateien).
        Damit die Pfade weiterhin korrekt sind, muss ich den Funktionen mitteilen, wie sie wieder auf den korrekten Weg kommen.

        Ein Bsp.

            Wir wechseln mit chdir() in das Verzeichnis <i>templates/mailarchiv</i> und starten ein Script, dass an der Datenbank
            etwas ändert. In diesem Script ist nun ein SQL-Fehler, den wir loggen wollen. Das Fehlerlogging geht aber immer vom root-Verzeichnis
            aus und will auf den Pfad <i>templates/admin/errorlog</i> zugreifen. Was passiert also?

            1.
            Unser Fehler-Log liegt unter <b>templates/admin/errorlog</b>

            2.
            Wir sind aber momentan im Verzeichnis <b>templates/mailarchiv</b> gefangen. Das Errorlogging sucht nun in diesem
            Verzeichnis nach dem Pfad. Das würde ergeben, das Logging will nach

                <i>/templates/mailarchiv/templates/admin/errorlog</i>

            schreiben.

            3.
            Wir müssen also 2 Ebenen höher, um wieder im root-Verzeichnis zu landen und von da kennt das Logging wieder seinen Weg.

            LÖSUNG:

            Wir belegen die Variable $_SESSION['backpath'] = '../../'; Nun weiss das Logging, dass es vor dem schreiben in die Errorlog
            2 Ebebenen höher muss um seinen Pfad zu finden.

        Da ich selber ab und zu mehrere Fenster offen habe, hat es sich bewährt, vor einem chdir() den aktuellen Backpath zu speichern und
        am Ende des Scripts $_SESSION['backpath'] wieder mit diesem Wert zu belegen. Ich stolpere selbst öfter über diesen Fehler.



        * <b>$_SESSION['show_collumn']</b>

        AdresSQL stellt einen Funktion zur Verfügung, die Tabellen auslesen und anzeigen kann, indem man eine einzige SQL-Anweisung über-
        gibt. Die Funktion heisst myfetch_table() (siehe dazu die Hilfe SQL-Funktionen, dort wird die Funktion genau beschrieben).
        Nun bestehen Datenbank-Tabellen häufig aus sehr vielen Feldern. Manchmal möchte man alle Felder anzeigen lassen, manchmal nur be-
        stimmte Felder.
        Diese Variable legt nun nicht nur fest, welche Felder angezeigt werden sollen, sondern auch in welcher Reihenfolge.

        Nehmen wir die Adressentabelle her, die nach der Installation aus 23 Feldern besteht. Möchten wir nun nur die Felder

            1=adr_id
            2=anrede
            3=vorname
            4=nachname

        anzeigen lassen, belegt man die Variable mit einer Liste der Feldnummern, also $_SESSION['show_collumn'] = '1,2,3,4'; ergibt sich eine
        Ausgabe wie folgt:

            adr_id      anrede      vorname     nachname

        Indem man die Feldnummer an die entsprechende Stelle stellt, wird die Anzeige umsortiert. $_SESSION['show_collumn'] = '4,3,1,2';
        würde also eine Tabelle mit folgendem Inhalt anzeigen:

            nachname    vorname     adr_id      anrede



        * <b>$_SESSION['adr_table']</b>

        Ist eine spezielle Variable, für die Funktion myfetch_table().
        Sie teilt der Funktion myfetch_table() mit, ob Besonderheiten bei der Abfrage der Adressdaten berücksichtigt werden sollen.
        Steht dieser Wert auf <b>'adressen'</b> wird der Funktion mitgeteilt, dass die Adresstabelle abgefragt wird und es werden spezielle
        Prüfungen und Ausgabeformatierungen für einzelne Felder vorgenommen.
        Steht der Wert auf <b>'kalender'</b> gilt das selbe, nur für die Termintabelle.
        Ist der Wert leer ('') werden die speziellen Formatierungen nicht berücksichtigt.



        * <b>$_SESSION['format_element']</b>

        Ist eine spezielle Variable, für die Funktion myfetch_table().
        Die Variable enthält eine Komma getrennte Liste mit Feldnummern, die als Datum formatiert ausgegeben werden sollen. AdresSQL legt alle
        Datumswerte als time(), also nummerische Werte im Unix-Timestamp Format, in den Tabellen ab. Werden die Daten mit myfetch_tabel() aus-
        gegeben, kann man der Funktion mitteilen, in welchen Feldern sich nun solche Werte befinden und die Funktion konvertiert den Wert zu
        einem lesbaren Datumsformat.
        Diese Variable wird nur berücksichtigt, wenn die Variable $_SESSION['adr_table'] ungleich 'adressen' ist.


        * <b>$_SESSION['sorting']</b>

        Ist eine spezielle Variable, für die Funktion myfetch_table().
        Die Variable kann auf die Werte 'on' und 'off' gestellt werden und gibt an, ob in der Ausgabetabelle ein Sortierlink angegeben werden
        soll.

            In diesem Zusammenhang sind noch die Variablen:

                $_SESSION['sort_link'], $_SESSION['field'] und $_SESSION['sort']

            von Bedeutung.

            $_SESSION['sort_link']
            Mit dieser Variablen kann an die Funktion myfetch_table() ein spezieller Sortierlink angeben werden. Für gewöhnlich entspricht
            dieser Wert der Variablen $_SERVER['SCRIPT_NAME'], es können aber auch weitere $_GET Parameter im Link angegeben werden.

            $_SESSION['sort']
            Sie gibt an, ob 'ASC' (aufsteigend) oder 'DESC' (absteigend) sortiert werden soll

            $_SESSION['field']
            Sie gibt den Feldnamen, für die aktive Sortierspalte an.



        * <b>$_SESSION['highlight']</b>

        Gibt einen Liste von Begriffen, getrennt durch ^, an, die in einem Text gesucht und besonders hervorgehoben werden sollen.
        Um das Highlight zu aktivieren, wird entweder myftech_table() für die Ausgabe genutzt, oder man leitet einen String durch
        die Funktion highlight($text). Dann wird Text, der mit der Liste aus der Variablen übereinstimmt, farbig hervorgehoben.



        * <b>$_SESSION['wztooltip']</b>

        Diese Variable steht entweder auf <b>'an'</b> oder <b>'aus'</b> und regelt, ob das JS-Tooltip-Script von Walter Zorn geladen werden
        soll oder nicht. Wird das Script geladen kann über Tags "a","td", "input" und "span" das Tooltip-Tool verwendet werden. Das Script
        erlaubt es in Tooltips Bilder, Links und funktionierenden HTML-Code auszugeben. Auf eine genaue Verwendeung gehe ich hier nicht ein,
        aber dieses Script ist eines der Besten, die ich bisher gefunden habe.


        * <b>$_SESSION['aktion']</b>

        In adresSQL entspricht im Wesentlichen jede Kartei einem eigenen 'Modul', Module arbeiten (bei mir) nicht alle aus dem Basedir heraus,
        sondern werden in Unterverzeichnnissen untergebracht. Es ist also notwendig für adresSQL zu wissen, in welchen Unterverzeichnissen
        welches Modul Untergebracht ist. Weiters ist wichtig zu wissen, welche Karte derzeit aktiv ist. Ich regle das so:

            Jeder Karteikarte wird ein nummerischer Parameter fest zugewiesen, erkennbar an dem $_GET Parameter 'aktion' im Link, wenn man
            eine Kartei anklickt. Den genauen Parameter jeder Kartei können Sie sich unter

                "<i>Administration -> Grundeinstellungen -> Nav- Karteikarten anpassen</i>"

            ansehen, es ist der numerische Wert unter ID.

            Klickt man eine Karte an, wird diese zur aktiven Kartei und der 'aktion' Parameter wird in $_SESSION['aktion'] gespeichert.
            Das ist hilfreich, wenn man z.B. einen Link generieren möchte, der den Parameter zur aktiven Kartei oder einer anderen Kartei
            beinhalten soll oder wenn man ein separates Fenster öffnet und wieder zur aktiven Kartei zurück möchte.
            Ausserdem dient dieser Parameter als Index in diversen anderen Variablen (siehe dazu unten z.B. die Variable $moddir).

        Dieser Wert darf nicht mutwillig geändert werden, adresSQL sorgt selbst dafür, dass die Variable korrekt befüllt wird. Änderungen
        hätten zur Folge, dass u.U auf ein falsches Arbeitsverzeichnis zugegriffen wird.

        Startet man adresSQL werden diese fest vergebenen Parameter ebenfalls dazu verwendet um einige arrays zu generieren, deren Index
        ich an dem 'aktion' Parameter orientiert.

            $moddir => Array
            (
            |    ['0'] = String(9) "templates"
            |    ['1'] = String(24) "templates/adressenscript"
            |    ['8'] = String(20) "templates/userupload"
            |    ['2'] = String(17) "templates/termine"
            |    ['5'] = String(16) "templates/events"
            |    ['3'] = String(19) "templates/statistik"
            |    ['6'] = String(17) "templates/tmanage"
            |    ['7'] = String(18) "templates/gallerie"
            |    ['4'] = String(15) "templates/admin"
            )

        Nun kann man in einem Modul den Pfad, in dem es untergebracht ist, leicht ermittelen, indem man die Variable

            <b>$moddir[$_SESSION['aktion']]</b>

        ausliest.

        Weitere Arrays sind:

            $template => Array
            (
            |    ['0'] = String(14) "uebersicht.tpl"
            |    ['1'] = String(14) "adr_script.tpl"
            |    ['8'] = String(11) "userupl.tpl"
            |    ['2'] = String(11) "termine.tpl"
            |    ['5'] = String(10) "events.tpl"
            |    ['3'] = String(13) "statistik.tpl"
            |    ['6'] = String(11) "tmanage.tpl"
            |    ['7'] = String(12) "gallerie.tpl"
            |    ['4'] = String(9) "admin.tpl"
            )

        <b>$template[$_SESSION['aktion']]</b> ergibt also den Namen des Templates, das zum starten eines Moduls notwendig ist.


            $allow_subdir => Array
            (
            |    ['0'] = Integer(1) 0
            |    ['1'] = Integer(1) 0
            |    ['8'] = Integer(1) 0
            |    ['2'] = Integer(1) 0
            |    ['5'] = Integer(1) 1
            |    ['3'] = Integer(1) 1
            |    ['6'] = Integer(1) 1
            |    ['7'] = Integer(1) 0
            |    ['4'] = Integer(1) 0
            )

        Weiters wird ermittelt, ob ein chdir() erfolgend darf. Das ist dann der Fall, wenn

            a.) das eingetragene Unterverzeichnis existiert
            b.) das eingetragene Template in diesem Unterverzeichnis existiert

        <b>$allow_subdir[$_SESSION['aktion']]</b> legt also fest, ob mit chdir in dieses Verzeichnis gewechselt werden darf (1=ja 0=nein)

        Damit lässt sich einiges anfangen. z.B. kann man so unproblematisch auf Dateien aus verschiedenen Modulen zugreifen, Pfade sichern
        und setzen oder Prüfungen, ob ein bestimmtes Modul vorhanden ist, erledigen.


        * <b>$_GET['aktion']</b>

        Diese Variable legt fest, welche Karteikarte aufgerufen werden soll (genaueres siehe dazu unter $_SESSION['aktion'])



        * <b>$_GET['init']</b>

        Diese Variable legt fest, dass ein komplettes Reset der Ausgabe erfolgen soll



        * <b>$_GET['reinit']</b>

        Diese Variable legt fest, dass die Ausgabe für die bestehende Anzeige zurückgesetzt werden soll.



        * <b>$_SESSION['login_id']</b>

        Belegt mit der ID des eingeloggten Users



        * <b>$adressql_added_style</b>

        Wird diese Variable vor dem Aufruf des header-Templates mit einem Pfad zu einem Style belegt wird das Style im header geladen.
        Die Variable ist dazu gedacht einmalige Styleaufrufe zu ermöglichen. Für ein ständiges Laden von zusätzlichen Sytles kann die
        Datei <i>styles/added_stylesy</i> herangezogen werden.



        Einige Variablen sind als Dateien maskiert und befinden sich im verzeichnis <b>vars</b>, bei manchen Dateien reichtes wenn die
        Datei existiert, in manchen Fällen ist aich der Inhalt der Datei relevant.     
                        
        
        
        * <b>vars/CONVERTLOG</b>
        
        Legt bei Existenz fest, ob pdf-convertierungen geloggt werden sollen oder nicht.
        
        
        
        * <b>vars/ENABLE_CLONE</b>
        
        Legt bei Existenz fest, ob das Klonen von Datensätzen ein oder ausgeschalten, also erlaubt, ist.
        
        
        
        * <b>vars/ENABLE_SAVETY</b>
        
        Die Existenz der Datei schaltet die Prüfung der IP für das Login ein/aus. Ohne gültige, eingeragene IP kann sich der User dann 
        nicht mehr anmelden. Eine Liste der IP`s, die die Erlaubnis haben sich zu verbinden findet man ind der Datei 
            
            templates/admin/sfetyvar/.htsafety 
        
        Dort ist Zeilenweise eine Liste aller erlaubten IP`s eingetragen. 
        
        
        * <b>vars/SQL_MODE</b>
        
        Eine der wichtigen Dateien, wenn man z.B. mit MariaDB arbeitet. MariaDB ist oft wesentlich restrektiver, wenn es um SQL-Statemens
        geht. Mit dieserDatei lässt sich nun für die Session festlegen, welcher SQL_MODE für die Session gesetzt werden soll. Aktuell
        ist der Standardwert
            
            NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
            
        und versetzt die Datenbank wieder in den Zustand einer MYSql Datenbank wie unter Debian 9. 
        
        
        
        * <b>vars/CLEAN_QUERY</b>
            
        ist die Datei gesetzt (existiert die Datei) wird in verschiedenen Scripts im SQL-Statement der Stern im SELECT * FROM durch die 
        entsprechenden Feldnamen der Tabelle ersetzt.
       
        

        * <b>vars/SEARCH_DELIM</b>

        Die Datei beinhaltet den Trenner für die Datensuche. Aktuell ist das ^



        * <b>vars/SHOW_EVENTS</b>

        Zeigt unter dem Login-Screen die aktuellen Events als Lauftext an, wenn die Datei gestezt ist.
             
        
        
        * <b>vars/DEBUG_CLEAN_QUERY</b>
        
        Ist die Datei gestezt, wird ein logfile mit allen Aufrufen der Funktion clean_query erstellt. Diese Datei dient eigentlich nur
        Entwicklern als Hilfe.
        
        
        
        * <b>vars/TO_LOWER, vars/UC_FIRST, vars/UC_WORDS, vars/DELETE_SPACES</b>
        
        Die Dateien legen fest, ob und wo bei Daten-Eingabefeldern z.B. Leerzeichen entfernt werden sollen, der Text auf Kleinbuchstaben, 
        Grossbuchstaben oder bei jedem Wort eines Satzes der erste Buchstabe auf Gross umgestellt werden soll. Genaueres findet man dazu
        auf php.net zu den Funktionen U_FIRST, UC_WORDS, TO_LOWER.
        Hilfe zu den Datein findet man in der Adminisration -> sonstiges und Hilfe -> Formulareigabe ändern. Dort lassen sich die Funktionen
        auch zu den Eingabefeldern einschaten und 
        


        * <b>vars/new_data_focus.var, vars/edit_focus.var</b>
        
        Die Dateien legt fest, auf wleches Feld beim Aufruf des Formulars NEU bzw EDIT der Focus gesetzt werden soll. Das ist vor allem dann
        interessant, wenn man die Anzeige der Zeilen umsortiert.
        
        
        
        * <b>vars/googlemaps.var</b>
        
        Gibt den Link mit den Ersatzfeldern für die Geolocation und die Grösse des Fensters an.
        
        
        
        * <b>vars/openstreetmaps.var</b>
        
        Wie googlemaps abe für Openstreetmap
        
        
        
        * <b>vars/show_sroller.var</b>       
        
        Beinhaltet eine Liste aller Karteikarten, unter denen aktuelle Kalendereinträge angezeigt werden sollen.



        Alle diese Dateien könnten per Hand mit einem Editor gesetzt und gewartet werden, sofern man weiss, was man tut. Besser ist jedoch
        das Admintool, dass jedoch nur Personen zur Verfügung steht, die als Unterstützung eine Spende an mn-portal gesnadt haben.
        
        Senden Sie eine Spende über paypal an:
        
            sysop@mn-portal.de
            
        und ich schicke Ihnen ein Update-Paket mit den Admin-Tools die noch einiges mahr bieten als nur die Bearbeitung der Variablen-Dateien.

