diff --git a/extensions/tags/bootstrap.php b/extensions/tags/bootstrap.php index c13aa6aaf..535c5dcfe 100644 --- a/extensions/tags/bootstrap.php +++ b/extensions/tags/bootstrap.php @@ -27,8 +27,4 @@ return function (Dispatcher $events) { $events->subscribe(Access\DiscussionPolicy::class); $events->subscribe(Access\TagPolicy::class); $events->subscribe(Access\FlagPolicy::class); - - Tag::saving(function ($model) { - $this->app->make('Flarum\Tags\TagValidator')->assertValid($model); - }); }; diff --git a/extensions/tags/js/admin/src/components/EditTagModal.js b/extensions/tags/js/admin/src/components/EditTagModal.js index 317835256..a38022363 100644 --- a/extensions/tags/js/admin/src/components/EditTagModal.js +++ b/extensions/tags/js/admin/src/components/EditTagModal.js @@ -101,9 +101,9 @@ export default class EditTagModal extends Modal { isHidden: this.isHidden() }).then( () => this.hide(), - () => { + response => { this.loading = false; - m.redraw(); + this.handleErrors(response); } ); } diff --git a/extensions/tags/migrations/2015_10_19_061223_make_slug_unique.php b/extensions/tags/migrations/2015_10_19_061223_make_slug_unique.php new file mode 100644 index 000000000..4d152cde5 --- /dev/null +++ b/extensions/tags/migrations/2015_10_19_061223_make_slug_unique.php @@ -0,0 +1,23 @@ +schema->table('tags', function (Blueprint $table) { + $table->unique('slug'); + }); + } + + public function down() + { + $this->schema->table('tags', function (Blueprint $table) { + $table->dropUnique('tags_slug_unique'); + }); + } +} diff --git a/extensions/tags/src/Command/CreateTagHandler.php b/extensions/tags/src/Command/CreateTagHandler.php index 2de29769b..a0c88f896 100644 --- a/extensions/tags/src/Command/CreateTagHandler.php +++ b/extensions/tags/src/Command/CreateTagHandler.php @@ -12,11 +12,25 @@ namespace Flarum\Tags\Command; use Flarum\Core\Access\AssertPermissionTrait; use Flarum\Tags\Tag; +use Flarum\Tags\TagValidator; class CreateTagHandler { use AssertPermissionTrait; + /** + * @var TagValidator + */ + protected $validator; + + /** + * @param TagValidator $validator + */ + public function __construct(TagValidator $validator) + { + $this->validator = $validator; + } + /** * @param CreateTag $command * @return Tag @@ -36,6 +50,8 @@ class CreateTagHandler array_get($data, 'attributes.isHidden') ); + $this->validator->assertValid($tag->getAttributes()); + $tag->save(); return $tag; diff --git a/extensions/tags/src/Command/EditTagHandler.php b/extensions/tags/src/Command/EditTagHandler.php index b1ea2ef28..d4a335109 100644 --- a/extensions/tags/src/Command/EditTagHandler.php +++ b/extensions/tags/src/Command/EditTagHandler.php @@ -12,6 +12,7 @@ namespace Flarum\Tags\Command; use Flarum\Core\Access\AssertPermissionTrait; use Flarum\Tags\TagRepository; +use Flarum\Tags\TagValidator; class EditTagHandler { @@ -23,11 +24,18 @@ class EditTagHandler protected $tags; /** - * @param TagRepository $tags + * @var TagValidator */ - public function __construct(TagRepository $tags) + protected $validator; + + /** + * @param TagRepository $tags + * @param TagValidator $validator + */ + public function __construct(TagRepository $tags, TagValidator $validator) { $this->tags = $tags; + $this->validator = $validator; } /** @@ -70,6 +78,8 @@ class EditTagHandler $tag->is_restricted = (bool) $attributes['isRestricted']; } + $this->validator->assertValid($tag->getDirty()); + $tag->save(); return $tag; diff --git a/extensions/tags/src/TagValidator.php b/extensions/tags/src/TagValidator.php index 3411f5d17..63b8c946a 100644 --- a/extensions/tags/src/TagValidator.php +++ b/extensions/tags/src/TagValidator.php @@ -19,6 +19,6 @@ class TagValidator extends AbstractValidator */ protected $rules = [ 'name' => ['required'], - 'slug' => ['required', 'unique:slug'] + 'slug' => ['required', 'unique:tags'] ]; }