Merge remote-tracking branch 'origin/main' into front-styles

This commit is contained in:
2026-04-13 08:22:35 +02:00
114 changed files with 3000 additions and 543 deletions

View File

@@ -90,13 +90,24 @@ func (s *ProductTranslationService) GetProductDescription(userID uint, productID
// Updates relevant fields with the "updates" map
func (s *ProductTranslationService) SaveProductDescription(userID uint, productID uint, productLangID uint, updates map[string]string) error {
// only some fields can be affected
allowedFields := []string{"description", "description_short", "meta_description", "meta_title", "name", "available_now", "available_later", "usage"}
allowedFields := []string{"description", "description_short", "link_rewrite", "meta_description", "meta_keywords", "meta_title", "name",
"available_now", "available_later", "delivery_in_stock", "delivery_out_stock", "usage"}
for key := range updates {
if !slices.Contains(allowedFields, key) {
return responseErrors.ErrBadField
}
}
if text, exists := updates["link_rewrite"]; exists {
// sanitize and check that link_rewrite is a valid url slug
sanitized := SanitizeSlug(text)
if !IsValidSlug(sanitized) {
return responseErrors.ErrInvalidURLSlug
}
updates["link_rewrite"] = sanitized
}
// check that fields description, description_short and usage, if they exist, have a valid html format
mustBeHTML := []string{"description", "description_short", "usage"}
for i := 0; i < len(mustBeHTML); i++ {
@@ -138,20 +149,28 @@ func (s *ProductTranslationService) TranslateProductDescription(userID uint, pro
fields := []*string{&productDescription.Description,
&productDescription.DescriptionShort,
&productDescription.LinkRewrite,
&productDescription.MetaDescription,
&productDescription.MetaKeywords,
&productDescription.MetaTitle,
&productDescription.Name,
&productDescription.AvailableNow,
&productDescription.AvailableLater,
&productDescription.DeliveryInStock,
&productDescription.DeliveryOutStock,
&productDescription.Usage,
}
keys := []string{"translation_of_product_description",
"translation_of_product_short_description",
"translation_of_product_url_link",
"translation_of_product_meta_description",
"translation_of_product_meta_keywords",
"translation_of_product_meta_title",
"translation_of_product_name",
"translation_of_product_available_now",
"translation_of_product_available_later",
"translation_of_product_available_now_message",
"translation_of_product_available_later_message",
"translation_of_product_delivery_in_stock_message",
"translation_of_product_delivery_out_stock_message",
"translation_of_product_usage",
}