<?php namespace Bixo\Feed\Actions; use Illuminate\Http\Request; use Bixo\Feed\Models\Feed; use Litepie\Actions\Concerns\AsAction; use Illuminate\Support\Str; class FeedWorkflow { use AsAction; private $model; private $namespace = 'bixo.feed.$feed'; private $transition; protected $eventClass = \Bixo\Feed\Events\FeedWorkflow::class; private $function; private $request; public function handle(string $transition, Feed $feed, array $request = []) { $this->model = $feed; $this->request = $request; $this->transition = $transition; $this->function = Str::camel($transition); $this->executeWorkflow(); return $this->model; } public function submit() { $this->model->status = 'Pending'; $this->model->save(); return $this->model; } public function approve() { $this->model->status = 'Approved'; $this->model->save(); return $this->model; } public function reject() { $this->model->status = 'Draft'; $this->model->save(); return $this->model; } public function publish() { $this->model->status = 'Published'; $this->model->save(); return $this->model; } public function unpublish() { $this->model->status = 'Unpublished'; $this->model->save(); return $this->model; } public function archive() { $this->model->status = 'Archived'; $this->model->save(); return $this->model; } public function unarchive() { $this->model->status = 'Draft'; $this->model->save(); return $this->model; } }