children)) {
$this->data = null;
} else {
$tree =& $this->builder($root);
$this->data = '
'
. implode("
\n
", $tree)
. '
';
}
$this->time = time();
$this->version = BANANA_TREE_VERSION;
$this->saveToFile($root->id);
}
private function &builder(BananaSpoolHead &$head)
{
static $t_e, $u_h, $u_ht, $u_vt, $u_l, $u_f, $r_h, $r_ht, $r_vt, $r_l, $r_f;
if (!isset($spfx_f)) {
$t_e = Banana::$page->makeImg(Array('img' => 'e', 'alt' => ' ', 'height' => 18, 'width' => 14));
$u_h = Banana::$page->makeImg(Array('img' => 'h2', 'alt' => '-', 'height' => 18, 'width' => 14));
$u_ht = Banana::$page->makeImg(Array('img' => 'T2', 'alt' => '+', 'height' => 18, 'width' => 14));
$u_vt = Banana::$page->makeImg(Array('img' => 't2', 'alt' => '`', 'height' => 18, 'width' => 14));
$u_l = Banana::$page->makeImg(Array('img' => 'l2', 'alt' => '|', 'height' => 18, 'width' => 14));
$u_f = Banana::$page->makeImg(Array('img' => 'f2', 'alt' => 't', 'height' => 18, 'width' => 14));
$r_h = Banana::$page->makeImg(Array('img' => 'h2r', 'alt' => '-', 'height' => 18, 'width' => 14));
$r_ht = Banana::$page->makeImg(Array('img' => 'T2r', 'alt' => '+', 'height' => 18, 'width' => 14));
$r_vt = Banana::$page->makeImg(Array('img' => 't2r', 'alt' => '`', 'height' => 18, 'width' => 14));
$r_l = Banana::$page->makeImg(Array('img' => 'l2r', 'alt' => '|', 'height' => 18, 'width' => 14));
$r_f = Banana::$page->makeImg(Array('img' => 'f2r', 'alt' => 't', 'height' => 18, 'width' => 14));
}
$style = 'background-color:' . $head->color . '; text-decoration: none';
$text = 'makeURL(array('group' => Banana::$spool->group, 'artid' => $head->id))) . '\'"'
: ' disabled="disabled"')
. ' />';
$array = array($text);
foreach ($head->children as $key=>&$msg) {
$tree =& $this->builder($msg);
$last = $key == count($head->children) - 1;
foreach ($tree as $kt=>&$line) {
if ($kt === 0 && $key === 0 && !$last) {
$array[0] .= ($msg->isread ? $r_ht : $u_ht) . $line;
} else if($kt === 0 && $key === 0) {
$array[0] .= ($msg->isread ? $r_h : $u_h) . $line;
} else if ($kt === 0 && $last) {
$array[] = $t_e . ($msg->isread ? $r_vt : $u_vt) . $line;
} else if ($kt === 0) {
$array[] = $t_e . ($msg->isread ? $r_f : $u_f) . $line;
} else if ($last) {
$array[] = $t_e . $t_e . $line;
} else {
$array[] = $t_e . ($msg->isread ? $r_l : $u_l) . $line;
}
}
unset($tree);
}
return $array;
}
/** Save the content of the tree into a file
*/
private function saveToFile($id)
{
file_put_contents(BananaTree::filename($id), serialize($this));
}
/** Return html to display the tree
*/
public function &show()
{
return $this->data;
}
/** Get filename
*/
static private function filename($id)
{
return BananaSpool::getPath('tree_' . $id);
}
/** Read a tree from a file
*/
static private function &readFromFile($id)
{
$tree = null;
$file = BananaTree::filename($id);
if (!file_exists($file)) {
return $tree;
}
$tree = unserialize(file_get_contents($file));
if ($tree->version != BANANA_TREE_VERSION) {
$tree = null;
}
return $tree;
}
/** Build a tree for the given id
*/
static public function &build($id)
{
$root =& Banana::$spool->root($id);
if (!isset(BananaTree::$cache[$root->id])) {
$tree =& BananaTree::readFromFile($root->id);
if (is_null($tree) || $tree->time < $root->time) {
$tree = new BananaTree($root);
}
BananaTree::$cache[$root->id] =& $tree;
}
return BananaTree::$cache[$root->id];
}
/** Kill the file associated to the given id
*/
static public function kill($id)
{
@unlink(BananaTree::filename($id));
}
}
// vim:set et sw=4 sts=4 ts=4 enc=utf-8:
?>