/// <summary> /// Fill in answer details for content page. /// Reuse the logic between controllers. Also used by AnswerActionController. /// </summary> /// <param name="answer"></param> /// <param name="answerDescriptionService"></param> /// <param name="userManager"></param> /// <param name="voteService"></param> /// <param name="resourcesService"></param> /// <param name="culture"></param> /// <returns></returns> public static AnswerDetailsDto FillInDetails(AnswerDto answer, IAnswerDescriptionService answerDescriptionService, IUserService userService, IVoteService voteService, IResourcesService resourcesService, string culture, string fullDomainName) { // Load answer descriptions // Have to do the list otherwise setting description.UserDisplayName below will not work. var searchResult = answerDescriptionService.FindByAnswerId(answer.Id); List <AnswerDescriptionDto> descriptions = searchResult == null ? null : searchResult.ToList(); // Set the username for each description if (descriptions != null) { foreach (var description in descriptions) { GetUserDisplayName(description, userService); } } // Fill in result var data = new AnswerDetailsDto() { Answer = answer, CommonStrings = resourcesService.GetCommonStrings(culture), Descriptions = descriptions, NumberVotes = voteService.CountAnswerVotes(answer.Id) }; GetUserDisplayName(data.Answer, userService); // Fill in link to this page and other usefull data. data.ThisAnswerLink = LinkingHelper.ConvertAnswerToUrlWithCulture(culture, data.CommonStrings, answer); data.ThisAnswerFullLink = fullDomainName.EndsWith("/") ? fullDomainName.Substring(0, fullDomainName.Length - 1) : fullDomainName + data.ThisAnswerLink; data.ThisAnswerText = LinkingHelper.ConvertAnswerToText(data.CommonStrings, answer); data.ThisAnswerFullLinkEscaped = System.Uri.EscapeDataString(data.ThisAnswerFullLink); return(data); }