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)); }
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); }