X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=include%2Fpost.inc.php;h=2e8d8f9523815f0dee5013d521f0bf4cbae34dfc;hb=01681efdcbe6e290915919d1c03ab6e0a44ba21f;hp=9c5ba659a30cf7c3687dd926c9abbd0efddbdbb0;hpb=4491aea0656fd2cd87349929ea7ca3523db9e363;p=banana.git diff --git a/include/post.inc.php b/include/post.inc.php index 9c5ba65..2e8d8f9 100644 --- a/include/post.inc.php +++ b/include/post.inc.php @@ -10,114 +10,74 @@ /** 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; - } } ?>