cms/app/Http/Controllers/Admin/PostController.php

115 lines
3.7 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Repositories\PostRepository;
use App\Traits\ModelAttributeTranslationsUpdattable;
use App\Traits\PostTypeGettable;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Auth;
class PostController extends Controller
{
use ModelAttributeTranslationsUpdattable;
use PostTypeGettable;
public function index(Request $request, $postType, $pageHeader)
{
$postTypes = config('postTypes.' . $postType);
$postRepo = new PostRepository($postTypes['model']);
$posts = $postRepo->getPostsPager();
return view('admin.menu.posts.list', [
'adminRouteNamePrefix' => config('admin.route_name_prefix'),
'resource' => $postType,
'pageHeader' => $pageHeader,
'posts' => $posts
]);
}
public function edit(Request $request, $postId)
{
$resource = $this->getResource($request);
$modelClass = $this->getModelClass($resource);
$post = $modelClass::find($postId);
$languages = app('SiteState')->languageTranslations;
return view('admin.menu.posts.edit', [
'adminRouteNamePrefix' => config('admin.route_name_prefix'),
'resource' => $resource,
'post' => $post,
'languages' => $languages
]);
}
public function create(Request $request, $postType)
{
$languages = app('SiteState')->languageTranslations;
return view('admin.menu.posts.edit', [
'adminRouteNamePrefix' => config('admin.route_name_prefix'),
'languages' => $languages,
'post' => null,
'resource' => $postType
]);
}
public function store(Request $request)
{
return $this->update($request, null);
}
public function update(Request $request, $postId)
{
$defaultLocale = config('app.locale');
$resource = $this->getResource($request);
$modelClass = $this->getModelClass($resource);
/** @var \App\Post $post */
if($postId) {
$post = $modelClass::find($postId);
} else {
$post = app($modelClass);
$translatableAttributes = $post->getTranslatableAttributes();
$translatableAttributeValues = $request->all($translatableAttributes);
$translatableAttributeValues = collect($translatableAttributeValues)->map(function($translatableAttributeValue) use ($defaultLocale){
return $translatableAttributeValue[$defaultLocale];
});
$post = $modelClass::create(array_merge($translatableAttributeValues->toArray(), [
'user_id' => Auth::id()
]));
}
// Post的可翻譯屬性
$translatableAttributes = $post->getTranslatableAttributes();
// 更新所有可翻譯的屬性
foreach ($translatableAttributes as $translatableAttribute) {
$translations = $request->get($translatableAttribute);
if($translations) {
$this->updateAttributeTranslations($post, $translatableAttribute, $translations);
}
}
$post->fill([
'feature_image_id' => $request->get('feature_image_id')
]);
$post->save();
return redirect(route(config('admin.route_name_prefix') . $resource . '.edit', [$resource => $post->id]));
}
public function show(Request $request)
{
}
public function destroy(Request $request, $postId)
{
$resource = $this->getResource($request);
$modelClass = $this->getModelClass($resource);
$post = $modelClass::find($postId);
$post->delete();
return back();
}
}