function synkGroups(Author $author, array $groupsData) { $stats = with($gs = new GroupSynker($author))->synk($groupsData); $groups = $gs->current(); $pages = []; foreach ($groups as $group) { $data = GroupSynker::pick($group, $groupsData); if (!$group->inline) { $pagesData = $data['pages']; } else { $pagesData = $this->check($group); } if (!is_array($pagesData)) { debug($pagesData, $group->inline); continue; } $data = array_map(function (&$value) use(&$data) { $value['group'] = $data; return $value; }, $pagesData); $pages = array_merge($pages, $data); } if ($pages) { if ($pages = with(new PageSynker($group->author))->synk($pages)) { $grouped = []; $pagesData = []; foreach ($pages as $type => $pages) { foreach ($pages as $page) { $pagesData[$page['id']][$type][] = $page; } } $grouped = []; $links = \Ankh\Page::whereIn('id', array_keys($pagesData))->withTrashed()->get(['id', 'group_id']); foreach ($links as $page) { $grouped[$page->id] = $page->group_id; } foreach ($pagesData as $id => $data) { $gId = $grouped[$id]; $found = false; foreach ($stats as $type => $groups) { foreach ($groups as $idx => $group) { if ($found = $group['id'] == $gId) { $stats[$type][$idx]['pages'] = array_merge_recursive(@$group['pages'] ?: [], $pagesData[$id]); break; } } } if (!$found) { $stats[Synker::UPDATED][] = ['id' => $gId, 'pages' => $pagesData[$id]]; } } } } return $stats; }
protected function createEntity(array $data) { $entity = new Page($data); $group = GroupSynker::select($this->groups(), $data['group']); if (!$group) { throw new \Exception('Failed to bind group: no matched group found: ' . $this->groupData['title']); } $entity->group()->associate($group); return $entity; }