content = $content; } /** * Display form for organizing pages on homepage * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function getPages() { // get pages which are assigned as homepage parts $usedPagesIds = (array)Settings::getJson(OnePage::HOMEPAGE_PAGES_SETTINGS_KEY); // get all pages - they will be separated for used and not used on next lines $allPages = $this->content->getOverview() ->get(); // separate pages to used and not used - with help of $usedPAgesIds array defined above $pages = $used = $notUsed = []; $homepage = null; foreach ($allPages as $page) { if ($page->isHomepage) { $homepage = $page; continue; } $pages[$page->id] = $page; if (in_array($page->id, $usedPagesIds)) { $used[$page->id] = $page; } else { $notUsed[$page->id] = $page; } } return view('template::admin/homepage.set', [ 'usedPagesIds' => $usedPagesIds, 'allPages' => $pages, 'usedPages' => $used, 'notUsedPages' => $notUsed, 'homepage' => $homepage ]); } /** * Add page into homepage * * @param $id * * @return \Illuminate\Http\RedirectResponse */ public function addPage($id) { $page = $this->content->getOne($id); if ($page->isHomepage) { return redirect() ->back() ->with('error', trans('template::admin/setHomepage.cannotSetHomepageAsPartOfHomepage')); } // try to get page config $settingsEntry = SettingsModel::firstOrCreate([ 'language' => LaravelLocalization::getCurrentLocale(), 'key' => OnePage::HOMEPAGE_PAGES_SETTINGS_KEY ]); $usedPagesIds = (array)json_decode($settingsEntry->value); // add page into list of used pages - if not already there if (!in_array($id, $usedPagesIds)) { $usedPagesIds[] = $id; } $settingsEntry->value = json_encode($usedPagesIds); $settingsEntry->save(); Cache::forget('settings'); // inform other application parts about this event Event::fire(new AddPageIntoHomepage($page)); return redirect() ->back() ->with('success', trans('template::admin/setHomepage.successfullyAdded')); } /** * Remove page from homepage * * @param $id * * @return \Illuminate\Http\RedirectResponse */ public function removePage($id) { $pages = (array)Settings::getJson(OnePage::HOMEPAGE_PAGES_SETTINGS_KEY); $page = $this->content->getOne($id); if (!in_array($id, $pages)) { return redirect() ->back() ->with('error', trans('template::admin/setHomepage.invalidPageId')); } else { $pagePosition = array_search($id, $pages); // remove page from config array unset($pages[$pagePosition]); $pages = array_values($pages); // update in database $val = SettingsModel::where('key', OnePage::HOMEPAGE_PAGES_SETTINGS_KEY) ->where('language', LaravelLocalization::getCurrentLocale()) ->update(['value' => json_encode($pages)]); Cache::forget('settings'); // inform other application parts about this event Event::fire(new RemovePageFromHomepage($page)); return redirect() ->back() ->with('success', trans('template::admin/setHomepage.successfullyRemoved')); } } }