
                                News Portal
                                      
   Version 0.24pre6
   
Einleitung

   Newsportal ist ein PHP-Basierter Newsreader. Es steht unter der GNU
   Public License (siehe beiliegende LICENSE).
   
berblick

   Diese Skriptsammlung ermglicht von einer Webseite aus den Zugriff auf
   einen Newsserver (per NNTP). Man kann damit Webforen und Newsgruppen
   verbinden, so da auf ein "Webforum" auch per NNTP zugegriffen werden
   kann. Dieses Skript eignet sich auch fr die Prsentation von
   Announce-Newsgruppen auf Webseiten, ohne da der Benutzer merkt, da
   er in Wirklichkeit auf einen Newsserver zugreift.
   
   Die eigentliche Funktionalitts des Skripts liegt in der Datei
   newsportal.php, in der die meisten php-Funktionen untergebracht sind.
   Zustzlich gibt es vier weitere php-Dateien, auf die direkt mit dem
   Browser zugegriffen wird:
     * index.php zeigt die auf dem Newsserver verfgbaren Newsgruppen an
       (sofern sie auch in die Datei groups.txt eingetragen sind).
     * thread.php zeigt die Artikel in einer Newsgruppe an.
     * article.php zeigt einen einzelnen Artikel an.
     * post.php schreibt eine Nachricht in die passende Newsgruppe.
     * attachment.php zeit mgliche Attachments an.
       
   Neben dan Dateien, auf die direkt zugegriffen wird, gibt es eine Zahl
   weiterer Dateien, die das Verhalten von Newsportal steuern oder
   wichtige Daten enthalten:
     * config.inc enthlt die Einstellungen
     * head.inc enthlt den Kopf jeder von Newsportal ausgegebenen Seite,
       wie den HTML-title und das Body-Tag mit den Farbeinstellungen fr
       die Webseiten.
     * tail.inc enthlt das Ende jeder generierten Seite.
     * deutsch.lang: Die deutschen Sprachdefinitionen
     * english.lang: Die englischen Sprachdefinitionen
       
   Da das Abfragen der Artikelbersicht vom Newsserver viel Zeit
   beansprucht, werden diese Dateien im Verzeichnis spool/
   zwischengespeichert. Die Dateien dort drin knnen nach belieben
   gelscht werden, sie werden bei Bedarf neu angelegt.
   
Installation:

    1. Das Archiv in ein Verzeichnis entpacken.
    2. Die Datei config.inc mu angepasst werden (fr einen Schnellstart
       mssen $server, $port, $title und gegebenenfalls $readonly
       verndert werden).
    3. In die Datei groups.txt werden alle Newsgruppen eingetragen, die
       Newsportal anzeigen soll. Optional kann man hinter den
       Gruppennamen von einem Leerzeichen getrennt eine Beschreibung
       eintragen, die dann von der index.php3 angezeigt wird. Fehlt
       diese, wird die Beschreibung vom Newsserver angefordert.
    4. Das Verzeichnis spool mu mit "chmod 777 spool" fr jeden les- und
       schreibbar gemacht werden. Nach einem Update kann es passieren,
       da das Skript ohne das Lschen aller Dateien in diesem
       Verzeichnis nicht funktioniert. Das kommt aber darauf an, ob ich
       das Format dieser Dateien gendert habe. NewsPortal erkennt
       normalerweise fehlerhafte Spooldateien und lscht sie
       gegebenenfalls.
    5. In der Datei head.inc den Zeichensatz anpassen, falls man sich
       nicht in Westeuropa oder den USA befindet, wo die Voreinstellung
       von iso-8859-1 richtig ist.
       
