REFACTORING #1880 @4h30m: another ugly refactoring commit

This commit is contained in:
Michal Kváček
2016-10-25 16:50:04 +02:00
parent 28f67ffe3c
commit cc999dd24e
71 changed files with 827 additions and 608 deletions
@@ -0,0 +1,24 @@
<?php
namespace App\CMS\Interactions\Admin\Content;
use App\CMS\Contracts\Interaction;
use App\Http\Requests\Request;
class ChangeStatus implements Interaction {
public function handle(Request $data, $parameters)
{
$statuses = ContentStatuses::getWithTranslations();
// check if given status is valid
if (!isset($statuses[$status])) {
return redirect()
->route('content.overview')
->with('error', trans('admin/contents.invalidStatus'));
}
}
public function getValidationRules($parameters)
{
// TODO: Implement getValidationRules() method.
}
}
@@ -7,6 +7,8 @@ use App\CMS\Enumerations\ContentStatuses;
use App\CMS\Helpers\CurrentTemplate;
use App\Events\EditContent as EditContentEvent;
use App\Http\Requests\Request;
use App\Models\Content\Content;
use App\Models\FileManager\File;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Str;
@@ -17,74 +19,59 @@ class EditContent implements Interaction
* @var Module
*/
protected $module;
/**
* @var File
*/
protected $file;
public function __construct()
{
$this->module = App::make(Module::class);
$this->file = App::make(File::class);
}
public function handle(Request $request, $parameters)
/**
* Edit page
*
* @param array $data
* @param array $parameters
*
* @return mixed|void
*/
public function handle($data, $parameters)
{
$page = $parameters[0];
// upload file - if provided
// todo use interaction
$file = $page->uploadTitlePhoto($request);
/**
* @var $page Content
*/
list($page, $titlePhoto, $relatedFiles) = $parameters;
// let template to modify request and content page
call_user_func_array([CurrentTemplate::handler(), 'beforeSave'], [&$page, $request]);
CurrentTemplate::beforeSave($page, $data);
$request->url = Str::slug($request->url);
$request->parentPage = $request->parentPage ? $request->parentPage : null;
$request->publishedFrom = empty($request->publishedFrom) ? null : $request->publishedFrom;
$request->publishedTo = empty($request->publishedTo) ? null : $request->publishedTo;
// upload file - if provided
$data['titlePhoto'] = isset($data['existingTitlePhoto']) ? $data['existingTitlePhoto'] : null;
if (!$file) {
$request->titlePhotoFilename = empty($request->existingTitlePhoto) ? null : $request->existingTitlePhoto;
} else {
$request->titlePhotoFilename = $file['filename'];
if (!is_null($titlePhoto)) {
$file = $this->file->upload($titlePhoto);
$data['titlePhoto'] = $file ? $file['filename'] : null;
}
// array of fields in database and fields from request
$fields = [
'title' => 'title',
'url' => 'url',
'template' => 'template',
'published_from' => 'publishedFrom',
'published_to' => 'publishedTo',
'meta_keywords' => 'metaKeywords',
'meta_description' => 'metaDescription',
'content' => 'pageContent',
'parent_id' => 'parentPage',
'status' => 'status',
'title_photo' => 'titlePhotoFilename',
'category_id' => 'category'
];
// save new values with history
// todo move this method out of the controller!
$data = \App\Http\Controllers\Admin\Contents\EditContent::getFields($request, array_values($fields));
// todo use Model Observer and model::original attributes
list($revision, $changedColumns) = $page->updateWithHistory($fields, $data);
$module = $this->module->getByHandler($page->module_handler);
$changedColumns += $this->module->call($module, 'edit', [&$page, $request, $revision]);
$page->update($data);
$this->module->callOnString($page->moduleHandler, 'edit', [$page, $data]);
// move to interaction
$changedColumns += $page->uploadRelatedFiles($request, $revision);
if ($changedColumns > 0) {
Event::fire(new EditContentEvent($page, $revision));
}
return [$page, $revision, $changedColumns];
$keepAssigned = isset($data->keepAssigned) ? $data->keepAssigned : [];
$page->uploadRelatedFiles($relatedFiles, $keepAssigned);
}
public function getValidationRules($parameters)
/**
* Validate this interaction
*
* @param array $parameters
*
* @return array
*/
public function getValidationRules($parameters = [])
{
$id = $parameters[0]->id;
@@ -97,7 +84,7 @@ class EditContent implements Interaction
'url' => 'required|unique:contents,url,' . $id,
'publishedFrom' => 'date',
'publishedTo' => 'date',
'title_photo' => 'exists:files,id',
'titlePhoto' => 'exists:files,id',
'status' => 'required|in:' . $statuses,
'parentPage' => 'exists:contents,id'
];
@@ -2,10 +2,13 @@
namespace App\Cms\Interactions\Admin\Content;
use App\CMS\Contracts\Interaction;
use App\CMS\Contracts\Repositories\Content as ContentRepository;
use App\CMS\Contracts\Repositories\Module;
use App\CMS\Helpers\CurrentTemplate;
use App\Events\CreateNewContent;
use App\Http\Requests\Request;
use App\Models\Content\Content;
use App\Models\FileManager\File;
use Carbon\Carbon;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Str;
@@ -13,73 +16,70 @@ use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
class NewContent implements Interaction
{
/**
* @var ContentRepository
*/
protected $content;
/**
* @var File
*/
protected $file;
/**
* @var Module
*/
protected $module;
public function __construct()
{
$this->content = App::make(\App\CMS\Contracts\Repositories\Content::class);
$this->content = App::make(ContentRepository::class);
$this->module = App::make(Module::class);
$this->file = App::make(File::class);
}
/**
* @param Request $request
* Create new content page
*
* @param array $data
* @param $parameters
*
* @return Content
*/
public function handle(Request $request, $parameters)
public function handle($data, $parameters)
{
list($moduleHandler) = $parameters;
// create new page
$page = new Content();
$page->template = $request->template;
// setup basic info
$page->user_id = \Auth::user()->id;
$page->language = LaravelLocalization::getCurrentLocale();
$page->title = $request->title;
$page->url = Str::slug($request->url);
$page->published_from = empty($request->publishedFrom) ? null : $request->publishedFrom;
$page->published_to = empty($request->publishedTo) ? null : $request->publishedTo;
$page->meta_keywords = $request->metaKeywords;
$page->meta_description = $request->metaDescription;
$page->content = $request->pageContent;
$page->status = $request->status;
$page->module_handler = $moduleHandler;
$page->category_id = (int)$request->category > 0 ? $request->category : null;
$page->parent_id = $request->parentPage ? $request->parentPage : null;
list($moduleHandler, $titlePhoto, $relatedFiles) = $parameters;
// upload file - if provided
$file = $page->uploadTitlePhoto($request);
$file = !is_null($titlePhoto) ? $this->file->upload($titlePhoto) : null;
$page->title_photo = $file ? $file['filename'] : null;
$data['userId'] = \Auth::user()->id;
$data['language'] = LaravelLocalization::getCurrentLocale();
$data['titlePhoto'] = $file ? $file['filename'] : null;
$data['moduleHandler'] = $moduleHandler;
$page = Content::create($data);
// save module-specific stuff
call_user_func_array([$request->handler, 'createNew'], [&$page, $request]);
$this->module->callOnString($moduleHandler, 'createNew', [&$page, $data]);
// let template to modify request and content page
call_user_func_array([CurrentTemplate::handler(), 'beforeSave'], [&$page, $request]);
// let template to modify data and content page
CurrentTemplate::beforeSave($page, $data);
// save content of page before (possible) uploading related files
$page->save();
// upload files assigned to content page
$page->uploadRelatedFiles($request);
Event::fire(new CreateNewContent($this));
$page->uploadRelatedFiles($relatedFiles);
return $page;
}
public function getValidationRules($parameters)
public function getValidationRules($parameters = [])
{
return [
'titlePhoto' => 'image',
'title' => 'required',
'url' => 'required|unique:contents,url',
'status' => 'required|in:draft,protected,public',
'title_photo' => 'exists:files,id',
'parentPage' => 'exists:contents,id',
'publishedFrom' => 'date',
'publishedTo' => 'date',