public ActionResult SuggestUntranslatedPages(PageSuggestionViewModel model) { model.OnlyUntranslatedPages = true; var suggestedPages = GetCommand <SuggestPagesCommand>().ExecuteCommand(model); return(Json(new { suggestions = suggestedPages })); }
/// <summary> /// Executes this command. /// </summary> /// <param name="model">The model.</param> /// <returns> /// A list of pages. /// </returns> public List <PageLookupKeyValue> Execute(PageSuggestionViewModel model) { var query = Repository.AsQueryable <PageProperties>() .Where(page => page.Title.Contains(model.Query) || page.PageUrl.Contains(model.Query)); if (model.ExistingItemsArray.Length > 0) { var ids = new List <Guid>(); foreach (string idValue in model.ExistingItemsArray) { var guid = idValue.ToGuidOrDefault(); if (!guid.HasDefaultValue()) { ids.Add(guid); } } if (ids.Any()) { query = query.Where(page => !ids.Contains(page.Id)); } } if (model.ExcludedLanguageId.HasValue) { var languageProxy = Repository.AsProxy <Root.Models.Language>(model.ExcludedLanguageId.Value); query = query.Where(q => (q.Language != languageProxy || q.Language == null)); } if (!model.IncludeMasterPages) { query = query.Where(q => !q.IsMasterPage); } var predicateBuilder = PredicateBuilder.False <PageProperties>(); if (model.OnlyUntranslatedPages) { predicateBuilder = predicateBuilder.Or(page => page.LanguageGroupIdentifier == null); } var includeIds = model.ExcplicitlyIncludedPagesArray; if (includeIds.Any()) { predicateBuilder = predicateBuilder.Or(page => includeIds.Contains(page.Id)); } query = query.Where(predicateBuilder); if (configuration.Security.AccessControlEnabled) { IEnumerable <Guid> deniedPages = pageService.GetDeniedPages(); foreach (var deniedPageId in deniedPages) { query = query.Where(f => f.Id != deniedPageId); } } return(query.OrderBy(page => page.Title) .Select(page => new PageLookupKeyValue { Key = page.Id.ToString().ToLowerInvariant(), Value = page.Title, LanguageId = page.Language != null ? page.Language.Id : (Guid?)null, PageUrl = page.PageUrl }) .ToList()); }