X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;ds=sidebyside;f=include%2Fbanana.inc.php.in;h=ba24a0519c1453a426db2815077774929f33a4b8;hb=8d99c68397848a5533731213c76d5ad09acf21ec;hp=454e06379c5e38a744d8947e9bc6a7df97aa5af2;hpb=41cf00ebff5a2e7d3770bb7fc78288677df3ba2a;p=banana.git diff --git a/include/banana.inc.php.in b/include/banana.inc.php.in index 454e063..ba24a05 100644 --- a/include/banana.inc.php.in +++ b/include/banana.inc.php.in @@ -7,9 +7,6 @@ * Copyright: See COPYING files that comes with this distribution ********************************************************************************/ -require_once("include/misc.inc.php"); -require_once("include/error.inc.php"); - class Banana { var $maxspool = 3000; @@ -30,9 +27,10 @@ class Banana var $host = 'news://localhost:119/'; - var $profile = Array( 'name' => 'Anonymous '', 'org' => '', + var $profile = Array( 'name' => '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; @@ -41,12 +39,69 @@ class Banana function Banana() { - if (function_exists('hook_banana')) { - hook_banana($this); - } - $this->_setupProfile(); require_once('include/NetNNTP.inc.php'); + $this->_setupProfile(); $this->nntp = new nntp($this->host); + +$this->profile['subscribe'][] = 'xorg.general'; +$this->profile['subscribe'][] = 'xorg.test'; +$this->profile['subscribe'][] = 'xorg.promo.x1970'; +$this->profile['lastnews'] = time() - 24*3600*7; + + } + + function run() + { + require_once("include/misc.inc.php"); + global $banana; + + $banana = new Banana(); + $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)) { + + 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); + } } /**************************************************************************/ @@ -55,7 +110,7 @@ class Banana function action_listGroups() { - $this->newGroup(BANANA_GROUP_SUB); + $this->_newGroup(); $cuts = displayshortcuts(); $res = '

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

'.$cuts.$this->groups->to_html(); @@ -68,9 +123,21 @@ class Banana return $res.$cuts; } + function action_listSubs() + { + require_once("include/groups.inc.php"); + $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']); + $this->_newSpool($group, $this->profile['display'], $this->profile['lastnews']); if ($first > count($this->spool->overview)) { $first = count($this->spool->overview); @@ -90,8 +157,8 @@ class Banana function action_showArticle($group, $id) { - $this->newSpool($group, $this->profile['display'], $this->profile['lastnews']); - $this->newPost($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); @@ -109,22 +176,116 @@ class Banana 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) { + require_once("include/post.inc.php"); + $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='') { + function _newSpool($group, $disp=0, $since='') { require_once('include/spool.inc.php'); - $this->spool = new BananaSpool($group, $disp, $since); + if (!$this->spool || $this->spool->group != $group) { + $this->spool = new BananaSpool($group, $disp, $since); + } } - function newPost($id) + function _newPost($id) { require_once("include/post.inc.php"); $this->post = new BananaPost($id); } - function newGroup() + function _newGroup() { require_once("include/groups.inc.php"); $this->groups = new BananaGroups(BANANA_GROUP_SUB); @@ -133,10 +294,6 @@ class Banana } } - /**************************************************************************/ - /* */ - /**************************************************************************/ - function _setupProfile() { if (function_exists('hook_getprofile')) { @@ -147,6 +304,4 @@ class Banana } } -$banana = new Banana; - ?>