%PDF- %PDF-
Direktori : /var/www/html/diaspora/api_internal/app/Http/Controllers/Api/v1/ |
Current File : /var/www/html/diaspora/api_internal/app/Http/Controllers/Api/v1/PostsController.php |
<?php namespace App\Http\Controllers\Api\v1; use App\Http\Controllers\Api\ApiController; use App\Http\Requests\Api\v1\Posts\CreatePostRequest; use App\Models\Category; use App\Models\Country; use App\Models\Post; use App\Transformers\MediaTransformer; use App\Transformers\PostTransformer; use Flow\Config; use Flow\File; use Flow\Request as FlowRequest; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Facades\DB; use Spatie\MediaLibrary\Models\Media; class PostsController extends ApiController { /** * User $user. */ protected $user; /** * PostsController constructor. */ public function __construct() { $this->user = auth() ->guard('api') ->user(); } /** * @param Request $request * @return PostsController */ public function index(Request $request) { /** @var LengthAwarePaginator $result */ $result = Post::query(); if ($title = $request->get('title')) { $result = $result->whereHas('translations', function ($q) use ($title) { $q->where('title', 'like', "%$title%"); $q->where('locale', app()->getLocale()); }); } if ($category = $request->get('category')) { $result = $result->where('category_id', $category); } if ($author = $request->get('author')) { $result = $result->where('author_id', $author); } $result = $result->orderBy('created_at', 'desc') ->paginate(); return $this->withPaginated($result, new PostTransformer()); } /** * @param $id * @return PostsController */ public function show($id) { $post = Post::query() ->findOrFail($id); return $this->item($post, new PostTransformer()); } public function store(CreatePostRequest $request) { DB::beginTransaction(); try { /** @var Post $post */ $post = Post::query() ->make($request->only(['title', 'short_desc', 'content', 'video_type', 'video_url'])); $post->author() ->associate($this->user); $category = Category::query() ->findOrFail(head($request->get('categoriesId'))); $post->category() ->associate($category); $country = Country::query() ->findOrFail($request->get('country_id')); $post->country() ->associate($country); $post->save(); $post->categories()->sync($request->get('categoriesId')); $post->uploadImage($request->get('featured_image')); activity() ->causedBy($this->user) ->performedOn($post) ->log('created'); DB::commit(); return $this->item($post, new PostTransformer()); } catch (\Exception $e) { DB::rollBack(); return $this->wrongArguments([ 'message' => $e->getMessage(), ]); } } public function update(CreatePostRequest $request, $id) { /** @var Post $post */ $post = Post::query() ->findOrFail($id); $post->update($request->only(['title', 'short_desc', 'content', 'video_type', 'video_url'])); // $category = Category::query() // ->findOrFail($request->get('category_id')); // $post->category() // ->associate($category); $post->categories()->sync($request->get('categoriesId')); $country = Country::query() ->findOrFail($request->get('country_id')); $post->country() ->associate($country); $post->save(); activity() ->causedBy($this->user) ->performedOn($post) ->log('updated'); return $this->item($post, new PostTransformer()); } /** * @param $id * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Response */ public function uploadImage($id) { /** @var Post $post */ $post = Post::query() ->findOrFail($id); $fileName = md5(time());; $request = new FlowRequest(); $destination = storage_path("app/flow/uploads/$fileName.png"); $config = new Config([ 'tempDir' => storage_path('app/flow/chunks'), ]); $file = new File($config, $request); if (request()->isMethod('GET')) { if (!$file->checkChunk()) { return response()->make('', 204); } } else { if ($file->validateChunk()) { $file->saveChunk(); } else { return $this->wrongArguments('test'); } } try { if ($file->validateFile() && $file->save($destination)) { $media = $post->addMedia($destination) ->usingName($fileName) ->usingFileName("$fileName.png") ->toMediaCollection(Post::AVATAR); return $this->item($media, new MediaTransformer()); } return response(['message' => 'ok'], 200); } catch (\Exception $e) { return $this->wrongArguments($e->getMessage()); } } public function uploadFeaturedImage(Request $request, Post $post) { DB::beginTransaction(); try { $post->uploadImage($request->get('featured_image')); activity() ->causedBy($this->user) ->performedOn($post) ->log('updated-featured-image'); DB::commit(); return $this->item($post, new PostTransformer()); } catch (\Exception $e) { DB::rollBack(); return $this->wrongArguments([ 'message' => $e->getMessage(), ]); } } public function deleteImage(Post $post, Media $media) { $post->media() ->findOrFail($media->id); try { $media->delete(); return response([], 204); } catch (\Exception $e) { return $this->wrongArguments($e->getMessage()); } } public function publish(Post $post) { $post->publish(); activity() ->causedBy($this->user) ->performedOn($post) ->log('published'); return $this->item($post->fresh(), new PostTransformer); } public function featureMedia(Post $post, Media $media) { $post->featureMedia($media); return $this->item($post->fresh(), new PostTransformer); } public function archive(Post $post) { $post->archive(); activity() ->causedBy($this->user) ->performedOn($post) ->log('archived'); return $this->item($post->fresh(), new PostTransformer); } public function unArchive(Post $post) { $post->unArchive(); activity() ->causedBy($this->user) ->performedOn($post) ->log('unarchived'); return $this->item($post->fresh(), new PostTransformer); } public function getVideoTypes() { return response()->json([ ['code' => Post::VIDEO_YOUTUBE, 'description' => trans("videoTypes." . Post::VIDEO_YOUTUBE)], ]); } }