| 
									
										
										
										
											2018-07-12 16:42:17 +00:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace App\Transformer\Api; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use App\Status; | 
					
						
							|  |  |  | use League\Fractal; | 
					
						
							| 
									
										
										
										
											2019-02-15 05:30:06 +00:00
										 |  |  | use Cache; | 
					
						
							| 
									
										
										
										
											2018-07-12 16:42:17 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class StatusTransformer extends Fractal\TransformerAbstract | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     protected $defaultIncludes = [ | 
					
						
							|  |  |  |         'account', | 
					
						
							|  |  |  |         'mentions', | 
					
						
							|  |  |  |         'media_attachments', | 
					
						
							| 
									
										
										
										
											2018-08-28 03:07:36 +00:00
										 |  |  |         'tags', | 
					
						
							| 
									
										
										
										
											2018-07-12 16:42:17 +00:00
										 |  |  |     ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function transform(Status $status) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-02-16 18:48:24 +00:00
										 |  |  |         return [ | 
					
						
							|  |  |  |             'id'                        => (string) $status->id, | 
					
						
							|  |  |  |             'uri'                       => $status->url(), | 
					
						
							|  |  |  |             'url'                       => $status->url(), | 
					
						
							|  |  |  |             'in_reply_to_id'            => $status->in_reply_to_id, | 
					
						
							|  |  |  |             'in_reply_to_account_id'    => $status->in_reply_to_profile_id, | 
					
						
							| 
									
										
										
										
											2019-04-18 01:46:05 +00:00
										 |  |  |             'reblog'                    => null, | 
					
						
							| 
									
										
										
										
											2019-02-16 18:48:24 +00:00
										 |  |  |             'content'                   => $status->rendered ?? $status->caption, | 
					
						
							|  |  |  |             'created_at'                => $status->created_at->format('c'), | 
					
						
							|  |  |  |             'emojis'                    => [], | 
					
						
							|  |  |  |             'reblogs_count'             => $status->shares()->count(), | 
					
						
							|  |  |  |             'favourites_count'          => $status->likes()->count(), | 
					
						
							|  |  |  |             'reblogged'                 => $status->shared(), | 
					
						
							|  |  |  |             'favourited'                => $status->liked(), | 
					
						
							|  |  |  |             'muted'                     => null, | 
					
						
							|  |  |  |             'sensitive'                 => (bool) $status->is_nsfw, | 
					
						
							|  |  |  |             'spoiler_text'              => $status->cw_summary, | 
					
						
							|  |  |  |             'visibility'                => $status->visibility, | 
					
						
							|  |  |  |             'application'               => [ | 
					
						
							|  |  |  |                 'name'      => 'web', | 
					
						
							|  |  |  |                 'website'   => null | 
					
						
							|  |  |  |              ], | 
					
						
							|  |  |  |             'language'                  => null, | 
					
						
							|  |  |  |             'pinned'                    => null, | 
					
						
							| 
									
										
										
										
											2018-08-28 03:07:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-18 01:46:05 +00:00
										 |  |  |             'pf_type'                   => $status->type ?? $status->setType(), | 
					
						
							|  |  |  |             'reply_count'               => (int) $status->reply_count, | 
					
						
							|  |  |  |             'comments_disabled'         => $status->comments_disabled ? true : false, | 
					
						
							|  |  |  |             'thread'                    => false, | 
					
						
							| 
									
										
										
										
											2019-05-27 05:03:53 +00:00
										 |  |  |             'replies'                   => [], | 
					
						
							|  |  |  |             'parent'                    => $status->parent() ? $this->transform($status->parent()) : [], | 
					
						
							| 
									
										
										
										
											2019-02-16 18:48:24 +00:00
										 |  |  |         ]; | 
					
						
							| 
									
										
										
										
											2018-07-12 16:42:17 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function includeAccount(Status $status) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $account = $status->profile; | 
					
						
							| 
									
										
										
										
											2018-08-28 03:07:36 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return $this->item($account, new AccountTransformer()); | 
					
						
							| 
									
										
										
										
											2018-07-12 16:42:17 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function includeMentions(Status $status) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $mentions = $status->mentions; | 
					
						
							| 
									
										
										
										
											2018-08-28 03:07:36 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return $this->collection($mentions, new MentionTransformer()); | 
					
						
							| 
									
										
										
										
											2018-07-12 16:42:17 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function includeMediaAttachments(Status $status) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-06-11 02:12:46 +00:00
										 |  |  |         return Cache::remember('status:transformer:media:attachments:'.$status->id, now()->addDays(14), function() use($status) { | 
					
						
							| 
									
										
										
										
											2019-06-03 20:47:14 +00:00
										 |  |  |             if(in_array($status->type, ['photo', 'video', 'photo:album', 'loop'])) { | 
					
						
							| 
									
										
										
										
											2019-05-27 05:03:53 +00:00
										 |  |  |                 $media = $status->media()->orderBy('order')->get(); | 
					
						
							|  |  |  |                 return $this->collection($media, new MediaTransformer()); | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2019-02-25 06:41:12 +00:00
										 |  |  |         }); | 
					
						
							| 
									
										
										
										
											2018-07-12 16:42:17 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function includeTags(Status $status) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $tags = $status->hashtags; | 
					
						
							| 
									
										
										
										
											2018-08-28 03:07:36 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return $this->collection($tags, new HashtagTransformer()); | 
					
						
							| 
									
										
										
										
											2018-07-12 16:42:17 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-08-28 03:07:36 +00:00
										 |  |  | } |