Devise\Menus\MenusManager::createNewMenuItems PHP Method

createNewMenuItems() protected method

Create any new menu items that don't exist yet and then inject them into our items array also we update the order array to include any new menu items that we just created
protected createNewMenuItems ( Menu $menu, array $items, array $order ) : array($items,
$menu Menu
$items array
$order array
return array($items,
    protected function createNewMenuItems($menu, $items, $order)
    {
        $newlyCreated = array();
        // create new items if there are any found
        foreach ($items as $id => $item) {
            if (!is_numeric($id)) {
                if ($item['url_or_page'] == 'page' && (!isset($item['page_id']) || $item['page_id'] == '')) {
                    unset($items[$id]);
                    unset($order[$id]);
                    continue;
                }
                if ($item['url_or_page'] == 'url') {
                    $item['page_id'] = NULL;
                }
                $menuItem = $this->MenuItem->create(['menu_id' => $menu->id, 'parent_item_id' => null, 'page_id' => $item['page_id'], 'url' => $item['url'], 'image' => array_get($item, 'image', NULL), 'name' => $item['name'], 'permission' => array_get($item, 'permission', NULL), 'position' => 0]);
                unset($items[$id]);
                $items[$menuItem->id] = array('url' => $menuItem->url, 'name' => $menuItem->name, 'page_id' => $menuItem->page_id, 'permission' => $menuItem->permission);
                $newlyCreated[$id] = $menuItem->id;
            }
        }
        // replace all the order ids with newly created ids
        $newOrder = array();
        foreach ($order as $key => $value) {
            $id = array_key_exists($key, $newlyCreated) ? $newlyCreated[$key] : $key;
            $nestedId = array_key_exists($value, $newlyCreated) ? $newlyCreated[$value] : $value;
            $newOrder[$id] = $nestedId;
        }
        $newItems = array();
        // rearrange items to be in the correct order listed
        foreach ($newOrder as $id => $parentId) {
            $newItems[$id] = $items[$id];
        }
        return array($newItems, $newOrder);
    }