FEATURE: move template into own repository
This commit is contained in:
+160
@@ -0,0 +1,160 @@
|
||||
<?php
|
||||
namespace Templates\Base\OnePage\Http\Controllers\Admin;
|
||||
|
||||
use App\CMS\Contracts\Repositories\Content as IContent;
|
||||
use App\CMS\Helpers\Settings;
|
||||
use App\Http\Controllers\Admin\Controller;
|
||||
use App\Models\Settings as SettingsModel;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
|
||||
use Templates\Base\OnePage\Events\AddPageIntoHomepage;
|
||||
use Templates\Base\OnePage\Events\RemovePageFromHomepage;
|
||||
use Templates\Base\OnePage\Handlers\OnePage;
|
||||
|
||||
class SetHomepage extends Controller
|
||||
{
|
||||
/**
|
||||
* @var IContent
|
||||
*/
|
||||
private $content;
|
||||
|
||||
/**
|
||||
* SetHomepage constructor.
|
||||
*
|
||||
* @param Content $content
|
||||
*/
|
||||
public function __construct(IContent $content)
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
$this->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::where('key', OnePage::HOMEPAGE_PAGES_SETTINGS_KEY)
|
||||
->where('language', LaravelLocalization::getCurrentLocale())
|
||||
->first();
|
||||
|
||||
if (!$settingsEntry) {
|
||||
$settingsEntry = new SettingsModel();
|
||||
$settingsEntry->language = LaravelLocalization::getCurrentLocale();
|
||||
$settingsEntry->key = OnePage::HOMEPAGE_PAGES_SETTINGS_KEY;
|
||||
$usedPagesIds = [];
|
||||
} else {
|
||||
$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();
|
||||
|
||||
// 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
|
||||
SettingsModel::where('key', OnePage::HOMEPAGE_PAGES_SETTINGS_KEY)
|
||||
->where('language', LaravelLocalization::getCurrentLocale())
|
||||
->update(['value' => json_encode($pages)]);
|
||||
|
||||
// inform other application parts about this event
|
||||
Event::fire(new RemovePageFromHomepage($page));
|
||||
|
||||
return redirect()
|
||||
->back()
|
||||
->with('success', trans('template::admin/setHomepage.successfullyRemoved'));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user