From d634c13c4ec3b1761622cf3ad558ffe89ba81a0b Mon Sep 17 00:00:00 2001 From: x2003bruneau Date: Sat, 5 Aug 2006 16:38:03 +0000 Subject: [PATCH] Add a 'next unread message' button To be tested... git-svn-id: svn+ssh://murphy/home/svn/banana/trunk@130 9869982d-c50d-0410-be91-f2a2ec7c7c7b --- banana/post.inc.php | 3 ++- banana/spool.inc.php | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++ img/next_unread.gif | Bin 0 -> 1119 bytes 3 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 img/next_unread.gif diff --git a/banana/post.inc.php b/banana/post.inc.php index 1da8783..3ee59cf 100644 --- a/banana/post.inc.php +++ b/banana/post.inc.php @@ -360,9 +360,10 @@ class BananaPost { global $banana; $ret = '
'; - $actions = Array('prevThread' => Array('prev_thread', _b_('Discussion précédente')), + $actions = Array('nextUnread' => Array('next_unread', _b_('Message non-lu suivant')), 'prevPost' => Array('prev', _b_('Article précédent')), 'nextPost' => Array('next', _b_('Article suivant')), + 'prevThread' => Array('prev_thread', _b_('Discussion précédente')), 'nextThread' => Array('next_thread', _b_('Discussion suivante'))); foreach ($actions as $method=>$params) { $id = $banana->spool->$method($this->id); diff --git a/banana/spool.inc.php b/banana/spool.inc.php index 2a6be2e..c938a24 100644 --- a/banana/spool.inc.php +++ b/banana/spool.inc.php @@ -561,6 +561,59 @@ class BananaSpool } return null; } + + /** Look for an unread message in the thread rooted by the message + * @param id INTEGER message number + */ + function _nextUnread($id) + { + if (!$this->overview[$id]->isread) { + return $id; + } + foreach ($this->overview[$id]->children as $child) { + return $this->_nextUnread($child); + } + return null; + } + + /** Find next unread message + * @param id INTEGER message number + */ + function nextUnread($id) + { + // Look in message children + foreach ($this->overview[$id]->children as $child) { + $next = $this->_nextUnread($child); + if (is_null($next)) { + return $next; + } + } + + // Look in current thread + $cur = $id; + while (true) { + $parent = $this->overview[$cur]->parent; + $ok = false; + if (is_null($parent)) { + $array = &$this->overview[$parent]->children; + } else { + $array = &$this->roots; + } + foreach ($array as $child) { + if ($ok) { + $next = $this->_nextUnread($child); + if (!is_null($next)) { + return $next; + } + } + if ($child == $cur) { + $ok = true; + } + } + $cur = $parent; + } + return null; + } } // vim:set et sw=4 sts=4 ts=4 diff --git a/img/next_unread.gif b/img/next_unread.gif new file mode 100644 index 0000000000000000000000000000000000000000..f17429c0272ba6d16ba7d5de2573c039c5a8621f GIT binary patch literal 1119 zcmb`GZ%7ky7{{M2O}Cs_)BHo`W_2^#Z0ej!61cNelvtuzzG`lB4s;&3bIo^ywDu-A z=numJuLRi(iB%LwuZ|!%!eAiEy^uJ`7x(f&h(*cz{dR>ALIgeB?{}Zy^Lw7}bNBr2 z`Ub9ccKIrx0yY5~o8nlOl@%o|$ljzVD>(&Ss;Vfeq^MbBvMR}{EGukUlq6XYC0@*W z69UJj*;G2kOI$jWNb%kT?~U`Rj6|^+Hk0KzF3F~noR~;u;>g3M;%qv}a*CRhk*p*M zVwUHH3@>mzQdM|CBavUyHM) z6+pl4qo`>;N}7o#!t~GNdFYE12+KOkuie+m+JwJtRMKsqX28G0M*2Suc-#0 zY7BsHJMisYFEmAWay>fPh8m4bSLOjI{+!S65db9*0QT8@{`>QMet!kk*ai?H{y92U zh(*!*E`YzSwU^V>wL`#lehuvYgSR7v2H+iV0zB&n7&8J4E&?p=0N7ptnBM|;O#mZZ zpzqxMJ+x*O^6E(6ba;aHF~NWZe=y|i^ei2veEwiz`~OW$FpdrdfSje~>2PR@vGkzt zD~JltP;*R>wp#`w{${(S)#+?6RJG$7|FCd$S$IPA+v^N3KQy+s84a(BK25Heh95WT zMqh6Ztu{N}SUDa_Btva<^^SXsjbl?h{tBxs)-Q!u(oq{e>uDvk`7b fRpS*)b&JhKI4?Gwy4F#1?u@?S?DlSN4_x{QfcqmV literal 0 HcmV?d00001 -- 2.1.4