'Anonymous ', 'sig' => '', 'org' => '', 'customhdr' =>'', 'display' => 0, 'lastnews' => 0, 'locale' => 'fr_FR', 'subscribe' => array()); var $state = Array('group' => null, 'artid' => null); var $nntp; var $groups; var $newgroups; var $post; var $spool; function Banana() { $this->_require('NetNNTP'); setlocale(LC_ALL, $this->profile['locale']); $this->nntp = new nntp($this->host); } function run($class = 'Banana') { global $banana; Banana::_require('misc'); $banana = new $class(); if (!$banana->nntp) { return '

'._b_('Impossible de contacter le serveur').'

'; } $group = empty($_GET['group']) ? null : strtolower($_GET['group']); $artid = empty($_GET['artid']) ? null : strtolower($_GET['artid']); $banana->state = Array ('group' => $group, 'artid' => $artid); if (is_null($group)) { if (isset($_GET['subscribe'])) { return $banana->action_listSubs(); } elseif (isset($_POST['subscribe'])) { $banana->action_saveSubs(); } return $banana->action_listGroups(); } elseif (is_null($artid)) { if (isset($_POST['action']) && $_POST['action'] == 'new') { return $banana->action_doFup($group, isset($_POST['artid']) ? intval($_POST['artid']) : -1); } elseif (isset($_GET['action']) && $_GET['action'] == 'new') { return $banana->action_newFup($group); } else { return $banana->action_showThread($group, isset($_GET['first']) ? intval($_GET['first']) : 1); } } else { if (isset($_POST['action']) && $_POST['action']=='cancel') { $res = $banana->action_cancelArticle($group, $artid); } else { $res = ''; } if (isset($_GET['action'])) { switch ($_GET['action']) { case 'cancel': $res .= $banana->action_showArticle($group, $artid); if ($banana->post->checkcancel()) { $form = '

'._b_('Voulez-vous vraiment annuler ce message ?').'

' . "

" . '' . '' . '

'; return $form.$res; } return $res; case 'new': return $banana->action_newFup($group, $artid); } } return $res . $banana->action_showArticle($group, $artid); } } /**************************************************************************/ /* actions */ /**************************************************************************/ function action_saveSubs() { return; } function action_listGroups() { $this->_newGroup(); $cuts = displayshortcuts(); $res = '

'._b_('Les forums de Banana').'

'.$cuts.$this->groups->to_html(); if (count($this->newgroups->overview)) { $res .= '

'._b_('Les forums suivants ont été créés depuis ton dernier passage :').'

'; $res .= $this->newgroups->to_html(); } $this->nntp->quit(); return $res.$cuts; } function action_listSubs() { $this->_require('groups'); $this->groups = new BananaGroups(BANANA_GROUP_ALL); $cuts = displayshortcuts(); $res = '

'._b_('Abonnements').'

'.$cuts.$this->groups->to_html(true).$cuts; $this->nntp->quit(); return $res; } function action_showThread($group, $first) { $this->_newSpool($group, $this->profile['display'], $this->profile['lastnews']); if ($first > count($this->spool->overview)) { $first = count($this->spool->overview); } $first = $first - ($first % $this->tmax) + 1; $cuts = displayshortcuts($first); $res = '

'.$group.'

'.$cuts; $res .= $this->spool->to_html($first, $first+$this->tmax); $this->nntp->quit(); return $res.$cuts; } function action_showArticle($group, $id) { $this->_newSpool($group, $this->profile['display'], $this->profile['lastnews']); $this->_newPost($id); if (!$this->post) { if ($this->nntp->lasterrorcode == "423") { $this->spool->delid($id); } $this->nntp->quit(); return displayshortcuts().'

'._b_('Impossible d\'accéder au message. Le message a peut-être été annulé').'

'; } $cuts = displayshortcuts(); $res = '

'._b_('Message').'

'.$cuts; $res .= $this->post->to_html(); $this->nntp->quit(); return $res.$cuts; } function action_cancelArticle($group, $id) { $this->_newSpool($group, $this->profile['display'], $this->profile['lastnews']); $this->_newPost($id); $mid = array_search($id, $this->spool->ids); if (!$this->post->checkcancel()) { return '

'._b_('Vous n\'avez pas les permissions pour annuler ce message').'

'; } $msg = 'From: '.$this->profile['name']."\n" . "Newsgroups: $group\n" . "Subject: cmsg $mid\n" . $this->custom . "Control: cancel $mid\n" . "\n" . "Message canceled with Banana"; if ($this->nntp->post($msg)) { $this->spool->delid($id); $this->nntp->quit(); header("Location: ?group=$group&first=$id"); } else { return '

'._b_('Impossible d\'annuler le message').'

'; } } function action_newFup($group, $id = -1) { $subject = $body = ''; $target = $group; if ($id > 0) { $this->nntp->group($group); $this->_newPost($id); if ($this->post) { $subject = preg_replace("/^re\s*:\s*/i", 'Re: ', $this->post->headers['subject']); $body = $this->post->name." "._b_("a écrit")." :\n".wrap($this->post->body, "> "); $target = isset($this->post->headers['followup-to']) ? $this->post->headers['followup-to'] : $this->post->headers['newsgroups']; } } $this->nntp->quit(); $cuts = displayshortcuts(); $html = '

'._b_('Nouveau message').'

'.$cuts; $html .= '
'; $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= ''; $html .= '
'._b_('En-têtes').'
'._b_('Nom').''.htmlentities($this->profile['name']).'
'._b_('Sujet').'
'._b_('Forums').'
'._b_('Suivi à').'
'._b_('Organisation').''.$this->profile['org'].'
'._b_('Corps').'
'; if ($id > 0) { $html .= ''; } $html .= ''; $html .= '
'; return $html.$cuts; } function action_doFup($group, $artid = -1) { $this->_newSpool($group, $this->profile['display'], $this->profile['lastnews']); $body = preg_replace("/\n\.[ \t\r]*\n/m", "\n..\n", $_POST['body']); $msg = 'From: '.$this->profile['name']."\n" . "Newsgroups: ".$_POST['newsgroups']."\n" . "Subject: ".$_POST['subject']."\n" . (empty($this->profile['org']) ? '' : "Organization: {$this->profile['org']}\n") . (empty($_POST['followup']) ? '' : 'Followup-To: '.$_POST['followup']."\n"); if ($artid != -1) { $this->_require('post'); $post = new BananaPost($artid); $refs = ( isset($post->headers['references']) ? $post->headers['references']." " : "" ); $msg .= "References: $refs{$post->headers['message-id']}\n"; } $msg .= $this->custom.$this->profile['customhdr']."\n".wrap($body, "", $this->wrap); if ($this->nntp->post($msg)) { header("Location: ?group=$group".($artid==-1 ? '' : "&first=$artid")); } else { return "

"._b_('Impossible de poster le message')."

".$this->action_showThread($group, $artid); } } /**************************************************************************/ /* Private functions */ /**************************************************************************/ function _newSpool($group, $disp=0, $since='') { $this->_require('spool'); if (!$this->spool || $this->spool->group != $group) { $this->spool = new BananaSpool($group, $disp, $since); } } function _newPost($id) { $this->_require('post'); $this->post = new BananaPost($id); } function _newGroup() { $this->_require('groups'); $this->groups = new BananaGroups(BANANA_GROUP_SUB); if ($this->groups->type == BANANA_GROUP_SUB) { $this->newgroups = new BananaGroups(BANANA_GROUP_NEW); } } function _require($file) { require_once (dirname(__FILE__).'/'.$file.'.inc.php'); } } ?>