<?php namespace MovieSite\MovieSite\Notifications; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; use MovieSite\MovieSite\Models\MovieSite as MovieSiteModel; class MovieSiteWorkflow extends Notification implements ShouldQueue { use Queueable; /** * The movie_site instance. * * @var MovieSite */ protected $movie_site; /** * The movie_site instance. * * @var MovieSite */ protected $workflow; /** * Next Step for the workflow. * * @var Step */ protected $step; /** * Create a new notification instance. * * @param MovieSite $movie_site * @param String $step * * @return void */ public function __construct(MovieSiteModel $movie_site, array $workflow, String $step) { $this->movie_site = $movie_site; $this->workflow = $workflow; $this->step = $step; } /** * Get the notification's delivery channels. * * @param mixed $notifiable * @return array */ public function via($notifiable) { return ['mail', 'database']; } /** * Get the mail representation of the notification. * * @param mixed $notifiable * @return \Illuminate\Notifications\Messages\MailMessage */ public function toMail($notifiable) { return $this->{$this->step}(); } /** * Get the mail representation of the completed notification. * * @return \Illuminate\Notifications\Messages\MailMessage */ public function complete() { $message = new MailMessage; $message->greeting("Hi {$this->movie_site->reporting->name}!"); $message->line("The movie_site [{$this->movie_site->title}] has been completed successfully."); foreach ($this->workflow as $key => $value) { if ($key == 0) { $message->action($value->action, url('workflows/workflow/' . $value->id)); continue; } $message->line('<a href="'.url('workflows/workflow/' . $value->id).'">'.$value->action.'</a>'); } return $message; } /** * Get the mail representation of the publish notification. * * @return \Illuminate\Notifications\Messages\MailMessage */ public function verify() { $message = new MailMessage; $message->greeting("Hi {$this->movie_site->reporting->name}!"); $message->line("The movie_site {$this->movie_site->titile} has been verified successfully."); foreach ($this->workflow as $key => $value) { if ($key == 0) { $message->action($value->action, url('workflows/workflow/' . $value->id)); continue; } $message->line('<a href="'.url('workflows/workflow/' . $value->id).'">'.$value->action.'</a>'); } return $message; } /** * Get the mail representation of the publish notification. * * @return \Illuminate\Notifications\Messages\MailMessage */ public function approve() { $message = new MailMessage; $message->greeting("Hi {$this->movie_site->reporting->name}!"); $message->line("The movie_site {$this->movie_site->titile} has been approved successfully."); foreach ($this->workflow as $key => $value) { if ($key == 0) { $message->action($value->action, url('workflows/workflow/' . $value->id)); continue; } $message->line('<a href="'.url('workflows/workflow/' . $value->id).'">'.$value->action.'</a>'); } return $message; } /** * Get the mail representation of the publish notification. * * @return \Illuminate\Notifications\Messages\MailMessage */ public function publish() { $message = new MailMessage; $message->greeting("Hi {$this->movie_site->reporting->name}!"); $message->line("The movie_site {$this->movie_site->titile} has been published successfully."); foreach ($this->workflow as $key => $value) { if ($key == 0) { $message->action($value->action, url('workflows/workflow/' . $value->id)); continue; } $message->line('<a href="'.url('workflows/workflow/' . $value->id).'">'.$value->action.'</a>'); } return $message; } /** * Get the mail representation of the publish notification. * * @return \Illuminate\Notifications\Messages\MailMessage */ public function unpublish() { $message = new MailMessage;; $message->greeting("Hi {$this->movie_site->reporting->name}!"); $message->line("The movie_site {$this->movie_site->titile} has been unpublished successfully."); foreach ($this->workflow as $key => $value) { if ($key == 0) { $message->action($value->action, url('workflows/workflow/' . $value->id)); continue; } $message->line('<a href="'.url('workflows/workflow/' . $value->id).'">'.$value->action.'</a>'); } return $message; } /** * Get the mail representation of the publish notification. * * @return \Illuminate\Notifications\Messages\MailMessage */ public function archive() { $message = new MailMessage;; $message->greeting("Hi {$this->movie_site->reporting->name}!"); $message->line("The movie_site {$this->movie_site->titile} has been archived successfully."); foreach ($this->workflow as $key => $value) { if ($key == 0) { $message->action($value->action, url('workflows/workflow/' . $value->id)); continue; } $message->line('<a href="'.url('workflows/workflow/' . $value->id).'">'.$value->action.'</a>'); } return $message; } /** * Get the mail representation of the publish notification. * * @return \Illuminate\Notifications\Messages\MailMessage */ public function cancel() { $message = new MailMessage;; $message->greeting("Hi {$this->movie_site->user->name}!"); $message->line("The movie_site {$this->movie_site->titile} has been cancelled successfully."); foreach ($this->workflow as $key => $value) { if ($key == 0) { $message->action($value->action, url('workflows/workflow/' . $value->id)); continue; } $message->line('<a href="'.url('workflows/workflow/' . $value->id).'">'.$value->action.'</a>'); } return $message; } /** * Get the array representation of the notification. * * @param mixed $notifiable * @return array */ public function toArray($notifiable) { return [ 'name' => $this->movie_site->title, 'user' => $notifiable->name, 'action' => $this->movie_site->status, 'next' => [ 'actionText' => $this->{$this->step}()->actionText, 'actionUrl' => $this->{$this->step}()->actionUrl, ] ]; } }