post structure
authorx99bachelart <x99bachelart>
Wed, 3 Sep 2003 10:50:04 +0000 (10:50 +0000)
committerx99bachelart <x99bachelart>
Wed, 3 Sep 2003 10:50:04 +0000 (10:50 +0000)
include/post.inc.php [new file with mode: 0644]

diff --git a/include/post.inc.php b/include/post.inc.php
new file mode 100644 (file)
index 0000000..5a7e93d
--- /dev/null
@@ -0,0 +1,124 @@
+<?php
+<?php
+/********************************************************************************
+* include/posts.inc.php : class for posts
+* -----------------------
+*
+* This file is part of the banana distribution
+* Copyright: See COPYING files that comes with this distribution
+********************************************************************************/
+
+/** class for posts
+ */
+
+class Post {
+  /** headers */
+  var $headers;
+  /** body */
+  var $body;
+
+  /** 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;
+    }
+  }
+}
+
+/** class for headers
+ */
+
+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;
+
+  /** 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->nb=$id;
+    $retour->numerr=0;
+  }
+}
+
+?>