/** 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;
- }
}
?>