Files
core/app/CMS/Interactions/Admin/Content/EditContent.php
T

91 lines
3.2 KiB
PHP

<?php
namespace App\Cms\Interactions\Admin\Content;
use App\CMS\Contracts\Interaction;
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\Event;
use Illuminate\Support\Str;
class EditContent implements Interaction
{
public function handle(Request $request, $parameters)
{
$page = $parameters[0];
// upload file - if provided
// todo use interaction
$file = $page->uploadTitlePhoto($request);
// let template to modify request and content page
call_user_func_array([CurrentTemplate::handler(), 'beforeSave'], [&$page, $request]);
$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;
if (!$file) {
$request->titlePhotoFilename = empty($request->existingTitlePhoto) ? null : $request->existingTitlePhoto;
} else {
$request->titlePhotoFilename = $file['filename'];
}
// 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);
$changedColumns += call_user_func_array([$page->module_handler, 'edit'], [&$page, $request, $revision]);
// move to interaction
$changedColumns += $page->uploadRelatedFiles($request, $revision);
if ($changedColumns > 0) {
Event::fire(new EditContentEvent($page, $revision));
}
return [$page, $revision, $changedColumns];
}
public function getValidationRules($parameters)
{
$id = $parameters[0]->id;
// get all available statuses
$statuses = ContentStatuses::getSimple();
$statuses = implode(',', $statuses);
return [
'title' => 'required',
'url' => 'required|unique:contents,url,' . $id,
'publishedFrom' => 'date',
'publishedTo' => 'date',
'title_photo' => 'exists:files,id',
'status' => 'required|in:' . $statuses,
'parentPage' => 'exists:contents,id'
];
}
}