Example #1
0
        public async Task UpdateUserAvatarAsync(ICollection <AvatarLayer> selectionLayers)
        {
            var activeUserId       = GetActiveUserId();
            var currentCultureName = _userContextProvider.GetCurrentCulture()?.Name;
            var currentLanguageId  = currentCultureName != null ?
                                     await _languageService.GetLanguageIdAsync(currentCultureName) :
                                     await _languageService.GetDefaultLanguageIdAsync();

            var layers = await _avatarLayerRepository.GetAllAsync(GetCurrentSiteId());

            if (layers.Count > 0)
            {
                foreach (var layer in layers.ToList())
                {
                    var layerText = _avatarLayerRepository
                                    .GetNameAndLabelByLanguageId(layer.Id, currentLanguageId);
                    layer.Name        = layerText["Name"];
                    layer.RemoveLabel = layerText["RemoveLabel"];
                }
            }
            var elementList = new List <int>();

            foreach (var layer in layers)
            {
                var selection = selectionLayers.FirstOrDefault(_ => _.Id == layer.Id);
                if (selection != default(AvatarLayer))
                {
                    var element = await _avatarElementRepository.GetByItemAndColorAsync(
                        selection.SelectedItem.Value, selection.SelectedColor);

                    if (element != default(AvatarElement) &&
                        (!element.AvatarItem.Unlockable ||
                         await _avatarItemRepository
                         .HasUserUnlockedItemAsync(activeUserId, element.AvatarItemId)))
                    {
                        elementList.Add(element.Id);
                    }
                    else
                    {
                        _logger.LogWarning($"User {activeUserId} can't select item {selection.SelectedItem.Value} and color {selection.SelectedColor} for layer {layer.Id}.");
                        throw new GraException($"Invalid selection for {layer.Name}");
                    }
                }
                else if (!layer.CanBeEmpty)
                {
                    _logger.LogWarning($"User {activeUserId} can't have an empty selection for layer {layer.Id}.");
                    throw new GraException($"A {layer.Name} must be selected");
                }
            }
            await _avatarElementRepository.SetUserAvatarAsync(activeUserId, elementList);
        }
Example #2
0
        public async Task UpdateUserAvatarAsync(ICollection <AvatarLayer> selectionLayers)
        {
            var activeUserId = GetActiveUserId();
            var layers       = await _avatarLayerRepository.GetAllAsync(GetCurrentSiteId());

            var elementList = new List <int>();

            foreach (var layer in layers)
            {
                var selection = selectionLayers.Where(_ => _.Id == layer.Id).FirstOrDefault();
                if (selection != default(AvatarLayer))
                {
                    var element = await _avatarElementRepository.GetByItemAndColorAsync(
                        selection.SelectedItem.Value, selection.SelectedColor);

                    if (element != default(AvatarElement) &&
                        (element.AvatarItem.Unlockable == false ||
                         await _avatarItemRepository
                         .HasUserUnlockedItemAsync(activeUserId, element.AvatarItemId)))
                    {
                        elementList.Add(element.Id);
                    }
                    else
                    {
                        _logger.LogWarning($"User {activeUserId} can't select item {selection.SelectedItem.Value} and color {selection.SelectedColor} for layer {layer.Id}.");
                        throw new GraException($"Invalid selection for {layer.Name}");
                    }
                }
                else if (!layer.CanBeEmpty)
                {
                    _logger.LogWarning($"User {activeUserId} can't have an empty selection for layer {layer.Id}.");
                    throw new GraException($"A {layer.Name} must be selected");
                }
            }
            await _avatarElementRepository.SetUserAvatarAsync(activeUserId, elementList);
        }