Tag Manager has been updated for Umbraco 17. It adds a dedicated section in the Umbraco for managing all your tags - edit, delete, create, and clean up duplicates without digging through content nodes.
This one has been a team effort over the versions - #h5yr to @NigelAtOptimised for the original package #friendly, @huwred for helping refactor and fix core issues during v13, and @Lantzify for the v13 PR improving the project structure and overview UI. Appreciated all around.
Previous versions available for v7, v8, and v13. Open to suggestions and collaboration as always PRs and feedback welcome.
This sounds like a really great package to have when using tags and I just saw that it got updated for Umbraco 17. Weāre running Umbraco 17.2.0 (Cloud) right now.
However, I get the following error locally when running after adding it with dotnet add package, any idea why? Iām the only user and I have no special user groups added, just the default. Running on MacOS.
[16:09:20 INF] Starting āUsomeTagManagerMigrationv1ā⦠[16:09:20 INF] At origin [16:09:20 INF] Execute InstallHelper [16:09:20 ERR] Exception (12bd8ddd). Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 1: ānear āumbracoUserGroup2Appā: syntax errorā. at Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForRC(Int32 rc, sqlite3 db) at Microsoft.Data.Sqlite.SqliteCommand.PrepareAndEnumerateStatements()+MoveNext() at Microsoft.Data.Sqlite.SqliteCommand.GetStatements()+MoveNext() at Microsoft.Data.Sqlite.SqliteDataReader.NextResult() at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(CommandBehavior behavior) at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader() at Microsoft.Data.Sqlite.SqliteCommand.ExecuteNonQuery() at Umbraco.Cms.Persistence.Sqlite.Services.SqlitePreferDeferredTransactionsConnection.CommandWrapper.ExecuteNonQuery() at StackExchange.Profiling.Data.ProfiledDbCommand.ExecuteNonQuery() in C:\projects\dotnet\src\MiniProfiler.Shared\Data\ProfiledDbCommand.cs:line 263 at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.FaultHandlingDbCommand.b__32_0() at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.FaultHandlingDbCommand.<>c__DisplayClass38_01.<Execute>b__0() at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.RetryPolicy.ExecuteAction[TResult](Func1 func) at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.FaultHandlingDbCommand.Execute[T](Func1 f) at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.FaultHandlingDbCommand.ExecuteNonQuery() at NPoco.Database.<>c__DisplayClass338_0.<ExecuteNonQueryHelper>b__0() at NPoco.Database.ExecutionHook[T](Func1 action) at NPoco.Database.ExecuteNonQueryHelper(DbCommand cmd) at NPoco.Database.Execute(String sql, CommandType commandType, Object args) at NPoco.Database.Execute(Sql Sql) at NPoco.Database.Execute(String sql, Object args) at Umbraco_Tag_Manager.InstallHelper.Migrate() at Umbraco.Cms.Infrastructure.Migrations.MigrationBase.MigrateAsync() at Umbraco.Cms.Infrastructure.Migrations.AsyncMigrationBase.RunAsync() at Umbraco.Cms.Infrastructure.Migrations.MigrationPlanExecutor.RunMigrationAsync(Type migrationType, MigrationContext context) at Umbraco.Cms.Infrastructure.Migrations.MigrationPlanExecutor.RunScopedMigrationAsync(Transition transition, MigrationPlan plan) at Umbraco.Cms.Infrastructure.Migrations.MigrationPlanExecutor.RunMigrationPlanAsync(MigrationPlan plan, String fromState) [16:09:20 ERR] Plan UsomeTagManagerMigrationv1 failed at step UsomeTagManagerMigrationv1-db Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 1: ānear āumbracoUserGroup2Appā: syntax errorā. at Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForRC(Int32 rc, sqlite3 db) at Microsoft.Data.Sqlite.SqliteCommand.PrepareAndEnumerateStatements()+MoveNext() at Microsoft.Data.Sqlite.SqliteCommand.GetStatements()+MoveNext() at Microsoft.Data.Sqlite.SqliteDataReader.NextResult() at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(CommandBehavior behavior) at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader() at Microsoft.Data.Sqlite.SqliteCommand.ExecuteNonQuery() at Umbraco.Cms.Persistence.Sqlite.Services.SqlitePreferDeferredTransactionsConnection.CommandWrapper.ExecuteNonQuery() at StackExchange.Profiling.Data.ProfiledDbCommand.ExecuteNonQuery() in C:\projects\dotnet\src\MiniProfiler.Shared\Data\ProfiledDbCommand.cs:line 263 at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.FaultHandlingDbCommand.b__32_0() at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.FaultHandlingDbCommand.<>c__DisplayClass38_01.<Execute>b__0() at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.RetryPolicy.ExecuteAction[TResult](Func1 func) at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.FaultHandlingDbCommand.Execute[T](Func1 f) at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.FaultHandlingDbCommand.ExecuteNonQuery() at NPoco.Database.<>c__DisplayClass338_0.<ExecuteNonQueryHelper>b__0() at NPoco.Database.ExecutionHook[T](Func1 action) at NPoco.Database.ExecuteNonQueryHelper(DbCommand cmd) at NPoco.Database.Execute(String sql, CommandType commandType, Object args) at NPoco.Database.Execute(Sql Sql) at NPoco.Database.Execute(String sql, Object args) at Umbraco_Tag_Manager.InstallHelper.Migrate() at Umbraco.Cms.Infrastructure.Migrations.MigrationBase.MigrateAsync() at Umbraco.Cms.Infrastructure.Migrations.AsyncMigrationBase.RunAsync() at Umbraco.Cms.Infrastructure.Migrations.MigrationPlanExecutor.RunMigrationAsync(Type migrationType, MigrationContext context) at Umbraco.Cms.Infrastructure.Migrations.MigrationPlanExecutor.RunScopedMigrationAsync(Transition transition, MigrationPlan plan) at Umbraco.Cms.Infrastructure.Migrations.MigrationPlanExecutor.RunMigrationPlanAsync(MigrationPlan plan, String fromState)
We are developing a similar package to meet some extra needs:
Permissions have been added to User / User Group to enable or restrict āadding new tagsā and access to the āTag managerā dashboard.
A new property editor for tags has been introduced that enforces these permissions, allowing editors without permission only to add existing tags, while those with permission can add new tags.
Our client was okay leaving the OOTB tag property alone and not wiring up notification handlers to verify on save/publish. So we were able to scope this new functionality to just a new ācloneā of the already existing editor.
Would you consider these to be in-scope / welcome additions?