cfe5ef3505bdfcfb131721486702636aa9dba320
[banana.git] / include / post.inc.php
1 <?php
2 /********************************************************************************
3 * include/posts.inc.php : class for posts
4 * -----------------------
5 *
6 * This file is part of the banana distribution
7 * Copyright: See COPYING files that comes with this distribution
8 ********************************************************************************/
9
10 /** class for posts
11 */
12
13 class BananaPost
14 {
15 var $id;
16 /** headers */
17 var $headers;
18 /** body */
19 var $body;
20 /** poster name */
21 var $name;
22
23 /** constructor
24 * @param $_id STRING MSGNUM or MSGID (a group should be selected in this case)
25 */
26 function BananaPost($_id)
27 {
28 global $banana;
29 $this->id = $_id;
30 $this->_header();
31
32 $this->body = join("\n", $banana->nntp->body($_id));
33
34 if (isset($this->headers['content-transfer-encoding'])) {
35 if (preg_match("/base64/", $this->headers['content-transfer-encoding'])) {
36 $this->body = base64_decode($this->body);
37 } elseif (preg_match("/quoted-printable/", $this->headers['content-transfer-encoding'])) {
38 $this->body = quoted_printable_decode($this->body);
39 }
40 }
41
42 if (preg_match('!charset=([^;]*);!', $this->headers['content-type'], $matches)) {
43 $this->body = iconv($matches[1], 'iso-8859-1', $this->body);
44 }
45 }
46
47 function _header()
48 {
49 global $banana;
50 $hdrs = $banana->nntp->head($this->id);
51 if (!$hdrs) {
52 $this = null;
53 return false;
54 }
55
56 // parse headers
57 foreach ($hdrs as $line) {
58 if (preg_match("/^[\t\r ]+/", $line)) {
59 $line = ($hdr=="X-Face"?"":" ").ltrim($line);
60 if (in_array($hdr, $banana->parse_hdr)) {
61 $this->headers[$hdr] .= $line;
62 }
63 } else {
64 list($hdr, $val) = split(":[ \t\r]*", $line, 2);
65 $hdr = strtolower($hdr);
66 if (in_array($hdr, $banana->parse_hdr)) {
67 $this->headers[$hdr] = $val;
68 }
69 }
70 }
71 // decode headers
72 foreach ($banana->hdecode as $hdr) {
73 if (isset($this->headers[$hdr])) {
74 $this->headers[$hdr] = headerDecode($this->headers[$hdr]);
75 }
76 }
77
78 $this->name = $this->headers['from'];
79 $this->name = preg_replace('/<[^ ]*>/', '', $this->name);
80 $this->name = trim($this->name);
81 }
82
83 function checkcancel() {
84 if (function_exists('hook_checkcancel')) {
85 return hook_checkcancel($this->headers);
86 }
87 return ($this->headers['from'] == $_SESSION['name']." <".$_SESSION['mail'].">");
88 }
89
90 }
91
92 ?>