%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/EventsController.php

<?php

namespace App\Http\Controllers\Api\v1;

use App\Http\Controllers\Api\ApiController;
use App\Http\Requests\Api\v1\Events\CreateEventRequest;
use App\Models\Event;
use App\Transformers\EventTransformer;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Facades\DB;

class EventsController extends ApiController
{
    /**
     * User $user.
     */
    protected $user;

    /**
     * PostsController constructor.
     */
    public function __construct()
    {
        $this->user = auth()
            ->guard('api')
            ->user();
    }

    /**
     * @param Request $request
     * @return EventsController
     */
    public function index(Request $request)
    {
        /** @var LengthAwarePaginator $result */
        $result = $this->filterEvents($request)
                       ->paginate($request->get('perPage'));
        return $this->withPaginated($result, new EventTransformer());
    }

    private function filterEvents(Request $request)
    {
        $result = Event::query();

        if ($title = $request->get('title')) {
            $result = $result->whereHas('translations', function ($q) use ($title) {
                $q->where('title', 'like', "$title%");
                $q->where('locale', app()->getLocale());
            });
        }

        return $result;
    }

    /**
     * @param $id
     * @return EventsController
     */
    public function show($id)
    {
        $event = Event::query()
                      ->findOrFail($id);
        return $this->item($event, new EventTransformer());
    }

    /**
     * @param CreateEventRequest $request
     * @return \Illuminate\Http\JsonResponse
     * @throws \Spatie\MediaLibrary\Exceptions\FileCannotBeAdded
     * @throws \Spatie\MediaLibrary\Exceptions\FileCannotBeAdded\InvalidBase64Data
     */
    public function store(CreateEventRequest $request)
    {
        /** @var Event $event */
        $event = Event::query()
                      ->make($request->only([
                          'for',
                          'title',
                          'location',
                          'description',
                          'when',
                          'video_type',
                          'video_url',
                      ]));

        $event->uploadImage($request->get('featured_image'));

        $event->save();

        activity()
            ->causedBy($this->user)
            ->performedOn($event)
            ->log('created');

        // $this->dispatch(new SubscribeAllDevicesToEventJob($event));

        return $this->item($event, new EventTransformer());
    }

    public function update(CreateEventRequest $request, $id)
    {
        $event = Event::query()
                      ->findOrFail($id);
        $event->update($request->only([
            'for',
            'title',
            'location',
            'description',
            'when',
            'video_type',
            'video_url',
        ]));
        activity()
            ->causedBy($this->user)
            ->performedOn($event)
            ->log('updated');
        return $this->item($event, new EventTransformer());
    }

    public function archive(Event $event)
    {
        $event->archive();
        activity()
            ->causedBy($this->user)
            ->performedOn($event)
            ->log('archived');
        return $this->item($event, new EventTransformer());
    }

    public function publish(Event $event)
    {
        $event->publish();
        activity()
            ->causedBy($this->user)
            ->performedOn($event)
            ->log('published');
        return $this->item($event, new EventTransformer());
    }

    public function unArchive(Event $event)
    {
        $event->unArchive();
        activity()
            ->causedBy($this->user)
            ->performedOn($event)
            ->log('unArchived');
        return $this->item($event, new EventTransformer());
    }

    public function getAvailableEvents()
    {
        return $this->collection(Event::query()
                                      ->get(), new EventTransformer());
    }

    public function getModules()
    {
        return response()->json([
            ['code' => Event::KKD_EVENT, 'description' => trans("eventsFor." . Event::KKD_EVENT)],
            ['code' => Event::MY_COUNTRY_EVENT, 'description' => trans("eventsFor." . Event::MY_COUNTRY_EVENT)],
        ]);
    }

    public function getVideoTypes()
    {
        return response()->json([
            ['code' => Event::VIDEO_YOUTUBE, 'description' => trans("videoTypes." . Event::VIDEO_YOUTUBE)],
        ]);
    }

    public function uploadFeaturedImage(Request $request, Event $event)
    {
        DB::beginTransaction();
        try {
            $event->uploadImage($request->get('featured_image'));

            activity()
                ->causedBy($this->user)
                ->performedOn($event)
                ->log('updated-featured-image');

            DB::commit();
            return $this->item($event->fresh(), new EventTransformer());
        } catch (\Exception $e) {
            DB::rollBack();
            return $this->wrongArguments([
                'message' => $e->getMessage(),
            ]);
        }
    }

}

Zerion Mini Shell 1.0