Beispiel #1
0
        /// <summary>
        /// Updates the localization.
        /// </summary>
        /// <param name="customerId">The customer identifier.</param>
        /// <param name="textMediaElementId">The text media element identifier.</param>
        /// <param name="model">The model.</param>
        /// <returns></returns>
        public async Task <UpdateTextMediaElementStatus> UpdateLocalization(
            int customerId,
            Guid textMediaElementId,
            UpdateTextMediaElementLocalizedRequestDto model
            )
        {
            if (model.Type != null && model.Media == null && !model.MediaId.HasValue)
            {
                return(UpdateTextMediaElementStatus.MediaFileMissed);
            }

            if (model.Media != null && !model.MediaId.HasValue && model.Type == null)
            {
                return(UpdateTextMediaElementStatus.MediaMediaType);
            }

            if (model.Text == null && model.Media == null && !model.MediaId.HasValue)
            {
                return(UpdateTextMediaElementStatus.TextOrMediaMissed);
            }

            var element = await this.textMediaElementsService.GetElement(customerId, textMediaElementId);

            if (element == null)
            {
                return(UpdateTextMediaElementStatus.NotFound);
            }

            var language = CareElementRequestContext.Current.Language;

            if (model.Text != null)
            {
                var elementLocalizedText = element.TextLocalizedStrings.FirstOrDefault(ls => ls.Language == language);

                if (elementLocalizedText == null)
                {
                    elementLocalizedText          = Mapper.Map <TextMediaElementString>(model.Text);
                    elementLocalizedText.Language = language;
                    element.TextLocalizedStrings.Add(elementLocalizedText);
                }
                else
                {
                    elementLocalizedText.Value         = model.Text.Value;
                    elementLocalizedText.Description   = model.Text.Description;
                    elementLocalizedText.Pronunciation = model.Text.Pronunciation;
                }

                if (model.Text.AudioFileMedia != null)
                {
                    elementLocalizedText.AudioFileMedia =
                        await mediaFileHelper.CreateMediaFile(model.Text.AudioFileMedia);
                }
            }
            else
            {
                element.TextLocalizedStrings.RemoveRange(
                    element.TextLocalizedStrings.Where(s => s.Language == language).ToList()
                    );
            }

            #region Media

            if (element.TextMediaElementsToMedias.Any(m => m.Language == language))
            {
                element.TextMediaElementsToMedias.RemoveRange(
                    element.TextMediaElementsToMedias.Where(m => m.Language == language).ToList()
                    );
            }

            if (model.MediaId.HasValue)
            {
                var existingMedia = await mediaService.Get(customerId, model.MediaId.Value);

                if (existingMedia == null)
                {
                    return(UpdateTextMediaElementStatus.MediaFileNotFound);
                }

                var media = new TextMediaElementToMedia()
                {
                    MediaId  = model.MediaId.Value,
                    Language = language
                };

                element.TextMediaElementsToMedias.Add(media);
            }
            else if (model.Media != null)
            {
                var media = await mediaFileHelper.CreateMediaFile(model.Media);

                if (media != null)
                {
                    element.TextMediaElementsToMedias.Add(
                        new TextMediaElementToMedia()
                    {
                        Media    = media,
                        Language = language
                    }
                        );
                }
            }

            #endregion

            await this.textMediaElementsService.Update(element);

            return(UpdateTextMediaElementStatus.Success);
        }
Beispiel #2
0
        /// <summary>
        /// Updates the specified identifier.
        /// </summary>
        /// <param name="customerId">The customer identifier.</param>
        /// <param name="textMediaElementId">The identifier.</param>
        /// <param name="textMediaElementDto">The text media element dto.</param>
        /// <returns></returns>
        public async Task <UpdateTextMediaElementStatus> Update(
            int customerId,
            Guid textMediaElementId,
            UpdateTextMediaElementRequestDto textMediaElementDto
            )
        {
            var validationResult = ValidateUpdateTextMediaElement(textMediaElementDto);

            if (validationResult != UpdateTextMediaElementStatus.Success)
            {
                return(validationResult);
            }

            var element = await textMediaElementsService.GetElement(customerId, textMediaElementId);

            if (element == null)
            {
                return(UpdateTextMediaElementStatus.NotFound);
            }

            element.Name      = textMediaElementDto.Name;
            element.MediaType = textMediaElementDto.Type;

            element.Tags.RemoveRange(element.Tags.ToList());

            var newElementTags = await this.tagsService.BuildTagsList(customerId, textMediaElementDto.Tags);

            element.Tags.AddRange(newElementTags);

            string language = CareElementRequestContext.Current.DefaultLanguage;

            if (textMediaElementDto.Text != null)
            {
                var localizedString = element.TextLocalizedStrings.FirstOrDefault(s => s.Language == language);

                if (localizedString == null)
                {
                    localizedString = new TextMediaElementString()
                    {
                        TextMediaElement = element
                    };

                    element.TextLocalizedStrings.Add(localizedString);
                    localizedString.Language = language;
                }

                localizedString.Value         = textMediaElementDto.Text.Value;
                localizedString.Description   = textMediaElementDto.Text.Description;
                localizedString.Pronunciation = textMediaElementDto.Text.Pronunciation;

                if (textMediaElementDto.Text.AudioFileMedia != null)
                {
                    if (textMediaElementDto.Text.AudioFileMediaId.HasValue)
                    {
                        localizedString.AudioFileMediaId = textMediaElementDto.Text.AudioFileMediaId.Value;
                    }
                    else
                    {
                        localizedString.AudioFileMedia =
                            await mediaFileHelper.CreateMediaFile(textMediaElementDto.Text.AudioFileMedia);
                    }
                }
                else
                {
                    localizedString.AudioFileMediaId = null;
                }
            }
            else
            {
                element.TextLocalizedStrings.RemoveRange(
                    element.TextLocalizedStrings.Where(s => s.Language == language).ToList()
                    );
            }

            #region Media

            if (element.TextMediaElementsToMedias.Any(m => m.Language == language))
            {
                element.TextMediaElementsToMedias.RemoveRange(
                    element.TextMediaElementsToMedias.Where(m => m.Language == language).ToList()
                    );
            }

            if (textMediaElementDto.MediaId.HasValue)
            {
                var existingMedia = await mediaService.Get(customerId, textMediaElementDto.MediaId.Value);

                if (existingMedia == null)
                {
                    return(UpdateTextMediaElementStatus.MediaFileNotFound);
                }

                var media = new TextMediaElementToMedia()
                {
                    MediaId  = textMediaElementDto.MediaId.Value,
                    Language = language
                };

                element.TextMediaElementsToMedias.Add(media);
            }
            else if (textMediaElementDto.Media != null)
            {
                var media = await mediaFileHelper.CreateMediaFile(textMediaElementDto.Media);

                if (media != null)
                {
                    element.TextMediaElementsToMedias.Add(
                        new TextMediaElementToMedia()
                    {
                        Media    = media,
                        Language = language
                    }
                        );
                }
            }

            #endregion

            await textMediaElementsService.Update(element);

            await globalSearchCacheHelper.AddOrUpdateEntry(customerId, Mapper.Map <TextMediaElement, SearchTextAndMediaDto>(element));

            await tagsSearchCacheHelper.AddOrUpdateTags(customerId, element.Tags.Select(t => t.Name).ToList());

            var unusedTags = await tagsService.RemoveUnusedTags(customerId);

            await tagsSearchCacheHelper.RemoveTags(customerId, unusedTags);

            return(UpdateTextMediaElementStatus.Success);
        }