old header were to complicated for nothin. drop class Header, and treat it from Post
[banana.git] / include / post.inc.php
index 9c5ba65..2e8d8f9 100644 (file)
 /** class for posts
  */
 
-class Post {
-  /** headers */
-  var $headers;
-  /** body */
-  var $body;
+class NNTPPost {
+    var $nb;
+    /** headers */
+    var $headers;
+    /** body */
+    var $body;
+    /** poster name */
+    var $name;
 
-  /** constructor
-   * @param $_nntp RESOURCE handle to NNTP socket
-   * @param $_id STRING MSGNUM or MSGID (a group should be selected in this case)  
-   */
-  function post(&$_nntp,$_id) {
-    $this->headers = new headers($_nntp,$_id);
-    if (!$this->headers) {
-      $this = false;
-      return false;
-    }
-    $this->body = join("\n",$_nntp->body($_id));
-      if ((isset($this->headers->contentencoding)) && 
-      (preg_match("/base64/",$this->headers->contentencoding))) {
-        $this->body = base64_decode($this->body);
-      }
-      if ((isset($this->headers->contentencoding)) && 
-      (preg_match("/quoted-printable/",$this->headers->contentencoding))) {
-        $this->body = quoted_printable_decode($this->body);
-      }
-    if (!$this->body) {
-      $this = false;
-      return false;
+    /** constructor
+     * @param $_nntp RESOURCE handle to NNTP socket
+     * @param $_id STRING MSGNUM or MSGID (a group should be selected in this case)  
+     */
+    function NNTPPost(&$_nntp, $_id) {
+        $this->nb = $_id;
+        $this->_header($_nntp);
+
+        $this->body = join("\n", $_nntp->body($_id));
+        
+        if (isset($this->headers['content-transfer-encoding'])) {
+            if (preg_match("/base64/", $this->headers['content-transfer-encoding'])) {
+                $this->body = base64_decode($this->body);
+            } elseif (preg_match("/quoted-printable/", $this->headers['content-transfer-encoding'])) {
+                $this->body = quoted_printable_decode($this->body);
+            }
+        }
+
+        if (preg_match('!charset=([^;]*);!', $this->headers['content-type'], $matches)) {
+            $this->body = iconv($matches[1], 'iso-8859-1', $this->body);
+        }
     }
-  }
-}
 
-/** class for headers
- */
+    function _header(&$_nntp)
+    {
+        global $news;
+        $hdrs = $_nntp->head($this->nb);
+        if (!$hdrs) {
+            $this = null;
+            return false;
+        }
 
-class Headers {
-  /** MSGNUM : *local* spool id */
-  var $nb;            // numéro du post
-  /** MSGID : Message-ID */
-  var $msgid;         // Message-ID
-  /** From header */
-  var $from;          // From
-  /** Name (if present in From header) */
-  var $name;
-  /** Mail (in From header) */
-  var $mail;
-  /** Subject header */
-  var $subject;       // Subject
-  /** Newsgroup¨ header */
-  var $newsgroups;    // Newsgroups
-  /** Followup-To header */
-  var $followup;
-  /** Content-Type header */
-  var $contenttype;
-  /** Content-Transfer-Encoding header */
-  var $contentencoding;
-  /** Date header */
-  var $date;
-  /** Organization header */
-  var $organization;
-  /** References header */
-  var $references;
+        $this->nb = $_id;
+        // parse headers
+        foreach ($hdrs as $line) {
+            if (preg_match("/^[\t\r ]+/", $line)) {
+                $line = ($hdr=="X-Face"?"":" ").ltrim($line);
+                if (in_array($hdr, $news['head']))  {
+                    $this->headers[$hdr] .= $line;
+                }
+            } else {
+                list($hdr, $val) = split(":[ \t\r]*", $line, 2);
+                $hdr = strtolower($hdr);
+                if (in_array($hdr, $news['head'])) {
+                    $this->headers[$hdr] = $val;
+                }
+            }
+        }
+        // decode headers
+        foreach ($news['hdecode'] as $hdr) {
+            if (isset($this->headers[$hdr])) {
+                $this->headers[$hdr] = headerDecode($this->headers[$hdr]);
+            }
+        }
 
-  /** constructor
-   * @param $_nntp RESOURCE handle to NNTP socket
-   * @param $_id STRING MSGNUM or MSGID
-   */
-   
-  function headers(&$_nntp,$_id) {
-    global $news;
-    $hdrs = $_nntp->head($_id);
-    if (!$hdrs) {
-      $this = false;
-      return false;
-    }
-    // parse headers
-    foreach ($hdrs as $line) {
-      if (preg_match("/^[\t\r ]+/",$line)) {
-        $line = ($lasthdr=="X-Face"?"":" ").ltrim($line);
-        if (in_array($lasthdr,array_keys($news['head']))) 
-          $this->{$news['head'][$lasthdr]} .= $line;
-      } else {
-        list($hdr,$val) = split(":[ \t\r]*",$line,2);
-        if (in_array($hdr,array_keys($news['head']))) 
-          $this->{$news['head'][$hdr]} = $val;
-        $lasthdr = $hdr;
-      }
-    }
-    // decode headers
-    foreach ($news['hdecode'] as $hdr) {
-      if (isset($this->$hdr)) {
-        $this->$hdr = headerDecode($this->$hdr);
-      }
-    }
-    // sets name and mail
-    $this->name = $this->from;
-    $this->mail = $this->from;
-    if (preg_match("/(.*)<(.*)@(.*)>/",$val,$match)) {
-      $this->name = str_replace("\"","",trim($match[1]));
-      $this->mail = $match[2]."@".$match[3];
-    }
-    if (preg_match("/([\w\.]+)@([\w\.]+) \((.*)\)/",$val,$match)) {
-      $this->name = trim($match[3]);
-      $this->mail = $match[1]."@".$match[2];
+        $this->name = $this->headers['from'];
+        $this->name = preg_replace('/<[^ ]*>/', '', $this->name);
+        $this->name = trim($this->name);
     }
-    $this->nb=$id;
-    $retour->numerr=0;
-  }
 }
 
 ?>