FEATURE: move template into own repository
This commit is contained in:
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
namespace Templates\Base\OnePage\Events;
|
||||||
|
|
||||||
|
use App\Models\Content\Content;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
|
||||||
|
class AddPageIntoHomepage {
|
||||||
|
use SerializesModels;
|
||||||
|
/**
|
||||||
|
* @var Content
|
||||||
|
*/
|
||||||
|
public $page;
|
||||||
|
|
||||||
|
public function __construct(Content $page)
|
||||||
|
{
|
||||||
|
$this->page = $page;
|
||||||
|
}
|
||||||
|
}
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
namespace Templates\Base\OnePage\Events;
|
||||||
|
|
||||||
|
use App\Models\Content\Content;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
|
||||||
|
class RemovePageFromHomepage {
|
||||||
|
use SerializesModels;
|
||||||
|
/**
|
||||||
|
* @var Content
|
||||||
|
*/
|
||||||
|
public $page;
|
||||||
|
|
||||||
|
public function __construct(Content $page)
|
||||||
|
{
|
||||||
|
$this->page = $page;
|
||||||
|
}
|
||||||
|
}
|
||||||
Executable
+188
@@ -0,0 +1,188 @@
|
|||||||
|
<?php
|
||||||
|
namespace Templates\Base\OnePage\Handlers;
|
||||||
|
|
||||||
|
use App\CMS\Contracts\Modules\InstallableModule;
|
||||||
|
use App\CMS\Contracts\Modules\TemplateHandler;
|
||||||
|
use App\CMS\Contracts\Repositories\Content as IContent;
|
||||||
|
use App\CMS\Helpers\CurrentTemplate;
|
||||||
|
use App\CMS\Helpers\PageRenderer;
|
||||||
|
use App\CMS\Helpers\Settings;
|
||||||
|
use App\CMS\Helpers\Template;
|
||||||
|
use App\Models\ActionLog\ActionLogType;
|
||||||
|
use App\Models\Content\Content;
|
||||||
|
use App\Models\Module;
|
||||||
|
use App\Models\Settings as SettingsModel;
|
||||||
|
use App\Models\User;
|
||||||
|
use App\Models\Widgets\Widget;
|
||||||
|
use App\Models\Widgets\WidgetArea;
|
||||||
|
use App\Models\Widgets\WidgetInWidgetArea;
|
||||||
|
use App\Models\Widgets\WidgetType;
|
||||||
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
use Templates\Base\OnePage\Widgets\OnePageMenu\OnePageMenu;
|
||||||
|
|
||||||
|
abstract class OnePage implements TemplateHandler, InstallableModule
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Name of settings key for list of pages used on homepage
|
||||||
|
*/
|
||||||
|
const HOMEPAGE_PAGES_SETTINGS_KEY = 'template.onepage.homepagePages';
|
||||||
|
protected static $homepagePagesInitialized = false;
|
||||||
|
protected static $homepagePages;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register admin menu (or multiple ones)
|
||||||
|
*
|
||||||
|
* This cannot be in ServiceProvider because Session is started at middleware. And ServiceProvider is called before
|
||||||
|
* starting any middleware..
|
||||||
|
*
|
||||||
|
* @param User $user model of logged user
|
||||||
|
*/
|
||||||
|
public static function registerAdminMenu(User $user)
|
||||||
|
{
|
||||||
|
$menu = \Menu::instance('mainMenu');
|
||||||
|
// $menu->route('template.setHomepage', trans('template::admin/mainMenu.setHomepage'), [], 1, ['icon' => 'fa fa-fw fa-home']);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter for pages displayed on homepage
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function getPagesOnHomepage()
|
||||||
|
{
|
||||||
|
if (!self::$homepagePagesInitialized) {
|
||||||
|
$pageIds = (array)json_decode(Settings::get(self::HOMEPAGE_PAGES_SETTINGS_KEY, '[]'));
|
||||||
|
|
||||||
|
if (empty($pageIds)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// get all available pages
|
||||||
|
$pages = Content::whereIn('id', $pageIds);
|
||||||
|
|
||||||
|
if (Auth::user()) {
|
||||||
|
$pages = $pages->where('status', '!=', IContent::STATUS_DRAFT);
|
||||||
|
} else {
|
||||||
|
$pages = $pages->where('status', IContent::STATUS_PUBLIC);
|
||||||
|
}
|
||||||
|
|
||||||
|
$homepagePages = $pages->get()
|
||||||
|
->getDictionary();
|
||||||
|
|
||||||
|
foreach ($pageIds as $pageId) {
|
||||||
|
if (!isset($homepagePages[$pageId])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
self::$homepagePages[] = $homepagePages[$pageId];
|
||||||
|
}
|
||||||
|
|
||||||
|
self::$homepagePagesInitialized = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return self::$homepagePages;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepare Content object to be rendered using Blade template
|
||||||
|
*
|
||||||
|
* @param Content $content
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function beforeRender(Content & $content)
|
||||||
|
{
|
||||||
|
if ($content->isHomepage) {
|
||||||
|
$pages = self::getPagesOnHomepage();
|
||||||
|
|
||||||
|
// create real content from pages
|
||||||
|
$pagesRaw = $pagesInTemplates = [];
|
||||||
|
foreach ($pages as $page) {
|
||||||
|
// save pages as models only
|
||||||
|
$pagesRaw[$page->url] = $page;
|
||||||
|
|
||||||
|
// save rendered pages
|
||||||
|
try {
|
||||||
|
$pagesInTemplates[$page->url] = PageRenderer::render($page)
|
||||||
|
->render();
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
if (Auth::user()) {
|
||||||
|
$pagesInTemplates[$page->url] = view(Template::name('errors.cannotRender'), ['page' => $page])->render();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// return pages into template
|
||||||
|
return ['pagesHtml' => $pagesInTemplates, 'pagesRaw' => $pagesRaw];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install module
|
||||||
|
*/
|
||||||
|
public static function install()
|
||||||
|
{
|
||||||
|
// register action log types
|
||||||
|
|
||||||
|
$types = [
|
||||||
|
[
|
||||||
|
'string_id' => 'pageRemovedFromHomepage',
|
||||||
|
'name' => 'template::admin/setHomepage.events.names.removedPage',
|
||||||
|
'value' => 'template::admin/setHomepage.events.descriptions.removedPage',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'string_id' => 'pageAddedIntoHomepage',
|
||||||
|
'name' => 'template::admin/setHomepage.events.names.addedPage',
|
||||||
|
'value' => 'template::admin/setHomepage.events.descriptions.addedPage',
|
||||||
|
],
|
||||||
|
|
||||||
|
];
|
||||||
|
foreach ($types as $type) {
|
||||||
|
ActionLogType::create($type);
|
||||||
|
}
|
||||||
|
|
||||||
|
// try to create onepage menu widget
|
||||||
|
$widgetName = OnePageMenu::getName();
|
||||||
|
$widgetDescription = OnePageMenu::getDescription();
|
||||||
|
|
||||||
|
CurrentTemplate::reset();
|
||||||
|
|
||||||
|
// create row in widget types
|
||||||
|
WidgetType::create([
|
||||||
|
'handler' => OnePageMenu::class,
|
||||||
|
'name' => $widgetName,
|
||||||
|
'module_id' => null,
|
||||||
|
'template_id' => CurrentTemplate::get()->id,
|
||||||
|
'description' => $widgetDescription
|
||||||
|
]);
|
||||||
|
|
||||||
|
$area = WidgetArea::create(['name' => 'Top menu', 'code' => 'topMenu', 'deletable' => 0]);
|
||||||
|
$widget = Widget::create([
|
||||||
|
'widget_type_handler' => OnePageMenu::class,
|
||||||
|
'name' => 'Menu',
|
||||||
|
'settings' => '{"containerClass": null}',
|
||||||
|
'deletable' => 0
|
||||||
|
]);
|
||||||
|
|
||||||
|
// bind widget with widget area
|
||||||
|
WidgetInWidgetArea::create(['widget_id' => $widget->id, 'widget_area_id' => $area->id, 'position' => 1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uninstall template
|
||||||
|
*
|
||||||
|
* @param Module $template
|
||||||
|
*/
|
||||||
|
public static function uninstall(Module $template)
|
||||||
|
{
|
||||||
|
// delete action log types
|
||||||
|
ActionLogType::whereIn('string_id', ['pageRemovedFromHomepage', 'pageAddedIntoHomepage'])
|
||||||
|
->delete();
|
||||||
|
|
||||||
|
// delete settings with pages on homepage
|
||||||
|
SettingsModel::where('key', self::HOMEPAGE_PAGES_SETTINGS_KEY)
|
||||||
|
->delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
+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'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Executable
+19
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
Route::group([
|
||||||
|
'middleware' => ['admin'],
|
||||||
|
'prefix' => \LaravelLocalization::setLocale() . '/admin/template',
|
||||||
|
'namespace' => 'Templates\Base\OnePage\Http\Controllers\Admin'
|
||||||
|
], function () {
|
||||||
|
|
||||||
|
// display form for selecting pages for homepage
|
||||||
|
Route::get('homepage', 'SetHomepage@getPages')
|
||||||
|
->name('template.setHomepage');
|
||||||
|
|
||||||
|
// add page into homepage
|
||||||
|
Route::get('add/{id}', 'SetHomepage@addPage')
|
||||||
|
->name('template.homepage.addPage');
|
||||||
|
|
||||||
|
// delete page from homepage
|
||||||
|
Route::get('remove/{id}', 'SetHomepage@removePage')
|
||||||
|
->name('template.homepage.removePage');
|
||||||
|
});
|
||||||
Executable
+37
@@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
namespace Templates\Base\OnePage\Listeners;
|
||||||
|
|
||||||
|
use App\Events\SetHomepage;
|
||||||
|
use App\CMS\Helpers\Settings;
|
||||||
|
use App\Models\Settings as SettingsModel;
|
||||||
|
use Templates\Base\OnePage\Handlers\OnePage;
|
||||||
|
|
||||||
|
class HomepageChanged
|
||||||
|
{
|
||||||
|
public function handle(SetHomepage $event)
|
||||||
|
{
|
||||||
|
$pagesOnHomepage = (array)json_decode(Settings::get(OnePage::HOMEPAGE_PAGES_SETTINGS_KEY, '[]'));
|
||||||
|
|
||||||
|
if (empty($pagesOnHomepage)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (in_array($event->page->id, $pagesOnHomepage)) {
|
||||||
|
$position = array_search($event->page->id, $pagesOnHomepage);
|
||||||
|
|
||||||
|
unset($pagesOnHomepage[$position]);
|
||||||
|
|
||||||
|
$pages = array_values($pagesOnHomepage);
|
||||||
|
|
||||||
|
$settings = SettingsModel::where('key', OnePage::HOMEPAGE_PAGES_SETTINGS_KEY)
|
||||||
|
->where('language', \LaravelLocalization::getCurrentLocale());
|
||||||
|
|
||||||
|
// update in database
|
||||||
|
if (!empty($pages)) {
|
||||||
|
$settings->update(['value' => json_encode($pages)]);
|
||||||
|
} else {
|
||||||
|
$settings->delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Executable
+23
@@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
namespace Templates\Base\OnePage\Listeners\Loggers;
|
||||||
|
|
||||||
|
use App\Listeners\Loggers\Logger;
|
||||||
|
use Templates\Base\OnePage\Events\AddPageIntoHomepage;
|
||||||
|
|
||||||
|
class LogAddingPage extends Logger
|
||||||
|
{
|
||||||
|
public function handle(AddPageIntoHomepage $event)
|
||||||
|
{
|
||||||
|
$parameters = [
|
||||||
|
'id' => $event->page->id,
|
||||||
|
'title' => $event->page->title
|
||||||
|
];
|
||||||
|
|
||||||
|
$this->saveLog($parameters);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getName()
|
||||||
|
{
|
||||||
|
return 'pageAddedIntoHomepage';
|
||||||
|
}
|
||||||
|
}
|
||||||
+23
@@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
namespace Templates\Base\OnePage\Listeners\Loggers;
|
||||||
|
|
||||||
|
use App\Listeners\Loggers\Logger;
|
||||||
|
use Templates\Base\OnePage\Events\RemovePageFromHomepage;
|
||||||
|
|
||||||
|
class LogRemovingPage extends Logger
|
||||||
|
{
|
||||||
|
public function handle(RemovePageFromHomepage $event)
|
||||||
|
{
|
||||||
|
$parameters = [
|
||||||
|
'id' => $event->page->id,
|
||||||
|
'title' => $event->page->title
|
||||||
|
];
|
||||||
|
|
||||||
|
$this->saveLog($parameters);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getName()
|
||||||
|
{
|
||||||
|
return 'pageRemovedFromHomepage';
|
||||||
|
}
|
||||||
|
}
|
||||||
Executable
+19
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
namespace Templates\Base\OnePage\Providers;
|
||||||
|
|
||||||
|
use App\Events\SetHomepage;
|
||||||
|
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
||||||
|
use Templates\Base\OnePage\Events\AddPageIntoHomepage;
|
||||||
|
use Templates\Base\OnePage\Events\RemovePageFromHomepage;
|
||||||
|
use Templates\Base\OnePage\Listeners\HomepageChanged;
|
||||||
|
use Templates\Base\OnePage\Listeners\Loggers\LogAddingPage;
|
||||||
|
use Templates\Base\OnePage\Listeners\Loggers\LogRemovingPage;
|
||||||
|
|
||||||
|
class EventProvider extends ServiceProvider
|
||||||
|
{
|
||||||
|
protected $listen = [
|
||||||
|
SetHomepage::class => [HomepageChanged::class],
|
||||||
|
AddPageIntoHomepage::class => [LogAddingPage::class],
|
||||||
|
RemovePageFromHomepage::class => [LogRemovingPage::class],
|
||||||
|
];
|
||||||
|
}
|
||||||
Executable
+58
@@ -0,0 +1,58 @@
|
|||||||
|
<?php
|
||||||
|
namespace Templates\Base\OnePage\Providers;
|
||||||
|
|
||||||
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
use Templates\Base\OnePage\Widgets\OnePageMenu\OnePageMenu;
|
||||||
|
|
||||||
|
class OnePageTemplate extends ServiceProvider
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Register the service provider.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function register()
|
||||||
|
{
|
||||||
|
$this->registerTranslations();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function boot()
|
||||||
|
{
|
||||||
|
$this->registerViews();
|
||||||
|
$this->registerWidgets();
|
||||||
|
|
||||||
|
// register event service provider for this template
|
||||||
|
$this->app->register(EventProvider::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register translations used in this base template
|
||||||
|
*/
|
||||||
|
private function registerTranslations()
|
||||||
|
{
|
||||||
|
// register translations
|
||||||
|
$this->loadTranslationsFrom(__DIR__ . '/../Resources/lang', 'template');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register views used in this template - both visitor's and admin's
|
||||||
|
*/
|
||||||
|
private function registerViews()
|
||||||
|
{
|
||||||
|
// load views
|
||||||
|
$this->loadViewsFrom(array_merge(array_map(function ($path) {
|
||||||
|
return $path;
|
||||||
|
}, \Config::get('view.paths')), [__DIR__ . '/../Resources/views']), 'template');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register all widgets related to this template
|
||||||
|
*/
|
||||||
|
private function registerWidgets()
|
||||||
|
{
|
||||||
|
$registrator = $this->app->make('registerWidget');
|
||||||
|
|
||||||
|
// register all available widgets
|
||||||
|
$registrator->register(OnePageMenu::class);
|
||||||
|
}
|
||||||
|
}
|
||||||
Executable
+5
@@ -0,0 +1,5 @@
|
|||||||
|
<?php
|
||||||
|
return [
|
||||||
|
"setHomepage" => "Nastavení hlavní stránky",
|
||||||
|
"templateName" => "Jednostránkovka",
|
||||||
|
];
|
||||||
+23
@@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
return [
|
||||||
|
"addToHomepage" => "Přidat stránku na homepage",
|
||||||
|
"cannotSetHomepageAsPartOfHomepage" => "No toto? Jak mám nastavit domovskou stárnku jako podstránku sama sebe?",
|
||||||
|
"events" => ["descriptions" => ["addedPage" => 'Na domovskou stránku byla přidána stránka #:id s titulkem ":title"',
|
||||||
|
"removedPage" => 'Z domovské stránky byla odebrána stránka #:id ":title"',
|
||||||
|
],
|
||||||
|
"names" => ["addedPage" => "Stránka přidána na titulní stranu.",
|
||||||
|
"removedPage" => "Stránka odebrána z titulní strany.",
|
||||||
|
],
|
||||||
|
],
|
||||||
|
"invalidPageId" => "Nelze odebrat stránku z titulní strany, neboť uvedené ID neexistuje.",
|
||||||
|
"noHomepageSet" => "Není nastavena domovská stránka, následující nastavení se nikde neprojeví!",
|
||||||
|
"noPagesAvailable" => "Žádné stránky k dispozici.",
|
||||||
|
"noPagesSelected" => "Nebyla vybrána žádná stránka pro zobrazení na titulní straně. Zatím...",
|
||||||
|
"notUsedPages" => "Nepoužité stránky",
|
||||||
|
"pageDescription" => "Na této stránce můžete nastavit stránky, které se mají zobrazovat na titulní strane.",
|
||||||
|
"reallyRemovePage" => "Opravdu chcete odebrat stránku y hlavní stránky?",
|
||||||
|
"successfullyAdded" => "Stránka úspěšně přidána na úvodní stranu",
|
||||||
|
"successfullyRemoved" => "Stránka úspěšně odebrána z úvodní stránky.",
|
||||||
|
"title" => "Nastavení úvodní stránky",
|
||||||
|
"usedPages" => "Použité stránky",
|
||||||
|
];
|
||||||
Executable
+11
@@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
return [
|
||||||
|
"description" => "Jednoduché menu použité pro navigaci v jednostránkovém webu. Pro přechody mezi stránkami používá anchor odkazy na stránky. Ty se generují automaticky ze seznamu stránek přidaných na homepage.",
|
||||||
|
"form" => ["containerClass" => "HTML třída obalového elementu",
|
||||||
|
"description" => "Popis",
|
||||||
|
"name" => "Název menu",
|
||||||
|
"save" => "Uložit",
|
||||||
|
],
|
||||||
|
"name" => "Jednstránkové menu",
|
||||||
|
"new" => "Vytvořit nové menu",
|
||||||
|
];
|
||||||
Executable
+5
@@ -0,0 +1,5 @@
|
|||||||
|
<?php
|
||||||
|
return [
|
||||||
|
'setHomepage' => 'Homepage settings',
|
||||||
|
'templateName' => 'Onepager'
|
||||||
|
];
|
||||||
+26
@@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
return [
|
||||||
|
'title' => 'Homepage setup',
|
||||||
|
'pageDescription' => 'On this page you can setup all pages which should appear on homepage. Use drag\'n\'drop feature and organize your pages into your presentation.',
|
||||||
|
'noPagesSelected' => 'No pages selected for homepage. Yet...',
|
||||||
|
'noPagesAvailable' => 'There are no pages you could set up for homepage.',
|
||||||
|
'successfullyAdded' => 'Page successfully added to homepage.',
|
||||||
|
'successfullyRemoved' => 'Page successfully removed from homepage.',
|
||||||
|
'invalidPageId' => 'Cannot remove page from homepage, because given ID does not exist.',
|
||||||
|
'usedPages' => 'Used pages',
|
||||||
|
'notUsedPages' => 'Not used pages',
|
||||||
|
'reallyRemovePage' => 'Do you really want to remove this page from homepage?',
|
||||||
|
'cannotSetHomepageAsPartOfHomepage' => 'Cannot set currently set homepage as one of homepage pages.',
|
||||||
|
'noHomepageSet' => 'No homepage set, following settings will not take effect!',
|
||||||
|
'addToHomepage' => 'Add page into homepage',
|
||||||
|
'events' => [
|
||||||
|
'names' => [
|
||||||
|
'removedPage' => 'Removed page from homepage',
|
||||||
|
'addedPage' => 'Added page into homepage'
|
||||||
|
],
|
||||||
|
'descriptions' => [
|
||||||
|
'removedPage' => 'Removed page #:id ":title" from homepage.',
|
||||||
|
'addedPage' => 'Added page #:id ":title" into homepage.'
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
Executable
+12
@@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
return [
|
||||||
|
'name' => 'One page menu',
|
||||||
|
'description' => 'Simple menu used for one page templates. This menu navigates using nachor links on page. Links are generated automatically using list of pages on homepage.',
|
||||||
|
'new' => 'Create new menu',
|
||||||
|
'form' => [
|
||||||
|
'name' => 'Menu name',
|
||||||
|
'description' => 'Description',
|
||||||
|
'containerClass' => 'HTML class for container element',
|
||||||
|
'save' => 'Save',
|
||||||
|
]
|
||||||
|
];
|
||||||
+90
@@ -0,0 +1,90 @@
|
|||||||
|
@extends('admin.layoutWithNavigation')
|
||||||
|
|
||||||
|
@section('pageHeading', trans('template::admin/setHomepage.title'))
|
||||||
|
@section('pageDescription', trans('template::admin/setHomepage.pageDescription'))
|
||||||
|
|
||||||
|
{{--
|
||||||
|
Improvement: http://www.html5rocks.com/en/tutorials/dnd/basics/
|
||||||
|
--}}
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-8">
|
||||||
|
@if(isset($homepage))
|
||||||
|
@include('admin.snippets.card', [
|
||||||
|
'type' => 'primary',
|
||||||
|
'title' => $homepage->title.' <small>'.trans($homepage->module_name).'</small>',
|
||||||
|
'body' => '<p>'.str_limit(strip_tags($homepage->content), 200).'</p>',
|
||||||
|
'footerClass' => 'text-right',
|
||||||
|
'footer' => '<a href="'.route('content.edit', ['url' => $homepage->url]).'" class="btn btn-secondary btn-sm"><i class="fa fa-fw fa-pencil"></i></a>'
|
||||||
|
])
|
||||||
|
@else
|
||||||
|
<div class="alert alert-warning">@lang('template::admin/setHomepage.noHomepageSet')</div>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
<h3>@lang('template::admin/setHomepage.usedPages')</h3>
|
||||||
|
|
||||||
|
@forelse($usedPagesIds as $pageId)
|
||||||
|
|
||||||
|
{{--ignore non-existing pages--}}
|
||||||
|
@if(!isset($allPages[$pageId]))
|
||||||
|
@continue
|
||||||
|
@endif
|
||||||
|
|
||||||
|
|
||||||
|
@include('admin.snippets.card', [
|
||||||
|
'title' => $allPages[$pageId]->title.' <small>'.trans($allPages[$pageId]->module_name).'</small>',
|
||||||
|
'body' => '<p>'.str_limit(strip_tags($allPages[$pageId]->content), 200).'</p>',
|
||||||
|
'footerClass' => 'text-right',
|
||||||
|
'footer' => '
|
||||||
|
<a href="'.route('content.edit', ['url' => $allPages[$pageId]->url]).'" class="btn btn-secondary btn-sm"><i class="fa fa-fw fa-pencil"></i></a>
|
||||||
|
<a href="'.route('template.homepage.removePage', ['id' => $allPages[$pageId]->id]).'" class="btn btn-warning confirm btn-sm" data-message="'.trans('template::admin/setHomepage.reallyRemovePage').'"><i class="fa fa-fw fa-trash confirm"></i></a>
|
||||||
|
'
|
||||||
|
])
|
||||||
|
@empty
|
||||||
|
<div class="alert alert-info">
|
||||||
|
@lang('template::admin/setHomepage.noPagesSelected')
|
||||||
|
</div>
|
||||||
|
@endforelse
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-4">
|
||||||
|
<h3>@lang('template::admin/setHomepage.notUsedPages')</h3>
|
||||||
|
@forelse($notUsedPages as $page)
|
||||||
|
<div class="card card-default">
|
||||||
|
<div class="card-header">
|
||||||
|
<div class="header-block">
|
||||||
|
<p class="title">{{$page->title}}
|
||||||
|
<small>@lang($page->module_name)</small>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-block">
|
||||||
|
{{str_limit(strip_tags($page->content), 100)}}
|
||||||
|
</div>
|
||||||
|
<div class="card-footer text-right">
|
||||||
|
<a href="{{route('content.edit', ['id' => $page->id])}}"
|
||||||
|
class="btn btn-secondary btn-sm"><i
|
||||||
|
class="fa fa-fw fa-pencil"></i></a>
|
||||||
|
@if(!$page->isHomepage)
|
||||||
|
<a href="{{route('content.setHomepage', ['id' => $page->id])}}"
|
||||||
|
class="btn btn-secondary confirm btn-sm"
|
||||||
|
data-toggle="tooltip" title="@lang('admin/contents.setHomepage')">
|
||||||
|
<i class="fa fa-home"></i>
|
||||||
|
</a>
|
||||||
|
@endif
|
||||||
|
<a href="{{route('template.homepage.addPage', ['id' => $page->id])}}"
|
||||||
|
class="btn btn-sm btn-primary" data-toggle="tooltip"
|
||||||
|
title="@lang('template::admin/setHomepage.addToHomepage')"><i
|
||||||
|
class="fa green fa-fw fa-plus"></i></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@empty
|
||||||
|
<div class="alert alert-info">
|
||||||
|
@lang('template::admin/setHomepage.noPagesAvailable')
|
||||||
|
</div>
|
||||||
|
@endforelse
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@endsection
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
@extends('admin.layoutWithNavigation')
|
||||||
|
|
||||||
|
@section('pageHeading', @trans('widgets/htmlCode.edit', ['name' => $widget->name]))
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<div class="col-lg-8">
|
||||||
|
@include('template::admin.widgets.onePageMenu.form', ['action' => route('widgets.postEdit', ['id' => $widget->id])])
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-4">
|
||||||
|
<h3>@lang('widgets/menu.preview')</h3>
|
||||||
|
|
||||||
|
@widgetPreview($widget)
|
||||||
|
</div>
|
||||||
|
@stop
|
||||||
|
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
<form action="{{$action}}" method="POST">
|
||||||
|
{!! csrf_field() !!}
|
||||||
|
<label class="label-control">
|
||||||
|
@lang('template::widget/menu.form.name')
|
||||||
|
</label>
|
||||||
|
<input class="form-control" type="text" name="name" value="{{old('name', $widget->name)}}"
|
||||||
|
placeholder="@lang('template::widget/menu.form.name')" />
|
||||||
|
|
||||||
|
|
||||||
|
<label class="label-control">
|
||||||
|
@lang('template::widget/menu.form.description')
|
||||||
|
</label>
|
||||||
|
<input class="form-control" type="text" name="description" placeholder="@lang('template::widget/menu.form.description')"
|
||||||
|
value="{{old('description', $widget->description)}}" />
|
||||||
|
|
||||||
|
|
||||||
|
<label class="label-control">
|
||||||
|
@lang('template::widget/menu.form.containerClass')
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<input class="form-control" type="text" name="containerClass" placeholder="@lang('template::widget/menu.form.containerClass')"
|
||||||
|
value="{{old('containerClass', isset($settings->containerClass) ? $settings->containerClass : '')}}" />
|
||||||
|
|
||||||
|
<button type="submit" class="btn btn-primary">
|
||||||
|
@lang('template::widget/menu.form.save')
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
@extends('admin.layoutWithNavigation')
|
||||||
|
|
||||||
|
@section('pageHeading', @trans('template::widget/menu.new'))
|
||||||
|
@section('pageDescription', @trans($type->description))
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
@include('template::admin.widgets.onePageMenu.form', ['action' => route('widgets.postNew', ['type' => $type->id])])
|
||||||
|
@stop
|
||||||
|
|
||||||
Executable
+49
@@ -0,0 +1,49 @@
|
|||||||
|
<?php
|
||||||
|
namespace Templates\Base\OnePage\Widgets\OnePageMenu;
|
||||||
|
|
||||||
|
use App\CMS\Contracts\Widgets\PublicWidget;
|
||||||
|
use App\CMS\Contracts\Widgets\WidgetRenderer;
|
||||||
|
use App\Http\Requests\Request;
|
||||||
|
|
||||||
|
class OnePageMenu implements PublicWidget
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Name getter
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getName()
|
||||||
|
{
|
||||||
|
return 'template::widget/menu.name';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter for description
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getDescription()
|
||||||
|
{
|
||||||
|
return 'template::widget/menu.description';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter for presenter/renderer of this widget
|
||||||
|
*
|
||||||
|
* @return WidgetRenderer
|
||||||
|
*/
|
||||||
|
public static function getPresenter()
|
||||||
|
{
|
||||||
|
return Presenter::class;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Request $data
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function save(Request $data)
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
Executable
+65
@@ -0,0 +1,65 @@
|
|||||||
|
<?php
|
||||||
|
namespace Templates\Base\OnePage\Widgets\OnePageMenu;
|
||||||
|
|
||||||
|
use App\Models\Widgets\Widget;
|
||||||
|
use App\Models\Widgets\WidgetType;
|
||||||
|
use App\CMS\Contracts\Widgets\WidgetRenderer;
|
||||||
|
use Templates\Base\OnePage\Handlers\OnePage;
|
||||||
|
|
||||||
|
class Presenter implements WidgetRenderer
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string path to template
|
||||||
|
*/
|
||||||
|
public static $template;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method used for displaying widget.
|
||||||
|
*
|
||||||
|
* This method renders some HTML code for displaying.
|
||||||
|
*
|
||||||
|
* @param Widget $widget
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
* @throws \ErrorException
|
||||||
|
*/
|
||||||
|
public static function render(Widget $widget)
|
||||||
|
{
|
||||||
|
if (!self::$template) {
|
||||||
|
throw new \ErrorException('Cannot render menu without template! Please, set Presenter::$template variable before rendering.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$pages = OnePage::getPagesOnHomepage();
|
||||||
|
|
||||||
|
return view(self::$template, ['pages' => $pages, 'widget' => $widget])->render();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display form for creating new instance of widget
|
||||||
|
*
|
||||||
|
* @param WidgetType $type
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function renderAddForm(WidgetType $type)
|
||||||
|
{
|
||||||
|
return view('template::admin.widgets.onePageMenu.new', [
|
||||||
|
'type' => $type,
|
||||||
|
'widget' => new Widget(),
|
||||||
|
'settings' => new \stdClass()
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display form for editing already existing widget
|
||||||
|
*
|
||||||
|
* @param Widget $widget
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function renderEditForm(Widget $widget)
|
||||||
|
{
|
||||||
|
$settings = $widget->settings;
|
||||||
|
return view('template::admin.widgets.onePageMenu.edit', ['widget' => $widget, 'settings' => $settings]);
|
||||||
|
}
|
||||||
|
}
|
||||||
Executable
+8
@@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
return [
|
||||||
|
'providers' => [\Templates\Base\OnePage\Providers\OnePageTemplate::class],
|
||||||
|
'files' => [__DIR__ . '/Http/routes.php'],
|
||||||
|
'handler' => null,
|
||||||
|
'name' => null,
|
||||||
|
'description' => null,
|
||||||
|
];
|
||||||
Reference in New Issue
Block a user