Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace App\Timeline\Http\Handlers;
- use App\Account\Entities\User;
- use App\Core\Http\Controllers\Controller;
- use App\Events\Entities\Events;
- use App\Files\Entities\Photos;
- use App\Groups\Entities\Groups;
- use App\Pages\Entities\Pages;
- use App\Timeline\Entities\Polls;
- use App\Timeline\Entities\Timeline;
- use App\Timeline\Http\Responses\TimelineInformationResponse;
- use App\Timeline\Inspections\StatusIntegrity;
- use App\Timeline\Http\Requests\TimelineRequest;
- use App\Timeline\Transformers\TimelineTransformer;
- final class TimelineStore extends Controller
- {
- /**
- * @var \App\Files\Entities\Photos
- */
- private $photos;
- /**
- * @var \App\Timeline\Entities\Polls
- */
- private $polls;
- /**
- * @var \App\Timeline\Entities\Timeline
- */
- private $timeline;
- /**
- * TimelineStore constructor.
- *
- * @param \App\Files\Entities\Photos $photos
- * @param \App\Timeline\Entities\Polls $polls
- * @param \App\Timeline\Entities\Timeline $timeline
- */
- public function __construct(Photos $photos, Polls $polls, Timeline $timeline)
- {
- $this->photos = $photos;
- $this->polls = $polls;
- $this->timeline = $timeline;
- }
- /**
- * @param \App\Timeline\Http\Requests\TimelineRequest $request
- * @param \App\Account\Entities\User $users
- * @param \App\Pages\Entities\Pages $pages
- * @param \App\Groups\Entities\Groups $groups
- * @param \App\Events\Entities\Events $events
- * @param \App\Timeline\Inspections\StatusIntegrity $integrity
- *
- * @return \App\Timeline\Http\Responses\TimelineInformationResponse|\Illuminate\Http\JsonResponse|\Illuminate\Http\Response
- * @throws \Throwable
- */
- public function __invoke(
- TimelineRequest $request,
- User $users,
- Pages $pages,
- Groups $groups,
- Events $events,
- StatusIntegrity $integrity
- )
- {
- switch ($request->type) {
- case 'page':
- $owner = $pages->find($request->owner);
- break;
- case 'group':
- $owner = $groups->find($request->owner);
- break;
- case 'event':
- $owner = $events->find($request->owner);
- break;
- default:
- $owner = auth()->user();
- }
- $this->authorize('poststatus', $owner);
- $create = $owner
- ->statuses()
- ->save(new $this->timeline($request->validated()));
- // Check the status for integrity
- $integrity->detect($create);
- // If they have uploaded image(s)
- foreach ($request->photos ?? [] as $photo) {
- // Store the file
- $saveFile = Storage::putFile('status/' . $create->id, $photo, 'public');
- $photoAttributes = [
- 'name' => $photo->getClientOriginalName(),
- 'extension' => $photo->getClientOriginalExtension(),
- 'path' => $saveFile,
- 'size' => $photo->getSize(),
- 'mime' => $photo->getMimeType(),
- ];
- $create = $create
- ->images()
- ->save(new $this->photos($photoAttributes));
- }
- // if they have made a poll
- foreach ($request->poll ?? [] as $poll) {
- if (isset($poll['question'])) {
- $create = $create
- ->poll()
- ->save(new $this->polls(['poll' => $poll['question']]));
- }
- }
- if ($create) {
- $meta = ['meta' => [
- 'status' => true,
- 'type' => 'success',
- 'message' => 'You have posted a status',
- ]];
- } else {
- $meta = ['meta' => [
- 'status' => false,
- 'type' => 'success',
- 'message' => 'There was an error posting this status',
- ]];
- }
- $status = new TimelineTransformer($create);
- return (new TimelineInformationResponse($status))->handle($request);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment