diff --git a/locale/translations.go b/locale/translations.go index a437654f..bbe62d3c 100644 --- a/locale/translations.go +++ b/locale/translations.go @@ -1,5 +1,5 @@ // Code generated by go generate; DO NOT EDIT. -// 2017-11-21 14:38:46.654499991 -0800 PST m=+0.006321563 +// 2017-11-21 14:55:14.456403496 -0800 PST m=+0.037949400 package locale @@ -137,12 +137,14 @@ var Translations = map[string]string{ "no": "non", "Are you sure?": "Êtes-vous sûr ?", "Work in progress...": "Travail en cours...", - "This user already exists.": "Cet utilisateur existe déjà." + "This user already exists.": "Cet utilisateur existe déjà.", + "This category already exists.": "Cette catégorie existe déjà.", + "Unable to update this category.": "Impossible de mettre à jour cette catégorie." } `, } var TranslationsChecksums = map[string]string{ "en_US": "6fe95384260941e8a5a3c695a655a932e0a8a6a572c1e45cb2b1ae8baa01b897", - "fr_FR": "bfa4a8bb15bd6016da8b9b5f851121a4ae278e2a195cd2edc4737ff075d28f02", + "fr_FR": "5c8c2c5e35a17a7dd3c30596b73342f70950a3bbce00786d43ccba01b96ea672", } diff --git a/locale/translations/fr_FR.json b/locale/translations/fr_FR.json index 8ba010ce..9cbe2200 100644 --- a/locale/translations/fr_FR.json +++ b/locale/translations/fr_FR.json @@ -121,5 +121,7 @@ "no": "non", "Are you sure?": "Êtes-vous sûr ?", "Work in progress...": "Travail en cours...", - "This user already exists.": "Cet utilisateur existe déjà." + "This user already exists.": "Cet utilisateur existe déjà.", + "This category already exists.": "Cette catégorie existe déjà.", + "Unable to update this category.": "Impossible de mettre à jour cette catégorie." } diff --git a/server/static/bin.go b/server/static/bin.go index af1c085b..dc411fa6 100644 --- a/server/static/bin.go +++ b/server/static/bin.go @@ -1,5 +1,5 @@ // Code generated by go generate; DO NOT EDIT. -// 2017-11-21 14:38:46.651098874 -0800 PST m=+0.002920446 +// 2017-11-21 14:55:14.42928305 -0800 PST m=+0.010828954 package static diff --git a/server/static/css.go b/server/static/css.go index e632be55..e2d14e30 100644 --- a/server/static/css.go +++ b/server/static/css.go @@ -1,5 +1,5 @@ // Code generated by go generate; DO NOT EDIT. -// 2017-11-21 14:38:46.651532115 -0800 PST m=+0.003353687 +// 2017-11-21 14:55:14.43289693 -0800 PST m=+0.014442834 package static diff --git a/server/static/js.go b/server/static/js.go index 2a9ed376..f6e89705 100644 --- a/server/static/js.go +++ b/server/static/js.go @@ -1,5 +1,5 @@ // Code generated by go generate; DO NOT EDIT. -// 2017-11-21 14:38:46.652422004 -0800 PST m=+0.004243576 +// 2017-11-21 14:55:14.43700259 -0800 PST m=+0.018548494 package static diff --git a/server/template/common.go b/server/template/common.go index 24e2a97d..8c6db156 100644 --- a/server/template/common.go +++ b/server/template/common.go @@ -1,5 +1,5 @@ // Code generated by go generate; DO NOT EDIT. -// 2017-11-21 14:38:46.654164863 -0800 PST m=+0.005986435 +// 2017-11-21 14:55:14.455330256 -0800 PST m=+0.036876160 package template diff --git a/server/template/views.go b/server/template/views.go index c9d845e2..0611d6cb 100644 --- a/server/template/views.go +++ b/server/template/views.go @@ -1,5 +1,5 @@ // Code generated by go generate; DO NOT EDIT. -// 2017-11-21 14:38:46.652925155 -0800 PST m=+0.004746727 +// 2017-11-21 14:55:14.438565193 -0800 PST m=+0.020111097 package template diff --git a/server/ui/controller/category.go b/server/ui/controller/category.go index dbc80671..48c77c37 100644 --- a/server/ui/controller/category.go +++ b/server/ui/controller/category.go @@ -6,10 +6,11 @@ package controller import ( "errors" + "log" + "github.com/miniflux/miniflux2/model" "github.com/miniflux/miniflux2/server/core" "github.com/miniflux/miniflux2/server/ui/form" - "log" ) func (c *Controller) ShowCategories(ctx *core.Context, request *core.Request, response *core.Response) { @@ -104,6 +105,19 @@ func (c *Controller) SaveCategory(ctx *core.Context, request *core.Request, resp return } + duplicateCategory, err := c.store.GetCategoryByTitle(user.ID, categoryForm.Title) + if err != nil { + response.Html().ServerError(err) + return + } + + if duplicateCategory != nil { + response.Html().Render("create_category", args.Merge(tplParams{ + "errorMessage": "This category already exists.", + })) + return + } + category := model.Category{Title: categoryForm.Title, UserID: user.ID} err = c.store.CreateCategory(&category) if err != nil { @@ -158,6 +172,13 @@ func (c *Controller) UpdateCategory(ctx *core.Context, request *core.Request, re return } + if c.store.AnotherCategoryExists(user.ID, category.ID, categoryForm.Title) { + response.Html().Render("edit_category", args.Merge(tplParams{ + "errorMessage": "This category already exists.", + })) + return + } + err = c.store.UpdateCategory(categoryForm.Merge(category)) if err != nil { log.Println(err) diff --git a/sql/sql.go b/sql/sql.go index 967aa384..198779bd 100644 --- a/sql/sql.go +++ b/sql/sql.go @@ -1,5 +1,5 @@ // Code generated by go generate; DO NOT EDIT. -// 2017-11-21 14:38:46.650534269 -0800 PST m=+0.002355841 +// 2017-11-21 14:55:14.420877594 -0800 PST m=+0.002423498 package sql diff --git a/storage/category.go b/storage/category.go index 3d08c4da..e1986b7f 100644 --- a/storage/category.go +++ b/storage/category.go @@ -8,11 +8,21 @@ import ( "database/sql" "errors" "fmt" + "time" + "github.com/miniflux/miniflux2/helper" "github.com/miniflux/miniflux2/model" - "time" ) +func (s *Storage) AnotherCategoryExists(userID, categoryID int64, title string) bool { + defer helper.ExecutionTime(time.Now(), fmt.Sprintf("[Storage:AnotherCategoryExists] userID=%d, categoryID=%d, title=%s", userID, categoryID, title)) + + var result int + query := `SELECT count(*) as c FROM categories WHERE user_id=$1 AND id != $2 AND title=$3` + s.db.QueryRow(query, userID, categoryID, title).Scan(&result) + return result >= 1 +} + func (s *Storage) CategoryExists(userID, categoryID int64) bool { defer helper.ExecutionTime(time.Now(), fmt.Sprintf("[Storage:CategoryExists] userID=%d, categoryID=%d", userID, categoryID))