/**
  * Clears all cache entries related to the given menu item
  *
  * If $menu is null, all the cache will be cleared.
  *
  * @param ioDoctrineMenuItem|null $menu The item for which to clear the cache
  * @return void
  */
 public function clearCache(ioDoctrineMenuItem $menu = null)
 {
     if ($menu) {
         // get the root, the cache is based off of it
         $menu->refreshRelated('RootMenuItem');
         $menu = $menu['RootMenuItem'];
         $cacheKey = md5($menu->getName());
         $this->getCacheDriver()->remove($cacheKey);
     } else {
         $this->getCacheDriver()->clean();
     }
 }
 /**
  * builds a tree from a nested array.
  *
  * @param string $arr 
  * @param string $orgId 
  * @return void
  * @author Brent Shaffer
  */
 public function restoreTreeFromNestedArray($arr, ioDoctrineMenuItem $root)
 {
     if (!$root->getNode()->isRoot()) {
         throw new sfException('ioDoctrineMenuItemTable::restoreTreeFromNestedArray() must be called using a root node.');
     }
     // put the nodes back on
     $this->restoreBranchFromNestedArray(array('menu' => $root, 'children' => $arr));
 }
function root_sanity_check(lime_test $t, ioDoctrineMenuItem $rt)
{
    $t->info('    Testing for correct lft, rgt values');
    $nodeTotal = Doctrine_Query::create()->from('ioDoctrineMenuItem m')->count();
    $t->is($rt->lft, 1, 'rt.lft = 1');
    $rgt = $nodeTotal * 2;
    $t->is($rt->rgt, $rgt, 'rt.rgt = ' . $rgt);
    $children = $rt->getNode()->getChildren();
    $childRgt = 1;
    // fake the previous sibling
    foreach ($children as $child) {
        $child->refresh();
        // just to be sure
        $t->is($child->lft, $childRgt + 1, 'The child node lft value is rgt+1 of its previous sibling');
        $childRgt = $child->rgt;
    }
    $t->is($child->rgt, $rgt - 1, 'The final child.rgt value is one less than the parent.rgt value.');
}