60f29868e689158c4465e6cbfee057d8cbcfee57
[banana.git] / 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 if ($body = $banana->nntp->body($_id)) {
33 $this->body = join("\n", $body);
34 } else {
35 return ($this = null);
36 }
37
38 if (isset($this->headers['content-transfer-encoding'])) {
39 if (preg_match("/base64/", $this->headers['content-transfer-encoding'])) {
40 $this->body = base64_decode($this->body);
41 } elseif (preg_match("/quoted-printable/", $this->headers['content-transfer-encoding'])) {
42 $this->body = quoted_printable_decode($this->body);
43 }
44 }
45
46 if (preg_match('!charset=([^;]*)\s*(;|$)!', $this->headers['content-type'], $matches)) {
47 require_once 'banana/misc.inc.php';
48 $this->body = to_html($this->body, $matches[1]);
49 }
50 }
51
52 function _header()
53 {
54 global $banana;
55 $hdrs = $banana->nntp->head($this->id);
56 if (!$hdrs) {
57 $this = null;
58 return false;
59 }
60
61 // parse headers
62 foreach ($hdrs as $line) {
63 if (preg_match("/^[\t\r ]+/", $line)) {
64 $line = ($hdr=="X-Face"?"":" ").ltrim($line);
65 if (in_array($hdr, $banana->parse_hdr)) {
66 $this->headers[$hdr] .= $line;
67 }
68 } else {
69 list($hdr, $val) = split(":[ \t\r]*", $line, 2);
70 $hdr = strtolower($hdr);
71 if (in_array($hdr, $banana->parse_hdr)) {
72 $this->headers[$hdr] = $val;
73 }
74 }
75 }
76 // decode headers
77 foreach ($banana->hdecode as $hdr) {
78 if (isset($this->headers[$hdr])) {
79 $this->headers[$hdr] = headerDecode($this->headers[$hdr]);
80 }
81 }
82
83 $this->name = $this->headers['from'];
84 $this->name = preg_replace('/<[^ ]*>/', '', $this->name);
85 $this->name = trim($this->name);
86 }
87
88 function checkcancel()
89 {
90 if (function_exists('hook_checkcancel')) {
91 return hook_checkcancel($this->headers);
92 }
93 return ($this->headers['from'] == $_SESSION['name']." <".$_SESSION['mail'].">");
94 }
95
96 function to_html()
97 {
98 global $banana;
99
100 $res = '<table class="bicol banana_msg" cellpadding="0" cellspacing="0">';
101 $res .= '<tr><th colspan="2">'._b_('En-tĂȘtes').'</th></tr>';
102
103 foreach ($banana->show_hdr as $hdr) {
104 if (isset($this->headers[$hdr])) {
105 $res2 = formatdisplayheader($hdr, $this->headers[$hdr]);
106 if ($res2) {
107 $res .= '<tr><td class="hdr">'.header_translate($hdr)."</td><td class='val'>$res2</td></tr>\n";
108 }
109 }
110 }
111
112 $res .= '<tr><th colspan="2">'._b_('Corps').'</th></tr>';
113 $res .= '<tr><td colspan="2"><pre>'.formatbody($this->body).'</pre></td></tr>';
114
115 $res .= '<tr><th colspan="2">'._b_('apercu').'</th></tr>';
116 $ndx = $banana->spool->getndx($this->id);
117 $res .= '<tr><td class="thrd" colspan="2">'.$banana->spool->to_html($ndx-$banana->tbefore, $ndx+$banana->tafter, $ndx).'</td></tr>';
118
119 return $res.'</table>';
120 }
121 }
122
123 ?>