,,_ o" )~ '' '' +----------------------------------------------------------------------+ adresSQL +----------------------------------------------------------------------+ Copyright (c) 2009 Matthias Nitzschke (mn-portal.at) Version: see vars/version.var Web: http://www.mn-portal.at +----------------------------------------------------------------------+ Author: Matthias Nitzschke +----------------------------------------------------------------------+ ########################################################################################################################################## Stand: Dez. 2020 Diese Textversion ist in UTF-8 kodiert ########## # INHALT # ########## A. Haftungsausschluss und allgemeine Hinweise 1. Haftungsausschluss 2. Spenden 3. Software Dritter 4. Tests a. Der sql_mode ONLY_FULL_GROUP_BY b. Die Funktion get_header_path() 5. Zusatz-Module 6. Sicherheit 7. Dateirechte 8. GLOBAL in Funktionen B. Notwendige Programme und Webserver-Module 1. Systemprogramme C. Installation und erstes Login 1. Welchen Editor verwenden 2. Quick and dirty install 3. Schritt für Schritt install i. connect.php anpassen ii. conf.php anpassen iii. Hochladen aller Dateien, Verzeichnisse und deren Inhalte iv. Rechte setzen v. install.php aufrufen vii. Config neu einlesen 4. Online Update 5. Manuelles Update D. Einstellungen, Module, Hilfe .... 1. Eigene Felder/DROPDOWN anlegen 2. User Konfiguration ändern 3. Karteien/Subdatenblätter ein/ausblenden 4. User-Uploads 5. Bildergallerie 6. Events 7. Hilfe 8. Security-Modul E. Zentral/Filialdatenbank F. Häufige Fragen und Probleme 1. Beim Speichern der Sprachdatei werden die Einstellungen nicht übernommen 2. Kann man die Feldnamen der Adressentabelle umdefinieren 3. Wie kann man den Mailer des Scripts aufrufen 4. Accesskeys loggen mich aus 5. Manche Einstellungen ziehen nach dem Ändern nicht G. Tricks 1. Adressfelder ausblenden 2. Accesskeys im Firefox umstellen 3. Charset, Kodierung ändern 4. Ort an eine online-Kare übergeben 5. Zusätzliche Links in den Datenfeldern 6. Suche mit oder ohne preg_quote() 7. Anzeigefelder in Adressverknüpfung 8. PHP 7.3 Fehlermeldung bei PDF-Vorschau 9. Datensätze klonen und weiter bearbeiten H. Kurze eigene Bemerkungen 1. Wichtige Nebensächlichkeiten 2. Kleinkram und Erwähnenswertes I. Wawi-Modul J. Windows als Server K. Gibt`s noch etwas L. Rerservierte Variablen M. php7 und mariadb auf dem Server N. ssmtp um Mails zu versenden ########################################################################################################################################## A. Haftungsausschluss und allgemeine Hinweise --------------------------------------------- 1 Haftungsausschluss -------------------- Die Nutzung des Scripts geschieht immer auf eigene Gefahr. Der Author hat den Code nach bestem Wissen erstellt, was die 100%'ige Fehlerlosigkeit allerdings nicht gewährleistet. Für Schäden, die durch die Nutzung oder Installation des Scripts entstehen oder entstanden sind, wird keinerlei Haftung übernommen und es können keine Rechtsansprüche, welcher Art auch immer, abgeleitet werden. Das Script steht in der ausgelieferten, (auf mn-portal.at downloadbaren) aktuellen Version unter der Lizenz der GPL (GNU GENERAL PUBLIC LICENSE). Näheres siehe docs/license.txt und docs/COPYING Die Weitergabe des Scriptes adresSQL unter eigenem Namen ist ausgeschlossen, ebenso ist die entgeltliche Weitergabe in jeglicher Form (Vermietung, Verkauf, Download etc.) nur mit ausdrücklicher Genehmigung der Authors möglich. Diese Version ist in diesem Umfang ausdrücklich kostenlos und es dürfen keinerlei Gebühren für die Nutzung verlangt werden. Die Copyrighthinweise (das Logo) und der Link zu Homepage des Autors dürfen aus der Kostenlosen Version nicht entfernt werden. Sie können das Script beliebig selbst anpassen, erweitern oder verändern. Es kann kein Anspruch auf Fehlerkorrekturen am Code erhoben werden. Die Lizenz (GPL) betrifft NICHT kostenpflichtige Module die von mn-portal zur Verfügung gestellt werden. Diese Module werden (wenn nicht anders angegeben) gegen einen einmaligen Unkostenbeitrag per Mail zugesandt und können danach zu eigenen Zwecken beliebig oft installiert und verwendet werden. Die kostenlose Weitergabe erworbener Module an Dritte ist verboten. Ich behalte mir vor, extra angefertigte (kostenpflichtige) Module in späteren Versionen des Scriptes kostenlos zur Verfügung zu stellen. Abweichende Eigentums und Weitergabe Ansprüche müssen schriftlich vereinbart werden. 2. Spenden ---------- MEINE EIGENEN 2 CENT ZUM THEMA Ich bin eine one-man Show sprich, ich mache alles selber und im Alleingang. Ich denke mir aus, code, teste und behebe Fehler. Das kostet relativ viel Zeit und ist nicht gerade unerheblicher Aufwand. Kosten entstehen kaum, sieht man einmal von meiner Hardware ab, die alle paar Jahre erneuert werden muss und dann wäre da noch der Webspace, wo man den Code herunterladen kann. Meine Webseite ist Werbefrei finanziert, ich trage die Kosten zu 100% selbst. Ich werde folglich nicht arm bei diesem Projekt, trotzdem warte ich ab sofort die Bildergallerie, den Userupload, die Events und die Verknüpfung von Adressen nur noch für Spender, die mir ein Mail an sysop@mn-portal.at oder sysop@mn-portal.de senden. Der Grund ist einfach, freiwillig kommt da eher selten etwas und zumindest die Grundkosten sollten mit dem Script ein spielbar sein. Ich würde mich in jedem Falle, wenn Euch das Script gefällt, über eine Spende sehr freuen. Verwendet wird die Spende um die Herrin des Hauses milde zu stimmen, was ich dadurch zu erreichen gedenke, indem ich mich, für ihre Geduld und Nachsicht für den Zeitaufwand, mit einer Einladung zum Essen bedanke. Spenden kann man über paypal an die Adresse sysop@mn-portal.de problemlos über die Internetverbindung (auch Sonn und Feiertags) tun. Ich freue mich über jeden Cent, DANKE... 3. Software Dritter ------------------- Verwendete Software Dritter um dieses Script zu verwirklichen: * tinymce (Javascript Editor) * jodconverter (Schnittstelle zu OpenOffoffice um Dokumente ins PDF-Format zu konvertieren) * JQery (Javascript Libary für Animationen, Kalender und andere hübsche Funktionen) * wz_tooltip von Walter Zorn * jquery.tablednd von Denis Howlett Recht herzlichen Dank an die Programmierer, die ihre Arbeit kostenlos zur Verfügung gestellt haben. Die genannten Scripte waren zum Zeitpunkt der Erstellung von adresSQL frei. Rechtliche Anderungen (z.B. Lizenzänderungen) durch Updates oder Austausch dieser Scripte, sind nicht ausgeschlossen und Updates erfolgen auf eigene Gefahr. 4. Tests -------- Das Script wurde zwar bei einer ungewöhnlich hohen Auflösung von 1600x1200 erstellt, aber mit einem Viewport von 1200x860 getestet und bietet in seiner derzeitigen Fassung natürlich bei einer Auflösung in diesem Bereich den besten Bedien-Kompfort. Anpassungen können über die CSS Datei erfolgen. Getestet wurde mit den Browsern Palemoon, Iceweasel, Firefox, Opera, Galeon, Chromium, Vivaldi und Konqueror ohne nennenswerte Unterschiede Der Internetexplorer (bis vers 8) macht wie immer bei Kleinigkeiten "Männchen", wird von mir aber wegen nichtkonformen W3C Verhaltens ignoriert. Wer auf den IE nicht verzichten kann muss Kleinigkeiten in der CSS-Datei selber anpassen oder vielleicht regelt sich das ja durch Updates selber :-) Gecoded wurde das Script auf: Debian-Jessie mit MYSQL-Server 5.5.43-0+deb8u1 und PHP 5.6.14-0+deb8u1 Debian Jessie 5.5.5-10.0.23-MariaDB-0+deb8u1 Debian Stretch 5.5.5-10.1.26-MariaDB-0+deb9u1 und PHP 7.0.30-0+deb9u1 und dem Scripteigenen mysqli-wrapper Da PHP ab PHP-Version 7 voraussichtlich die mysql-extension auflassen wird, wurde dem Script ein mysqli-wrapper hinzugefügt und getestet. Der wrapper schaltet sich automatisch zu, sollte die mysql-extension nicht gefunden werden. es muss also keine besondere Einstellung vorgenommen werden. Dem Script wurde weiters ein sql-wrapper hinzugefügt, über den z.B. eine Anbindung an eine Postgres Datenbank verwirklicht werden könnte. Ob und welche SQL-Statements angepasst werden müssen, ist noch nicht dokumentiert. Dem neuen Script (ab Version 1.3029) wurde ein komplett neuer Datei-Cache verabreicht, der wesentlich weniger Leseprozesse an Datein vornimmt. Natürlich habe ich das getestet, aber hin und wieder stolpere ich noch immer über kleinere Problemchen. Sollte es zu massiven Problemen kommen, kann man den Cache löschen, indem man sich einfach ausloggt oder die logout.php direkt aufruft. Seit Version 1.3031 ist die Erstellung von Vorschaubildern für PDF-Dateien auch zentral verwaltbar, was erhebliche Geschqwindigkeits- vorteile bringt und natürlich auch Platzersparnis. Diese Möglichkeit ist per Default voreingestellt, kann aber über die Konfiguration rückgängig gemacht werden. Obwohl ich das Script als Adressverwaltung im Netz bereit stelle, kann es natürlich auch für viele andere Zwecke eingesetzt werden. Ich selbst nutze adresSQL z.B. zusätzlich als Inventardatenbank. Dazu sind nur einige Übersetzungen nötig und schon heissen die Felder anders, ein paar Felder hinzufügen und schon ist eine zusätzliche Anforderung abgedeckt. Andere (mir bekannte) User habe das Script z.B. als Zimmerverwaltung und als Nachschlage-Datenbank für Texte im Einsatz. Was ich damit sagen möchte ist, dass der Einsatz des Scripts nicht auf die Verwaltung von Adressen beschränkt ist. 4.a Der sql_mode "ONLY_FULL_GROUP_BY" ------------------------------ Neuere Versionen von Mysql artbeiten in diesem Mode und erlauben SQL-Statemenst in der Form "SELECT * FROM blablabla... GROUP BY..." nicht mehr und werfen einen Fehler wegen des SELECT *. Mariadb arbeitet mit STRICT_TRANS_TABLE und macht deswegen auch bei SELECT * Probleme, es ist also u.U nötig etwas zu unternehmen! HINWEIS! ------- adresSQL arbeitet mit SELECT *, was sich logisch daraus ergibt, dass jeder Anwender beliebig viele Felder selbst anlegen kann und man ohne SELECT * permanent die Scripts anpassen muss. Entweder man lebt also damit und bringt Mysql dazu das zu akzeptieren und ändert die DB-Konfiguration entsprechend, oder Man sucht alle Feldnamen heraus, frickelt sich dann mit einer Funktion ein SQL-Statement mit allen Feldnamen zusammen und verwendet dieses an Stelle des *. Klingt aufwendig und fehleranfällig und das ist es eigentlich auch, nichts desto trotz ist das eine der beiden Optionen die adresSQL als Lösungsansatz anbietet. Hier also beide Varainten, um Fehlern vorzubeugen!" Variante 1. Man entfernt einfach problematische Parameter aus der Datenbankkonfiguration! Dazu verwenden MariaDB und MySQL den Paramter SQL_MODE. Ich rate dringend davon ab, den SQL_MODE komplett auf leer (also "") zu setzen, wie es einige Webseiten empfehlen, da viele der Vor- einstellungen durchaus sinnvoll sind. Genaueres kann man hier nachlesen: https://www.it-swarm.dev/de/mysql/deaktivieren-sie-only-full-group-by/1047576785/ Ich nutze Mariadb mit einem SQL_MODE=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION Mit der Anlage einer Textdatei "vars/SQL_MODE" kann man auf 2 Arten das Problem mit SELECT * über adresSQL zu beheben! a. Legt man eine leere Datei an, liest adresSQL den aktuellen Wert von sql_mode aus, entfernt nur ONLY_FULL_GROUP_BY und setzt die restlichen Einstellungen wieder. Bsp: sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES nach dem entfernen von ONLY_FULL_GROUP_BY wird mittels Query sql_mode für die Session mit sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES wieder neu gesetzt. b. Schreibt man in die Datei die zu setzenden Werte (z.B. NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION) wird der Inhalt der Datei mittels Query an die Datenbank gesendet. Der Befehl gilt immer für die Session und wird mittels @sql_query("SET SESSION sql_mode = '".$smode."'"); gesendet. Ich habe die Übergabe mit Mariadb erfolgreich getestet. Achten Sie darauf, dass die Art der Parameterübergabe vor jedem Verbindungsaufbau mit der Datenbank gesendet wird und nur für die aktuelle Session gilt. Um die Parameter permanent zu setzen ist es zielführendet die Konfigurationsdateien anzupassen und die Datei "vars/SET_MODE" zu löschen. Variante 2. Man lässt adresSQL SELECT * FROM durch die Tabellen Spaltenbezeichner ersetzen. Dazu verwende ich eine neue (experimentelle) Funk- tion die SQL-Statements auf SELECT * untersucht und durch die passenden Tabellenspalten Bezeichner ersetzt. Um die Funktion zu aktivieren, legt man im Verzeichnis vars einfach eine leere Datei mit dem Namen CLEAN_QUERY an. Per Default ist diese Funktion NICHT aktiv. !! Bitte beachten Sie, dass es bei dieser Variante u.U. zu Komplikationen kommen kann, ich habe noch nicht alle Spielarten, die im Laufe der Zeit zusammengekommen sind, getestet. Aktuell läuft meine eigene Datenbank mit evben diesem Parameter und Fehler, so ich etwas übersehen habe, werden sich sicher bald einstellen. 4.b Die Funktion get_header_path() ------------------------------ adresSQL verarbeitet Formulareingaben vereinzelt mit der Funktion header(), erzwingt mit dieder Funktion, dass neue Einstellungen neru geladen werden oder leitet nach der Verarbeitung von Informationen mit header() zu einem anderen Script weiter. Um Manipulationen dieser Weiterleitung zu verhindern, errechnet die Funktion get_header_path() den absoluten Pfad des Scripts. Das kann manchmal zu unerwünschten Nwebeneffekten führen, so dass z.B. das aufgerufene Script nicht gefunden werden kann. Sollten Probleme auftreten oder sollten Sie nur lokal mit adresSQL arbeiten können Sie den Aufruf in der Konfiguration unter Pfaden änderen, indem Sie den Parameter $config['use_abs_path'] auf 0 (NULL) setzen. Danach verwendet adresSQL die relativen Pfade. Erstellen Sie im root-Verzeichnis eine Datei "LOG_HEADER_PATH" dann wird unter /vars/headerpath.var eine Logdatei erstellt, die das Datum, den errechneteten Pfad und die aufrufende Datei loggt. Mehr zum Thema relative und absolute Pfade findet man auf php.net. 5. Zusatz-Module ---------------- Das Warenwirtschafts-Modul erlaubt es die Adressdatenbank zu einer kleinen WAWI zu machen und Aufträge, Rechnungen und Lieferscheine damit zu erstellen und sein Mahnwesen und Lager zu vereinfachen. Zugegeben, dieses Modul ist nicht frei (€70) aber es erleichtert den Arbeitsalltag doch sehr. Ein weiteres Modul ist in Arbeit, mit dem eine einfache Zeiterfassung (Login/out) und zeitliche Auswertung möglich ist. Ich fertige auch gerne auf Anfrage ein Modul an. 6. Sicherheit ------------- Sensible Daten müssen (eventuell mit einer Firewall) vor Zugriffen geschützt werden! Das bedeutet: Eine öffentlich zugängige Installation hat natürlich ihre Schwächen. Eine falsche Konfiguration des Webservers bzw des Mysql- Servers kann Angreifern den Zugriff auf Ihre Daten ermöglichen. Das soll nicht bedeuten, dass das Script an sich unsicher ist. Das Script selbst nutzt PHP und alle damit verbundenen Dienste. Sind diese Dienste abgesichert, sollte auch das Script sicher sein. Mein Haupt Augenmerk liegt natürlich auf der Funktionsweise des Scripts, was nicht bedeutet, dass ich Sicherheitsrelevante Regeln ausser Acht gelassen habe. Nur teste ich meine Scripte vorwiegend auf Funktinalität, nicht auf hohe Sicherheit. Wer sensible Daten mit dem Script verwalten möchte, sollte sich mit den Möglichkeiten der Absicherung beschäftigen. Ein einfache und gängige Methode ist z.B. .htaccess, die auch von allen guten Servern unterstützt wird. Spender bekommen für die Admin-Tools einen security-Mod, mit dessen Hilfe man eine Datei aus IP-Adressen erstellen kann, die beim Login abgefragt werden. Entspricht die IP beim Login keiner der dort angelegten IP-Adressen, wird ein Login verweigert. Bitte verwechseln Sie diese Möglichkeit nicht mit der Einschränkung über .htaccess. die Absicherung über .htaccess wird vom Webserver geprüft, die Admin-Tool Variante wird per Script geprüft und ist unabhängig vom Webserver. Beide Varianten setzen aber feste IP-Adressen voraus. Als Beispiel für .htaccess diene ein Upload einer Datei. Uploads werden in Unterverzeichnissen des Scripts (/templates/adressenscript/uploads) angelegt, wo ein Verzeichnis für jede Userid der Adressdaten existiert (wenn Dateien zu dieser ID hochgeladen wurden). Wer externen Zugriff auf diese Verzeichnisse erlaubt, erlaubt es auch, Dateien aus diesem Verzeichnis über eine URL zu laden und zu betrachten. .htaccess kann nun dazu genutzt werden, um dem Webserver mitzuteilen, dass dieses Verzeichnis gesperrt ist und so auf dieses Verzeichnis nicht mehr direkt zugreifen zu können. Der volle Funktionsumfang des Scripts kann ohnedies nur genützt werden, wenn man einen eigenen Server einsetzt bzw wenn man ein paar Grundkenntnisse für Webserver mitbringt. Damit sollte es auch kein Problem sein, den Server vor Zugriffen zu schützen, bzw Regeln zu definieren, die nur ausgewählten Usern Zugriff erlauben. Ich selbst gebe nur bestimmte IP-Adressen für die Nutzung des Scripts frei, alle nicht eingetragenen IP-Adressen werden ohne weitere Nachfrage geblockt. Dazu nutze ich .htaccess. Seit Version 1.3031 gibt es nun in der Administration ein Script, dass die Erstellung einer solchen .htaccess-Datei erleichtern soll. Damit können Sie simple Restriktionen und Einschränkungen auf bestimmte IP-Adressen mit wenigen Klicks generieren. Der Admin-Bereich ist seit Version 1.30xx durch eine eigene .htaccess-Datei zusätzlich geschützt und erlaubt keinen direkten Aufruf der eigentlichen Scripte, die im Verzeichnis /templates/admin/adminform untergebracht sind. .htaccess muss dafür installiert, konfi- guriert und lauffähig sein. Durch diese Datei können die enthaltenen Scripte nur mehr von PHP aufgherufen werden, so kan eine Kontrolle des Logins nicht mehr so ohne weiteres umgangen werden. Im Installationverzeichnis und einigen Unterverzeichnissen diverser Module liegt eine Datei .htaccess, die das direkte Listen der Verzeichnisse b.z.w den direkten Aufruf unterbindet, sofern Ihr Server .htaccess unterstützt. Sie können hier weitere Einschränkungen vornehmen. ./.htaccess ./templates/admin/backup/.htaccess Bei Problemen können Sie diese Datei(en) auch löschen, Sie verlieren aber den .htaccess-Schutz. Bei Dateien, die sensible Daten beinhalten könnten, verlasse ich mich darauf, dass der Webserver .ht Dateien besonders schützt und versehe diese Dateien im Namen mit dem Präfix .ht. Der Apache verweigert auf Dateien, mit diesem Präfix, den direkten Zugriff. Um adresSQL mit .htaccess sicher zu machen ist der einfachste Weg eine Passwortabfrage über .htaccess zu machen und User ohne Zugangsdaten erst garnicht auf das Script zugreifen zu lassen. Dazu findet man im Internet z.B unter https://wiki.selfhtml.org/wiki/Webserver/htaccess/Passwortschutz eine recht aufschlzussreiche Quelle. Kurz gesagt, man muss eine Datei .htaccess im Baseverzeichnis mit folögendem Inhalt erstellen: AuthType Basic AuthName "Geschützter Bereich - Bitte geben Sie ein Passwort ein!" Require valid-user AuthUserFile /var/www/adressql/.htpasswd Weiters braucht man eine Datei .htpasswd in der die User und Ihre verschlüsselten Passwörter liegen. Der Webserver muss natürlich .htaccess unterstützen. Ruft man nun die URL von adresSQL auf, wird nach einem User und einem Passwort gefragt. Nur wer einen gültigen Zugang hat bekommt Zugriff, alle anderen bekommen einen Zugang verweigert. 7. Dateirechte -------------- In der Administration finden Sie in den Tools ein Script, dass die Script-Konsistenz prüft. Klicken Sie auf den Button "Rechte und Module überprüfen", wird im Verzeichnis /vars eine Datei (.httobig) erstellt, die Ihnen Auskunft über zu hoch gesetzte Rechte gibt. In diesem File sind Alle Dateien mit Ihren aktuellen (zu hohen) Rechten und den zu setzenden Rechten aufgelistet. Generell gillt, dass Dateien mit der Endung .php keine Ausführungsrechte benötigen. Normaler Weise sollten diese Datein die Rechte 644 besitzen. AdresSQL macht im Normalfall nur bei Verzeichnissen eine Ausnahme von der Regel. Da ich über Scripte Daten in Verzeichnisse schreibe ist in manchen Fällen ein chmod 777 notwendig um Zugriff zu den Verzeichnissen zu erhalten. 8. GLOBAL in Funktionen ----------------------- Ich nutze in den Funktionen global und übergebe einige Parameter. Generell wird global als "Böse" angesehen, was durchaus seine Berechtigung hat, allerdings sehe ich derartige "Globalaussagen" durchaus auch gelassen, ich verwende global sehr gezielt. Ich sehe also keinen Grund alle Funktionen umzuarbeiten und Superglobale zu verwenden, und verwende weiterhin die Alternative, indem ich normale Variablen ebenfalls durch global zu Superglobalen machen kann, vor allem, da es sich fast ausschliesslich nur um error, config und Sprachvariablen handelt. Oftmals wird global verwendet, um Variablen, die in der Funktion belegt werden den Scripten als Rückgabewert zur Verfügung zu stellen (z.B. $error). Natürlich ist das nicht immer die "100% feine englische Art", aber man kann es auch mit der Panik vor global übertreiben. Global macht hier die Dinge einfach nur etwas leichter und nicht weniger sicher als ohne. Kurz, ich nutze global nie, um sicherheitsrelevante Dinge zu tun, oder ohne sie vorher zu überprüfen... so don`t panic! B. Notwendige Programme und Webserver-Module --------------------------------------------- 1. Systemprogramme ------------------ Um das Script im vollen Umfang und zu 100% nutzen zu können sind folgende Programme/Module notwendig: * Webserver (apache2 auf Linux) * PHP 5 oder höher (mit GD Mudul) (PHP 4 wurde nicht explizit getestet, sollte aber auch funktionieren) * PHP-Cli, falls Cronjobs mit den beigelegten Shell-Scripten aufgerufen werden sollen. * Mysql Datenbank (Server) oder besser noch mariadb (Server). * Für den Betrieb mit baikal ist der baikal-Server erforderlich. Zur Installation mit baikal-Unterstützung siehe zusätzlich die README_WITH_BAIKAL_CLDAV_SERVER. Der Server ist nicht inkludiert! Um Vorschaubilder für PDF Dateien anzeigen zu können benötigt das Script * imagemagick/graphicsmagick auf Systemebene convert tool zum Konvertieren von Dateiformaten (Shell Befehl) * Imagick Modul PHP PHP-Wrapper fuer ImageMagick * Open/Libreoffice um als Konvertierungsdienst gestartet zu werden oder alternativ abiword zum Konvertieren von Text (Word) Dateien -> PDF (siehe dazu die eigene Readme umter some_help/o_office_dienst_de.txt) * Einen MYSQL User mit entspechenden Rechten Der User, der sich mit der Datenbank verbindet braucht alle Rechte um Datenbanken und Tabellen erzeugen und verändern zu können. * wget, wenn man von der Möglichkeit des Online-Updates gebrauch machen möchte. Updates können aber auch manuell über die Administration eingespielt werden. Update-Pakete können unter * PHP-Zip-Unterstützung, um Module/Updates auspacken zu können Sie können die Verfügbarkeit aller notwendigen Programme und Module testen, indem Sie aus der Administration das Tool zum Testen der Script-Konsistenz aufrufen und dort den Punkt Rechte und Module überprüfen anwählen. Die Anzeige von Fehlern besagt nicht, dass adresSQL nicht funktioniert, das Script läuft mit einem Standard-Webserver problemlos, nur können Sie dann verschiedene Dienste des Scriptes (z.B. das Konvertieren von Dateien zu PDF) nicht nutzen. C. Installation und erstes Login --------------------------------- Die aktuellste Version von adresSQL kann unter folgender URL als ZIP-File geladen werden. http://www.mn-portal.at/index.php?qwid=2 1. Welchen Editor verwenden --------------------------- Sie müssen zumindest eine Datei in einem Editor anpassen. Achten Sie darauf, dass ihr Editor KEIN Unicode-Boom schreibt. Windows-Editoren sind da sehr eigen. Verwenden Sie einen geeigneten Editor wie z.B. geany oder PSPad o.Ä. Sollten Sie doch versehentlich ein Unicode-Bomm geschrieben haben, wird das Script wahrscheinlich mit dem Fehler Warning: Cannot modify header information - headers already sent by (output started at ... scriptname) seinen Dienst quittieren. 2. Quick and dirty install -------------------------- Wem es nicht schnell genug gehen kann, hier eine wirkliche Quick Anleitung: a. ZIP entpacken und im Verzeichnis docs die Readme lesen. b. connect.php, Einstellungen für den Datenbankzugriff festlegen Die Zugangsdaten zur Datenbank stellt der Provider zur Verfügung. c. Alle Dateien und Verzeichnisse ins Wunschverzeichnis hochladen und Rechte setzen. d. Wahlweise kann man: i. install.php aufrufen. Das Script installiert sich eigentlich von allein, legt eine Datenbank an, erstellt alle Tabellen und man kann loslegen. ii. Sich einen SQL-Dump von mn-portal herunter laden und diesen z.B. über phpmyadmnin in die Datenbank adressql importieren. Es werden alle Tabellen angelegt und mit den Installationswerten befüllt. Der Dump: http://www.mn-portal.at/update/adressql_sql.zip e. Das erste Login erfolgt mit User=admin und Passwort=admin. Ändern Sie das Passwort oder legen Sie sich einen neuen User mit Adminrechten an! f. Man sollte auf jeden Fall, auch bei importieren des Dumps, die Konfiguration neu einlesen, da die Konfiguration u.U. mit der neuen Version erweitert wird. 3. Schritt für Schritt install ------------------------------ i. connect.php anpassen ----------------------- VOR dem Upload ist es notwendig die Datei connect.php mit den notwendigen Zugangsdaten zu versehen. Alle notwendigen Daten sind in der Datei connect.php einzutragen. Die Daten könnnen beim ISP/Service-Anbieter erfragt werden. Notwendig sind: Host (meistens localhost) Var $db_host User Var $db_user Passwort Var $db_pass Datenbankname Var $db_name Die anderen Einstellungen der connect.php müssen nicht bearbeitet werden. ACHTUNG !! Ich rate dringend davon ab, den Zeichensatz der Datenbank umzustellen. Wollen Sie dennoch eine andere Kodierung, lesen Sie Den Abschnitt G (Punkt 3.), dort steht beschrieben, wie sie eine spezielle Kodierung einstellen können. MYISAM oder InnoDB? Die Frage stellt sich vor allem dann, wenn viele User auf die Datenbank zugreifen sollen. MYISAM ist bei einem Zugriff von 3-4 Usern schneller, InnoDB ist aber "sicherer" , vor allem dann, wenn während eines Zugriffs die Verbindung zur Datenbank abbricht. Bei sehr vielen gleichzeitigen Zugriffen wird InnoDB wahrscheinlich auch schneller sein als MYISAM. Ein Vorteil von InnoDB ist auch das lock, das nicht die gesamte Tabelle betrifft sondern Datensatzweise geschehen kann. MariaDB ist meine erste Wahl, wenn man mit MyIsam arbeitet, da hier viele Fehler von Mysql gefixed wurden. Wie auch immer, vor der Installation sollten Sie entscheiden, welche Datenbankverbindung sie wünschen und den Eintrag in der connect.php entsprechend korrigieren. ii. conf.php anpassen --------------------- BEVOR SIE NUN WEITERMACHEN ! In der conf.php habe ich die wesentlichen Usereinstellungen (ganz oben) extra zusammengefasst. Diese sollte man anpassen! Passen Sie die Verschlüsselungsmethode für Ihr Passwort Ihren Bedürfnissen an. Derzeit ist MD5 als Methode eingestellt. Die beiden Parameter die die Verschlüsselung einstellen sind: $config['use_crypt_method'] = 'md5'; $config['use_crypt_option'] = ''; Wenn Sie die Methode ändern wollen, gehen Sie wie folgt vor: Wollen Sie z.B. BLOWFISH als Passwortverschlüsselung verwenden ist in der conf.php ein Beispiel unterhalb der aktiven Parameter vorhanden. 1. Entfernen Sie die REM`s (das sind die beiden Slashes vor den Parametern) und setzen Sie ein REM vor die aktiven Einstel- lungen. 2. Ersetzen Sie den String "adressqlsomesillystringsalt" im Parameter $config['use_crypt_option'] durch einen belibigen String, der aus 22 Zeichen ("./0-9A-Za-z") besteht! Hinweise wie verschiedene Methoden eingestellt werden können finden Sie unter: http://us1.php.net/manual/de/function.crypt.php !!!!!!!!!!!!!! !! VORSICHT !! !!!!!!!!!!!!!! Eine Nachträgliche Umstellung der Verschlüsselungsmethode ist mit Handarbeit und der Gefahr verbunden, dass Sie sich nicht mehr einloggen können. Ohne direkte Datenbank-Zugriffe sperren Sie sich dann aus. Dass Passwort-Feld in der Tabelle "user" kann maximal 255 Zeichen speichern. Md5 wird im Netz häufig als "unsicher" bezeichnet, da es theoretisch möglich ist, mit unterschiedlichen Zugangsdaten einen Key zu erzeugen, der mit einem anderen identisch ist. Die tatsächliche Unsicherheit bezieht sich genau betrachtet auf gestohlene Daten aus der Datenbank. Für MD5-Passwörter gibt es im Netz Nachschlage-Tabellen, wo bekannte Passwörter gesammelt und schnell abgeglichen werden können. Wenn Sie Ihre Userdaten nicht weiter geben, ist ein Login mit falschen Daten aber sehr, sehr unwahrscheinlich, ich nutze eine Kombination aus mehreren Informationen um ein erfolgreiches Login zu verifizieren, selbst wenn also ein MD5 Passwort mit einem anderen übereinstimmt kommt in adresSQL damit noch kein erfolgreiches Login zustande. Nichts dest Trotz! Nutzen Sie ein sichers Passwort aus mindestens 8 Zeichen, kombiniert aus Ziffern, Gros/Kleinbuchstaben und Sonderzeichen. Prinzipiell gilt: Je länger das Passwort um so sicherer! iii. Hochladen aller Dateien, Verzeichnisse und deren Inhalte ------------------------------------------------------------- HINWEIS !! Ich habe im Stamm-Verzeichniss eine .htaccess Datei, die ein direktes Listing verhindert. Dazu muss der Webserver .htaccess unterstützen. Das ist deshalb wichtig, damit niemand ein Verzeichnis dirkekt über die URL listen kann. Zumindest im Stammverzeichnis sollte diese Datei enthalten sein. Das Verbot wird bei korrekter Konfiguration des Servers auf die Unterverzeichnisse vererbt. Der Inhalt der .htaccess Datei um ein direktes Listen der Daten zu verhindern lautet: Options -Indexes Eine weitere .htaccess Datei liegt in manchen Verzeichnissen und soll einen direkten Aufruf der enthaltenen Scripte verhindern. Der Inhalt: Order deny,allow Deny from all verweigert zwar einen Aufruf über den Browser, erlaubt aber einen Aufruf per include etc. über die PHP-Scripte, die wiederum auf Rechte wie z.B. Adminrechte prüfen. Als Ergebnis eines direkten Aufrufs sollte ein FORBIDDEN-Fehler ausgegeben werden. iv. Rechte setzen ----------------- Verzeichnisse können mit chmod 777 und Datein sollten mit chmod 644 versehen werden. PHP benötigt keine Ausführungsrechte um Scripts zu parsen. Folgende Verzeichnisse (UND deren Unterverzeichnisse) MÜSSEN Lese, Schreib und Betreten-Rechte besitzen (chmod 777) /logs /updates /vars /temp /language /templates/adressenscript/temp /templates/adressenscript/uploads /templates/admin/backup /templates/admin/errorlog /templates/admin/triggerdata Alle anderen Verzeichnisse und Dateien sollten zumindest Leserechte und Betreten-Rechte besitzen. Ein chmod 777 auf alle VERZEICHNISSE ist keine sicherheitstechnische Katastrophe. Die Dateien selbst sollten aber NICHT mit Ausführungsrechten (7) versehen werden. Die Dateien im Verzeichnis /vars und /language müssen zumindest Lese und Schreibrechte (chmod 0666) besitzen. Die Dateien im Verzeichnis /vars, die mit .ht beginnen sollten auf chmod 666 oder sogar auf 777 gestellt werden, da der Apache2 sonst u.U. den Zugriff verweigert und ein Forbidden ausgibt. HINWEIS.. Um den direkten Aufruf von einigen Dateien und deren Inhalt zu verhindern, sind diese Dateien im Dateinamen mit dem Präfix .ht versehen. Auf Linux-Servern macht der führende Punkt Dateien unsichtbar. Der Webserver verweigert die direkte Anzeige von Dateien die mit .ht beginnen. Eventuell muss das FTP-Programm zur Anzeige dieser Dateien entsprechend eingestellt werden. Bei der Installation prüfe ich die Rechte der Dateien. Eventuell kann es zu Warnungen kommen. Das bedeutet NICHT zwangsläufig, dass ihre Installation nicht funktioniert, Vielmehr ist die Ausgabe der Fehler/Warnungen ein Hinweis, wenn Probleme auftreten. Ob und welche Probleme aus falschen Rechten auftreten hängt doch sehr von der Serverkonfiguration ab. TIP! Sollte das Script nicht funktionieren wie erwartet, schalten Sie das error_reporting des Scriptes ein. Standardmässig werden Warnungen und Fehler unterdrückt. Im Adminbereich "Konfiguration bearbeiten" im Punkt Sicherheit können Sie über $config[display_errors] die Sensibilität von adresSQL konfigurieren und so Fehler ausgeben lassen. Nach der Behebung aller Fehler sollte Sie die Fehleranzeige wieder abschalten um Angreifern keine Informationen zum Server anzubieten. v. install.php aufrufen ----------------------- Nachdem alle Einstellungen vorgenommen wurde und alle Daten hochgeladen wurden, wird im Browser die URL gefolgt von install.php aufgerufen. Das Script erstellt die Datenbank und legt alle Tabellen an. Dass install-Script prüft alle Rechte und gibt eventuelle Fehler aus. Die Behebung der angezeigten Fehlern ist nicht zwingend und kann übergangen werden, das kann aber u.U die Funktion von adresSQL einschränken. vi. Erstes Login und Admincenter -------------------------------- Nach der Installation kann ein erstes Login erfolgen (User=admin, Passwort=admin). Nun das Admincenter aufrufen und einen neuen User anlegen und Adminrechte erteilen. Danach wieder ausloggen und mit dem neuen User anmelden. !! WICHTIG !! Wieder ins Admincenter und dort den User=admin löchen bzw das Passwort änderen, sonst kann sich jeder mit dessen Zugangsdaten anmelden und erreicht Adminrechte! Die install.php sollte nach erfolgreicher Installation entfernt (gelöscht) werden. Ein erneuter Aufruf sollte die Datenbank zwar nicht beschädigen, wenn Sie dem User admin ein neues Passwort zuordnen, wird dieses auch nicht überschrieben, aber man sollte keine Angriffsfläche für böse Menschen liefern. vii. Config neu einlesen ------------------------ Das Script nutzt Anfangs die Datei conf.php um alle wichtigen Einstellungen vorzunehmen. Um das Script online einstellbar zu machen, muss die conf.php in die Datenbank eingelesen werden. Nachdem der Punkt "Config neu einlesen" aus der Adminstration abgearbeitet wurde kann nun im Admincenter umter dem Punkt "Konfiguration bearbeiten" das Script nach den eigenen Bedürfnissen angepasst werden. Ich rate dringend dazu, für Deutsch, die UTF8-Codierung ($config['use_utf8']) nicht umzustellen und den Parameter auf 1 zu belassen. Der Parameter verursacht, dass Ausgaben durch eine Funkltion geleitet werden, die Texte zu UTF8 konvertiert. Der Aufruf des Punktes Config neu einlesen ist seit Version 1.2230 so voreingestellt, dass er nur NEUE Parameter in der Datenbank hinzufügt und alle bestehenden Einstellungen unberührt lässt. Geänderte Einstellungen gehen also nicht mehr verloren. Alle Versionen Vor 1.2230 überschreiben bestehende Einstellungen und übernehmen die Werte der Datei conf.php. Möchte man in diesen Versionen die Einstellungen dauerhaft sichern, sollte die conf.php mit den gewünschten Werten gewartet werden. Um wieder mit den Einstellungen der conf.php zu starten, wird die Tabelle config geleert (ACHTUNG Tabelle nicht löschen !!). Sind keine Einträge in dieser Tabelle (ist sie leer), greift das Script automatisch auf die conf.php zurück. HINWEIS!! Alternativ kann adresSQL so konfiguriert werden, dass vor dem Einlesen der conf.php die Konfigurationstabelle geleert wird: Setzen Sie in der Konfiguration unter Sicherheit den Parameter $config['truncate_conf_table'] = 1 $config['update_conf_table_only'] = 0 danach werden aber jedes Mal, wenn man die Konfig neu einlesen muss, wieder die Werte aus der conf.php verwendet und online eingestellte Werte werden überschrieben. WICHTIG !! Das einlesen der conf.php legt alle Daten in einer Tabelle ab. Erst wenn diese Tabelle befüllt ist, können online (über den Browser) Einstellungen verändert werden. Die Datei kann jeder Zeit verändert und neu eingelesen werden. Ohne die Daten einzulesen bleibt das Fenster für die Einstellungen leer! Bitte die Mailadresse ändern, damit Mails auch unter der eigenen Adresse versendet werden. Solange ein User keine eigene Mailadresse angegeben hat ist die Standard-Adresse die Absende/Antwort-Adresse des Scripts. adresSQL ist nun fertig installiert.... Hinweise zur Bedienung, können der integrierten Hilfe (z.B. in der Übersichtskartei der Punkt Script-Hilfe) entnommen werden. Als Administrator sollten Sie sie unbedingt in der Administration unter "Sonstiges und Hilfe" den Punkt "Hilfe zum Admincenter" komplett durchlesen. Hier werden viele einzelnen Punkte der Administration genauer beschrieben. 4. Online Update ---------------- Wenn Sie vom Online-Update gebrauch machen möchten, ist neu, das Sie per Default an einer anonymen Statistik teilnehmen, die einen Zähler hoch setzt und die vorher installierte Versionsnummer speichert. Persönliche Daten (wie z.B. IP-Ardesse etc.) werden NICHT! erfasst, ich nutze die Statistik nur, um die Anzahl verwendeter Installationen und Update-Versuche zu dokumentieren. Das soll helfen, die Updates besser und eventuell häufiger zu gestalten. Wer an dieser Statistik nicht teilnehmen möchte, kann in der Administration -> Konfiguration bearbeiten -> Script-Tools den Parameter $config['participate_statistics'] = 1 auf 0 (Null) Stellen und so die Teilnahme unterbinden. Ist in Ihrer Version dieser Parameter garnicht vorhanden, wird die Statistik NICHT! geschrieben. Unter "Administration -> Auswertungen und Tools -> Script Konsistenz prüfen" gibt es ab Version 1.2221 einen Punkt "Auf Update überprüfen", der versucht von mn-portal Updates zu laden und zu installieren. Folgende Probleme können bei einem Online-Update entstehen: Nun, zunächst kann Ihre Version schon veraltet sein, so dass ich keine Updates mehr zur Verfügumng stelle. Da ich in "relativ" kurzen und regelmässigen Abständen Updates heraus bringe, speichere ich nicht alle alten Versionen auf meinem Webspace. Es kann nach den Donwload zu einer Fehlermeldung kommen, dass das chmod nicht erfolgen kann, da keine ausreichenden Rechte bestehen. Das liegt daran, dass der Webserver (meist www-data) keine Berechtigung hat, die Dateirechte vom User zu verändern. Der Kopier- vorgang sollte dennoch funktionieren. Der Server verweigert aus Sicherheitsgründen die Verbindung zu mn-portal. Das öffnen von externen URL's kann aus Sicherheitsgründen verboten sein. Man sollte dringend kontrollieren, ob der Webserver den Kopiervorgang erfolgreich abgeschlossen hat. Werden die Dateirechte auf chmod 666, b.z.w 777 gestellt, sollte in den meisten Fällen das Kopieren funktionieren, Garantie gebe ich keine. LÖSUNG: In der Konfiguration kann der Parameter $config['unlink_on_update'] = 0; auf 1 gestellt werden, dann versucht das Script vor einem Update die bestehende Datei zu löschen. Ist der Vorgang erfolgreich wird der Webserver Eigentümer der neu kopierten Datei, was dazu führen kann, dass man den FTP-Zugriff auf die Datei verliert, wenn die Rechte zu restriktiv gesetzt werden. 5. Manuelles Update ------------------- Machen Sie ein Bachup Ihrer Datenbank!!! Für Updates laden Sie sich die neueste Version von adresSQL herunter und gehen Sie wie bei einer Neuinstallation vor. Rufen Sie auch die install.php auf, es werden zwar einige Fehler geworfen (z.B. dass Tabellen bereits vorhanden sind oder dass Daten schon eingetragen sind) aber das Script sollte fehlende Tabellen und Daten anlegen und alle bestehenden Daten in Ruhe lassen. Danach können Sie sich wie gewohnt einloggen und sollten die neueste Version nutzen. Importieren Sie die config neu, es könnten neue Parameter dazu gekommen sein. D. Einstellungen, Module, Hilfe .... ------------------------------------ 1. Eigene Felder/DROPDOWN anlegen --------------------------------- Um eigene Felder anzulegen, ist in der Administration ein eigenes Tool vorhanden, wo Sie eigene Felder definieren und löschen können. Neu ist, dass man auch Dropdown-Felder erstellen kann. Ich habe 2 Arten von Dropdown-Feldern vorgesehen, ENUM und SET. Normalerweise ist in SET-Feldern eine Mehrfach-Auswahl möglich, ich habe SET`s anders definiert. SET`s sind einfache Auswahlfel- der, sind aber Muss-Felder, sprich es MUSS ein Wert gesetzt sein. ENUM-Felder können auch leer bleiben. Die Voreinstellung kommt zum Zuge, wenn man neue Daten anlegt bzw. Daten editiert. SET`s setzen dann als Vorauswahl den ersten Eintrag, ENUM`s sind als Vorauswahl leer. Wenn Sie Felder über z.B. phpmyadmin anlegen, werden diese Felder zwar erkannt, es könnte aber sein, dass adresSQL kein handling für spezielle Felder (z.B. Mehrfachauswahl etc.) anbieten kann. 2. User Konfiguration ändern ---------------------------- Neben den persönlichen Usereinstellungen ist es seit Version 1.3026 möglich, als User die Grund-Parameter des Scriptes, die bisher nur dem Admin vorbehalten waren, zu ändern. Ich weise extra darauf hin, dass diese Option mit Bedacht zu aktivieren ist, "Spielereien!" der User können die gesamte Funktio- nalität des Scriptes beeinträchtigen und Daten nachhaltig beschädigen! Viele Parameter, die bisher nur in der Administration gesetzt werden konnten, können nun je User übersteuert werden. Sich wider- sprechende Konfigurationen führe u.U. schnell dazu, dass das Script nicht mehr korrekt läuft. Manche Einstellungen sind Globale, werden also für das gesamte Script gesetzt bzw. setzen Parameter für externe Aufrufe. User-Paramter für externe Scripte sind wirkungslos, da diese Scripte die Parameter erneut einlesen und von den Usereinstellungen keine Ahnung haben. Paramter die Globale sind, können, je nachdem, ob sie vom User aufgerufen werden, katastrophale Folgen haben, da ver- änderte Einstellungen auch für andere User wirksam werden können. Um dieses Debakel einzuschränken, kann jeder Parameter einzeln freigegeben werden. Sie sollten sich dabei auf Parameter be- schränken, die z.B. das Aussehen steuern oder Funktionen wie "Blätterfunktion oben/unten anzeigen" festlegen. Von der Übersteuerung sind alle Parameter ausgenommen, die sich im Bereich Sicherheit und Pfade befinden. Ausserdem muss über die Rechteverwaltung einem User zuerst das Recht gewährt werden, die Konfiguration zu übersteueren. Vorgangsweise: * Zuerst muss diese Funktion einmal freigeschalten werden (default ist 0=aus, also keine Übersteuereung möglich). Setzen Sie unter Sicherheit, den Parameter $config['allow_config_user_rewrite'] auf 1 (eins) und schalten Sie die Funktion frei. * Stellen Sie sicher, dass in der Rechteverwaltung der User ein Häkchen beim Punkt r14 (Darf Konfiguration übersteueren) gesetzt hat. * Legen Sie im Admincenter unter Auswertungen und Tools im User Rewrite-Engine eine Liste mit den Parametern an, die vom User neu belegt werden dürfen. Jeder Parameter ist einzeln auswählbar. Die Ergebnisliste ist eine Globale, das bedeutet, sie können keine Userspezifische Liste erstellen. Freigegebene Parameter gelten immer für ALLE User. * Gehen Sie (als User angemeldet) in ihren Config-Bereich, wo Sie auch die Sprache, eigene Mailadresse etc verwalten können. Dort sollte nun ein weiterer Punkt "Konfig Einstellungen" sichtbar sein, in dem Sie die gültigen Admineinstellungen für Ihre ausgewählten Parameter, neu definieren können. Die Einstellungen aus dem Adminbereich werden als Vorgabewerte angezeigt. ACHTUNG!! Dieser Punkt ermöglicht es theoretisch die gesamte Grundkonfiguration für jeden User neu anzulegen. Daraus ergeben sich natürlich eine Vielzahl an Fehleinstellungsmöglichkeiten, die im schlimmsten Falle, die Funktion des Scriptes unmöglich machen. Auch wenn ich die Bereiche Sicherheit und Pfade von der Konfiguration ausgenommen habe, bleiben noch eine Unmenge an Para- metern übrig, die eine "Zertrümmerung" der Daten ermöglichen (z.B. eine abweichende Kodierung, oder eine Veränderung der Para- meter im Konverter, Mail oder Upload Bereich). Ergo: Fragen, die aus einer Falschkonfiguration resultieren, werde ich ausser Acht lassen und nicht beantworten. Ich zitiere mich selbst aus der Hilfe (in eigener Sache) im Adminbereich. Wer Administrator ist, sollte wissen was er tut...... Daher sollten Sie vor der Freigabe eines Parameters genau nachdeneken und es im Zweifelsfall lieber unterlassen den User mit den Grundeinstellungen spielen zu lassen. 3. Karteien/Subdatenblätter ein/ausblenden --------------------------- Der Vorgang ist für Karteien und Subdatenblätter identisch, ich erkläre daher nur anhand von Karteien den Vorgang. 1. Administration -> Grundeinstellungen -> Nav-Karteikarten anpassen. 2. Suchen Sie die betreffende Kartei z.b. userupl oder gallerie und klicken Sie auf Edit. 3. Setzen/entfernen Sie das Kontrollkästchen bei Aktiv und speichern Sie Je nach Häkchen wird die Kartei (un)sichtbar. ACHTUNG!! Die Deaktivierung eines Eintrags bedeutet nicht, dass der Aufruf über die URL nun unmöglich ist, sprich eine Deaktivierung hat mit dem Kapitel Sicherheitseinstellungen nichts zu tun. Wer Einträge absichern möchte, muss das über die Rechte und deren Abfrage regeln. 4. User-Uploads --------------- User-Uploads Sind Uploads, die dem eingeloggten User direkt zugeordnet und nur für ihn sichtbar sind. Nur mit dem entsprechenden Login sehen Sie die hochgeladenen Daten. Das Verzeichnis befindet sich unter templates/adressenscript/temp/USERHASH/upload, wobei der USERHASH vom Script auf Basis der Logindaten errechnet wird. Der Zugriff kann über die Rechteverwaltung deaktiviert werden. Deaktivieren Sie dazu den Parameter r15 in den Userrechten. Die Upoloads besitzen eine Konfigurationsdatei (/templates/userupload/userupl_conf.php) in der verschiedene Parameter als Vorgaben abgelegt sind. Normaler Weise wird kaum Bedarf bestehen, dieses Datei zu ändern, eventuell möchten Sie aber eigene Einstellungen vornehmen, was über den Button Konfiguration geschehen kann. Die Konfiguration wird dann im Userverzeichnis gespeichert und übersteuert die Vorgabe-Datei. Uploads werden direkt in das momentan aktive Verzeichnis vorgenommen. Klicken Sie auf Uploads verwalten, um das aktive Verzeichnis zu administrieren oder ein weiteres Verzeichnis anzulegen. 5. Bildergallerie ----------------- Die Bildergallerie steht allen Usern geicher Massen zur Verfügung. Lediglich der Upload von Bildern könnte durch das setzen des Readonly- Flags beim User verhindert werden. Auch die Bildergallerie verfügt über eine Vorgabe-Konfigurationsdatei (templates/gallerie/gall_config.php) in der Parameter den eigenen Bedürfnissen angepasst werden können. Wie für die User-Uploads lässt sich auch hier je User eine eigene Konfig erstellen. Die Administration der Bildergallerie erreicht man durch einen Klick auf "Ordner verwalten". Wählen Sie ein Unterverzeichnis aus der Liste aus oder erstellen Sie einen neuen Ordner. Die Administration eines Verzeichnisses ist (hoffentlich) sowohl in der Bildergallerie als auch den User-Uploads selbsterklärend. Die eingestellte Sortierung der Gallerie wird auch als Sortierung in der Administration verwendet. 6. Events --------- Die Anzeig von Adressen und Terminen ist an ein Login gebunden. Nun möchte man nicht jedem Zugriff auf die Daten geben und trotzdem eingetragene Veranstaltungen veröffentlichen. Dazu dient der Event-Kalender. Dem Script ist eine Datei zur Ver- öffentlichung eingetragener Events OHNE dass ein Login benötigt wird beigelegt (ext_events.php). Wollen Sie die externe Eventanzeige verhinderen, löschen sie einfach die ext_events.php. Im Verzeichnis extern befindet sich eine index.php als Vorlage, die es erlaubt von "Aussen" auf das Script zuzugreifen. Die Datei funktioniert, wenn in der php.ini allow_url_include = On gesetzt ist. Der Parameter erlaubt es PHP eine Datei über einen HTTP-Aufruf zu includen, die Datei muss sich dafür nicht auf dem eigenen Webspace befinden und kann bei einem anderen Hoster liegen. Die Datei include_ext_events.php zeigt, wie man die Events auf dem eigenen Webspace per include einbinden kann. Beide Dateien verstehen sich als Vorlage und müssen vor der Verwendung in einem Editor angepasst werden (Pfadangaben etc). Ist allow_url_include = Off kann aber alternativ die Datei ext_events.php direkt verlinkt oder included werden. Auch dafür ist eine Beispieldatei im Verzeichnis extern vorhanden (include_ext_events.php). Termine vs. Kalender Warum Terminkalender und Events separat? Nun natürlich zum Einen wegen der Anzeige ohne Login, aber natürlich gibt es noch andere Gründe. Termine können Adtressdtaensatz gebunden angelegt werden, Events haben keinerlei Adressdaten Bezug. Weiters erlaubt der Terminkalender eine Anbindung an einen Baikal Server und so einen Terminabgleich mit z.B. einem Handy-Kalender und kann als Cron an Termine erinnern. Dafür können sich die Events über mehrere Tage erstrecken und werden farblich hervorgehoben. 7. Hilfe -------- Sowohl Anwendern als auch Admins steht in vielen Fällen eine Onlinehilfe zur Verfügung die Tips und Kurzanleitungen gibt. Für Adminstratoren sind aber auch die Readmes im Verzeichnis docs massgeblich. Nicht zuletzt finden sich viele Hinweise im Internet. 8. Security-Modul -------- Das Security-Modul erlaubt es den Zugriff auf adresSQL auf bestimmte IP-Adressen zu beschränken. Das setzt natürlich feste IP-Adressen voraus, bei dynamischen Adressen hat man keinen Euinfluss auf die zugewiesene IP. Unter templates/admin/safetyvar befindet sich eine Datei .htsafety in der Zelenweise alle IP`s eingetragen werden, denen der Zugriff auf adresSQL erlaubt ist. Im Verzeichnis vars erstellt man nun eine Datei ENABLE_SAFETY (achten Sie auf Gross/Kleinschreibung) um das Security-Modul zu aktivieren. adresSQL prüft nun, ob $_SERVER['REMOTE_ADDR'] in der Datei enthalten ist, normalerweise wird in dieser Variablen die Client-IP des Besuchers eingetragen. ACHTUNG!! Prüfen Sie, ob ihr Server ihre IP korrekt erkennt, Sie sperren sich sonst selbst aus. Für dieses Modul gibt es für spendende User in der Adminstration in den Admintools ein eigenes Plugin, dass Ihnen die Administration erleichert und es Ihnen erlaubt das Modul ein/aus zu schalten. Ausserdem zeigt Ihnen das Plugin ihre Aktive IP an und checked so, ob der Server Ihre IP korrekt erkennt. E. Zentral/Filialdatenbank --------------------------- Bitte lesen Sie die eigene Readme README_FILIALE_ZENTRALE im Verzeichnis docs. F. Häufige Fragen und Probleme ------------------------------- 1. Beim Speichern der Sprachdatei werden die Einstellungen nicht übernommen --------------------------------------------------------------------------- Bei der Installation auf Debain Squeeze sind einige Probleme aufgetreten, die auf den PHP Suhosin-Patch zurückgehen. Insbe- sondere die $_POST und $_GET Beschränkungen können zu Problemen führen. folgende Einstellungen in der suhosin.ini haben geholfen: suhosin.cookie.max_array_depth=4096 suhosin.cookie.max_array_index_length=2048 suhosin.cookie.max_name_length=2048 suhosin.cookie.max_value_length=650000 suhosin.cookie.max_vars=4096 suhosin.request.max_array_depth=4096 suhosin.request.max_array_index_length=2048 suhosin.request.max_name_length=2048 suhosin.request.max_value_length=650000 suhosin.request.max_vars=4096 suhosin.post.max_array_depth=8048 suhosin.post.max_array_index_length=1024 suhosin.post.max_name_length=2048 suhosin.post.max_totalname_length=8048 suhosin.post.max_vars=4096 Bei Debian Wheezy sind diese Einstellungen wieder in der php.ini und zwar ; How many GET/POST/COOKIE input variables may be accepted max_input_vars = 5000 ; Maximum size of POST data that PHP will accept. post_max_size = 32M Weiters sollte der memory_limit Wert etwas erhöht werden. ; Maximum amount of memory a script may consume (128MB) ; http://php.net/memory-limit memory_limit = 256M 2. Kann man die Feldnamen (Feldname=Spaltenname) der Adressentabelle umdefinieren --------------------------------------------------------------------------------- Ja, man kann in der Datei sql_constants.php (NUR) die Feldnamen der Adressentabelle definieren. Die ersten drei Einträge sehen z.B. so aus: define('ADR_ID','adr_id'); define('ANREDE','anrede'); define('VORNAME','vorname'); Die Grossbuchstaben sind Konstanten, die NICHT verändert werden dürfen, die Kleinbuchstaben definieren, mit welchen Feld- namen die Tabelle angelegt wird. Eine Übersetzung sähe also z.B. so aus: define('ADR_ID','feld1'); define('ANREDE','feld2'); define('VORNAME','feld3'); Die Anpassung muss VOR der Installation erfolgen, das Install-Script liest die Einstellungen aus und legt eine Tabelle mit den definierten Werten an. Im Nachhinein ist händisches Ändern der Feldnamen notwendig. Diese Einstellung erlaubt es mit etwas Geschick auf eine bestehende Tabelle zuzugreifen und Fremdtabellen als Datenquelle zu verwenden. So könnten z.B. 2 Programme sich eine Datenquelle teilen. Die Tabelle selbst MUSS `adressen` heissen, in manchen Abfragen wird neben den Spaltennamen auch der Tabellenname zur eindeutigen identifikation verwendet. Um eine korrekte Übersetzung der Feldnamen sicher zu stellen, ist es notwendig die Feldnamen und ihre Übersetzung in die Sprachdatei(en) einzutragen. Dazu legen sie einfach neue Parameter (Language Codewörter) mit den neuen Feldnamen und deren Übersetzung (Administration -> Scriptspache anpassen) an. Für das Beispile oben also z.B. Übersetzung Language Codewort ID feld1 Anrede feld2 Vorname feld3 u.s.w Die aktuellen Übersetzungen findet man in der Administration -> Grundeinstellung -> Scriptsprache indem man dort adresSQL auswählt. 3. Wie kann man den Mailer des Scripts aufrufen ----------------------------------------------- Prinzipiell ist das integrierte Mailscript an eine Mailadresse gebunden. Damit das Mailarchiv gesendete Mails speichern kann muss es wissen, welchem Datensatz die Mails zugeordnet werden müssen. Der Mailer versteht sich nicht als Mailinterface um an Freunde Mails zu versenden sondern ist ein fester Bestandteil der Adressenverwaltung. Ist bei einer Adresse eine Mailadresse angelegt, kann man den Mailer mit einem Klick auf die Mailadresse aufrufen. Der Mailer merkt sich die Adresse und speichert versandte Mails gebunden an die Adresse. Dass man die Mailadresse im Mailer ändern kann ist ein Feature um Korrekturen vornehmen zu können. "Normale" Mails sollten mit einem ordentlichen Mailprogramm versendet werden. 4. Accesskeys loggen mich aus ----------------------------- Das kommt vor, wenn mehrere Sessions in verschiedenen Browser-Fenstern gestartet wurden. Schliessen Sie den Browser (ALLE Fenster) und loggen Sie sich neu ein, damit sollte das Problem behoben sein. 5 Manche Einstellungen ziehen nach dem Ändern nicht --------------------------------------------------- Auch das kann vorkommen. Ich setze alle Dateiinhalte in Sessions, damit nicht ständig aus Dateien gelesen werden muss. Der dafür benötigte Speicher muss also entsprechend gross genug konfiguriert sein. Normaler Weise lese ich gecache`te Daten, wenn sich etwas ändert, neu ein. Natürlich kann ich das auch irgend wo übersehen haben. In Ihrer Userkonfiguration finden Sie einen Button "Filecache Reset", mit dem Sie ihren Cache komplett leeren und ein erneutes Einlesen erzwingen können. Danach sollten alle Dateiinhalte verfügbar sein. Bitte schreiben Sie mir, sollte der Fehler reproduzierbar sein. Ich habe bei Änderungen eine Möglichkeit geschaffen, den Cache neu einzulesen und möglicher Weise nur eine Codezeile übersehen, wo das notwendig ist. G. Tricks ---------- 1. Adressfelder ausblenden -------------------------- Adressen sind erst vollständig, wenn man bestimmte Felder einer Adresse ausfüllt. Ich gebe einige Felder vor. Die Felder kann man nach belieben erweitern (Felder hinzufügen) und ergänzen. In der Administration findet sich dafür ein eigener Menü- Punkt (Adress-Felder +/-). Eventuell werden aber auch einige vorgegebene Felder nicht benötigt. Diese Felder kann man zwar nicht löschen, aber man kann sie ausblenden. In der Sprachdatei (Administration -> Grundeinstellungen -> Scriptsprache anpassen) finden sich die Übersetzungen für die Feld- Namen auf die adresSQL zugreift (In der neuesten Version ca. ab Eintrag 275). Dort steht z.B. Mobil handy1 Ansprechpartner abteilung Beruf beruf Der erste Eintrag ist die Übersetzung, der zweite ist der Feldname. Ersetzt man nun die Übersetzung eines Feldnamens mit "Unsichtbar" wird dieses Feld ausgeblendet. Editiert man die Einträge wie folgt Mobil handy1 Unsichtbar abteilung Unsichtbar beruf Werden die Felder "abteilung" und "beruf" nun im Adressformular nicht mehr angezeigt. ACHTUNG!! blendet man auf diese Art Mussfelder aus, kann man keine Daten mehr anlegen. Da ich das Script so flexibel wie möglich halten möchte ist der Wert, der das Ausblenden bewirkt (also hier das Wort "Unsicht- bar") ebenfalls frei definierbar. In der Sprachdatei ist ein Parameter "field_invisible" der mit diesem Wert "Unsichtbar" belegt ist. Ersetzt man diesen Wert z.B. mit "ABCDEFG" müssten obige Einträge wie folgt editiert werden um ausgeblendet zu werden: Mobil handy1 ABCDEFG abteilung ABCDEFG beruf Die Felder sind nach wie vor vorhanden, wurden sie vor dem Ausblenden befüllt, bleiben die Inhalte auch erhalten. 2. Accesskeys im Firefox umstellen ---------------------------------- Um in Firefox problemlos Accesskeys nutzen zu können muss man den Firefox etwas modifizieren. Firefox will [Alt]+[Shift]+Key als Standardeingabe für Accesskeys. Um auf [Alt]+Key umzuschalten gehen Sie wie folgt vor: Rufen Sie in einem leeren Browserfenster about:config auf Als Suchbegriff geben sie access ein. Suchen Sie die beiden Einträge ui.key.menuAccessKey (Standard 18) und ui.key.generalAccessdKey (Standard -1) und vertauschen Sie die beiden Werte. Nun können Sie auch die Karteikarten mit Accesskeys (Alt+Input) steuern. Dabei Werden die Karteikarten von 1 bis 9 durchnummeriert. Firefox setzt nun allerdings überall dort, wo Accesskeys sich mit Steuerungen überschneiden, die Steuereung für die Menüs ausser Kraft, sie können also, ist der Accesskey "D" aktiv, z.B. mit [Alt]+D nicht mehr das Menü Datei aufrufen. Prinzipiell gillt: Alle Browser kochen ihr eigenes Süppchen, wenn es um Accesskeys geht. Jeder Browser will anders gesteuert werden und eine einheitliche Steuerung gibt es nicht. Da ich das Script mit Firefox und Palemoon getestet habe kann ich hier auch nur auf Eigenheiten des Firefox eingehen. An einer erweitereten Verwendung von Accesskeys wird gearbeitet. 3. Charset, Kodierung ändern --------------------------- Mancher hat Probleme, die Datenbank dazu zu bringen, Umlaute korrekt anzeigen zu lassen, bzw. zu einer bestimmten Kodierung zu bewegen. Für die korrekte Kodierung sind 3 Voraussetzungen nötig: I. Der Browser sendet korrek kodierte Daten (Header) II. Die Kommunikation zur Datenbank (Client) ist korrekt kodiert III. Die Datenbank selber nutzt eine korrekte Kodierung. Für Punkt I ist Der Header der Ausgabe zuständig, der lässt sich in AdresSQL in der Administration unter Formate einstellen. Dieser Parameter sollte auf jeden Fall den Bedürfnissen angepasst werden. Punkt II und III müssen extra an die Datenbank ge- sendet werden. Dazu besteht in der Datei connect.php die Variable $db_caracter_set, in die die gewünschte Kodierung eingetragen wird, um an die Punkte A und B (unten) die Kodierung zu übergeben. AdresSQL sollte das Problem für die Sprache Deutsch und entsprechenden Umlaute eigentlich problemlos lösen, möchte man Mysql dennoch dazu bewegen, eine bestimmte feste Kodierung zu verwenden, lässt sich das wie folgt realisieren: A) Mit der Funktion mysql_set_charset/mysqli_set_charset (Punkt III), um Die Datenbank zur Verwendung eine bestimmten Kodier- ung einzustellen. 1. Im Verzeichnis /vars wird eine Datei "DB_SET_CHARSET" (achten Sie auf die Grossschreibung) erstellt. Die Datei kann leer bleiben. Was Passiert dann? Die Einstellung $db_caracter_set aus der connect.php wird an die Funktion mysql_set_charset() bzw. mysqli_set_charset() übergeben und bei einem Connect gesendet. B) Ein Query mit "SET_NAMES" senden (Punkt II) um die Kommunikation zur Datenbank mit einer bestimmten Kodierung einzustellen. 1. Im Verzeichnis /vars eine Dastei "DB_SET_NAMES" (Grossschreibung beachten) erstellen. Die Datei kann leer bleiben. Was passiert nun hier? Die Einstellung $db_caracter_set aus der connect.php wird nun mittels Query an die Datenbank gesendet. Das bewirkt, dass die Kommunikation zwischen Datenbank und Client auf die gewünschte Kodierung eingestellt wird. Ist die Datei DB_SET_NAMES nicht vorhanden, wird das Query nicht gesendet. Wer die Kodierung umstellen möchte, wird im Normalfall beide Dateien anlegen. i. Sie sollten den Parameter $config['use_utf8'] in der conf.php bzw. in der Administration auf 0 stellen, damit ein Durchlauf der PHP-Funktion utf8_encode/decode verhindert wird. ii. Weiters sollte in der conf.php der Parameter $config['header_char_set'] auf die gültige kodierung gestellt werden, um sicher zu stellen, dass der Header im Browser auch korrekt kodiert wird. iii. Alle Server lassen in ihren Konfigurationsdateien eine Default-Einstellung zu. Dazu muss man ein wenig die Beschreibungen der jeweiligen Server lesen, Mariadb läuft etwas anders als Mysql, aber wenn man diese Einstellungen ändert, startet der Server bereits mit der gewünschten Kodierung. 4. Ort an eine online-Karte übergeben ------------------------------------ Seit Vers. 1.3037 stehen alle notwendigen Einstellungen in der Datei vars/maps.var. Die Datei hat folgenden Inhalt: https://www.openstreetmap.org/search?query={ORT}+{STRASSE} + 1000 600 60 60 1 Die erste Zeile beinhaltet den zu verwendenen Link mit den Platzhaltern {ORT} und {STRASSE}. Je nachdem, welche URL man verwendet, sind die beiden Platzhalter durch ein Zeichen verbunden, bei Google ist das z.B. für gewöhnlich ein Beistrich. Dieses Zeichen ist in Zeile 2 einzugeben. Die 5 weiteren Zeilen beinhalten Fenstereigenschaften wie Width, Height, TOP, LEFT und SCROLL Wer spendet, bekommt über die Admin-Tools ein Sccript, mit dem diese Datei angepasst werden kann 5. Zusätzliche Links in den Datenfeldern ---------------------------------------- In der Administration gibt es ein Tool, mit dem man Links auf Adressfelder anlegen kann. Man kann Wahlweise eigene Scripte aufrufen oder Weblinks legen. Das Tool soll es ermöglichen, allen Daten gemeinsame Scripte hinterlegen zu können, die z.B. die Informationen aufbereiten. Den Zusatzlinks wird automatisch der GET-Parameter zid= und die ID des Datensatzees hinzugefügt. So kann man die Daten des be- treffenden Datensatzes in separaten Scripten erneut auslesen. 6. Suche mit oder ohne preg_quote() ---------------------------------- In Datenbanken zu suchen ist so eine Sache, da Datenbanken relativ empfindlich auf Sonderzeichen reagieren. Nun kombinieren ich die Suche auch noch mit einer Funktion, die die Suchbegriffe farblich hervorhebt. Was hier eher banal klingt, kann sich schnell zu einem echten Disaster ausweiten, indem man nach speziellen Sonderzeichen sucht, die zusätzlich durch mehrere PHP-Funktionen geschleust werden. Oft ist der Slash der Bösewicht, da dem Slash und dem Backslash spezielle Bedeutung in Programmiersprachen und Datenbanken zugewiesen wird. Lange Rede, ich habe für solche Fälle versucht vorzubeugen und man kann die Funktion preg_quote() für solche Probleme ein bzw. abschalten. Zu finden ist die Möglichkeit in der Administration und dort zum Thema Datenbank Kodierung. Manuell lässt sich preg_quote() einschalten, indem man im Verzeichnis vars eine leere Datei USEPREGQUOTE erstellt. 7. Anzeigefelder in Adressverknüpfung ------------------------------------- Wer adresSQL nicht als Adressdatenbank verwendet, möchte bei der Anzeige der Adressverknüpfung eventuell andere Felder verwenden als die Namensfelder der Datenbank. Das kann man sehr leicht erreichen, indem man im Verzeichnis templates/connected/vars eine Datei NAME_TO_SHOW anlegt in die man alle anzuzeigenden Felder durch Kommata getrennt ablegt. Die einzelnen Feldindizes kann man sich anzeigen lassen, indem man entweder einen Datensatz im Detail amnzeigen lässt und mit der Maus auf die einzelnen Felder zeigt, die Feldnummer erscheint dann als mouseover Text, oder indem man z.B. unter sonstiges und Hilfe das Konfig-tool "Formulareingabe ändern" aufruft, dort werden die Feldnummern als erste Spalte angezeigt. 8. PHP 7.3 Fehlermeldung bei PDF-Vorschau ----------------------------------------- Seit einem Fehler in Ghostscript ist die PDF-Vorschau für .pdf-Dateien bei Imagemagick aus Sicherheitsgründen verboten. Die Vorschau lässt sich wie gewohnt erstellen undem man in /etc/ImageMagickxxx in der poilicy.xml den Eintrag entweder löscht oder zwischen (REM`s) stellt. 9. Datensätze klonen und weiter bearbeiten ------------------------------------------ Erstellen Sie im Verzeichnis vars eine Datei mit dem Namen ENABLE_CLONE und im Pagefooter der Datailansicht wird ein weiterer Button zum Klonen eines Datensatzes angezeigt. Alle Einträge bis auf die Feldtypen ENUM und SET werden übernommen und können weiter bearbeitet werden. Man landet nach einem Klick direkt in der Kartei für die Neuanlage eines Datensatzes. Beachten Sie, dass die Prüfung auf doppelte Datensätze u.U den Fehler wirft, dass es den Datensatz bereits gibt. Änderen Sie also eines der Mussfelder um den neuen Datensatz speichern zu können. Mit dem File "vars/CLONE_NO_HEADER" kann verhindert werden, dass die Funktion header("Location:xxx") verwendet wird um die Daten an das Formular zu übergeben, es wird statt dessen mittels ' aktualisiert. H. Kurze eigene Bemerkungen ---------------------------- 1. Wichtige Nebensächlichkeiten ------------------------------- Das Script versteht sich als Nachfolger der File-Based Version und soll vor allem großen Firmen mit einer großen Anzahl an Daten dienen. Der Einsatz in Firmen mit vielen Anwendern ist also erwünscht. Als "One-Man-Show" bin ich Coder, Tester und Anwender, wodurch mir sicherlich der eine oder andere Fehler entgeht. Wer Fehler findet und rekonstruieren kann, kann, darf und vor allem SOLL mir diese bitte mit einer Beschreibung zusenden. In der Administration ist zu diesem Zweck ein Mailformular eingerichtet, dass an die Mail-Adresse "office@mn-portal.at" ein Mail versendet. Ist der Fehler rekonstruierbar, werde ich ihn natürlich so bald als möglich beheben. Danke an dieser Stelle allen, die mir beim Bugfixen geholfen haben und von der Möglichkeit des Bug-Mails gebrauch gemacht haben. Die Dateien crontabt.php und cron_backup.php sind Scripte die über einen Cronjob gestartet werden können. crontabt.php sollte dabei alle 10 Minuten ausgeführt werden. Das Script überprüft eingetragene Termine und versendet zur ein- gestellten Uhrzeit ein Mail an die hinterlegte Mailadresse. Dabei untersucht das Script, ob ein User dem Termin zugeordnet ist und verwendet die Usermailadresse. Ist KEIN User hinterlegt, wird die Mailadresse der conf.php (b.z.w der Einstellung in der Datenbank verwendet. cron_backup.php sollte täglich gestartet werden. Voraussetzung ist, dass mysqldump per shell ausführbar ist. Das Script sichert die Datenbank ins Backup-Verzeichnis. Die Sicherung kann aus der Administration wieder hergestellt werden oder kann mit dem mysql Befehl als Restore verwendet werden. Das passende Shell-Script zum Sichern findet man unter /bash/backup_adressql. Das Script ruft die passende php-Datei in einer CLI auf und kann so Zeitbeschränkungen umgehen (ändern Sie dazu die php.ini für die CLI). !!! ACHTUNG !!! Alle Shell-Scripte in /bash müssen mit korrekten Pfadangaben versehen werden. Die Sicherungen stellen bei einem Restore einen Datenstand zu einem bestimmten Zeitpunkt wieder her und löschen alle anderen Daten. Tabellen werden vor dem wieder Herstellen der Daten komplett geleert. Die Backups verstehen sich also mehr als Snapshot und geben den Datenbestand zu einem Zeitpunkt wieder. Achten Sie auch darauf, dass Backups mit der Zeit natürlich einiges an Platz belegen. Sie können alte Backups über die Adminis- tration löschen. 2. Kleinkram und Erwähnenswertes -------------------------------- * Ich habe wirklich viel gestetet, aber wie schon erwähnt, ich mache alles alleine, daher kann es natürlich vorkommen, dass man "betriebsblind" wird und über Fehler ständig hinweggeht. Manches ist noch recht simpel, was ich aber durch Updates zu verändern gedenke. Das Script soll dabei natürlich so einfach als irgend möglich bleiben. * Derzeit steht nur die Sprache Deutsch zur Verfügung. An anderen Sprachen wird nur sehr zögerlich gearbeitet, davon verstehe schlicht ich zu wenig. Sollte sich jemand die Mühe gemacht haben und eine Übersetzung haben, bin ich für ein Mail mit der entsprechenden Language-Datei dankbar. Die Sprachen liegen unter language/kürzel.var (z.B. de.var oder en.var) * Termine, die an einen User gebunden sind, können von anderen Usern NICHT übernommen werden. Nur der Admin hat 2 Möglich- keiten den Datensatz wieder frei zu geben. 1. Als Admin setze ich das Flag zum Binden eines Termines an den User (der Termin gehört nun dem Admin). Danach löscht der Admin das Flag, indem er es wieder deaktiviert und gibt den Datensatz so für alle frei. 2. Im Admincenter unter Termine verwalten können Termine einem anderen User direkt zugewiesen werden. * Im docs/some_help Verzeichnis findet sich eine Datei "sql_tabellenkram" in der kleine SQL-Beispiele angeführt werden. * Im docs/some_help findet man eine Datei table_structure.txt die den Aufbau aller Tabellen des Scripts beinhaltet. Neu dazu ist die Tabellenübersicht in der Kartei Übersicht, die alle Tabellen, Feldnamen und Zusatzinfos liefert. Die Anzeige des Script kann in der Administration ein/ausgeschalten werden. Standard ist NICHT anzeigen. In der Administration unter "Sonstiges und Hilfe" kann man über SQL+Phpinfo alle Tabellen und ihre Einstellungen auflisten. * Dem Apache Server sollte das Listen von Verzeichnisinhalten generell verboten werden. Dazu wird der Eintrag "- Indexes" in den entsprechenden Serverkonfigurationen hinzugefügt. Ich lege in den wichtigsten Verzeichnissen eine entsprechende .htaccess Datei ab, die das unterbinden sollte. * Das Script ist Modular aufgebaut. Wer eigene Funktionen einbauen möchte, sollte das in Form eines eigenen Moduls machen, damit das Script weiterhin updatefähig ist. Wer an den Dateien Änderungen vornimmt, verliert diese bei einem Update, da ich die Script-Dateien komplett tausche. Wien man eigene Module erstellen kann steht in der Datei Templates/admin/doc/module.txt oder kann in der Administration direkt über "Sonstiges und Hilfe -> Hilfe zum Admincenter -> Erweiterete Funktionen / Readme / License" aufgerufen werden. Das Werk ist sicher nicht komplett und gibt nur einen kurzen Überblick. * Bisher undokumentierte Dateien, die Aktionen setzen/starten/verhindern adresSQL vars/CONVERTLOG Aktiviert das Logging für die Erstellung von Vorschaubildern von PDF-Dateien ./LOG_HEADER_PATH Aktiviert das Logging aller http header Aufrufe nach vars/headerpath.var Im Verzeichnnmis templates/ Gallerie gallerie/var/DEBUG Startet eine Debug-Ausgabe für Admins von Exif-Daten in Bilderen Scanner sane/DEVICE_IP Legt über die IP den zu verwendenden Scanner im Netzwerk fest In der Wawi wawi/pdf/LANGUAGE Legt die Sprache für die PDF-Klasse fest wawi/pdf/ORIENTATION Legt Hoch oder Querformat für die PDF-Klasse fest wawi/pdf/PAGEFORMAT Legt das Seitenformat für die PDF-Klasse fest wawi/subdat/conf/DESC Legt die Sortierreihenfolge für Wawi-Belege auf absteigend fset wawi/subdat/conf/JAHROFF Deaktiviert den Filter für die Anzeige von Belegen nur für das aktuelle Jahr wawi/subdat/CHECKTIMESTAMP Aktiviert einen Filter auf das in der Datenbank gespeicherte Erstellungsdatum eines Beleges Ansonsten wird das Erstellungsdatum aus dem Zeitstempel der Datei gelesen I. Wawi-Modul -------------- Das Modul erlaubt es Aufträge, Lieferscheine, Rechnungen zu allen bestehenden Datensätzen anzulegen, Fertige Berichte über offene Aufträge, stornierte Aufträge und offene Rechnungen sind enthalten und das Mahnwesen erlaubt es einen freien Mahntext zu drucken. Das Modul versteht sich NICHT als umfangreiche Warenwirtschaft, wie sie von Handelsfirmen benötigt wird, sondern richtet sich speziell an kleine (1-10 Personen) Firmen, deren Wawi entweder aus Word, Excel und Co besteht, oder die keine tausende Euro aus- geben können/wollen. Insbesondere für das Wawi-Modul wird natürlich keine Haftung übernommen. Ich erhebe nicht den Anspruch alle rechtlichen Voraus- setzungen für eine 100% ordentliche Warenwirtschaft im Sinne der Finanz zu erfüllen. Der Unkostenbeitrag für die Wawi beträgt €50 und wird nur per Mailanfrage zugesandt. Dafür helfe ich auch bei der Installation und schicke bei Updates per Mail die neuen Scripte. Bei Interesse, eine Mail an office@mn-portal.at mit dem Betreff "adressql-wawi", wir werden uns sicher einig. J. Windows als Server ---------------------- Viele laden sich den XAMPP (WAMPP)-Server für Windows herunter und installieren adresSQL. Sehen Sie bei Problemen mit XAMPP im XAMPP-Forum nach, dort gibt es Hinweise zur Problembehebung oder posten Sie einen entsprechenden Eintrag. Es sei jedoch erwähnt, dass Windows allein schon seine eigenen Tücken hat und XAMPP als Entwicklungsumgebung konzipiert ist, der Server also nicht für den Produktiveinsatz konzipiert ist. Getestet wurde im März 2016 Xampp mit php7 Nun wünsche ich noch viel Spass mit adresSQL. Wer mit dem Tool spielt, wird viele Funktionen finden, die ich nicht extra im De- tail besprochen habe.. K. Gibt`s noch etwas --------------------- Natürlich gibt es immer offene Fragen, folglich ein blöder Punkt! Daher bitte ich, sich aktiv zu beteiligen und mir zu helfen, adresSQL besser zu machen. Das Script entspringt einem Softwaranwender-Geist, ich versuche also komplizierte Vorgänge vom Anwender fern zu halten und Lösungen zu finden, die man braucht und wo man nicht Stundenlang herumpfuschen muss, um zum Ziel zu kommen. Der Einsatz von adresSQL ist mittlerweile recht umfangreich und es gibt sicher noch viel mehr Ideen, also immer her damit... * Ein Wort, wieso die Dateien im Verzeichnis gets und posts Nummerische sind. Zahlen lassen sich unter Linux problemlos sortieren und so kann man recht einfach die Reihenfolge der Abarbeitung sicherstellen.. * Die Dateien /vars/edit_focus und vars/newdata_focus sind 2 Dateien, die festlegen, auf welches Feld im Edit-Modus bzw beim Formular der Neuanlage der Focus gesetzt werden soll. Nach dem Aufruf von New bzw Edit steht der Cursor in diesen Felderen. * Die Datei vars/DELETE_SPACES legt fest, in welchen Formular Feldern alle Leerzeichen entfernt werden. Die Feldnummern einfach durch Komma getrennt eintragen. * Die Datei vars/DWNLOAD_PAGING stellt sicher, dass der Download aus der Übersicht (Symbol neben dem Logo in der Karteileiste ) nur die Daten der aktuellen Seite anbietet, fehlt diese Datei, wird immer der gesamte Datenbestand heruntergeladen. * Diverse Plugins des Admintools haben (noch) keine Hilfe, das kommt daher, dass ich mir alle Plugins zunächst dafür baue, um mir beim Programmieren Konfig-Dateien erstellen zu können und ich weiss ja, was welcher Parameter tut. Eine Hilfe für jedes Plugin wird folgen, versprochen. ;-) L. Rerservierte Variablen -------------------------- Im Laufe der Bugfixes und Kosmetischen Operationen an adresSQL habe ich festgestellt, dass mir Kleinigkeiten, wie zB. das nachladen von zusätzlichen Styles oder Java-Scripten Mühe machen. Dafür habe ich nun eine "Lösung" gefunden, reservierte Variablen an diversen Stellen. Z.B ist es nun möglich weitere Stylesheets an den header zu überggeben. Hier also meine kleine Liste reservierter Variablen. Ich meine nicht SESSION-Variablen, sondern Variablen, die nach beenden des Scripts ihre Gültigkeit automatisch verlieren. $adressql_added_style Diese Variable braucht nur vor dem Aufruf von adr_head.tpl befüllt werden und schon werden weitere Styles im header geladen. $adressql_jsscript Wird z.B. in der Bildergallerie im pagefooter verwendet um im Body-bereich ein JS zu laden. Dabei wird der Pfad zu einem Script an den Pagefooter übergeben, der das Script in einem JS-Tag einbindet $adressql_code Ähnlich $adressql_jsscript wird hier aber kompletter Code übergeben, der vor dem </body> Tag mit einem echo ausgegeben wird. Technisch ist alles erlaubt, was man vor dem </body> laden und ausführen darf. M. php7 und mariadb auf dem Server ----------------------------------- Leichtere Umlaut-Probleme hatte ich mit einer Neuinstallation auf Debain-stretch und mariadb! Die Lösung war recht einfach. Die Datei /etc/mysql/mariadb.conf.d/50-server.cnf öffnen und ca in Zeile 111,112 folgende Einträge deaktivieren #character-set-server = utf8mb4_general_ci #collation-server = utf8mb4_general_ci Danach den mariadb-server neu starten. Das Script lief ohne Fehler mit php7, sollten dennoch Probleme auftreten, bitte eine kurze Nachricht, ich setze mich so bald als möglich daran. Sollte ein root-login mit mariadb nicht mehr wie unter mysql funktionieren, gibt es eine einfache Lösung: a.) Ist kein Passwort in der mysql.user Tabelle vorhanden, muss eines definiert werden (im Bsp. geheim): mysql -u root MariaDB [(none)]> update mysql.user set password=password('geheim') where user='root'; MariaDB [(none)]> flush privileges; b.) Soll sich mariadb so verhalten wie früher mysql, sprich ein root-login erlauben: mysql -u root -p Enter password: ******* select user,host,password,plugin from mysql.user; +------+-----------+------------------------+-------------+ | user | host | password | plugin | +------+-----------+------------------------+-------------+ | root | localhost | *geheimerhashcode | unix_socket | | root | 127.0.0.1 | *geheimerhashcode | unix_socket | | root | ::1 | *geheimerhashcode | unix_socket | +------+-----------+------------------------+-------------+ hier muss nun die Verbindung unix_socket für root entfernt werden: update mysql.user set plugin='' where user='root'; flush privileges; Ab nun funktioniert das root-login wieder. c.) Soll statt dessen ein Ersatzuser 'root2' den Zugriff bekommen: mysql -u root -p Enter password: ******* grant all on *.* to root2@localhost identified by 'geheim' with grant option; Mehr Info unter https://kofler.info/root-login-problem-mit-mariadb/ N. ssmtp um Mails zu versenden ----------------------------------- Man muss nicht immer einen eigenen Mailserver betreiben um Mails über php versenden zu können. Unter Linux kann man ssmtp verwenden und sich mit einem bestehenden Konto verbinden und Mails zu forwarden. Das hat den Vorteil, dass der eigene Server ncht so ohne weiteres als Spam-Schleuder verwendet werden kann und man sich um die Sicherheit des eigenen Mailservers keine Gedanken machen braucht. Ich nutze Debian, entsprechend installiere ich: * apt-get install mailutils ssmtp * in der php.ini folgende sendmail-Pfad eintragen: sendmail_path = /usr/sbin/ssmtp -i in /etc /ssmtp/ssmtp.conf (hier als Bsp. gmail.com) # The user that gets all the mails (UID < 1000, usually the admin) root=username@gmail.com mailhub=smtp.gmail.com:587 rewriteDomain=gmail.com hostname=yourlocalhost.yourlocaldomain.tld UseTLS=Yes UseSTARTTLS=Yes AuthUser=username AuthPass=password AuthMethod=LOGIN FromLineOverride=yes * in /etc/ssmtp/revaliases root:username@gmail.com:smtp.gmail.com:587 Schon kann man Mails über den gmailaccount username@gmail.com versenden. ########################################################################################## # # # Nun viel Erfolg, Vergnügen, Spass, oder was auch immer ihr mit adresSQL vor habt.. # # Euer sysop (Matthias Nitzschke) # # # ##########################################################################################