Changeset 26404


Ignore:
Timestamp:
06/20/10 19:23:39 (7 years ago)
Author:
flack
Message:

streamline parent/lastgoodnode code, refs #359

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/developers/flack/acltuning/midcom.core/midcom/helper/_basicnav.php

    r26403 r26404  
    297297
    298298        // Load parent nodes also to cache
    299         $uplinks = array();
    300299        $parent = $topic;
    301300        $up_ids = array();
    302301        if ($up)
    303302        {
    304             static $up_parent_cache = array();
    305             if (isset($up_parent_cache[$parent->id]))
    306             {
    307                 $parent = $up_parent_cache[$parent->id];
    308             }
    309             else
    310             {
    311                 $parent = midcom_db_topic::get_cached($parent->id);
    312                 $up_parent_cache[$parent->id] = $parent;
    313             }
    314303            $parent->up = (int) $up;
    315304
     
    319308        }
    320309
     310        $lastgoodnode = null;
     311
     312        $parent = $parent->get_parent();
     313
    321314        while (   is_object($parent)
    322315               && $parent->guid
    323                && $parent->up != 0
    324316               && !isset(self::$_nodes[$parent->id]))
    325317        {
    326             $parent = $parent->get_parent();
    327             if (   $parent
    328                 && $parent->guid)
    329             {
    330                 $uplinks[] = $parent;
    331             }
    332             if ($up)
    333             {
    334                 if ($up_id = array_pop($up_ids))
    335                 {
    336                     if ($up_id != $parent->up)
    337                     {
    338                         $parent->up = $up_id;
    339                     }
    340                 }
    341             }
    342         }
    343 
    344         // Ensure root folder is first
    345         $uplinks = array_reverse($uplinks);
    346 
    347         $lastgoodnode = null;
    348         foreach ($uplinks as $uptopic)
    349         {
    350             if (array_key_exists($uptopic->id, self::$_nodes))
    351             {
    352                 // We already saw this node, no point in loading it again
    353                 $lastgoodnode = $uptopic->id;
    354                 continue;
    355             }
    356 
    357318            // Pass the full topic so _loadNodeData doesn't have to reload it
    358             $result = $this->_loadNodeData($uptopic);
     319            $result = $this->_loadNodeData($parent);
    359320            switch ($result)
    360321            {
     
    368329                        $log_level = MIDCOM_LOG_INFO;
    369330                    }
    370                     debug_add("The Node {$uptopic->id} is invisible, could not satisfy the dependency chain to Node #{$node_id}", $log_level);
     331                    debug_add("The Node {$parent->id} is invisible, could not satisfy the dependency chain to Node #{$node_id}", $log_level);
    371332                    debug_pop();
    372333                    return MIDCOM_ERRFORBIDDEN;
     
    376337            }
    377338
    378             $lastgoodnode = $uptopic->id;
    379         }
    380         if (!is_null($lastgoodnode))
    381         {
    382             if (!isset($this->_lastgoodnode) || !$this->_lastgoodnode || ($this->_lastgoodnode <= 0))
    383             {
    384                 $this->_lastgoodnode = $lastgoodnode;
    385             }
     339            if (null === $lastgoodnode)
     340            {
     341                $lastgoodnode = $parent->id;
     342            }
     343
     344            if ($up)
     345            {
     346                if ($up_id = array_pop($up_ids))
     347                {
     348                    if ($up_id != $parent->up)
     349                    {
     350                        $parent->up = $up_id;
     351                    }
     352                }
     353            }
     354            $parent = $parent->get_parent();
     355        }
     356
     357        if (   !is_null($lastgoodnode)
     358            && (!isset($this->_lastgoodnode) || !$this->_lastgoodnode || $this->_lastgoodnode <= 0))
     359        {
     360            $this->_lastgoodnode = $lastgoodnode;
    386361        }
    387362
Note: See TracChangeset for help on using the changeset viewer.