public function postAdd($pageId = 0, $groupId = 0) { $page_version = PageVersion::prepareNew(); $page_info = Request::input('page_info') ?: []; $page_info_lang = Request::input('page_info_lang') ?: []; $page_groups = Request::input('page_groups') ?: []; $page_info_other = Request::input('page_info_other') ?: []; $page = new Page(); if (!$page->savePostData($page_version, $page_info, $page_info_lang, $page_groups, $page_info_other)) { $this->getAdd($pageId); return null; } else { AdminLog::new_log('Added page \'' . $page->pageCurrentLang->name . '\' (Page ID ' . $page->id . ')'); return \redirect()->route('coaster.admin.pages.edit', ['pageId' => $page->id]); } }
/** * Saves page data as new page (will update page groups) * @param array $pagePost * @param array $pageLangPost * @param array $pageGroupsPost * @param array $pageInfoOther * @return Page|false */ public function saveDuplicateFromPostData($pagePost, $pageLangPost, $pageGroupsPost, $pageInfoOther = []) { /** @var Page $duplicatePage */ $duplicatePage = $this->replicate(); $duplicatePage->setRelations([]); $pageLangPost['name'] = preg_replace('/\\s+Duplicate$/', '', $pageLangPost['name']) . ' Duplicate'; $pageLangPost['url'] = preg_replace('/--v\\w+$/', '', $pageLangPost['url']) . '--v' . base_convert(microtime(true), 10, 36); $pageVersion = PageVersion::prepareNew(); if ($duplicatePage->savePostData($pageVersion, $pagePost, $pageLangPost, $pageGroupsPost, $pageInfoOther)) { // duplicate role actions from original page foreach (UserRole::all() as $role) { /** @var \Illuminate\Database\Eloquent\Relations\BelongsToMany $pageActionsRelation */ $pageActionsRelation = $role->page_actions(); /** @var Collection $pageActions */ $pageActions = $pageActionsRelation->where('page_id', '=', $duplicatePage->id)->get(); if (!$pageActions->isEmpty()) { foreach ($pageActions as $pageAction) { $pageActionsRelation->attach($duplicatePage->id, ['action_id' => $pageAction->pivot->action_id, 'access' => $pageAction->pivot->access]); } } } return $duplicatePage; } else { return false; } }