Exemplo n.º 1
0
        private async Task <PartialViewResult> GetStringSummaryViewModelFor(int stringId, bool asChanged = true)
        {
            var str = await _soStringsService.GetStringByIdAsync(stringId);

            var userCanManageIgnoring = (await _authorizationService.AuthorizeAsync(User, TraducirPolicy.CanReview)).Succeeded;
            var summaryViewModel      = new StringSummaryViewModel {
                String = str, RenderAsChanged = asChanged, UserCanManageIgnoring = userCanManageIgnoring
            };

            return(PartialView("StringSummary", summaryViewModel));
        }
Exemplo n.º 2
0
 public async Task <IActionResult> GetString(int stringId)
 {
     return(Json(await _soStringService.GetStringByIdAsync(stringId)));
 }
        public async Task <SuggestionCreationResult> CreateSuggestion(CreateSuggestionViewModel model)
        {
            var user = _httpContextAccessor.HttpContext.User;

            // Verify that everything is valid before calling the service
            var str = await _soStringService.GetStringByIdAsync(model.StringId);

            // if the string id is invalid
            if (str == null)
            {
                return(SuggestionCreationResult.InvalidStringId);
            }

            // empty suggestion
            if (model.Suggestion.IsNullOrEmpty())
            {
                return(SuggestionCreationResult.EmptySuggestion);
            }

            var usingRawString = model.RawString &&
                                 (await _authorizationService.AuthorizeAsync(user, TraducirPolicy.CanReview)).Succeeded;

            // fix whitespaces unless user is reviewer and selected raw string
            if (!usingRawString)
            {
                model.Suggestion = FixWhitespaces(model.Suggestion, str.OriginalString);
            }

            // if the suggestion is the same as the current translation
            if (str.Translation == model.Suggestion)
            {
                return(SuggestionCreationResult.SuggestionEqualsOriginal);
            }

            // if there's another suggestion with the same value
            if (str.Suggestions != null && str.Suggestions.Any(sug => sug.Suggestion == model.Suggestion))
            {
                return(SuggestionCreationResult.SuggestionAlreadyThere);
            }

            // if there are missing or extra values
            var variablesInOriginal   = VariablesRegex.Matches(str.OriginalString).Select(m => m.Value).ToArray();
            var variablesInSuggestion = VariablesRegex.Matches(model.Suggestion).Select(m => m.Value).ToArray();

            if (!usingRawString && variablesInOriginal.Any(v => !variablesInSuggestion.Contains(v)))
            {
                return(SuggestionCreationResult.TooFewVariables);
            }

            if (variablesInSuggestion.Any(v => !variablesInOriginal.Contains(v)))
            {
                return(SuggestionCreationResult.TooManyVariables);
            }

            var suggestionResult = await _soStringService.CreateSuggestionAsync(
                model.StringId,
                model.Suggestion,
                user.GetClaim <int>(ClaimType.Id),
                user.GetClaim <UserType>(ClaimType.UserType),
                model.Approve);

            return(suggestionResult ? SuggestionCreationResult.CreationOk : SuggestionCreationResult.DatabaseError);
        }