115 lines
3.7 KiB
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();
|
|
}
|
|
}
|