コード例 #1
0
ファイル: MenuTreeStorage.php プロジェクト: ddrozdik/dmaps
 /**
  * {@inheritdoc}
  */
 public function rebuild(array $definitions)
 {
     $links = array();
     $children = array();
     $top_links = array();
     // Fetch the list of existing menus, in case some are not longer populated
     // after the rebuild.
     $before_menus = $this->getMenuNames();
     if ($definitions) {
         foreach ($definitions as $id => $link) {
             // Flag this link as discovered, i.e. saved via rebuild().
             $link['discovered'] = 1;
             // Note: The parent we set here might be just stored in the {menu_tree}
             // table, so it will not end up in $top_links. Therefore the later loop
             // on the orphan links, will handle those cases.
             if (!empty($link['parent'])) {
                 $children[$link['parent']][$id] = $id;
             } else {
                 // A top level link - we need them to root our tree.
                 $top_links[$id] = $id;
                 $link['parent'] = '';
             }
             $links[$id] = $link;
         }
     }
     foreach ($top_links as $id) {
         $this->saveRecursive($id, $children, $links);
     }
     // Handle any children we didn't find starting from top-level links.
     foreach ($children as $orphan_links) {
         foreach ($orphan_links as $id) {
             // Check for a parent that is not loaded above since only internal links
             // are loaded above.
             $parent = $this->loadFull($links[$id]['parent']);
             // If there is a parent add it to the links to be used in
             // ::saveRecursive().
             if ($parent) {
                 $links[$links[$id]['parent']] = $parent;
             } else {
                 // Force it to the top level.
                 $links[$id]['parent'] = '';
             }
             $this->saveRecursive($id, $children, $links);
         }
     }
     $result = $this->findNoLongerExistingLinks($definitions);
     // Remove all such items.
     if ($result) {
         $this->purgeMultiple($result);
     }
     $this->resetDefinitions();
     $affected_menus = $this->getMenuNames() + $before_menus;
     // Invalidate any cache tagged with any menu name.
     $cache_tags = Cache::buildTags('config:system.menu', $affected_menus, '.');
     $this->cacheTagsInvalidator->invalidateTags($cache_tags);
     $this->resetDefinitions();
     // Every item in the cache bin should have one of the menu cache tags but it
     // is not guaranteed, so invalidate everything in the bin.
     $this->menuCacheBackend->invalidateAll();
 }
コード例 #2
0
 /**
  * {@inheritdoc}
  */
 public function rebuild(array $definitions)
 {
     $links = array();
     $children = array();
     $top_links = array();
     // Fetch the list of existing menus, in case some are not longer populated
     // after the rebuild.
     $before_menus = $this->getMenuNames();
     if ($definitions) {
         foreach ($definitions as $id => $link) {
             // Flag this link as discovered, i.e. saved via rebuild().
             $link['discovered'] = 1;
             if (!empty($link['parent'])) {
                 $children[$link['parent']][$id] = $id;
             } else {
                 // A top level link - we need them to root our tree.
                 $top_links[$id] = $id;
                 $link['parent'] = '';
             }
             $links[$id] = $link;
         }
     }
     foreach ($top_links as $id) {
         $this->saveRecursive($id, $children, $links);
     }
     // Handle any children we didn't find starting from top-level links.
     foreach ($children as $orphan_links) {
         foreach ($orphan_links as $id) {
             // Force it to the top level.
             $links[$id]['parent'] = '';
             $this->saveRecursive($id, $children, $links);
         }
     }
     // Find any previously discovered menu links that no longer exist.
     if ($definitions) {
         $query = $this->connection->select($this->table, NULL, $this->options);
         $query->addField($this->table, 'id');
         $query->condition('discovered', 1);
         $query->condition('id', array_keys($definitions), 'NOT IN');
         // Starting from links with the greatest depth will minimize the amount
         // of re-parenting done by the menu storage.
         $query->orderBy('depth', 'DESC');
         $result = $query->execute()->fetchCol();
     } else {
         $result = array();
     }
     // Remove all such items.
     if ($result) {
         $this->purgeMultiple($result);
     }
     $this->resetDefinitions();
     $affected_menus = $this->getMenuNames() + $before_menus;
     // Invalidate any cache tagged with any menu name.
     $cache_tags = Cache::buildTags('menu', $affected_menus);
     Cache::invalidateTags($cache_tags);
     $this->resetDefinitions();
     // Every item in the cache bin should have one of the menu cache tags but it
     // is not guaranteed, so invalidate everything in the bin.
     $this->menuCacheBackend->invalidateAll();
 }
コード例 #3
0
 /**
  * {@inheritdoc}
  */
 public function rebuild(array $definitions)
 {
     $links = array();
     $children = array();
     $top_links = array();
     // Fetch the list of existing menus, in case some are not longer populated
     // after the rebuild.
     $before_menus = $this->getMenuNames();
     if ($definitions) {
         foreach ($definitions as $id => $link) {
             // Flag this link as discovered, i.e. saved via rebuild().
             $link['discovered'] = 1;
             if (!empty($link['parent'])) {
                 $children[$link['parent']][$id] = $id;
             } else {
                 // A top level link - we need them to root our tree.
                 $top_links[$id] = $id;
                 $link['parent'] = '';
             }
             $links[$id] = $link;
         }
     }
     foreach ($top_links as $id) {
         $this->saveRecursive($id, $children, $links);
     }
     // Handle any children we didn't find starting from top-level links.
     foreach ($children as $orphan_links) {
         foreach ($orphan_links as $id) {
             // Force it to the top level.
             $links[$id]['parent'] = '';
             $this->saveRecursive($id, $children, $links);
         }
     }
     $result = $this->findNoLongerExistingLinks($definitions);
     // Remove all such items.
     if ($result) {
         $this->purgeMultiple($result);
     }
     $this->resetDefinitions();
     $affected_menus = $this->getMenuNames() + $before_menus;
     // Invalidate any cache tagged with any menu name.
     $cache_tags = Cache::buildTags('config:system.menu', $affected_menus, '.');
     $this->cacheTagsInvalidator->invalidateTags($cache_tags);
     $this->resetDefinitions();
     // Every item in the cache bin should have one of the menu cache tags but it
     // is not guaranteed, so invalidate everything in the bin.
     $this->menuCacheBackend->invalidateAll();
 }
コード例 #4
0
 /**
  * {@inheritdoc}
  */
 public function invalidateAll()
 {
     $this->markAsOutdated();
     $this->consistentBackend->invalidateAll();
 }
コード例 #5
0
 /**
  * {@inheritdoc}
  */
 public function invalidateAll()
 {
     return $this->decorated->invalidateAll();
 }
コード例 #6
0
 /**
  * {@inheritdoc}
  */
 public function invalidateAll()
 {
     return $this->cacheBackend->invalidateAll();
 }