From: x2003bruneau Date: Thu, 13 Jul 2006 15:39:06 +0000 (+0000) Subject: Use icons to represent actions X-Git-Tag: 1.8~201 X-Git-Url: http://git.polytechnique.org/?a=commitdiff_plain;h=d8e2470ce7b7d54983a499474b197b16fefc8c74;p=banana.git Use icons to represent actions git-svn-id: svn+ssh://murphy/home/svn/banana/trunk@94 9869982d-c50d-0410-be91-f2a2ec7c7c7b --- diff --git a/banana/misc.inc.php b/banana/misc.inc.php index d956a0f..9a8307f 100644 --- a/banana/misc.inc.php +++ b/banana/misc.inc.php @@ -83,7 +83,7 @@ function makeLink($params) /** Format a link to be use in a link * @ref makeLink */ -function makeHREF($params, $text = null, $popup = null) +function makeHREF($params, $text = null, $popup = null, $class = null) { $link = makeLink($params); if (is_null($text)) { @@ -92,11 +92,14 @@ function makeHREF($params, $text = null, $popup = null) if (!is_null($popup)) { $popup = ' title="' . $popup . '"'; } + if (!is_null($class)) { + $class = ' class="' . $class . '"'; + } $target = null; if (isset($params['action']) && $params['action'] == 'view') { $target = ' target="_blank"'; } - return '' . $text . ''; + return '' . $text . ''; } /** Format tree images links @@ -122,12 +125,22 @@ function makeImg($img, $alt, $height = null, $width = null) $proto = empty($_SERVER['HTTPS']) ? 'http://' : 'https://'; $host = $_SERVER['HTTP_HOST']; - $file = dirname($_SERVER['PHP_SELF']) . '/img/' . $img . '.gif'; + $file = dirname($_SERVER['PHP_SELF']) . '/img/' . $img; $url = $proto . $host . $file; return '' . $alt . ''; } +/** Make a link using an image + */ +function makeImgLink($params, $img, $alt, $height = null, $width = null, $class = null) +{ + return makeHREF($params, + makeImg($img, ' [' . $alt . ']', $height, $width), + $alt, + $class); +} + /******************************************************************************** * HTML STUFF * Taken from php.net @@ -365,53 +378,44 @@ function formatFrom($text) { return preg_replace("/\\\(\(|\))/","\\1",$result); } -function displayshortcuts($first = -1) { +function displayShortcuts($first = -1) +{ global $banana; extract($banana->state); - + $res = '
'; - $res .= '[' . makeHREF(Array(), _b_('Liste des forums')) . '] '; - if (is_null($group)) { - return $res.'[' . makeHREF(Array('subscribe' => 1), _b_('Abonnements')) . ']
'; + $res .= ' Profil : ' . makeHREF(Array('subscribe' => 1), _b_('Abonnements')); + if (function_exists('hook_shortcuts') && $cstm = hook_shortcuts()) { + $res .= ' . ' . $cstm; } - - $res .= '[' . makeHREF(Array('group' => $group), $group) . '] '; - - if (is_null($artid)) { - $res .= '[' . makeHREF(Array('group' => $group, - 'action' => 'new'), - _b_('Nouveau message')) - . '] '; - if (sizeof($banana->spool->overview)>$banana->tmax) { - $res .= '
Page : '; - $n = intval(log(count($banana->spool->overview), 10))+1; - $i = 1; - for ($ndx = 1 ; $ndx <= sizeof($banana->spool->overview) ; $ndx += $banana->tmax) { - if ($first==$ndx) { - $fmt = $i . ' '; - } else { - $fmt = makeHREF(Array('group' => $group, - 'first' => $ndx), - $i, - '%0' . $n . 'u-%0' . $n . 'u') - . ' '; + $res .= '
'; + + $res .= 'Navigation : ' + . (is_null($group) ? 'Les forums' : makeHREF(Array(), _b_('Les forums'))); + + if (!is_null($group)) { + $res .= ' > ' . makeHREF(Array('group' => $group), $group); + if (is_null($artid)) { + if (sizeof($banana->spool->overview)>$banana->tmax) { + $res .= ' > Pages
'; + $n = intval(log(count($banana->spool->overview), 10))+1; + $i = 1; + for ($ndx = 1 ; $ndx <= sizeof($banana->spool->overview) ; $ndx += $banana->tmax) { + if ($first==$ndx) { + $fmt = $i . ' '; + } else { + $fmt = makeHREF(Array('group' => $group, + 'first' => $ndx), + $i, + '%0' . $n . 'u-%0' . $n . 'u') + . ' '; + } + $i++; + $res .= sprintf($fmt, $ndx, min($ndx+$banana->tmax-1,sizeof($banana->spool->overview))); } - $i++; - $res .= sprintf($fmt, $ndx, min($ndx+$banana->tmax-1,sizeof($banana->spool->overview))); } - } - } else { - $res .= '[' . makeHREF(Array('group' => $group, - 'artid' => $artid, - 'action' => 'new'), - _b_('Répondre')) - . '] '; - if ($banana->post && $banana->post->checkcancel()) { - $res .= '[' . makeHREF(Array('group' => $group, - 'artid' => $artid, - 'action' => 'cancel'), - _b_('Annuler ce message')) - . '] '; + } else { + $res .= ' > Message'; } } return $res.''; diff --git a/banana/post.inc.php b/banana/post.inc.php index e02c500..93e36a6 100644 --- a/banana/post.inc.php +++ b/banana/post.inc.php @@ -315,7 +315,32 @@ class BananaPost if (function_exists('hook_checkcancel')) { return hook_checkcancel($this->headers); } - return ($this->headers['from'] == $_SESSION['name']." <".$_SESSION['mail'].">"); + if (!isset($_SESSION)) { + return false; + } + return ($this->headers['from'] == $_SESSION['name'] . ' <' . $_SESSION['mail']. '>'); + } + + /** Make some links to browse the current newsgroup + */ + function _browser() + { + global $banana; + $ret = '
'; + $actions = Array('prevThread' => Array('prev_thread', 'Discussion précédente'), + 'prevPost' => Array('prev', 'Article précédent'), + 'nextPost' => Array('next', 'Article suivant'), + 'nextThread' => Array('next_thread', 'Discussion suivante')); + foreach ($actions as $method=>$params) { + $id = $banana->spool->$method($this->id); + if (!is_null($id)) { + $ret .= makeImgLink(Array('group' => $banana->state['group'], + 'artid' => $id), + $params[0] . '.gif', + $params[1]); + } + } + return $ret . '
'; } /** convert message to html @@ -352,9 +377,28 @@ class BananaPost $res = ''; $res .= ''; - $res .= '
' - . formatdisplayheader('subject', $this->headers['subject']) - . '
'; + . $this->_browser() + . '
' + . makeImgLink(Array('group' => $this->group, + 'action' => 'new'), + 'post.gif', + 'Nouveau message') + . makeImgLink(Array('group' => $banana->state['group'], + 'artid' => $this->id, + 'action' => 'new'), + 'reply.gif', + 'Répondre'); + if ($this->checkCancel()) { + $res .= makeImgLink(Array('group' => $banana->state['group'], + 'artid' => $this->id, + 'action' => 'cancel'), + 'cancel.gif', + 'Annuler'); + } + $res .= '
' + . formatDisplayHeader('subject', $this->headers['subject']) + . '' + . '
'; foreach ($banana->show_hdr as $hdr) { if (isset($this->headers[$hdr])) { @@ -428,10 +472,6 @@ class BananaPost $res .= ''; } - $res .= ''; $ndx = $banana->spool->getndx($this->id); $res .= '
' . _b_('Apercu de ') - . makeHREF(Array('group' => $banana->state['group']), - $banana->state['group']) - . '
' . $banana->spool->to_html($ndx-$banana->tbefore, $ndx+$banana->tafter, $ndx) diff --git a/banana/spool.inc.php b/banana/spool.inc.php index 705f4b0..94897b9 100644 --- a/banana/spool.inc.php +++ b/banana/spool.inc.php @@ -317,16 +317,16 @@ class BananaSpool function _to_html($_id, $_index, $_first=0, $_last=0, $_ref="", $_pfx_node="", $_pfx_end="", $_head=true) { - $spfx_f = makeImg('k1', 'o', 21, 9); - $spfx_n = makeImg('k2', '*', 21, 9); - $spfx_Tnd = makeImg('T-direct', '+', 21, 12); - $spfx_Lnd = makeImg('L-direct', '`', 21, 12); - $spfx_snd = makeImg('s-direct', '-', 21, 5); - $spfx_T = makeImg('T', '+', 21, 12); - $spfx_L = makeImg('L', '`', 21, 12); - $spfx_s = makeImg('s', '-', 21, 5); - $spfx_e = makeImg('e', ' ', 21, 12); - $spfx_I = makeImg('I', '|', 21, 12); + $spfx_f = makeImg('k1.gif', 'o', 21, 9); + $spfx_n = makeImg('k2.gif', '*', 21, 9); + $spfx_Tnd = makeImg('T-direct.gif', '+', 21, 12); + $spfx_Lnd = makeImg('L-direct.gif', '`', 21, 12); + $spfx_snd = makeImg('s-direct.gif', '-', 21, 5); + $spfx_T = makeImg('T.gif', '+', 21, 12); + $spfx_L = makeImg('L.gif', '`', 21, 12); + $spfx_s = makeImg('s.gif', '-', 21, 5); + $spfx_e = makeImg('e.gif', ' ', 21, 12); + $spfx_I = makeImg('I.gif', '|', 21, 12); if ($_index + $this->overview[$_id]->desc < $_first || $_index > $_last) { return; @@ -397,10 +397,22 @@ class BananaSpool { $res = ''; + $new = '
' + . makeImgLink(Array('group' => $this->group, + 'action' => 'new'), + 'post.gif', + 'Nouveau message'); + $new .= '
'; + if (is_null($_ref)) { $res .= ''; $res .= ''; - $res .= ''; + $res .= ''; + } else { + $res .= ''; } $index = 1; @@ -420,10 +432,6 @@ class BananaSpool . $banana->groups->to_html() . ''; } - $res .= ''; - return $res .= '
'._b_('Date').''._b_('Sujet').''._b_('Auteur').'
'. $new . _b_('Auteur').'
' . _b_('Aperçu de ') + . makeHREF(Array('group' => $this->group), + $this->group) + . '
' - . makeHREF(Array('subscribe' => 1), _b_('Gérer mes abonnements')) - . '
'; } @@ -457,6 +465,102 @@ class BananaSpool } return $ndx; } + + /** Return root message of the given thread + * @param id INTEGER id of a message + */ + function root($id) + { + $id_cur = $id; + while (true) { + $id_parent = $this->overview[$id_cur]->parent; + if (is_null($id_parent)) break; + $id_cur = $id_parent; + } + return $id_cur; + } + + /** Returns previous thread root index + * @param id INTEGER message number + */ + function prevThread($id) + { + $root = $this->root($id); + $last = null; + foreach ($this->roots as $i) { + if ($i == $root) { + return $last; + } + $last = $i; + } + return $last; + } + + /** Returns next thread root index + * @param id INTEGER message number + */ + function nextThread($id) + { + $root = $this->root($id); + $ok = false; + foreach ($this->roots as $i) { + if ($ok) { + return $i; + } + if ($i == $root) { + $ok = true; + } + } + return null; + } + + /** Return prev post in the thread + * @param id INTEGER message number + */ + function prevPost($id) + { + $parent = $this->overview[$id]->parent; + if (is_null($parent)) { + return null; + } + $last = $parent; + foreach ($this->overview[$parent]->children as $child) { + if ($child == $id) { + return $last; + } + $last = $child; + } + return null; + } + + /** Return next post in the thread + * @param id INTEGER message number + */ + function nextPost($id) + { + if (count($this->overview[$id]->children) != 0) { + return $this->overview[$id]->children[0]; + } + + $cur = $id; + while (true) { + $parent = $this->overview[$cur]->parent; + if (is_null($parent)) { + return null; + } + $ok = false; + foreach ($this->overview[$parent]->children as $child) { + if ($ok) { + return $child; + } + if ($child == $cur) { + $ok = true; + } + } + $cur = $parent; + } + return null; + } } // vim:set et sw=4 sts=4 ts=4 diff --git a/css/style.css b/css/style.css index a9fd064..8cd185d 100644 --- a/css/style.css +++ b/css/style.css @@ -10,6 +10,12 @@ div.banana_scuts { text-align: left; padding: 0.5em 0em; } +div.banana_scuts .title { + font-weight: bold; +} +div.banana_action { float: right; } +div.banana_menu { float: left; } + /** GROUP LIST **/ diff --git a/img/cancel.gif b/img/cancel.gif new file mode 100644 index 0000000..ce4b1fa Binary files /dev/null and b/img/cancel.gif differ diff --git a/img/next.gif b/img/next.gif new file mode 100644 index 0000000..20eb60b Binary files /dev/null and b/img/next.gif differ diff --git a/img/next_thread.gif b/img/next_thread.gif new file mode 100644 index 0000000..752b4e1 Binary files /dev/null and b/img/next_thread.gif differ diff --git a/img/post.gif b/img/post.gif new file mode 100644 index 0000000..3aa195e Binary files /dev/null and b/img/post.gif differ diff --git a/img/prev.gif b/img/prev.gif new file mode 100644 index 0000000..72b5865 Binary files /dev/null and b/img/prev.gif differ diff --git a/img/prev_thread.gif b/img/prev_thread.gif new file mode 100644 index 0000000..f0830ee Binary files /dev/null and b/img/prev_thread.gif differ diff --git a/img/reply.gif b/img/reply.gif new file mode 100644 index 0000000..3c156c8 Binary files /dev/null and b/img/reply.gif differ