protected function syncMenuItems($menu, $input)
{
$position = 0;
if (!isset($input['item'])) {
$input['item'] = array();
}
if (!isset($input['item_order'])) {
$input['item_order'] = array();
}
list($items, $order) = $this->createNewMenuItems($menu, $input['item'], $input['item_order']);
// sync up all the menu item data
foreach ($items as $id => $item) {
$menuItem = $this->MenuItem->findOrFail($id);
if (isset($item['image'])) {
$menuItem->image = $item['image'];
}
if (isset($item['url_or_page']) && $item['url_or_page'] !== 'page') {
$item['page_id'] = NULL;
}
$menuItem->parent_item_id = $order[$id] ?: null;
$menuItem->url = $item['url'];
$menuItem->page_id = $item['page_id'];
$menuItem->name = $item['name'];
$menuItem->position = $position++;
$menuItem->permission = array_get($item, 'permission', null);
$menuItem->save();
}
// user removed these menu items so let's remove in database
$removeItems = array_diff($menu->allItems()->lists('id')->all(), array_keys($items));
foreach ($removeItems as $removeItem) {
$item = $this->MenuItem->find($removeItem);
if ($item) {
$item->delete();
}
}
}