1eed39ee |
1 | <?php |
1eed39ee |
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 | |
d4c19591 |
13 | class BananaPost |
14 | { |
b9ea5b30 |
15 | var $id; |
e785d91c |
16 | /** headers */ |
17 | var $headers; |
18 | /** body */ |
19 | var $body; |
01681efd |
20 | /** poster name */ |
21 | var $name; |
1eed39ee |
22 | |
e785d91c |
23 | /** constructor |
e785d91c |
24 | * @param $_id STRING MSGNUM or MSGID (a group should be selected in this case) |
25 | */ |
2dbc0167 |
26 | function BananaPost($_id) |
d4c19591 |
27 | { |
2dbc0167 |
28 | global $banana; |
b9ea5b30 |
29 | $this->id = $_id; |
2dbc0167 |
30 | $this->_header(); |
01681efd |
31 | |
8d99c683 |
32 | if ($body = $banana->nntp->body($_id)) { |
33 | $this->body = join("\n", $body); |
34 | } else { |
35 | return ($this = null); |
36 | } |
01681efd |
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 | } |
e785d91c |
44 | } |
01681efd |
45 | |
1248ebac |
46 | if (preg_match('!charset=([^;]*)\s*(;|$)!', $this->headers['content-type'], $matches)) { |
987299b4 |
47 | $this->body = iconv($matches[1], 'utf-8', $this->body) |
e785d91c |
48 | } |
1eed39ee |
49 | } |
1eed39ee |
50 | |
2dbc0167 |
51 | function _header() |
01681efd |
52 | { |
2dbc0167 |
53 | global $banana; |
b9ea5b30 |
54 | $hdrs = $banana->nntp->head($this->id); |
e785d91c |
55 | if (!$hdrs) { |
56 | $this = null; |
57 | return false; |
58 | } |
01681efd |
59 | |
e785d91c |
60 | // parse headers |
61 | foreach ($hdrs as $line) { |
62 | if (preg_match("/^[\t\r ]+/", $line)) { |
01681efd |
63 | $line = ($hdr=="X-Face"?"":" ").ltrim($line); |
2dbc0167 |
64 | if (in_array($hdr, $banana->parse_hdr)) { |
01681efd |
65 | $this->headers[$hdr] .= $line; |
e785d91c |
66 | } |
67 | } else { |
68 | list($hdr, $val) = split(":[ \t\r]*", $line, 2); |
01681efd |
69 | $hdr = strtolower($hdr); |
2dbc0167 |
70 | if (in_array($hdr, $banana->parse_hdr)) { |
01681efd |
71 | $this->headers[$hdr] = $val; |
e785d91c |
72 | } |
e785d91c |
73 | } |
74 | } |
75 | // decode headers |
2dbc0167 |
76 | foreach ($banana->hdecode as $hdr) { |
01681efd |
77 | if (isset($this->headers[$hdr])) { |
78 | $this->headers[$hdr] = headerDecode($this->headers[$hdr]); |
e785d91c |
79 | } |
80 | } |
01681efd |
81 | |
82 | $this->name = $this->headers['from']; |
83 | $this->name = preg_replace('/<[^ ]*>/', '', $this->name); |
84 | $this->name = trim($this->name); |
1eed39ee |
85 | } |
b9ea5b30 |
86 | |
65d96b1f |
87 | function checkcancel() |
88 | { |
b9ea5b30 |
89 | if (function_exists('hook_checkcancel')) { |
90 | return hook_checkcancel($this->headers); |
91 | } |
92 | return ($this->headers['from'] == $_SESSION['name']." <".$_SESSION['mail'].">"); |
93 | } |
94 | |
65d96b1f |
95 | function to_html() |
96 | { |
97 | global $banana; |
98 | |
99 | $res = '<table class="bicol banana_msg" cellpadding="0" cellspacing="0">'; |
100 | $res .= '<tr><th colspan="2">'._b_('En-têtes').'</th></tr>'; |
101 | |
102 | foreach ($banana->show_hdr as $hdr) { |
103 | if (isset($this->headers[$hdr])) { |
104 | $res2 = formatdisplayheader($hdr, $this->headers[$hdr]); |
105 | if ($res2) { |
106 | $res .= '<tr><td class="hdr">'.header_translate($hdr)."</td><td class='val'>$res2</td></tr>\n"; |
107 | } |
108 | } |
109 | } |
110 | |
111 | $res .= '<tr><th colspan="2">'._b_('Corps').'</th></tr>'; |
112 | $res .= '<tr><td colspan="2"><pre>'.formatbody($this->body).'</pre></td></tr>'; |
113 | |
114 | $res .= '<tr><th colspan="2">'._b_('apercu').'</th></tr>'; |
115 | $ndx = $banana->spool->getndx($this->id); |
116 | $res .= '<tr><td class="thrd" colspan="2">'.$banana->spool->to_html($ndx-$banana->tbefore, $ndx+$banana->tafter, $ndx).'</td></tr>'; |
117 | |
118 | return $res.'</table>'; |
119 | } |
1eed39ee |
120 | } |
121 | |
122 | ?> |