From 4ced5065637f673e590e5df59d59505b08ffb1ce Mon Sep 17 00:00:00 2001 From: x2000habouzit Date: Sat, 1 Jan 2005 18:54:11 +0000 Subject: [PATCH] eradicate last banana bugs --- include/spool.inc.php | 47 ++++++++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/include/spool.inc.php b/include/spool.inc.php index c19104c..b0a73c6 100644 --- a/include/spool.inc.php +++ b/include/spool.inc.php @@ -137,27 +137,31 @@ class spool } foreach ($msgids as $id=>$msgid) { - $msg = new spoolhead($dates[$id], $subjects[$id], $froms[$id], 1); + $msg = new spoolhead($dates[$id], $subjects[$id], $froms[$id]); $refs[$id] = str_replace("><", "> <", $refs[$id]); $msgrefs = preg_split("/( |\t)/", strtr($refs[$id], $this->ids)); $parents = preg_grep("/^\d+$/", $msgrefs); $msg->parent = array_pop($parents); $msg->parent_direct = preg_match("/^\d+$/", array_pop($msgrefs)); - - $p = $msg->parent; - while ($p) { - if (isset($this->overview[$p])) { - $this->overview[$p]->desc++; - $p = $this->overview[$p]->parent; - } else { + + if (isset($this->overview[$id])) { + $msg->desc = $this->overview[$id]->desc; + $msg->children = $this->overview[$id]->children; + } + $this->overview[$id] = $msg; + + if ($p = $msg->parent) { + if (empty($this->overview[$p])) { $this->overview[$p] = new spoolhead($dates[$p], $subjects[$p], $froms[$p], 1); - break; } - } - if ($msg->parent) { $this->overview[$msg->parent]->children[] = $id; + + while ($p) { + $this->overview[$p]->desc += $msg->desc; + $p = $this->overview[$p]->parent; + } + } - $this->overview[$id] = $msg; } uasort($this->overview, "spoolcompare"); file_put_contents($spoolfile, serialize($this)); @@ -335,7 +339,7 @@ class spool $this->group, ($_index==$_ref), $this->overview[$_id]->isread) ." \n"; } - $index=$_index+1; + $index = $_index+1; while ($child = array_shift($children)) { if (($index+$this->overview[$child]->desc-1>=$_first) ||($index<$_last)){ @@ -364,9 +368,9 @@ class spool $index = 1; if (sizeof($this->overview)) { foreach ($this->overview as $id=>$msg) { - if (!isset($msg->parent)) { + if (is_null($msg->parent)) { $this->disp_desc($id, $index, $_first, $_last, $_ref); - $index += $msg->desc; + $index += $msg->desc ; } } } else { @@ -386,15 +390,16 @@ class spool function getndx($_id) { $ndx = 1; // on remonte l'arbre - $id_parent = $this->overview[$_id]->parent; - $id_curr = $_id; - while (!is_null($id_parent)) { - for ($i=0; $ioverview[$id_parent]->children) ; $i++) { + while (true) { + $id_parent = $this->overview[$_id]->parent; + $id_curr = $_id; + if (is_null($id_parent)) break; + $pos = array_search($id_curr, $this->overview[$id_parent]->children); + + for ($i = 0; $i < $_pos ; $i++) { $ndx += $this->overview[$this->overview[$id_parent]->children[$i]]->desc; } $ndx++; //noeud père - $id_curr = $id_parent; - $id_parent = $this->overview[$id_curr]->parent; } // on compte les threads précédents foreach ($this->overview as $i=>$p) { -- 2.1.4