natec1991

TimelineStore

Aug 13th, 2018
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.24 KB | None | 0 0
  1. <?php
  2.  
  3. namespace App\Timeline\Http\Handlers;
  4.  
  5. use App\Account\Entities\User;
  6. use App\Core\Http\Controllers\Controller;
  7. use App\Events\Entities\Events;
  8. use App\Files\Entities\Photos;
  9. use App\Groups\Entities\Groups;
  10. use App\Pages\Entities\Pages;
  11. use App\Timeline\Entities\Polls;
  12. use App\Timeline\Entities\Timeline;
  13. use App\Timeline\Http\Responses\TimelineInformationResponse;
  14. use App\Timeline\Inspections\StatusIntegrity;
  15. use App\Timeline\Http\Requests\TimelineRequest;
  16. use App\Timeline\Transformers\TimelineTransformer;
  17.  
  18. final class TimelineStore extends Controller
  19. {
  20.     /**
  21.      * @var \App\Files\Entities\Photos
  22.      */
  23.     private $photos;
  24.  
  25.     /**
  26.      * @var \App\Timeline\Entities\Polls
  27.      */
  28.     private $polls;
  29.  
  30.     /**
  31.      * @var \App\Timeline\Entities\Timeline
  32.      */
  33.     private $timeline;
  34.  
  35.     /**
  36.      * TimelineStore constructor.
  37.      *
  38.      * @param \App\Files\Entities\Photos      $photos
  39.      * @param \App\Timeline\Entities\Polls    $polls
  40.      * @param \App\Timeline\Entities\Timeline $timeline
  41.      */
  42.     public function __construct(Photos $photos, Polls $polls, Timeline $timeline)
  43.     {
  44.         $this->photos   = $photos;
  45.         $this->polls    = $polls;
  46.         $this->timeline = $timeline;
  47.     }
  48.  
  49.     /**
  50.      * @param \App\Timeline\Http\Requests\TimelineRequest $request
  51.      * @param \App\Account\Entities\User                  $users
  52.      * @param \App\Pages\Entities\Pages                   $pages
  53.      * @param \App\Groups\Entities\Groups                 $groups
  54.      * @param \App\Events\Entities\Events                 $events
  55.      * @param \App\Timeline\Inspections\StatusIntegrity   $integrity
  56.      *
  57.      * @return \App\Timeline\Http\Responses\TimelineInformationResponse|\Illuminate\Http\JsonResponse|\Illuminate\Http\Response
  58.      * @throws \Throwable
  59.      */
  60.     public function __invoke(
  61.         TimelineRequest $request,
  62.         User $users,
  63.         Pages $pages,
  64.         Groups $groups,
  65.         Events $events,
  66.         StatusIntegrity $integrity
  67.     )
  68.     {
  69.         switch ($request->type) {
  70.             case 'page':
  71.                 $owner = $pages->find($request->owner);
  72.                 break;
  73.             case 'group':
  74.                 $owner = $groups->find($request->owner);
  75.                 break;
  76.             case 'event':
  77.                 $owner = $events->find($request->owner);
  78.                 break;
  79.             default:
  80.                 $owner = auth()->user();
  81.         }
  82.  
  83.         $this->authorize('poststatus', $owner);
  84.  
  85.  
  86.         $create = $owner
  87.             ->statuses()
  88.             ->save(new $this->timeline($request->validated()));
  89.  
  90.         // Check the status for integrity
  91.         $integrity->detect($create);
  92.  
  93.  
  94.         // If they have uploaded image(s)
  95.         foreach ($request->photos ?? [] as $photo) {
  96.  
  97.             // Store the file
  98.             $saveFile = Storage::putFile('status/' . $create->id, $photo, 'public');
  99.  
  100.             $photoAttributes = [
  101.                 'name'      => $photo->getClientOriginalName(),
  102.                 'extension' => $photo->getClientOriginalExtension(),
  103.                 'path'      => $saveFile,
  104.                 'size'      => $photo->getSize(),
  105.                 'mime'      => $photo->getMimeType(),
  106.             ];
  107.  
  108.             $create = $create
  109.                 ->images()
  110.                 ->save(new $this->photos($photoAttributes));
  111.         }
  112.  
  113.         // if they have made a poll
  114.         foreach ($request->poll ?? [] as $poll) {
  115.             if (isset($poll['question'])) {
  116.                 $create = $create
  117.                     ->poll()
  118.                     ->save(new $this->polls(['poll' => $poll['question']]));
  119.             }
  120.         }
  121.  
  122.         if ($create) {
  123.             $meta = ['meta' => [
  124.                 'status'  => true,
  125.                 'type'    => 'success',
  126.                 'message' => 'You have posted a status',
  127.             ]];
  128.         } else {
  129.             $meta = ['meta' => [
  130.                 'status'  => false,
  131.                 'type'    => 'success',
  132.                 'message' => 'There was an error posting this status',
  133.             ]];
  134.         }
  135.  
  136.         $status = new TimelineTransformer($create);
  137.  
  138.         return (new TimelineInformationResponse($status))->handle($request);
  139.     }
  140. }
Advertisement
Add Comment
Please, Sign In to add comment