Konfiguration

   Folgende Einstellungen knnen in der config.inc vorgenommen werden:
   
   Verzeichnisse und Dateien:
     * $file_newsportal="newsportal.php": Name des newsportal-Skripts
     * $file_groups="index.php": Die Gruppenbersicht
     * $file_thread="thread.php": Die Artikelbersicht
     * $file_article="article.php": Zeigt den Artikel an
     * $file_post="post.php": einen Artikel schreiben. Die Datei kann
       entfernt werden, wenn das System auf readonly gesetzt ist (siehe
       unten)
     * $file_language="deutsch.lang": Verweis auf die
       Sprachdefinitionsdatei.
     * $file_footer: Hier kann Optional der Name einer Datei angegeben
       werden, die an jede ber Newsportal verschickte Nachricht
       angehngt wird.
       
   Servereinstellungen
     * $server: Adresse des Newsservers
     * $port: Port des Newsservers, normalerweise 119
     * $post_server: Optional kann hier fr das Schreiben von Artikeln
       ein eigener Server angegeben werden. Es ist dann natrlich so, da
       ein Artikel eine Zeit braucht, bis er vom $post_server zum $server
       gelangt ist.
     * $post_port: Port des Post-Newsservers, normalerweise 119
     * $maxfetch: Hier wird die maximal bei einem Aufruf von thread.php3
       vom Newsserver anzufordernden Artikelbersichten beschrnkt. Auf
       "0" gesetzt werden so viele Artikel angefordert, wie neu zur
       Verfgung stehen, jede andere Nummer legt die Maximalanzahl fest.
       Diese Option sollte nur dann auf etwas anderes als 0 gesetzt
       werden, wenn es Probleme mit der Geschwindigkeit gibt.
     * $initialfetch: Bei einem Neuaufbau der Overview-Spooldatei wird
       statt $maxfech viele Artikel maximal $initialfetch viele Artikel
       abgeholt. Bei "0" ist es auch ungeschrnkt.
     * $server_auth_user: Falls der Newsserver durch Name und Passwort
       gschtzt wird, kann hier der Username angegeben werden. Ansonsten
       einfach die Variable auf "" setzen.
     * $server_auth_pass: Hier wird das zum Usernamen passende Passwort
       angegeben.
       
   Threaddarstellung
     * $treestyle: Setzt das Aussehen des Nachrichtenbaums.
          + 0: Einfache Auflistung der Artikel
          + 1: Einfache Auflistung der Artikel, jedoch als
            HTML-Auflistung
          + 2: Einfache Auflistung in Tabellenform
          + 3: Thread mit HTML-Auflistungen
          + 4: Thread aus Textzeichen
          + 5: Thread auf Graphikelementen
          + 6: Thread aus Textzeichen mit Tabelle
          + 7: Thread aus Grafikzeichen mit Tabelle
     * $thread_fontPre: Der Inhalt dieser Variable wird vor Texten in der
       Threadansicht ausgegeben. Diese Variable ist gedacht um z.B. die
       Textgre der Texte zu ndern. Standardm wird dort der Font
       klein gestellt. Das ist bei alle Threadstyles sinnvoll, wo mit
       Tabellen gearbeitet wird, bei allen anderen ist es schner die
       Variable auf einen leeren String zu setzen.
     * $thread_fontPost: Das gleiche wie $thread_fontPre, nur da dieser
       String nach Textausgaben ausgegeben wird.
     * $thread_showDate,
       $thread_showSubject,
       $thread_showAuthor:
          + true: das Datum / das Subject / der Autor wird im Artikelbaum
            angezeigt
          + false: Darstellung wird unterdrckt.
     * $thread_maxSubject: Anzahl der Zeichen, die vom Subject in der
       Artikelbersicht angezeigt werden.
     * $maxarticles: Gibt die Anzahl der Artikel an, die maximal im
       Artikelbam angezeigt werden. "0" bedeutet keine Beschrnkung. Es
       werden immer die letzten x Artikel angezeigt, wo wie sie auf dem
       Newsserver liegen. Das mu nicht unbedingt mit dem Erstelldatum
       des Artikels bereinstimmen.
     * $maxarticles_extra: Das Problem beim Betrieb mit $maxarticles ist,
       da alle Artikeldaten vom Newsserver komplett neu angefordert
       werden mssen, wenn der angegebene Wert berschritten worden ist.
       Damit dies nicht ganz so oft vorkommt, kann $maxarticles_extra
       gesetzt werden. Dann wird die Artikeldatenbank erst neu aufgebaut,
       wenn $maxarticles + $maxarticles_extra Artikel vorliegen, wobei
       dann $maxarticles viele Artikeldaten angefordert werden. Wenn man
       mit $maxarticles arbeitet, weil die Newsgruppen zu gro sind,
       sollte man unbedingt immer auch mit $maxarticles_extra arbeiten.
       Der Wert sollte etwa 20% von $maxarticles betragen. Nur dann, wenn
       man wirklich eine ganz genau vorgegebene Anzahl von Artikeln auf
       einer Webseite anzeigen will, sollte man hier den Wert auf Null
       setzen.
     * $age_count: Anzahl der verschiedenen Altersstufen fr die
       farbliche Markierung von Artikeln
     * $age_time[n]: maximales Alter eines Artikels in Sekunden, so da
       der Artikel mit der Farbe $age_color[n] markiert wird. n ist eine
       natrliche Zahl >= 1, wobei alle Zahlen von 1 bis n vergeben sein
       mssen, Lcken sind also nicht erlaubt.
     * $age_color[n]: Die Farbe, mit dem der Artikel markiert wird
     * $thread_sorting: Die Sortierreihenfolge fr die Artikel:
          + 0: Keine Sortierung, die Artikel werden in der Reihenfolge
            angezeigt, in der sie vom Newsserver kommen.
          + 1: aufsteigende Sortierung, die ltesten Artikel zu oberst
          + -1: absteigende Sortierung, die neusten Artikel zu oberst
       Es ist zu beachten, da die Artikel in einer Baumstruktur
       angezeigt werden, so da der oberste Artikel eines Teilbaums immer
       den Ausschlag gibt.
     * $articles_per_page: Ist dieser Wert ungleich 0, so gibt er die
       Anzahl der Artikel an, die auf einer Seite gleichzeitig angezeigt
       werden sollen. Es gibt dann Links um die einzelnen Seiten zu
       wechseln. Benutzt man diese Option, so sollte man $maxarticles
       beachten: Diese Variable gibt nmlich auch an, wieviele Artikel in
       den Spooldateien gespeichert werden, sa da ein zu hoher Wert
       trotz Seiteneinteilung die Geschwindigkeit herabsetzen kann.
     * $startpage: In Verbindung mit $articles_per_page wird hier
       angegeben, welche Seite bei Aufruf des Threads angezeigt werden
       soll:
          + "first": zeigt zuerst die erste Seite an.
          + "last": zeigt die letzte Seite an.
       Die Angabe sollte mit $thread_sorting abgestimmt werden. "first"
       fr 0 und 1, und "last" fr -1.
       
   Artikeldarstellung
     * $article_show["Subject"],
       $article_show["From"],
       $article_show["Newsgroups"],
       $article_show["Organization"],
       $article_show["Date"],
       $article_show["Message-ID"],
       $article_show["User-Agent"],
       $article_show["References"]: Bei "true" wird die jeweilige
       Headerzeile in der Artikelansicht angezeigt, bei "false" wird sie
       unterdrckt. Momentan ist die Ansicht weiterer Headerzeilen nicht
       mglich.
       
   Attachments
     * $attachment_show: true oder false, je nochdem ob die Dekodierung
       von Attachments untersttzt werden soll. Ist sie deaktiviert,
       werden die mglichen Attachments im Rohformat angezeigt.
     * $attachment_delete_alternative: true oder false. Wenn ein Artikel
       mehr als einen Body in verschiedenen Formaten hat (multipart
       alternative), dann werden alle berflssigen Alternativen
       verworfen.
     * $attachment_uudecode: true oder false. Aktiviert die Dekodierung
       von uuencoded Attachments. Momentan sehr langsam und fehlerhaft.
       
   Frameuntersttzung
   Beispieldateien fr die Frameuntersttzung liegen in extras/frames/.
   In dieser Sektion werden die targets fr diverse Links definiert, also
   in welchem Frame welche Webseite dargestellt werden soll. In der
   config.inc mu statt "thread.php3" "thread_frameset.php3" eingetragen
   werden.
     * $frame_article: Name des Artikel-Frames. Mu mit dem Namen in
       thread_frameset.php3 bereinstimmen
     * $frame_thread: Name des Thread-Frames;
     * $frame_groups: Name des Frames fr die Gruppenbersicht,
       normalerweise "_top".
     * $frame_post: Name des Schreiben-Frames
     * $frame_threadframeset: Frame, in dem der Frameset erscheinen soll,
       der den Artikel- und Thread-Frame aufnimmt. Normalerweise "_top".
     * $frame_externallink: Zielframe fr extrerne Links innerhalb von
       Artikeln
       
   Sicherheitseinstellungen
     * $send_poster_host: bei "true" wird bei jeder geschriebenen
       Nachricht noch die Zeile "X-HTTP-Posting-Host: " in den Header
       geschrieben, und der Name des Rechners eingetragen, der die
       Nachricht abgeschickt ist. Das kann als Ersatz von
       "NNTP-Posting-Host" angesehen werden, dessen Wert beim Einsatz von
       Newsportal immer nur den Namen des Webservers anzeigt.
     * $readonly: wenn auf "true" gesetzt, kann man keine Artikel in
       Gruppen schreiben.
     * $testgroup: auf "true" gesetzt wird beim Anzeigen des Threads
       berprft, ob betreffende Gruppe in die "groups.txt" eingetragen
       ist. Andernfalls knnte man ber das direkte Eintragen der
       richtigen URL eine Gruppe einsehen, obwohl diese nicht in der
       Gruppenbersicht angezeigt wird.
     * $validate_email: Hier kann eingestellt werden, wie Newsportal beim
       Posten eine angegebene eMail-Adresse auf richtigkeit prft:
          + 0: keine berprfung. Ist nicht zu empfehlen, da
            normalerweise der Newsserver eine Fehlermeldung liefert, wenn
            die Adresse syntaktisch Falsch ist.
          + 1: :berprft die Adresse auf syntaktische Richtigkeit.
          + 2: hier wird zustzlich berprft, ob zu der angegebenen
            Domain ein MX oder A Record existiert.
       
   Allgemeines
     * $title: Name des Systems, wird als berschrift verwendet
     * $organization: Die Organisation fr den NNTP-Header beim Schreiben
       von Nachrichten
     * $setcookies: Erlaubt dem Benutzer, seinen Namen und seine
       eMail-Adresse beim schreiben eines Artikels als Cookie
       abzuspeichern, so da die Daten beim erneuten Schreiben eines
       Artikels automatisch eingesetzt werden.
     * $compress_spoolfiles: Hier kann eingestellt werden, ob die
       Spooldateien komprimiert werden sollen. Dies ist im Normalfall
       empfohlen, da auf etwa 10 bis 15% der Originalgre komprimiert
       wird. Bei aelteren PHP-Versionen mu man diese Variable jedoch auf
       false setzen, falls diese Kompression noch nicht untersttzen.
       
