require_once dirname(__FILE__) . '/banana.inc.php';
-define('BANANA_SPOOL_VERSION', '0.3');
+define('BANANA_SPOOL_VERSION', '0.4');
/** Class spoolhead
* class used in thread overviews
/** thread starts */
public $roots;
+ private $unreadnb = 0;
/** constructor
* @param $_group STRING group name
private static function spoolFilename($group)
{
- $file = dirname(dirname(__FILE__));
- $file .= '/spool/' . Banana::$protocole->name() . '/';
+ $file = Banana::$spool_root . '/' . Banana::$protocole->name() . '/';
if (!is_dir($file)) {
mkdir($file);
}
if ($spool->version != BANANA_SPOOL_VERSION || $spool->mode != Banana::SPOOL_ALL) {
return null;
}
+ $spool->markAllAsRead();
return $spool;
}
foreach ($newpostsids as $mid) {
$id = $this->ids[$mid];
if ($this->overview[$id]->isread) {
- $this->overview[$id]->isread = false;
+ $this->overview[$id]->isread = false;
+ $this->unreadnb++;
while (isset($id)) {
- $this->overview[$id]->descunread ++;
+ $this->overview[$id]->descunread++;
$id = $this->overview[$id]->parent;
}
}
{
if (!$this->overview[$id]->isread) {
$this->overview[$id]->isread = true;
+ $this->unreadnb--;
while (isset($id)) {
$this->overview[$id]->descunread--;
$id = $this->overview[$id]->parent;
*/
public function markAllAsRead(array &$array = null)
{
- if (is_null($array)) {
- $array =& $this->roots;
+ if (!$this->unreadnb) {
+ return;
}
- if (!is_array($this->roots)) {
+ if (is_null($array) && is_array($this->roots)) {
+ $array =& $this->roots;
+ } elseif (is_null($array)) {
return;
}
foreach ($array as $id) {
if (!$this->overview[$id]->isread) {
$this->markAsRead($id);
+ if (!$this->unreadnb) {
+ return;
+ }
}
if ($this->overview[$id]->descunread) {
$this->markAllAsRead($this->overview[$id]->children);
public function delid($_id, $write = true)
{
if (isset($this->overview[$_id])) {
- if (sizeof($this->overview[$_id]->parent)) {
- $this->overview[$this->overview[$_id]->parent]->children =
- array_diff($this->overview[$this->overview[$_id]->parent]->children, array($_id));
- if (sizeof($this->overview[$_id]->children)) {
- $this->overview[$this->overview[$_id]->parent]->children =
- array_merge($this->overview[$this->overview[$_id]->parent]->children, $this->overview[$_id]->children);
- foreach ($this->overview[$_id]->children as $c) {
- $this->overview[$c]->parent = $this->overview[$_id]->parent;
+ $overview =& $this->overview[$_id];
+ if (!$overview->isread) {
+ $this->markAsRead($_id);
+ }
+ if ($overview->parent) {
+ $p = $overview->parent;
+ $parent =& $this->overview[$p];
+ $parent->children = array_diff($parent->children, array($_id));
+ if (sizeof($overview->children)) {
+ $parent->children = array_merge($parent->children, $overview->children);
+ foreach ($overview->children as $c) {
+ $this->overview[$c]->parent = $p;
$this->overview[$c]->parent_direct = false;
}
}
- $p = $this->overview[$_id]->parent;
- while ($p) {
+ while (isset($p)) {
$this->overview[$p]->desc--;
$p = $this->overview[$p]->parent;
}
- } elseif (sizeof($this->overview[$_id]->children)) {
- foreach ($this->overview[$_id]->children as $c) {
+ } elseif ($overview->children) {
+ foreach ($overview->children as $c) {
$this->overview[$c]->parent = null;
}
}
+ unset($overview);
unset($this->overview[$_id]);
$msgid = array_search($_id, $this->ids);
- if ($msgid) {
+ if ($msgid !== false) {
unset($this->ids[$msgid]);
}
+ $msgid = array_search($_id, $this->roots);
+ if ($msgid !== false) {
+ unset($this->roots[$msgid]);
+ }
if ($write) {
- $this->markAllAsRead();
$this->saveToFile();
}
}
} else {
$format = '%a %e %b';
}
- return utf8_encode(strftime($format, $stamp));
+ return strftime($format, $stamp);
}
/** displays children tree of a post
$res .= '<tr class="' . ($_index%2 ? 'pair' : 'impair') . ($overview->isread ? '' : ' new') . "\">\n";
$res .= '<td class="date">' . $this->formatDate($overview->date) . " </td>\n";
- $res .= '<td class="subj' . ($_index == $_ref ? ' cur' : '') . '">'
- . $_pfx_node .($hc ? ($_head ? $spfx_f : ($overview->parent_direct ? $spfx_s : $spfx_snd)) : $spfx_n);
+ $res .= '<td class="subj' . ($_index == $_ref ? ' cur' : '') . '"><div class="tree">'
+ . $_pfx_node .($hc ? ($_head ? $spfx_f : ($overview->parent_direct ? $spfx_s : $spfx_snd)) : $spfx_n)
+ . '</div>';
$subject = $overview->subject;
if (function_exists('hook_formatDisplayHeader')) {
list($subject, $link) = hook_formatDisplayHeader('subject', $subject, true);
for ($i = 0; $i < $pos ; $i++) {
$ndx += $this->overview[$this->overview[$id_parent]->children[$i]]->desc;
}
- $ndx++; //noeud père
+ $ndx++; //noeud père
$id_cur = $id_parent;
}
*/
public function nextUnread($id = null)
{
+ if (!$this->unreadnb) {
+ return null;
+ }
+
if (!is_null($id)) {
// Look in message children
foreach ($this->overview[$id]->children as $child) {