REFACTORING: another ugly commit full of refactored code

This commit is contained in:
Michal Kváček
2016-10-19 00:28:44 +02:00
parent 4f6a006ad9
commit 28f67ffe3c
34 changed files with 101 additions and 258 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
<?php
namespace App\CMS\Handlers\Contracts;
namespace App\CMS\Contracts\Content;
use App\Models\Content\Content;
+10 -3
View File
@@ -1,11 +1,18 @@
<?php
namespace App\CMS\Contracts\Repositories;
use App\Models\Content\Content as ContentModel;
use App\Models\Module as ModuleModel;
interface Module extends BaseRepository {
public function getCreateContentTitle(\App\Models\Module $module);
public function getCreateContentTitle(ModuleModel $module);
public function getUpdateContentTitle(\App\Models\Module $module);
public function getUpdateContentTitle(ModuleModel $module, ContentModel $content = null);
public function getOverviewTitle(\App\Models\Module $module);
public function getOverviewTitle(ModuleModel $module);
public function getByHandler($handler);
public function call(ModuleModel $module, $method, ...$parameters);
}
@@ -2,15 +2,26 @@
namespace App\Cms\Interactions\Admin\Content;
use App\CMS\Contracts\Interaction;
use App\CMS\Contracts\Repositories\Module;
use App\CMS\Enumerations\ContentStatuses;
use App\CMS\Helpers\CurrentTemplate;
use App\Events\EditContent as EditContentEvent;
use App\Http\Requests\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Str;
class EditContent implements Interaction
{
/**
* @var Module
*/
protected $module;
public function __construct()
{
$this->module = App::make(Module::class);
}
public function handle(Request $request, $parameters)
{
$page = $parameters[0];
@@ -57,7 +68,10 @@ class EditContent implements Interaction
list($revision, $changedColumns) = $page->updateWithHistory($fields, $data);
$changedColumns += call_user_func_array([$page->module_handler, 'edit'], [&$page, $request, $revision]);
$module = $this->module->getByHandler($page->module_handler);
$changedColumns += $this->module->call($module, 'edit', [&$page, $request, $revision]);
// move to interaction
+1
View File
@@ -39,6 +39,7 @@ class Content extends Repository implements IContent
->orWhereNull('published_to');
})
->where('language', LaravelLocalization::getCurrentLocale())
->whereNull('contents.deleted_at')
->where('modules.enabled', true);
}
+36 -28
View File
@@ -2,64 +2,72 @@
namespace App\CMS\Repositories;
use App\CMS\Contracts\Repositories\Module as IModule;
use App\Models\Content\Content;
use App\Models\Module as ModuleModel;
class Module extends Repository implements IModule
{
/**
* @var ModuleModel
*/
private $module;
public function __construct(ModuleModel $module)
{
$this->module = $module;
$this->model = $module;
}
public function getOne($id = null)
{
if (!is_null($id)) {
if (is_numeric($id)) {
return ModuleModel::findOrFail($id);
} else {
return ModuleModel::where('alias', $id)
->firstOrFail();
}
} else {
if (is_null($id)) {
return new ModuleModel();
}
if (is_numeric($id)) {
return ModuleModel::findOrFail($id);
} else {
return ModuleModel::where('alias', $id)
->firstOrFail();
}
}
public function getCreateContentTitle(ModuleModel $module)
{
$pageHeading = trans('admin/contents.new', ['name' => trans($module->name)]);
if (is_callable([$module->handler, 'getCreateNewTitle'])) {
$pageHeading = call_user_func([$module->handler, 'getCreateNewTitle']);
}
$moduleHeading = $this->call($module, 'getCreateNewTitle');
return $pageHeading;
return is_null($moduleHeading) ? $pageHeading : $moduleHeading;
}
public function getUpdateContentTitle(ModuleModel $module)
public function getUpdateContentTitle(ModuleModel $module, Content $content = null)
{
// TODO: Implement getUpdateContentTitle() method.
$pageHeading = trans('admin/contents.new', ['name' => trans($module->name)]);
$moduleHeading = $this->call($module, 'getEditTitle', $content);
return is_null($moduleHeading) ? $pageHeading : $moduleHeading;
}
public function getOverviewTitle(ModuleModel $module)
{
$pageHeading = 'admin/contents.overview';
$moduleHeading = $this->call($module, 'getOverviewTitle');
// does user want to filter results using module?
if (!is_null($module) && is_callable([$module->handler, 'getOverviewTitle'])) {
$pageHeading = call_user_func([$module->handler, 'getOverviewTitle']);
}
return $pageHeading;
return is_null($moduleHeading) ? $pageHeading : $moduleHeading;
}
public function all()
{
// TODO: Implement all() method.
return ModuleModel::where('enabled', true)
->get();
}
public function getByHandler($handler)
{
return ModuleModel::where('handler', $handler)
->firstOrFail();
}
public function call(ModuleModel $module, $method, ...$parameters)
{
if (!is_null($module) && is_callable([$module->handler, $method])) {
return call_user_func_array([$module->handler, $method], $parameters);
}
return null;
}
}
@@ -1,6 +1,9 @@
<?php
namespace App\Http\Controllers\Admin\Contents;
use App\CMS\Contracts\Repositories\Content as IContent;
use App\CMS\Contracts\Repositories\Module as IModuleRepository;
use App\CMS\Contracts\Repositories\Template as ITemplate;
use App\CMS\Enumerations\ContentStatuses;
use App\Cms\Handlers\Interactions\Interaction;
use App\CMS\Helpers\CurrentTemplate;
@@ -12,16 +15,9 @@ use App\Http\Requests\Request;
use App\Models\Content\Content;
use App\Models\Content\ContentHistory;
use App\Models\FileManager\File;
use App\Models\Module;
use App\Models\Templates\Template;
use Illuminate\Support\Facades\Event;
use Modules\Categories\Entities\Category;
use Pingpong\Modules\Facades\Module as ModuleInstance;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use App\CMS\Contracts\Repositories\Content as IContent;
use App\CMS\Contracts\Repositories\Module as IModuleRepository;
use App\CMS\Contracts\Repositories\Template as ITemplate;
use Modules\Categories\Contracts\Repositories\Category as ICategory;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class EditContent extends Controller
{
@@ -85,15 +81,12 @@ class EditContent extends Controller
$page = $this->content->getOne($url);
// get module ID
$module = Module::where('handler', $page->module_handler)
->firstOrFail();
$pageHeading = $this->module->getUpdateContentTitle($module);
$module = $this->module->getByHandler($page->module_handler);
$pageHeading = $this->module->getUpdateContentTitle($module, $page);
$templates = $this->template->getForModule($module);
$categories = $this->category->getForModule($module);
$history = $this->history->getStructuredHistoryOf($page);
// modify data for edit form according to installed template
call_user_func_array([CurrentTemplate::handler(), 'beforePopulatingEditForm'], [&$page]);
@@ -106,8 +99,8 @@ class EditContent extends Controller
'categories' => $categories,
'rootPages' => $this->content->getOverview(),
'templates' => $templates,
'formSectionNames' => call_user_func([$page->module_handler, 'getExtendedFormSections']),
'formSections' => call_user_func([$page->module_handler, 'getExtendedFormInputsEdit']),
'formSectionNames' => $this->module->call($module, 'getExtendedFormSections'),
'formSections' => $this->module->call($module, 'getExtendedFormInputsEdit'),
'historySize' => count($history['changesets'])
]);
}
@@ -126,7 +119,7 @@ class EditContent extends Controller
/**
* @var $page Content
*/
$page = Content::findOrFail($id);
$page = $this->content->getOne($id);
} catch (NotFoundHttpException $e) {
// log attempt of invalid edit
@@ -43,7 +43,6 @@ class History extends Controller
return view('admin/history.diff', [
'change' => $change,
'columnName' => 'Page content',
'diff' => $diff
]);
}
+4 -4
View File
@@ -2,9 +2,10 @@
namespace App\Http\Controllers\Visitor;
use App\Models\Content\Content as ContentModel;
use App\CMS\Contracts\Repositories\Content;
use App\CMS\Helpers\PageRenderer;
use App\Http\Controllers\Controller;
use App\Models\Content\Content;
use Illuminate\Support\Facades\Auth;
class ContentPage extends Controller
@@ -43,11 +44,10 @@ class ContentPage extends Controller
* @return mixed
* @throws \Exception
*/
protected function renderPage(Content $page)
protected function renderPage(ContentModel $page)
{
// test if loaded page is visible or not
if ($page->status == Content::STATUS_PROTECTED && !Auth::user()) {
// throw new \Exception('Cannot access protected resources');
if ($page->isProtected() && !Auth::user()) {
abort(404);
}
+1 -7
View File
@@ -2,8 +2,6 @@
namespace App\Http\Controllers\Visitor;
use App\Http\Requests;
class Homepage extends ContentPage
{
public function getIndex()
@@ -17,10 +15,6 @@ class Homepage extends ContentPage
}
// render page
// try {
return $this->renderPage($page);
// } catch (\Exception $e) {
// return view('errors.homepageNotAvailable', ['exception' => $e, 'reason' => 'exception']);
// }
return $this->renderPage($page);
}
}
+2 -3
View File
@@ -2,8 +2,8 @@
namespace Modules\Blog\Article\Handlers;
use App\CMS\Contracts\Content\AdvancedContentModifier;
use App\CMS\Contracts\Content\ContentTitles;
use App\CMS\Contracts\Modules\InstallableModule;
use App\CMS\Handlers\Contracts\ContentTitles;
use App\CMS\Handlers\Handler;
use App\Http\Controllers\Admin\Contents\EditContent;
use App\Http\Controllers\Controller;
@@ -58,8 +58,7 @@ class Article extends Handler implements ContentTitles, AdvancedContentModifier,
* @param Content $content
* @param Request $request
*
* @return mixed
* @internal param Widget $widget
* @return mixed|void
*/
public static function createNew(Content &$content, Request $request)
{
@@ -2,7 +2,7 @@
namespace Modules\Blog\Article\Listeners;
use App\Listeners\Logger;
use App\Listeners\Loggers\Logger;
use Modules\Blog\Article\Events\ApprovedComment;
class LogCommentApproval extends Logger
@@ -2,8 +2,7 @@
namespace Modules\Blog\Article\Listeners;
use App\Listeners\Logger;
use Modules\Blog\Article\Events\ApprovedComment;
use App\Listeners\Loggers\Logger;
use Modules\Blog\Article\Events\DeletedComment;
class LogDeletedComment extends Logger
@@ -2,7 +2,7 @@
namespace Modules\Blog\Article\Listeners;
use App\Listeners\Logger;
use App\Listeners\Loggers\Logger;
use Modules\Blog\Article\Events\CreatedComment;
class LogNewComment extends Logger
@@ -15,8 +15,9 @@ class LogNewComment extends Logger
public function handle(CreatedComment $event)
{
// log only logged-in users
if (!$event->comment->user_id)
if (!$event->comment->user_id) {
return;
}
$parameters = [
'author' => $event->comment->name,
+1 -1
View File
@@ -2,8 +2,8 @@
namespace Modules\ContactForm\Handlers;
use App\CMS\Contracts\Content\AdvancedContentModifier;
use App\CMS\Contracts\Content\ContentTitles;
use App\CMS\Enumerations\ModulesHandlerToId;
use App\CMS\Handlers\Contracts\ContentTitles;
use App\CMS\Handlers\Handler;
use App\Http\Controllers\Admin\Contents\EditContent;
use App\Http\Requests\Request;
@@ -1,113 +0,0 @@
<?php namespace Modules\Gallery\Http\Controllers\Admin;
use App\Models\Content\Content;
use App\Models\Widgets\Widget;
use App\Models\Widgets\WidgetType;
use App\CMS\Widgets\OrbitSlider\OrbitSlider;
use Pingpong\Modules\Routing\Controller;
class CreateOrbitSlider extends Controller
{
/**
* @var Widget
*/
private $widget;
/**
* CreateOrbitSlider constructor.
*
* @param Widget $widget
*/
public function __construct(Widget $widget)
{
$this->widget = $widget;
}
/**
* Load gallery or redirect user back to content edit form
*
* @param $id
*
* @return mixed
*/
protected function getGallery($id)
{
$content = Content::where('module_handler', config('gallery.handler'))
->findOrFail($id);
$content->module_settings = json_decode($content->module_settings);
// check if gallery has assigned some directory id
if (!isset($content->module_settings->directoryId)) {
return redirect()
->route('content.edit', ['id' => $id])
->with('error', trans('gallery::admin/content.invalidGallery'));
}
return $content;
}
/**
* Load widget type for Orbit Slider. In case it does not exist, redirect user back to content edit form.
*
* @param $id
*
* @return mixed
*/
protected function getOrbitSliderWidgetType($id)
{
// try to load widget type for slider
$widgetType = WidgetType::where('handler', OrbitSlider::class)
->first();
// check if widget type exists
if (!$widgetType) {
return redirect()
->route('content.edit', ['id' => $id])
->with('error', trans('gallery::admin/content.orbitSliderMissing'));
}
return $widgetType;
}
/**
* Method for creating slider from photogallery
*
* @param $id
*
* @return mixed
*/
public function createNew($id)
{
// try to find gallery with specified ID
$content = $this->getGallery($id);
// load info about orbit slider widget
$widgetType = $this->getOrbitSliderWidgetType($id);
// create slider basic config
$sliderSettings = (object)[
'name' => $content->title,
'description' => $content->meta_description,
'directoryId' => $content->module_settings->directoryId,
'useExistingDirectory' => true,
];
// try to create the slider
try {
$slider = $this->widget->createNew($widgetType, $sliderSettings);
} catch (\Exception $e) {
return redirect()
->route('content.edit', ['id' => $id])
->with('error', trans('gallery::admin/content.sliderFailed', ['message' => $e->getMessage()]));
}
// update gallery info
$content->module_settings->slider = $slider->id;
$content->module_settings = json_encode($content->module_settings);
$content->save();
return redirect()
->route('content.edit', ['id' => $id])
->with('success', trans('gallery::admin/content.sliderCreated'));
}
}
-11
View File
@@ -1,11 +0,0 @@
<?php
Route::group([
'middleware' => ['admin'],
'namespace' => 'Modules\Gallery\Http\Controllers\Admin',
'prefix' => LaravelLocalization::setLocale() . 'admin/gallery'
], function () {
// method for creating slider from photogallery
Route::get('makeSlider/{id}', 'CreateOrbitSlider@createNew')
->name('gallery.makeSlider');
});
-13
View File
@@ -1,15 +1,2 @@
<?php
/*
|--------------------------------------------------------------------------
| Register Namespaces And Routes
|--------------------------------------------------------------------------
|
| When a module starting, this file will executed automatically. This helps
| to register some namespaces like translator or view. Also this file
| will load the routes file for each module. You may also modify
| this file as you want.
|
*/
require __DIR__ . '/Http/routes.php';
@@ -1,20 +0,0 @@
<?php namespace Modules\Staticpages\Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class StaticPagesDatabaseSeeder extends Seeder {
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Model::unguard();
// $this->call("OthersTableSeeder");
}
}
+1 -2
View File
@@ -1,8 +1,7 @@
<?php
namespace Modules\StaticPages\Handlers;
use App\CMS\Enumerations\ModulesHandlerToId;
use App\CMS\Handlers\Contracts\ContentTitles;
use App\CMS\Contracts\Content\ContentTitles;
use App\CMS\Handlers\Handler;
use App\Models\Content\Content;
use App\Models\User;
-1
View File
@@ -1 +0,0 @@
<?php
-14
View File
@@ -1,15 +1 @@
<?php
/*
|--------------------------------------------------------------------------
| Register Namespaces And Routes
|--------------------------------------------------------------------------
|
| When a module starting, this file will executed automatically. This helps
| to register some namespaces like translator or view. Also this file
| will load the routes file for each module. You may also modify
| this file as you want.
|
*/
require __DIR__ . '/Http/routes.php';
@@ -15,7 +15,7 @@
<div class="alert alert-warning">
<strong>@lang('admin/contents.noHomepage')</strong>
</div>
@elseif(!$homepage->isPublic())
@elseif($homepage->isProtected())
<div class="alert alert-info">
<strong>@lang('admin/contents.homepageProtected')</strong>
</div>
+6 -4
View File
@@ -3,6 +3,7 @@ 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;
@@ -60,17 +61,18 @@ abstract class OnePage implements TemplateHandler, InstallableModule
$pages = Content::whereIn('id', $pageIds);
if (Auth::user()) {
$pages = $pages->where('status', '!=', Content::STATUS_DRAFT);
$pages = $pages->where('status', '!=', IContent::STATUS_DRAFT);
} else {
$pages = $pages->where('status', Content::STATUS_PUBLIC);
$pages = $pages->where('status', IContent::STATUS_PUBLIC);
}
$homepagePages = $pages->get()
->getDictionary();
->getDictionary();
foreach ($pageIds as $pageId) {
if (!isset($homepagePages[$pageId]))
if (!isset($homepagePages[$pageId])) {
continue;
}
self::$homepagePages[] = $homepagePages[$pageId];
}
@@ -3,7 +3,7 @@ namespace Templates\Base\OnePage\Http\Controllers\Admin;
use App\CMS\Helpers\Settings;
use App\Http\Controllers\Admin\Controller;
use App\Models\Content\Content;
use App\CMS\Contracts\Repositories\Content as IContent;
use App\Models\Settings as SettingsModel;
use Illuminate\Support\Facades\Event;
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
@@ -14,7 +14,7 @@ use Templates\Base\OnePage\Handlers\OnePage;
class SetHomepage extends Controller
{
/**
* @var Content
* @var IContent
*/
private $content;
@@ -23,7 +23,7 @@ class SetHomepage extends Controller
*
* @param Content $content
*/
public function __construct(Content $content)
public function __construct(IContent $content)
{
parent::__construct();
@@ -41,8 +41,7 @@ class SetHomepage extends Controller
$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();
$allPages = $this->content->getOverview();
// separate pages to used and not used - with help of $usedPAgesIds array defined above
$pages = $used = $notUsed = [];
@@ -81,7 +80,7 @@ class SetHomepage extends Controller
*/
public function addPage($id)
{
$page = Content::findOrFail($id);
$page = $this->content->getOne($id);
if ($page->is_homepage) {
return redirect()
@@ -130,7 +129,7 @@ class SetHomepage extends Controller
{
$pages = (array)Settings::getJson(OnePage::HOMEPAGE_PAGES_SETTINGS_KEY);
$page = Content::findOrFail($id);
$page = $this->content->getOne($id);
if (!in_array($id, $pages)) {
return redirect()
@@ -17,7 +17,7 @@ Improvement: http://www.html5rocks.com/en/tutorials/dnd/basics/
'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', ['id' => $homepage->id]).'" class="btn btn-secondary btn-sm"><i class="fa fa-fw fa-pencil"></i></a>'
'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>
@@ -38,7 +38,7 @@ Improvement: http://www.html5rocks.com/en/tutorials/dnd/basics/
'body' => '<p>'.str_limit(strip_tags($allPages[$pageId]->content), 200).'</p>',
'footerClass' => 'text-right',
'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', ['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>
'
])