diff --git a/src/Http/Controllers/Api/ComponentController.php b/src/Http/Controllers/Api/ComponentController.php index 3d157b0a..d47582f3 100644 --- a/src/Http/Controllers/Api/ComponentController.php +++ b/src/Http/Controllers/Api/ComponentController.php @@ -3,6 +3,7 @@ namespace CachetHQ\Cachet\Http\Controllers\Api; use CachetHQ\Cachet\Repositories\Component\ComponentRepository; +use CachetHQ\Cachet\Models\Tag; use Dingo\Api\Routing\ControllerTrait; use GrahamCampbell\Binput\Facades\Binput; use Illuminate\Routing\Controller; @@ -71,7 +72,26 @@ class ComponentController extends Controller */ public function postComponents() { - return $this->component->create($this->auth->user()->id, Binput::all()); + $component = $this->component->create( + $this->auth->user()->id, + Binput::except('tags') + ); + + if (Binput::has('tags')) { + // The component was added successfully, so now let's deal with the tags. + $tags = preg_split('/ ?, ?/', Binput::get('tags')); + + // For every tag, do we need to create it? + $componentTags = array_map(function ($taggable) use ($component) { + return Tag::firstOrCreate([ + 'name' => $taggable, + ])->id; + }, $tags); + + $component->tags()->sync($componentTags); + } + + return $component; } /** diff --git a/src/Models/Component.php b/src/Models/Component.php index 0db18595..df0a0b91 100644 --- a/src/Models/Component.php +++ b/src/Models/Component.php @@ -34,7 +34,7 @@ class Component extends Model implements TransformableInterface protected $rules = [ 'user_id' => 'integer|required', 'name' => 'required', - 'status' => 'integer', + 'status' => 'integer|required', 'link' => 'url', ];