svoydom/app/Http/Controllers/Admin/PostController.php
2023-05-17 09:57:20 +03:00

146 lines
4.0 KiB
PHP
Executable File

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Http\Requests\PostStoreRequest;
use App\Models\Localization;
use App\Models\Post;
use App\Models\PostTranslation;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
class PostController extends Controller
{
public function index()
{
$posts = Post::with('translations')->latest()->get();
return view('admin.posts.index', compact('posts'));
}
public function create()
{
$localizations = Cache::get('localizations');
return view('admin.posts.create', compact('localizations'));
}
public function store(PostStoreRequest $request)
{
$data = $request->all();
try{
DB::transaction(function() use ($request) {
if ($request->hasFile('image')) {
$data['image'] = $this->fileUpload($request->file('image'));
}
$localizationId=Localization::first()->id;
$data['slug']=\Str::slug($request->translations[$localizationId]['title']);
$post=Post::create($data);
foreach($request->translations as $key=>$value){
$post->translations()->create([
'localization_id'=>$key,
'title'=>$value['title'],
'description'=>$value['description'],
'body'=>$value['body'],
]);
}
});
}catch(\Exception $e){
return redirect()->back()->with('error', $e->getMessage());
}
return redirect()->route('admin.posts.index')->with('success', 'Новость создан успешно !');
}
public function show(Post $post)
{
$localizations = Cache::get('localizations');
return view('admin.posts.show', compact('post','localizations'));
}
public function edit(Post $post)
{
$localizations = Cache::get('localizations');
return view('admin.posts.edit', compact('localizations', 'post'));
}
public function update(Request $request, Post $post)
{
$request->validate([
'translations'=>'required',
]);
try{
DB::transaction(function() use ($request,$post){
$data = $request->all();
if ($request->hasFile('image')) {
$data['image'] = $this->fileUpload($request->file('image'));
}
$localizationId=Localization::first()->id;
$data['slug']=\Str::slug($request->translations[$localizationId]['title']);
$post->update($data);
foreach($request->translations as $key=>$value){
$post->translations()->updateOrCreate(['id'=>$value['id']],[
'localization_id'=>$key,
'title'=>$value['title'],
'description'=>$value['description'],
'body'=>$value['body'],
]);
}
});
}catch(\Exception $e){
return redirect()->back()->with('error', $e->getMessage());
}
return redirect()->route('admin.posts.index')->with('success', 'Новость обновлен успешно !');
}
public function destroy(Post $post)
{
$post->delete();
return redirect()->route('admin.posts.index')->with('success', 'Новость удален успешно !');
}
public function fileUpload($file)
{
$filename = time().'_'.$file->getClientOriginalName();
$file->move(public_path(Post::FILE_PATH), $filename);
return $filename;
}
public function storeImage(Request $request)
{
if ($request->hasFile('upload')) {
$fileName = time().'_'.$request->file('upload')->getClientOriginalName();
$request->file('upload')->move(public_path(Post::FILE_PATH), $fileName);
$CKEditorFuncNum = $request->input('CKEditorFuncNum');
$url = asset(Post::FILE_PATH.$fileName);
$msg = 'Image uploaded successfully';
$response = "<script>window.parent.CKEDITOR.tools.callFunction($CKEditorFuncNum, '$url', '$msg')</script>";
@header('Content-type: text/html; charset=utf-8');
echo $response;
}
}
}