Merge branch 'dev' into template_support

This commit is contained in:
Michal Kváček
2016-09-24 23:00:44 +02:00
29 changed files with 413 additions and 86 deletions
@@ -6,7 +6,7 @@ use Illuminate\Console\Command;
use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\File;
use Illuminate\Support\Str; use Illuminate\Support\Str;
class Translations extends Command class TranslateDirectory extends Command
{ {
/** /**
* The name and signature of the console command. * The name and signature of the console command.
@@ -40,7 +40,8 @@ class Translations extends Command
$modulePath = dirname(dirname($dir)); $modulePath = dirname(dirname($dir));
if (is_dir(base_path($modulePath . '/Resources/lang'))) { // does exist directory with translations?
if (is_dir(base_path($modulePath . '/Resources/lang')) || file_exists(base_path($modulePath.DIRECTORY_SEPARATOR.'info.php'))) {
$modules = File::directories($modulePath); $modules = File::directories($modulePath);
foreach ($modules as $module) { foreach ($modules as $module) {
$this->call('translate:dir', ['dir' => $module . '/Resources/lang']); $this->call('translate:dir', ['dir' => $module . '/Resources/lang']);
+1 -1
View File
@@ -18,7 +18,7 @@ class Kernel extends ConsoleKernel
Commands\ChangePassword::class, Commands\ChangePassword::class,
Commands\InstallModule::class, Commands\InstallModule::class,
Commands\InstallAllModules::class, Commands\InstallAllModules::class,
Commands\Translations::class, Commands\TranslateDirectory::class,
Commands\TranslateAll::class, Commands\TranslateAll::class,
Commands\InitDatabaseSchema::class, Commands\InitDatabaseSchema::class,
Commands\SetTemplate::class, Commands\SetTemplate::class,
+3 -4
View File
@@ -5,8 +5,6 @@ use App\Models\User;
interface BaseModuleHandler interface BaseModuleHandler
{ {
// public static function getModuleId();
/** /**
* Register admin menu (or multiple ones) * Register admin menu (or multiple ones)
* *
@@ -18,9 +16,10 @@ interface BaseModuleHandler
public static function registerAdminMenu(User $user); public static function registerAdminMenu(User $user);
/** /**
* Install module * Install module.
* *
* @return mixed * This method is called after inserting info about module into database. It can be called only using Artisan in
* CLI.
*/ */
public static function install(); public static function install();
} }
+40
View File
@@ -0,0 +1,40 @@
<?php
namespace App\Handlers\Contracts;
use App\Models\Content;
/**
* Interface ContentTitles
*
* Classes which implement this interface get the ability to rewrite default text on edit/create/overview of content
* page.
*
* @package App\Handlers\Contracts
*/
interface ContentTitles
{
/**
* Get translated title for pages overview of given type.
*
* This value is used for rendering list of all content pages of given type in administration.
*
* @return string
*/
public static function getOverviewTitle();
/**
* Title displayed above for for creating new content page
*
* @return string
*/
public static function getCreateNewTitle();
/**
* Title for form displayed for editin content page
*
* @param Content $content
*
* @return mixed
*/
public static function getEditTitle(Content $content);
}
@@ -17,6 +17,13 @@ use Modules\Categories\Entities\Category;
use Pingpong\Modules\Facades\Module as ModuleInstance; use Pingpong\Modules\Facades\Module as ModuleInstance;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
/**
* Class CreateNewContent
*
* Controller for creating new content page.
*
* @package App\Http\Controllers\Admin\Contents
*/
class CreateNewContent extends Controller class CreateNewContent extends Controller
{ {
/** /**
@@ -28,6 +35,14 @@ class CreateNewContent extends Controller
*/ */
private $content; private $content;
/**
* CreateNewContent constructor.
*
* Sets File and Content models into class variables
*
* @param File $file
* @param Content $content
*/
public function __construct(File $file, Content $content) public function __construct(File $file, Content $content)
{ {
parent::__construct(); parent::__construct();
@@ -47,12 +62,19 @@ class CreateNewContent extends Controller
$module = Module::findOrFail($moduleId); $module = Module::findOrFail($moduleId);
$statuses = ContentStatuses::getWithTranslations(); $statuses = ContentStatuses::getWithTranslations();
// set default page title
$pageHeading = trans('admin/contents.new', ['name' => trans($module->name)]);
if (is_callable([$module->handler, 'getCreateNewTitle'])) {
$pageHeading = call_user_func([$module->handler, 'getCreateNewTitle']);
}
// get list of usable templates
$templates = Template::where('module_id', $moduleId) $templates = Template::where('module_id', $moduleId)
->select(['template_name', 'name', 'description']) ->select(['template_name', 'name', 'description'])
->get(); ->get();
$categoryModule = ModuleInstance::get('categories');
// add categories, if supported // add categories, if supported
$categoryModule = ModuleInstance::get('categories');
$categories = []; $categories = [];
if ($module->support_categories && $categoryModule->enabled()) { if ($module->support_categories && $categoryModule->enabled()) {
$categories = Category::where('module_id', $moduleId) $categories = Category::where('module_id', $moduleId)
@@ -64,6 +86,7 @@ class CreateNewContent extends Controller
// render view // render view
return view('admin.content.new', [ return view('admin.content.new', [
'pageHeading' => $pageHeading,
'contentStatuses' => $statuses, 'contentStatuses' => $statuses,
'templates' => $templates, 'templates' => $templates,
'moduleId' => $moduleId, 'moduleId' => $moduleId,
@@ -89,7 +112,6 @@ class CreateNewContent extends Controller
*/ */
public function postNew(CreateNewContentRequest $request, $moduleId) public function postNew(CreateNewContentRequest $request, $moduleId)
{ {
$page = new Content();
try { try {
$module = Module::findOrFail($moduleId); $module = Module::findOrFail($moduleId);
} catch (NotFoundHttpException $e) { } catch (NotFoundHttpException $e) {
@@ -99,6 +121,10 @@ class CreateNewContent extends Controller
->with('error', trans('admin/contents.invalidModule')); ->with('error', trans('admin/contents.invalidModule'));
} }
// create new page
$page = new Content();
$page->template = $request->template;
// setup basic info // setup basic info
$page->user_id = \Auth::user()->id; $page->user_id = \Auth::user()->id;
$page->language = LaravelLocalization::getCurrentLocale(); $page->language = LaravelLocalization::getCurrentLocale();
@@ -110,10 +136,10 @@ class CreateNewContent extends Controller
$page->meta_description = $request->metaDescription; $page->meta_description = $request->metaDescription;
$page->content = $request->pageContent; $page->content = $request->pageContent;
$page->status = $request->status; $page->status = $request->status;
$page->template = $request->template;
$page->module_handler = $module->handler; $page->module_handler = $module->handler;
$page->category_id = (int)$request->category > 0 ? $request->category : null; $page->category_id = (int)$request->category > 0 ? $request->category : null;
// is any parent page specified?
if ($request->parentPage) { if ($request->parentPage) {
$page->parent_id = $request->parentPage; $page->parent_id = $request->parentPage;
} }
@@ -124,12 +150,12 @@ class CreateNewContent extends Controller
$page->title_photo = $file ? $file['filename'] : null; $page->title_photo = $file ? $file['filename'] : null;
// let template to modify request and content page // let template to modify request and content page
call_user_func_array([CurrentTemplate::handler(), 'beforeSave'], [&$page, $request]); call_user_func_array([CurrentTemplate::handler(), 'beforeSave'], [&$page, $request]);
// save module-specific stuff // save module-specific stuff
call_user_func_array([$module->handler, 'createNew'], [&$page, $request]); call_user_func_array([$module->handler, 'createNew'], [&$page, $request]);
// save content of page before (possible) uploading related files
$page->save(); $page->save();
// upload files assigned to content page // upload files assigned to content page
@@ -35,6 +35,14 @@ class EditContent extends Controller
*/ */
private $file; private $file;
/**
* EditContent constructor.
*
* Load ContentHistory and File into this controller
*
* @param ContentHistory $history
* @param File $file
*/
public function __construct(ContentHistory $history, File $file) public function __construct(ContentHistory $history, File $file)
{ {
$this->history = $history; $this->history = $history;
@@ -61,6 +69,11 @@ class EditContent extends Controller
$module = Module::where('handler', $page->module_handler) $module = Module::where('handler', $page->module_handler)
->firstOrFail(); ->firstOrFail();
$pageHeading = trans('admin/contents.edit', ['name' => e($page->title)]);
if (is_callable([$module->handler, 'getCreateNewTitle'])) {
$pageHeading = call_user_func([$module->handler, 'getEditTitle'], $page);
}
// get all Blade templates for rendering page // get all Blade templates for rendering page
$templates = Template::where('module_id', $module->id) $templates = Template::where('module_id', $module->id)
->select(['template_name', 'name', 'description']) ->select(['template_name', 'name', 'description'])
@@ -83,6 +96,7 @@ class EditContent extends Controller
// render view // render view
return view('admin.content.edit', [ return view('admin.content.edit', [
'pageHeading' => $pageHeading,
'contentStatuses' => $statuses, 'contentStatuses' => $statuses,
'page' => $page, 'page' => $page,
'module' => $module, 'module' => $module,
@@ -286,7 +300,7 @@ class EditContent extends Controller
} catch (NotFoundHttpException $e) { } catch (NotFoundHttpException $e) {
// page not found // page not found
return redirect() return redirect()
->route('content.overview') ->back()
->with('error', trans('admin/contents.invalidPage')); ->with('error', trans('admin/contents.invalidPage'));
} }
@@ -301,7 +315,7 @@ class EditContent extends Controller
// was something changed? // was something changed?
if ($changedColumns == 0) { if ($changedColumns == 0) {
return redirect() return redirect()
->route('content.overview') ->back()
->with('error', trans('admin/contents.nothingToEdit')); ->with('error', trans('admin/contents.nothingToEdit'));
} }
@@ -310,7 +324,7 @@ class EditContent extends Controller
// redirect back to overview with info for user // redirect back to overview with info for user
return redirect() return redirect()
->route('content.overview') ->back()
->with('success', trans('admin/contents.homepageSetup', [ ->with('success', trans('admin/contents.homepageSetup', [
'name' => $page->title, 'name' => $page->title,
'url' => $page->url 'url' => $page->url
@@ -0,0 +1,44 @@
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class FixForeignKeysOnActionLog extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('action_log', function (Blueprint $table) {
$table->dropForeign('fk_action_log_action_log_type1');
$table->dropForeign('fk_action_log_user1');
$table->foreign('type_id')
->references('id')
->on('action_log_types')
->onDelete('cascade')
->onUpdate('cascade');
$table->foreign('user_id')
->references('id')
->on('users')
->onDelete('cascade')
->onUpdate('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
// do nothing
}
}
+60 -12
View File
@@ -2,16 +2,17 @@
namespace Modules\Blog\Article\Handlers; namespace Modules\Blog\Article\Handlers;
use App\Enumerations\ModulesHandlerToId; use App\Enumerations\ModulesHandlerToId;
use App\Handlers\Contracts\ContentTitles;
use App\Handlers\Handler; use App\Handlers\Handler;
use App\Http\Controllers\Admin\EditContent; use App\Http\Controllers\Admin\Contents\EditContent;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Http\Requests\Request; use App\Http\Requests\Request;
use App\Models\ActionLogType;
use App\Models\Content; use App\Models\Content;
use App\Models\User; use App\Models\User;
use Illuminate\Support\Facades\Artisan;
use Modules\Blog\Article\Entities\Comment; use Modules\Blog\Article\Entities\Comment;
class Article extends Handler class Article extends Handler implements ContentTitles
{ {
/** /**
* Render given module into visitor area. * Render given module into visitor area.
@@ -89,12 +90,8 @@ class Article extends Handler
return $changedColumns; return $changedColumns;
} }
public static function getOverviewTitle()
{
return trans('article::module.allArticles');
}
/** /**
* Register admin menu
* *
* @param User $user * @param User $user
*/ */
@@ -131,12 +128,63 @@ class Article extends Handler
/** /**
* Install module * Install module
*
* @return mixed
*/ */
public static function install() public static function install()
{ {
// seed action log types $types = [
// Artisan::call('') [
'string_id' => 'commentCreated',
'name' => 'article::comments.events.names.commentCreated',
'value' => 'article::comments.events.descriptions.commentCreated',
],
[
'string_id' => 'commentDeleted',
'name' => 'article::comments.events.names.commentDeleted',
'value' => 'article::comments.events.descriptions.commentDeleted',
],
[
'string_id' => 'commentApproved',
'name' => 'article::comments.events.names.commentApproved',
'value' => 'article::comments.events.descriptions.commentApproved',
],
];
foreach ($types as $type) {
ActionLogType::create($type);
}
}
/**
* Get translated title for pages overview of given type.
*
* This value is used for rendering list of all content pages of given type in administration.
*
* @return string
*/
public static function getOverviewTitle()
{
return trans('article::module.allArticles');
}
/**
* Title displayed above for for creating new content page
*
* @return string
*/
public static function getCreateNewTitle()
{
return trans('article::module.newArticle');
}
/**
* Title for form displayed for editin content page
*
* @param Content $content
*
* @return mixed
*/
public static function getEditTitle(Content $content)
{
return trans('article::module.editArticle');
} }
} }
@@ -59,7 +59,7 @@ class ArticleServiceProvider extends ServiceProvider {
$viewPath = base_path('resources/views/modules/article'); $viewPath = base_path('resources/views/modules/article');
$sourcePath = __DIR__.'/../Resources/views'; $sourcePath = __DIR__.'/../Resources/views';
$this->publishes([$sourcePath => $viewPath]); $this->publishes([$sourcePath => $viewPath], 'module-views');
$this->loadViewsFrom(array_merge(array_map(function ($path) { $this->loadViewsFrom(array_merge(array_map(function ($path) {
return $path . '/modules/article'; return $path . '/modules/article';
@@ -2,5 +2,5 @@
return [ return [
"allowComments" => "Povolit komentáře?", "allowComments" => "Povolit komentáře?",
"new" => "Napsat", "new" => "Napsat",
"overview" => "Všchny články", "overview" => "Všechny články",
]; ];
@@ -5,5 +5,7 @@ return [
"comments" => "Komentáře", "comments" => "Komentáře",
"commentsOverview" => "Všechny komentáře", "commentsOverview" => "Všechny komentáře",
"description" => "Základní submodul pro blog. Tento modul umožňuje psát články.", "description" => "Základní submodul pro blog. Tento modul umožňuje psát články.",
"editArticle" => "Upravuji článek",
"name" => "Články", "name" => "Články",
"newArticle" => "Napsat nový článek",
]; ];
@@ -4,5 +4,18 @@ return [
'commentedArticle' => 'Article', 'commentedArticle' => 'Article',
'approve' => 'Approve comment', 'approve' => 'Approve comment',
'approved' => 'Comment successfully approved', 'approved' => 'Comment successfully approved',
'deleted' => 'Comment deleted' 'deleted' => 'Comment deleted',
'noComments' => 'No comments available',
'events' => [
'names' => [
'commentCreated' => 'Added comment',
'commentApproved' => 'Approved comment',
'commentDeleted' => 'Deleted comment',
],
'descriptions' => [
'commentCreated' => 'Added comment from author :author with e-mail :email and following content: :content',
'commentApproved' => 'Approved comment from author :author with e-mail :email and following content: :content',
'commentDeleted' => 'Deleted comment from author :author with e-mail :email and following content: :content',
],
]
]; ];
@@ -4,6 +4,8 @@ return [
'description' => 'Base submodule for blog', 'description' => 'Base submodule for blog',
'comments' => 'Comments', 'comments' => 'Comments',
'commentsOverview' => 'All comments', 'commentsOverview' => 'All comments',
'allArticles' => 'All articles', 'blog' => 'Blog',
'blog' => 'Blog' 'allArticles' => 'All articles',
'newArticle' => 'Write new article',
'editArticle' => 'Editing article'
]; ];
@@ -23,8 +23,6 @@
<div class="card-footer"> <div class="card-footer">
@lang('article::comments.createdAt', ['date' => \App\Helpers\Template::date($comment->created_at)]) | @lang('article::comments.createdAt', ['date' => \App\Helpers\Template::date($comment->created_at)]) |
@lang('article::comments.commentedArticle'): <a href="{{route('page.content', ['url' => $comment->article->url])}}" target="_blank"> @lang('article::comments.commentedArticle'): <a href="{{route('page.content', ['url' => $comment->article->url])}}" target="_blank">
{{$comment->article->title}} {{$comment->article->title}}
</a> </a>
@@ -35,30 +33,11 @@
data-toggle="tooltip"><i class="fa fa-fw fa-check"></i></a> data-toggle="tooltip"><i class="fa fa-fw fa-check"></i></a>
@endif @endif
<a href="{{route('comments.delete', ['id' => $comment->id])}}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-trash"></i></a> <a href="{{route('comments.delete', ['id' => $comment->id])}}" class="btn btn-sm confirm btn-warning"><i class="fa fa-fw fa-trash"></i></a>
</div> </div>
</div> </div>
</div> </div>
{{--<div class="comment row">--}}
{{--<div class="col-lg-2">--}}
{{--<img class="img-rounded" src="@gravatar($comment->author->email)" alt="">--}}
{{--{{$comment->author->name}}--}}
{{--@date($comment->created_at)--}}
{{--</div>--}}
{{--<div class="col-lg-10">{{$comment->content}}</div>--}}
{{--<div class="col-lg2">--}}
{{--</div>--}}
{{--</div>--}}
@endforeach @endforeach
@else @else
<div class="alert alert-info"> <div class="alert alert-info">
+8
View File
@@ -14383,3 +14383,11 @@ img {
padding-top: 15px; padding-top: 15px;
padding-bottom: 15px; padding-bottom: 15px;
} }
.card .card-header .title {
line-height: 1.5em;
}
.card .card-header .title small {
padding-left: 10px;
}
+1 -1
View File
@@ -1,6 +1,6 @@
@extends('admin.layoutWithNavigation') @extends('admin.layoutWithNavigation')
@section('pageHeading', @trans('admin/contents.edit', ['name' => e($page->title)])) @section('pageHeading', $pageHeading)
@section('content') @section('content')
+1 -1
View File
@@ -1,6 +1,6 @@
@extends('admin.layoutWithNavigation') @extends('admin.layoutWithNavigation')
@section('pageHeading', @trans('admin/contents.new', ['name' => $moduleName])) @section('pageHeading', trans($pageHeading))
@section('content') @section('content')
@@ -1,7 +1,7 @@
<div class="card {{isset($type) ? 'card-'.$type : 'card-default'}}"> <div class="card {{isset($type) ? 'card-'.$type : 'card-default'}}">
<div class="card-header"> <div class="card-header">
<div class="header-block"> <div class="header-block">
<p class="title"> {{$title}} </p> <p class="title"> {!! $title !!} </p>
</div> </div>
</div> </div>
<div class="card-block"> <div class="card-block">
@@ -0,0 +1,18 @@
<?php
namespace Templates\Base\OnePage\Events;
use App\Models\Content;
use Illuminate\Queue\SerializesModels;
class AddPageIntoHomepage {
use SerializesModels;
/**
* @var Content
*/
public $page;
public function __construct(Content $page)
{
$this->page = $page;
}
}
@@ -0,0 +1,18 @@
<?php
namespace Templates\Base\OnePage\Events;
use App\Models\Content;
use Illuminate\Queue\SerializesModels;
class RemovePageFromHomepage {
use SerializesModels;
/**
* @var Content
*/
public $page;
public function __construct(Content $page)
{
$this->page = $page;
}
}
+35 -4
View File
@@ -4,8 +4,10 @@ namespace Templates\Base\OnePage\Handlers;
use App\Handlers\Contracts\TemplateHandler; use App\Handlers\Contracts\TemplateHandler;
use App\Helpers\PageRenderer; use App\Helpers\PageRenderer;
use App\Helpers\Settings; use App\Helpers\Settings;
use App\Models\ActionLogType;
use App\Models\Content; use App\Models\Content;
use App\Models\Module; use App\Models\Module;
use App\Models\Settings as SettingsModel;
use App\Models\User; use App\Models\User;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
@@ -58,13 +60,14 @@ abstract class OnePage implements TemplateHandler
// create real content from pages // create real content from pages
$pagesRaw = $pagesInTemplates = []; $pagesRaw = $pagesInTemplates = [];
foreach ($pages as $page) { foreach ($pages as $page) {
// save pages as models only
$pagesRaw[$page->url] = $page; $pagesRaw[$page->url] = $page;
// save rendered pages
$pagesInTemplates[$page->url] = PageRenderer::render($page) $pagesInTemplates[$page->url] = PageRenderer::render($page)
->render(); ->render();
} }
// dd($pagesRaw);
// return pages into template // return pages into template
return ['pagesHtml' => $pagesInTemplates, 'pagesRaw' => $pagesRaw]; return ['pagesHtml' => $pagesInTemplates, 'pagesRaw' => $pagesRaw];
} }
@@ -74,14 +77,42 @@ abstract class OnePage implements TemplateHandler
/** /**
* Install module * Install module
*
* @return mixed
*/ */
public static function install() 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);
}
} }
/**
* Uninstall template
*
* @param Module $template
*/
public static function uninstall(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();
} }
} }
@@ -4,7 +4,11 @@ namespace Templates\Base\OnePage\Http\Controllers\Admin;
use App\Helpers\Settings; use App\Helpers\Settings;
use App\Http\Controllers\Admin\Controller; use App\Http\Controllers\Admin\Controller;
use App\Models\Content; use App\Models\Content;
use App\Models\Settings as SettingsModel;
use Illuminate\Support\Facades\Event;
use Mcamara\LaravelLocalization\Facades\LaravelLocalization; use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
use Templates\Base\OnePage\Events\AddPageIntoHomepage;
use Templates\Base\OnePage\Events\RemovePageFromHomepage;
use Templates\Base\OnePage\Handlers\OnePage; use Templates\Base\OnePage\Handlers\OnePage;
class SetHomepage extends Controller class SetHomepage extends Controller
@@ -79,19 +83,19 @@ class SetHomepage extends Controller
{ {
$page = Content::findOrFail($id); $page = Content::findOrFail($id);
if ($page->is_template) { if ($page->is_homepage) {
return redirect() return redirect()
->back() ->back()
->with('error', trans('template::admin/setHomepage.cannotSetHomepageAsPartOfHomepage')); ->with('error', trans('template::admin/setHomepage.cannotSetHomepageAsPartOfHomepage'));
} }
// try to get page config // try to get page config
$settingsEntry = \App\Models\Settings::where('key', OnePage::HOMEPAGE_PAGES_SETTINGS_KEY) $settingsEntry = SettingsModel::where('key', OnePage::HOMEPAGE_PAGES_SETTINGS_KEY)
->where('language', LaravelLocalization::getCurrentLocale()) ->where('language', LaravelLocalization::getCurrentLocale())
->first(); ->first();
if (!$settingsEntry) { if (!$settingsEntry) {
$settingsEntry = new \App\Models\Settings(); $settingsEntry = new SettingsModel();
$settingsEntry->language = LaravelLocalization::getCurrentLocale(); $settingsEntry->language = LaravelLocalization::getCurrentLocale();
$settingsEntry->key = OnePage::HOMEPAGE_PAGES_SETTINGS_KEY; $settingsEntry->key = OnePage::HOMEPAGE_PAGES_SETTINGS_KEY;
$usedPagesIds = []; $usedPagesIds = [];
@@ -99,6 +103,7 @@ class SetHomepage extends Controller
$usedPagesIds = (array)json_decode($settingsEntry->value); $usedPagesIds = (array)json_decode($settingsEntry->value);
} }
// add page into list of used pages - if not already there
if (!in_array($id, $usedPagesIds)) { if (!in_array($id, $usedPagesIds)) {
$usedPagesIds[] = $id; $usedPagesIds[] = $id;
} }
@@ -106,6 +111,9 @@ class SetHomepage extends Controller
$settingsEntry->value = json_encode($usedPagesIds); $settingsEntry->value = json_encode($usedPagesIds);
$settingsEntry->save(); $settingsEntry->save();
// inform other application parts about this event
Event::fire(new AddPageIntoHomepage($page));
return redirect() return redirect()
->back() ->back()
->with('success', trans('template::admin/setHomepage.successfullyAdded')); ->with('success', trans('template::admin/setHomepage.successfullyAdded'));
@@ -122,6 +130,8 @@ class SetHomepage extends Controller
{ {
$pages = (array)json_decode(Settings::get(OnePage::HOMEPAGE_PAGES_SETTINGS_KEY, '{}')); $pages = (array)json_decode(Settings::get(OnePage::HOMEPAGE_PAGES_SETTINGS_KEY, '{}'));
$page = Content::findOrFail($id);
if (!in_array($id, $pages)) { if (!in_array($id, $pages)) {
return redirect() return redirect()
->back() ->back()
@@ -135,9 +145,12 @@ class SetHomepage extends Controller
$pages = array_values($pages); $pages = array_values($pages);
// update in database // update in database
\App\Models\Settings::where('key', OnePage::HOMEPAGE_PAGES_SETTINGS_KEY) SettingsModel::where('key', OnePage::HOMEPAGE_PAGES_SETTINGS_KEY)
->where('language', LaravelLocalization::getCurrentLocale()) ->where('language', LaravelLocalization::getCurrentLocale())
->update(['value' => json_encode($pages)]); ->update(['value' => json_encode($pages)]);
// inform other application parts about this event
Event::fire(new RemovePageFromHomepage($page));
return redirect() return redirect()
->back() ->back()
@@ -0,0 +1,23 @@
<?php
namespace Templates\Base\OnePage\Listeners;
use App\Listeners\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';
}
}
@@ -0,0 +1,23 @@
<?php
namespace Templates\Base\OnePage\Listeners;
use App\Listeners\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';
}
}
@@ -3,11 +3,17 @@ namespace Templates\Base\OnePage\Providers;
use App\Events\SetHomepage; use App\Events\SetHomepage;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; 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\HomepageChanged;
use Templates\Base\OnePage\Listeners\LogAddingPage;
use Templates\Base\OnePage\Listeners\LogRemovingPage;
class EventProvider extends ServiceProvider class EventProvider extends ServiceProvider
{ {
protected $listen = [ protected $listen = [
SetHomepage::class => [HomepageChanged::class] SetHomepage::class => [HomepageChanged::class],
AddPageIntoHomepage::class => [LogAddingPage::class],
RemovePageFromHomepage::class => [LogRemovingPage::class],
]; ];
} }
@@ -1,5 +1,6 @@
<?php <?php
return [ return [
"cannotSetHomepageAsPartOfHomepage" => "No toto? Jak mám nastavit domovskou stárnku jako podstránku sama sebe?",
"invalidPageId" => "Nelze odebrat stránku z titulní strany, neboť uvedené ID neexistuje.", "invalidPageId" => "Nelze odebrat stránku z titulní strany, neboť uvedené ID neexistuje.",
"noPagesAvailable" => "Žádné stránky k dispozici.", "noPagesAvailable" => "Žádné stránky k dispozici.",
"noPagesSelected" => "Nebyla vybrána žádná stránka pro zobrazení na titulní straně. Zatím...", "noPagesSelected" => "Nebyla vybrána žádná stránka pro zobrazení na titulní straně. Zatím...",
@@ -11,6 +11,16 @@ return [
'notUsedPages' => 'Not used pages', 'notUsedPages' => 'Not used pages',
'reallyRemovePage' => 'Do you really want to remove this page from homepage?', 'reallyRemovePage' => 'Do you really want to remove this page from homepage?',
'cannotSetHomepageAsPartOfHomepage' => 'Cannot set currently set homepage as one of homepage pages.', 'cannotSetHomepageAsPartOfHomepage' => 'Cannot set currently set homepage as one of homepage pages.',
'noHomepageSet' => 'No homepage set, following settings will not take effect!' '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.'
]
]
]; ];
@@ -11,14 +11,11 @@ Improvement: http://www.html5rocks.com/en/tutorials/dnd/basics/
<div class="row"> <div class="row">
<div class="col-lg-8"> <div class="col-lg-8">
@if(isset($homepage)) @if(isset($homepage))
@include('admin.snippets.card', [ @include('admin.snippets.card', [
'type' => 'primary', 'type' => 'primary',
'title' => $homepage->title, 'title' => $homepage->title.' <small>'.trans($homepage->module_name).'</small>',
'body' => ' 'body' => '<p>'.str_limit(strip_tags($homepage->content), 200).'</p>',
<p><small>'.trans($homepage->module_name).'</small></p>
<p>'.str_limit(strip_tags($homepage->content), 200).'</p>',
'footerClass' => 'text-right', 'footerClass' => 'text-right',
'footer' => '<a href="'.route('content.edit', ['id' => $homepage->id]).'" class="btn btn-secondary btn-sm"><i class="fa fa-fw fa-pencil"></i></a>' 'footer' => '<a href="'.route('content.edit', ['id' => $homepage->id]).'" class="btn btn-secondary btn-sm"><i class="fa fa-fw fa-pencil"></i></a>'
]) ])
@@ -37,10 +34,8 @@ Improvement: http://www.html5rocks.com/en/tutorials/dnd/basics/
@include('admin.snippets.card', [ @include('admin.snippets.card', [
'title' => $allPages[$pageId]->title, 'title' => $allPages[$pageId]->title.' <small>'.trans($allPages[$pageId]->module_name).'</small>',
'body' => ' 'body' => '<p>'.str_limit(strip_tags($allPages[$pageId]->content), 200).'</p>',
<p><small>'.trans($allPages[$pageId]->module_name).'</small></p>
<p>'.str_limit(strip_tags($allPages[$pageId]->content), 200).'</p>',
'footerClass' => 'text-right', 'footerClass' => 'text-right',
'footer' => ' 'footer' => '
<a href="'.route('content.edit', ['id' => $allPages[$pageId]->id]).'" class="btn btn-secondary btn-sm"><i class="fa fa-fw fa-pencil"></i></a> <a href="'.route('content.edit', ['id' => $allPages[$pageId]->id]).'" class="btn btn-secondary btn-sm"><i class="fa fa-fw fa-pencil"></i></a>
@@ -59,21 +54,29 @@ Improvement: http://www.html5rocks.com/en/tutorials/dnd/basics/
<div class="card card-default"> <div class="card card-default">
<div class="card-header"> <div class="card-header">
<div class="header-block"> <div class="header-block">
<p class="title">{{$page->title}}</p> <p class="title">{{$page->title}}
<small>@lang($page->module_name)</small>
</p>
</div> </div>
</div> </div>
<div class="card-block"> <div class="card-block">
<p> {{str_limit(strip_tags($page->content), 100)}}
<small>(@lang($page->module_name))</small>
</p>
<p>{{str_limit(strip_tags($page->content), 100)}}</p>
</div> </div>
<div class="card-footer text-right"> <div class="card-footer text-right">
<a href="{{route('content.edit', ['id' => $page->id])}}" <a href="{{route('content.edit', ['id' => $page->id])}}"
class="btn btn-secondary btn-sm"><i class="btn btn-secondary btn-sm"><i
class="fa fa-fw fa-pencil"></i></a> class="fa fa-fw fa-pencil"></i></a>
@if(!$page->is_homepage)
<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])}}" <a href="{{route('template.homepage.addPage', ['id' => $page->id])}}"
class="btn btn-sm btn-primary"><i class="fa green fa-fw fa-plus"></i></a> 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>
</div> </div>
@empty @empty
+5
View File
@@ -31,8 +31,13 @@ class Handler extends OnePage
{ {
} }
/**
* Install template
*/
public static function install() public static function install()
{ {
parent::install();
try { try {
Artisan::call('install-module', ['name' => 'StaticPages']); Artisan::call('install-module', ['name' => 'StaticPages']);
} catch (\Exception $e) { } catch (\Exception $e) {