Sicherheitshinweise

   Ein paar Kleinigkeiten men beachtet werden, damit NewsPortal nicht
   zu einem Sicherheitsloch werden soll:
     * Zu Debugzwecken wird immer der User-Agent in der Artikelansicht
       mitbermittelt, wenn die Anzeige ($article_show["User-Agent"])
       abgeschaltet ist, ist der Eintrag lediglich unsichtbar.
     * Die config.inc kann solange von jedem Websurfer (der den
       Dateinamen kennt) abgerufen werden, wie die Datei nicht in einen
       geschtzten Bereich des Webservers verschoben worden ist.
       
   Dieses Skript ist nur fr den Zugriff auf lokale Newsgruppen gedacht.
   Wenn Gruppen des UseNet im Web verfgbar sind, ergeben sich folgende
   Probleme:
     * Spammer knnen anonym ($send_poster_host beachten!) Artikel
       abschicken
     * Es gibt im Internet Listen mit sogenannten "offenen" Newsservern.
       Offen heit hier meist nicht, da die jeder benutzen darf, sondern
       da diese einfach nur nicht ordentlich gesichert worden sind.
       Bevor Du also einen solchen Newsserver benutzt, solltest Du Dich
       vergewissern, da der Betreiber nichts gegen Dein Vorhaben
       einzuwenden hat.
     * Es wird im UseNet oft nicht gerne gesehen, wenn Personen anonym in
       Newsgruppen schreiben knnen. Bevor Du also schreibenden Zugriff
       auf eine Newsgruppe erlaubst, solltest Du in der betreffenden
       Gruppe nachfragen, ob es dort keine Einwnde gibt. Etwas anderes
       ist es natrlich, wenn Du NewsPortal in einem geschtzten Bereich
       Deines Webservers betreibst, auf den nur eine Dir bekannte
       Benutzergruppe zugreifen kann. Gib keinen ffentlichen
       Schreibzugriff auf UseNet Newsgruppen, wenn Du nicht ganz genau
       weit, was Du tust!
       
   Die Benutzung des Skripts erfolgt auf eigene Gefahr!
   
Kompatiblitt

   Sollte auf jedem PHP4-Fhigen Webserver zusammen mit jedem
   NNRP-fhigen Newsserver laufen. Webserver und Newsserver men nicht
   auf der selben Maschine laufen.
   
Kontakt:

   Florian Amrhein
   eMail: florian.amrhein@web.de
   WWW: http://florian-amrhein.de
