public override dynamic BuildDisplay(BuildListViewDisplayContext context) { var pagerShape = context.New.Pager(context.Pager).TotalItemCount(context.ContentQuery.Count()); var pageOfContentItems = context.ContentQuery.Slice(context.Pager.GetStartIndex(), context.Pager.PageSize).Select(x => _contentManager.BuildDisplay(x, "SummaryAdminCondensed")).ToList(); return(context.New.ListView_Condensed() .Container(context.Container) .ContainerDisplayName(context.ContainerDisplayName) .ContentItems(pageOfContentItems) .Pager(pagerShape)); }
protected override DriverResult Display(RelatedContentWidgetPart part, string displayType, dynamic shapeHelper) { List <string> tags = part.TagList .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) .Select(s => s.Trim()) .Where(s => !String.IsNullOrEmpty(s)) .Distinct() .ToList(); // If we have no tags..... if (tags.Count < 1) { return(ContentShape("Parts_RelatedContentWidget", () => shapeHelper.Parts_RelatedContentWidget( ContentItems: shapeHelper.List() ))); } // See if we can find the current page/content id to filter it out // from the related content if necessary. int currentItemId = -1; if (part.ExcludeCurrentItemIfMatching) { currentItemId = TryGetCurrentContentId(-1); } // Setup a query on the tags part IContentQuery <TagsPart, TagsPartRecord> query = _cms.Query <TagsPart, TagsPartRecord>(); if (part.MustHaveAllTags) { // Add where conditions for every tag specified foreach (string tag in tags) { string tag1 = tag; // Prevent access to modified closure query.Where(tpr => tpr.Tags.Any(t => t.TagRecord.TagName == tag1)); } } else { // Add where condition for any tag specified query.Where(tpr => tpr.Tags.Any(t => tags.Contains(t.TagRecord.TagName))); } // Finish the query (exclude current, do ordering and slice max items) and execute IEnumerable <TagsPart> parts = query.Join <CommonPartRecord>() .Where(cpr => cpr.Id != currentItemId) .OrderByDescending(cpr => cpr.PublishedUtc) .Slice(part.MaxItems); // Create a list and push our display content items in var list = shapeHelper.List(); list.AddRange(parts.Select(p => _cms.BuildDisplay(p, "Summary"))); return(ContentShape("Parts_RelatedContentWidget", () => shapeHelper.Parts_RelatedContentWidget( ShowListOnly: part.ShowListOnly, ContentItems: list ))); }
public void OnResultExecuting(ResultExecutingContext filterContext) { // layers and widgets should only run on a full view rendering result var viewResult = filterContext.Result as ViewResult; if (viewResult == null) { return; } var workContext = _workContextAccessor.GetContext(filterContext); if (workContext == null || workContext.Layout == null || workContext.CurrentSite == null || AdminFilter.IsApplied(filterContext.RequestContext)) { return; } // Once the Rule Engine is done: // Get Layers and filter by zone and rule IEnumerable <LayerPart> activeLayers = _contentManager.Query <LayerPart, LayerPartRecord>().List(); var activeLayerIds = new List <int>(); foreach (var activeLayer in activeLayers) { // ignore the rule if it fails to execute try { if (_ruleManager.Matches(activeLayer.Record.LayerRule)) { activeLayerIds.Add(activeLayer.ContentItem.Id); } } catch (Exception e) { Logger.Warning(e, T("An error occured during layer evaluation on: {0}", activeLayer.Name).Text); } } IEnumerable <WidgetPart> widgetParts = _widgetsService.GetWidgets(layerIds: activeLayerIds.ToArray()); // Build and add shape to zone. var zones = workContext.Layout.Zones; foreach (var widgetPart in widgetParts) { var commonPart = widgetPart.As <ICommonPart>(); if (commonPart == null || commonPart.Container == null) { Logger.Warning("The widget '{0}' is has no assigned layer or the layer does not exist.", widgetPart.Title); continue; } // ignore widget for different cultures var localizablePart = widgetPart.As <ILocalizableAspect>(); if (localizablePart != null && localizablePart.Culture != workContext.CurrentCulture) { continue; } var widgetShape = _contentManager.BuildDisplay(widgetPart); zones[widgetPart.Record.Zone].Add(widgetShape, widgetPart.Record.Position); } }
public ActionResult List(ListContentsViewModel model, PagerParameters pagerParameters) { Pager pager = new Pager(_siteService.GetSiteSettings(), pagerParameters); var versionOptions = VersionOptions.Latest; switch (model.Options.ContentsStatus) { case ContentsStatus.Published: versionOptions = VersionOptions.Published; break; case ContentsStatus.Draft: versionOptions = VersionOptions.Draft; break; case ContentsStatus.AllVersions: versionOptions = VersionOptions.AllVersions; break; default: versionOptions = VersionOptions.Latest; break; } var query = _contentManager.Query(versionOptions, GetListableTypes(false).Select(ctd => ctd.Name).ToArray()); if (!string.IsNullOrEmpty(model.TypeName)) { var contentTypeDefinition = _contentDefinitionManager.GetTypeDefinition(model.TypeName); if (contentTypeDefinition == null) { return(HttpNotFound()); } model.TypeDisplayName = !string.IsNullOrWhiteSpace(contentTypeDefinition.DisplayName) ? contentTypeDefinition.DisplayName : contentTypeDefinition.Name; // We display a specific type even if it's not listable so that admin pages // can reuse the Content list page for specific types. query = _contentManager.Query(versionOptions, model.TypeName); } switch (model.Options.OrderBy) { case ContentsOrder.Modified: //query = query.OrderByDescending<ContentPartRecord, int>(ci => ci.ContentItemRecord.Versions.Single(civr => civr.Latest).Id); query = query.OrderByDescending <CommonPartRecord>(cr => cr.ModifiedUtc); break; case ContentsOrder.Published: query = query.OrderByDescending <CommonPartRecord>(cr => cr.PublishedUtc); break; case ContentsOrder.Created: //query = query.OrderByDescending<ContentPartRecord, int>(ci => ci.Id); query = query.OrderByDescending <CommonPartRecord>(cr => cr.CreatedUtc); break; } if (!String.IsNullOrWhiteSpace(model.Options.SelectedCulture)) { query = _cultureFilter.FilterCulture(query, model.Options.SelectedCulture); } if (model.Options.ContentsStatus == ContentsStatus.Owner) { query = query.Where <CommonPartRecord>(cr => cr.OwnerId == Services.WorkContext.CurrentUser.Id); } model.Options.SelectedFilter = model.TypeName; model.Options.FilterOptions = GetListableTypes(false) .Select(ctd => new KeyValuePair <string, string>(ctd.Name, ctd.DisplayName)) .ToList().OrderBy(kvp => kvp.Value); model.Options.Cultures = _cultureManager.ListCultures(); var maxPagedCount = _siteService.GetSiteSettings().MaxPagedCount; if (maxPagedCount > 0 && pager.PageSize > maxPagedCount) { pager.PageSize = maxPagedCount; } var pagerShape = Shape.Pager(pager).TotalItemCount(maxPagedCount > 0 ? maxPagedCount : query.Count()); var pageOfContentItems = query.Slice(pager.GetStartIndex(), pager.PageSize).ToList(); var list = Shape.List(); list.AddRange(pageOfContentItems.Select(ci => _contentManager.BuildDisplay(ci, "SummaryAdmin"))); var viewModel = Shape.ViewModel() .ContentItems(list) .Pager(pagerShape) .Options(model.Options) .TypeDisplayName(model.TypeDisplayName ?? ""); return(View(viewModel)); }
public ActionResult List(ListContentsViewModelExtension model, PagerParameters pagerParameters) { Pager pager = new Pager(_siteService.GetSiteSettings(), pagerParameters); var versionOptions = VersionOptions.Latest; switch (model.Options.ContentsStatus) { case ContentsStatus.Published: versionOptions = VersionOptions.Published; break; case ContentsStatus.Draft: versionOptions = VersionOptions.Draft; break; case ContentsStatus.AllVersions: versionOptions = VersionOptions.AllVersions; break; default: versionOptions = VersionOptions.Latest; break; } var query = _contentManager.Query(versionOptions, GetListableTypes(false).Select(ctd => ctd.Name).ToArray()); //the lQuery is used only in the case where we have the language queries, but since we cannot clone IContentQuery objects, //we create it here and build is as we build the other var lQuery = _contentManager.Query(versionOptions, GetListableTypes(false).Select(ctd => ctd.Name).ToArray()); if (!string.IsNullOrEmpty(model.TypeName)) { var contentTypeDefinition = _contentDefinitionManager.GetTypeDefinition(model.TypeName); if (contentTypeDefinition == null) { return(HttpNotFound()); } model.TypeDisplayName = !string.IsNullOrWhiteSpace(contentTypeDefinition.DisplayName) ? contentTypeDefinition.DisplayName : contentTypeDefinition.Name; query = query.ForType(model.TypeName); lQuery = lQuery.ForType(model.TypeName); } // FILTER QUERIES: START // // terms query if (model.AdvancedOptions.SelectedTermId > 0) { var termId = model.AdvancedOptions.SelectedTermId; query = query.Join <TermsPartRecord>().Where(x => x.Terms.Any(a => a.TermRecord.Id == termId)); lQuery = lQuery.Join <TermsPartRecord>().Where(x => x.Terms.Any(a => a.TermRecord.Id == termId)); } // owner query if ( //user cannot see everything by default ( !Services.Authorizer.Authorize(AdvancedSearchPermissions.SeesAllContent) || (Services.Authorizer.Authorize(AdvancedSearchPermissions.SeesAllContent) && model.AdvancedOptions.OwnedByMeSeeAll) ) && ( //user has either limitation ((Services.Authorizer.Authorize(AdvancedSearchPermissions.MayChooseToSeeOthersContent)) && (model.AdvancedOptions.OwnedByMe)) || (Services.Authorizer.Authorize(AdvancedSearchPermissions.CanSeeOwnContents) && !Services.Authorizer.Authorize(AdvancedSearchPermissions.MayChooseToSeeOthersContent)) ) ) { //this user can only see the contents they own var lowerName = Services.WorkContext.CurrentUser.UserName.ToLowerInvariant(); var email = Services.WorkContext.CurrentUser.Email; var user = _contentManager.Query <UserPart, UserPartRecord>().Where(u => u.NormalizedUserName == lowerName || u.Email == email).List().FirstOrDefault(); query = query.Join <CommonPartRecord>().Where(x => x.OwnerId == user.Id); lQuery = lQuery.Join <CommonPartRecord>().Where(x => x.OwnerId == user.Id); } else if (!String.IsNullOrWhiteSpace(model.AdvancedOptions.SelectedOwner)) { var lowerName = model.AdvancedOptions.SelectedOwner == null ? "" : model.AdvancedOptions.SelectedOwner.ToLowerInvariant(); var email = model.AdvancedOptions.SelectedOwner; var user = _contentManager.Query <UserPart, UserPartRecord>().Where(u => u.NormalizedUserName == lowerName || u.Email == email).List().FirstOrDefault(); if (user != null) { query = query.Join <CommonPartRecord>().Where(x => x.OwnerId == user.Id); lQuery = lQuery.Join <CommonPartRecord>().Where(x => x.OwnerId == user.Id); } else { _notifier.Add(NotifyType.Warning, T("No user found. Ownership filter not applied.")); } } //date query if (model.AdvancedOptions.SelectedFromDate != null || model.AdvancedOptions.SelectedToDate != null) { //set default dates for From and To if they are null. var fromD = _dataLocalization.StringToDatetime(model.AdvancedOptions.SelectedFromDate, "") ?? _dataLocalization.StringToDatetime("09/05/1985", ""); var toD = _dataLocalization.StringToDatetime(model.AdvancedOptions.SelectedToDate, "") ?? DateTime.Now; if (model.AdvancedOptions.DateFilterType == DateFilterOptions.Created) { query = query.Join <CommonPartRecord>().Where(x => x.CreatedUtc >= fromD && x.CreatedUtc <= toD); lQuery = lQuery.Join <CommonPartRecord>().Where(x => x.CreatedUtc >= fromD && x.CreatedUtc <= toD); } else if (model.AdvancedOptions.DateFilterType == DateFilterOptions.Modified) { query = query.Join <CommonPartRecord>().Where(x => x.ModifiedUtc >= fromD && x.ModifiedUtc <= toD); lQuery = lQuery.Join <CommonPartRecord>().Where(x => x.ModifiedUtc >= fromD && x.ModifiedUtc <= toD); } else if (model.AdvancedOptions.DateFilterType == DateFilterOptions.Published) { query = query.Join <CommonPartRecord>().Where(x => x.PublishedUtc >= fromD && x.PublishedUtc <= toD); lQuery = lQuery.Join <CommonPartRecord>().Where(x => x.PublishedUtc >= fromD && x.PublishedUtc <= toD); } } // Has media query if (model.AdvancedOptions.HasMedia) { var allCt = GetListableTypes(false); var listFields = new List <string>(); foreach (var ct in allCt) { var allMediaFld = _contentDefinitionService.GetType(ct.Name).Fields.Where(w => w._Definition.FieldDefinition.Name == "MediaLibraryPickerField"); var allFieldNames = allMediaFld.Select(s => ct.Name + "." + s.Name + "."); listFields.AddRange(allFieldNames); } query = query.Join <FieldIndexPartRecord>().Where(w => w.StringFieldIndexRecords.Any( w2 => listFields.Contains(w2.PropertyName) && w2.Value != "" )); lQuery = lQuery.Join <FieldIndexPartRecord>().Where(w => w.StringFieldIndexRecords.Any( w2 => listFields.Contains(w2.PropertyName) && w2.Value != "" )); } // Extended Status query if (!String.IsNullOrWhiteSpace(model.AdvancedOptions.SelectedStatus)) { query = query.Join <FieldIndexPartRecord>().Where(w => w.StringFieldIndexRecords.Any( w2 => w2.PropertyName == "PublishExtensionPart.PublishExtensionStatus." && w2.Value == model.AdvancedOptions.SelectedStatus )); lQuery = lQuery.Join <FieldIndexPartRecord>().Where(w => w.StringFieldIndexRecords.Any( w2 => w2.PropertyName == "PublishExtensionPart.PublishExtensionStatus." && w2.Value == model.AdvancedOptions.SelectedStatus )); } // FILTER QUERIES: END // switch (model.Options.OrderBy) { case ContentsOrder.Modified: //query = query.OrderByDescending<ContentPartRecord, int>(ci => ci.ContentItemRecord.Versions.Single(civr => civr.Latest).Id); query = query.OrderByDescending <CommonPartRecord>(cr => cr.ModifiedUtc); lQuery = lQuery.OrderByDescending <CommonPartRecord>(cr => cr.ModifiedUtc); break; case ContentsOrder.Published: query = query.OrderByDescending <CommonPartRecord>(cr => cr.PublishedUtc); lQuery = lQuery.OrderByDescending <CommonPartRecord>(cr => cr.PublishedUtc); break; case ContentsOrder.Created: //query = query.OrderByDescending<ContentPartRecord, int>(ci => ci.Id); query = query.OrderByDescending <CommonPartRecord>(cr => cr.CreatedUtc); lQuery = lQuery.OrderByDescending <CommonPartRecord>(cr => cr.CreatedUtc); break; } model.Options.SelectedFilter = model.TypeName; model.Options.FilterOptions = GetListableTypes(false) .Select(ctd => new KeyValuePair <string, string>(ctd.Name, ctd.DisplayName)) .ToList().OrderBy(kvp => kvp.Value); // FILTER MODELS: START // // language filter model model.AdvancedOptions.LanguageOptions = _cultureRepo.Table .Select(ctd => new KeyValuePair <int, string>(ctd.Id, ctd.Culture)); // taxonomy filter model var termList = new List <KeyValuePair <int, string> >(); foreach (var taxonomy in _taxonomyService.GetTaxonomies()) { termList.Add(new KeyValuePair <int, string>(-1, taxonomy.Name)); foreach (var term in _taxonomyService.GetTerms(taxonomy.Id)) { var gap = new string('-', term.GetLevels()); if (gap.Length > 0) { gap += " "; } termList.Add(new KeyValuePair <int, string>(term.Id, gap + term.Name)); } } model.AdvancedOptions.TaxonomiesOptions = termList; // extended status var partDefinition = _contentDefinitionService.GetPart("PublishExtensionPart"); if (partDefinition != null) { var partField = partDefinition.Fields.Where(w => w.Name == "PublishExtensionStatus").SingleOrDefault(); var settings = partField.Settings.GetModel <EnumerationFieldSettings>().Options; string[] options = (!String.IsNullOrWhiteSpace(settings)) ? settings.Split(new string[] { System.Environment.NewLine }, StringSplitOptions.None) : null; model.AdvancedOptions.StatusOptions = options.Select(s => new KeyValuePair <string, string>(s, T(s).Text)); } #region TEST OF CPF QUERIES //if (model.AdvancedOptions.CPFOwnerId != null) { // var item = _contentManager.Get((int)model.AdvancedOptions.CPFOwnerId); // var parts = item.Parts; // list = Shape.List(); // foreach (var part in parts) { // foreach (var field in part.Fields) { // if (field.FieldDefinition.Name == "ContentPickerField") { // bool noName = String.IsNullOrWhiteSpace(model.AdvancedOptions.CPFName); // if (noName || (!noName && field.Name == model.AdvancedOptions.CPFName)) { // var relatedItems = _contentManager.GetMany<ContentItem>((IEnumerable<int>)field.GetType().GetProperty("Ids").GetValue(field), VersionOptions.Latest, QueryHints.Empty); // list.AddRange(relatedItems.Select(ci => _contentManager.BuildDisplay(ci, "SummaryAdmin"))); // } // } // } // } //} if (model.AdvancedOptions.CPFIdToSearch != null && !String.IsNullOrWhiteSpace(model.AdvancedOptions.CPFName)) { //given an Id, search for all items that have a Content Picker Field whose PropertyName is PCFName and that have the //Id among the corresponding values. string fieldName = (string)model.AdvancedOptions.CPFName; query = query.Join <FieldIndexPartRecord>() .Where(fip => fip.StringFieldIndexRecords .Any(sfi => sfi.PropertyName.Contains(fieldName) && sfi.LatestValue.Contains("{" + model.AdvancedOptions.CPFIdToSearch.ToString() + "}") ) ); lQuery = lQuery.Join <FieldIndexPartRecord>() .Where(fip => fip.StringFieldIndexRecords .Any(sfi => sfi.PropertyName.Contains(fieldName) && sfi.LatestValue.Contains("{" + model.AdvancedOptions.CPFIdToSearch.ToString() + "}") ) ); } #endregion // FILTER MODELS: END // //EXECUTE QUERIES var pagerShape = Shape.Pager(pager).TotalItemCount(0); var list = Shape.List(); IEnumerable <ContentItem> pageOfContentItems = (IEnumerable <ContentItem>)null; //Stopwatch sw = Stopwatch.StartNew(); //the user may not have permission to see anything: in that case, do not execute the query #region original query //this is roughly 1000 slower than the variant below //if (Services.Authorizer.Authorize(AdvancedSearchPermissions.CanSeeOwnContents)) { // // language query // //For any language query, remember that Orchard's localization table, as of Orchard 1.8, has an issue where the content // //created but never translated does not have the default Culture assigned to it. // Expression<Func<LocalizationPartRecord, bool>> selLangPredicate = null; // if (model.AdvancedOptions.SelectedLanguageId > 0) { // bool siteCultureSelected = _cultureManager.GetSiteCulture() == _cultureManager.GetCultureById(model.AdvancedOptions.SelectedLanguageId).Culture; // if (siteCultureSelected) { // selLangPredicate = // x => x.CultureId == model.AdvancedOptions.SelectedLanguageId || // x.CultureId == 0; // } else { // selLangPredicate = // x => x.CultureId == model.AdvancedOptions.SelectedLanguageId; // } // } // if (model.AdvancedOptions.SelectedLanguageId > 0) { // query = query.Join<LocalizationPartRecord>().Where(selLangPredicate); // } // //if we want only items that do not have a specific translation, we have to do things differently, // //because the check is done after the query. Hence, for example, we cannot directly page. // if (model.AdvancedOptions.SelectedUntranslatedLanguageId > 0) { // var allCi = query.List(); // //for (int i = 0; i < allCi.Count(); i++) { //this loop is used to test null conditions and other stuff like that while debugging // // var ci = allCi.ElementAt(i); // // if (ci.Is<LocalizationPart>()) { // // var lci = _localizationService.GetLocalizations(ci, versionOptions); // // var clci = lci.Count(); // // var bo = lci.Any(li => li.Culture.Id == model.AdvancedOptions.SelectedUntranslatedLanguageId); // // } // //} // var untranslatedCi = allCi // .Where(x => // x.Is<LocalizationPart>() && //the content is translatable // ( // x.As<LocalizationPart>().Culture == null || //this is the case where the content was created and never translated to any other culture. // x.As<LocalizationPart>().Culture.Id != model.AdvancedOptions.SelectedUntranslatedLanguageId //not a content in the language in which we are looking translations // ) && // _localizationService.GetLocalizations(x, versionOptions) != null && // !_localizationService.GetLocalizations(x, versionOptions).Any(li => // li.Culture != null && // li.Culture.Id == model.AdvancedOptions.SelectedUntranslatedLanguageId // ) // ); // //.Where(x => // // x.Is<LocalizationPart>() && //some content items may not be translatable // // ( // // (x.As<LocalizationPart>().Culture != null && x.As<LocalizationPart>().Culture.Id != model.AdvancedOptions.SelectedUntranslatedLanguageId) || // // (x.As<LocalizationPart>().Culture == null) //this is the case where the content was created and never translated to any other culture. // // //In that case, in Orchard 1.8, no culture is directly assigned to it, even though the default culture is assumed. // // ) && // // x.As<LocalizationPart>().MasterContentItem == null && // // !allCi.Any(y => // // y.Is<LocalizationPart>() && // // (y.As<LocalizationPart>().MasterContentItem == x || y.As<LocalizationPart>().MasterContentItem == x.As<LocalizationPart>().MasterContentItem) && // // y.As<LocalizationPart>().Culture.Id == model.AdvancedOptions.SelectedUntranslatedLanguageId // // ) // //); // //Paging // pagerShape = Shape.Pager(pager).TotalItemCount(untranslatedCi.Count()); // int pSize = pager.PageSize != 0 ? pager.PageSize : untranslatedCi.Count(); // pageOfContentItems = untranslatedCi // .Skip(pager.GetStartIndex()) // .Take((pager.GetStartIndex() + pSize) > untranslatedCi.Count() ? // untranslatedCi.Count() - pager.GetStartIndex() : // pSize) // .ToList(); // } else { // pagerShape = Shape.Pager(pager).TotalItemCount(query.Count()); // pageOfContentItems = query.Slice(pager.GetStartIndex(), pager.PageSize).ToList(); // } //} else { // Services.Notifier.Error(T("Not authorized to visualize any item.")); //} #endregion if (Services.Authorizer.Authorize(AdvancedSearchPermissions.CanSeeOwnContents)) { // language queries //For any language query, remember that Orchard's localization table, as of Orchard 1.8, has an issue where the content //created but never translated does not have the default Culture assigned to it. Expression <Func <LocalizationPartRecord, bool> > selLangPredicate = null; if (model.AdvancedOptions.SelectedLanguageId > 0) { bool siteCultureSelected = _cultureManager.GetSiteCulture() == _cultureManager.GetCultureById(model.AdvancedOptions.SelectedLanguageId).Culture; if (siteCultureSelected) { selLangPredicate = x => x.CultureId == model.AdvancedOptions.SelectedLanguageId || x.CultureId == 0; } else { selLangPredicate = x => x.CultureId == model.AdvancedOptions.SelectedLanguageId; } query = query.Join <LocalizationPartRecord>().Where(selLangPredicate); } Expression <Func <LocalizationPartRecord, bool> > untranLangPredicate = null; if (model.AdvancedOptions.SelectedUntranslatedLanguageId > 0) { bool siteCultureSelected = _cultureManager.GetSiteCulture() == _cultureManager.GetCultureById(model.AdvancedOptions.SelectedUntranslatedLanguageId).Culture; if (siteCultureSelected) { untranLangPredicate = x => x.CultureId == model.AdvancedOptions.SelectedUntranslatedLanguageId || x.CultureId == 0; } else { untranLangPredicate = x => x.CultureId == model.AdvancedOptions.SelectedUntranslatedLanguageId; } lQuery = lQuery.Join <LocalizationPartRecord>().Where(untranLangPredicate); var lRes = lQuery.List(); var masters = lRes.Where(x => x.As <LocalizationPart>().Record.MasterContentItemId != 0).Select(x => x.As <LocalizationPart>().Record.MasterContentItemId).ToList(); var items = lRes.Select(x => x.Id).ToList(); Expression <Func <LocalizationPartRecord, bool> > sulPredicate = x => x.CultureId != model.AdvancedOptions.SelectedUntranslatedLanguageId && !masters.Contains(x.Id) && !masters.Contains(x.MasterContentItemId) && !items.Contains(x.MasterContentItemId); query = query.Join <LocalizationPartRecord>().Where(sulPredicate); } pagerShape = Shape.Pager(pager).TotalItemCount(query.Count()); pageOfContentItems = query.Slice(pager.GetStartIndex(), pager.PageSize).ToList(); } else { Services.Notifier.Error(T("Not authorized to visualize any item.")); } //sw.Stop(); //Services.Notifier.Error(new LocalizedString(sw.Elapsed.TotalMilliseconds.ToString())); if (pageOfContentItems != null) { list.AddRange(pageOfContentItems.Select(ci => _contentManager.BuildDisplay(ci, "SummaryAdmin"))); } var viewModel = Shape.ViewModel() .ContentItems(list) .Pager(pagerShape) .Options(model.Options) .AdvancedOptions(model.AdvancedOptions) .TypeDisplayName(model.TypeDisplayName ?? ""); return(View(viewModel)); }
public ActionResult List(ListContentsViewModel model, PagerParameters pagerParameters) { var pager = new Pager(_siteService.GetSiteSettings(), pagerParameters); var container = model.ContainerId.HasValue ? _contentManager.GetLatest((int)model.ContainerId) : null; if (container == null || !container.Has <ContainerPart>()) { return(HttpNotFound()); } var restrictedContentType = container.As <ContainerPart>().Record.ItemContentType; var hasRestriction = !string.IsNullOrEmpty(restrictedContentType); if (hasRestriction) { model.FilterByContentType = restrictedContentType; } model.Options.SelectedFilter = model.FilterByContentType; model.ContainerDisplayName = container.ContentManager.GetItemMetadata(container).DisplayText; if (string.IsNullOrEmpty(model.ContainerDisplayName)) { model.ContainerDisplayName = container.ContentType; } var query = GetListContentItemQuery(model.ContainerId.Value, model.FilterByContentType, model.Options.OrderBy); if (query == null) { return(HttpNotFound()); } model.Options.FilterOptions = GetContainableTypes() .Select(ctd => new KeyValuePair <string, string>(ctd.Name, ctd.DisplayName)) .ToList().OrderBy(kvp => kvp.Key); var pagerShape = Shape.Pager(pager).TotalItemCount(query.Count()); var pageOfContentItems = query.Slice(pager.GetStartIndex(), pager.PageSize).ToList(); var list = Shape.List(); list.AddRange(pageOfContentItems.Select(ci => _contentManager.BuildDisplay(ci, "SummaryAdmin"))); var containerItemContentDisplayName = String.Empty; if (hasRestriction) { containerItemContentDisplayName = _contentDefinitionManager.GetTypeDefinition(restrictedContentType).DisplayName; } else if (!string.IsNullOrEmpty(model.FilterByContentType)) { containerItemContentDisplayName = _contentDefinitionManager.GetTypeDefinition(model.FilterByContentType).DisplayName; } dynamic viewModel = Shape.ViewModel() .ContentItems(list) .Pager(pagerShape) .ContainerId(model.ContainerId) .Options(model.Options) .ContainerDisplayName(model.ContainerDisplayName) .HasRestriction(hasRestriction) .ContainerContentType(container.ContentType) .ContainerItemContentDisplayName(containerItemContentDisplayName) .ContainerItemContentType(hasRestriction ? restrictedContentType : (model.FilterByContentType ?? "")) .OtherLists(_contentManager.Query <ContainerPart>(VersionOptions.Latest).List() .Select(part => part.ContentItem) .Where(item => item != container) .OrderBy(item => item.As <CommonPart>().VersionPublishedUtc)); // Casting to avoid invalid (under medium trust) reflection over the protected View method and force a static invocation. return(View((object)viewModel)); }
public ActionResult List(ListOrdersViewModel model, PagerParameters pagerParameters) { if (!_orchardServices.Authorizer.Authorize(OrderPermissions.ViewOwnOrders, null, T("Cannot view own orders"))) { return(new HttpUnauthorizedResult()); } var pager = new Pager(_siteService.GetSiteSettings(), pagerParameters); var query = _contentManager.Query <OrderPart, OrderPartRecord>(VersionOptions.Latest); var states = OrderPart.States.ToList(); if (model.Options == null) { model.Options = new ContentOptions(); } if (!string.IsNullOrWhiteSpace(model.Options.Search)) { int id; query = int.TryParse(model.Options.Search, out id) ? query.Where(o => o.Id == id) : query.Where(o => o.Customer.Contains(model.Options.Search)); } var filterOption = model.Options.SelectedFilter; if (string.IsNullOrWhiteSpace(filterOption) || filterOption.Equals("active", StringComparison.OrdinalIgnoreCase)) { query = query.Where( o => o.Status != OrderPart.Archived && o.Status != OrderPart.Cancelled); } else if (!filterOption.Equals("any", StringComparison.OrdinalIgnoreCase)) { if (!states.Contains(filterOption)) { return(HttpNotFound()); } query = query.Where(o => o.Status == filterOption); } switch (model.Options.OrderBy) { case ContentsOrder.Modified: query.OrderByDescending <CommonPartRecord>(cr => cr.ModifiedUtc); break; case ContentsOrder.Created: query.OrderByDescending <CommonPartRecord>(cr => cr.CreatedUtc); break; } model.Options.FilterOptions = _orderService.StatusLabels.Select(kvp => new KeyValuePair <string, string>(kvp.Key, kvp.Value.Text)); if (!_orchardServices.Authorizer.Authorize(OrderPermissions.ViewAllOrders)) { Orchard.Security.IUser currentUser = _orchardServices.WorkContext.CurrentUser; query = query.Join <CommonPartRecord>().Where(c => c.OwnerId == currentUser.Id).Join <OrderPartRecord>(); } var pagerShape = Shape.Pager(pager).TotalItemCount(query.Count()); var pageOfContentItems = query.Slice(pager.GetStartIndex(), pager.PageSize).ToList(); var list = Shape.List(); list.AddRange(pageOfContentItems.Select(ci => _contentManager.BuildDisplay(ci, "SummaryAdmin"))); dynamic viewModel = Shape.ViewModel() .ContentItems(list) .Pager(pagerShape) .Options(model.Options); return(View((object)viewModel)); }
public ActionResult Rewriter(RewriterViewModel rewriterViewModel, PagerParameters pagerParameters) { // These Authorize() calls are mainly placeholders for future permissions, that's why they're copy-pasted around. if (!_authorizer.Authorize(Permissions.ManageSeo, T("You're not allowed to manage SEO settings."))) { return(new HttpUnauthorizedResult()); } string title; switch (rewriterViewModel.RewriterType) { case "TitleRewriter": title = T("SEO Title Tag Rewriter").Text; break; case "DescriptionRewriter": title = T("SEO Description Tag Rewriter").Text; break; case "KeywordsRewriter": title = T("SEO Keywords Tag Rewriter").Text; break; default: return(new HttpNotFoundResult()); } _orchardServices.WorkContext.Layout.Title = title; var siteSettings = _siteService.GetSiteSettings(); var pager = new Pager(siteSettings, pagerParameters); var seoContentTypes = _seoService.ListSeoContentTypes(); var query = _contentManager.Query(VersionOptions.Latest, seoContentTypes.Select(type => type.Name).ToArray()); if (!String.IsNullOrEmpty(rewriterViewModel.Q)) { IPageOfItems <ISearchHit> searchHits = new PageOfItems <ISearchHit>(new ISearchHit[] { }); try { searchHits = _searchService.Query(rewriterViewModel.Q, pager.Page, pager.PageSize, false, siteSettings.As <SearchSettingsPart>().SearchedFields, searchHit => searchHit); // Could use this: http://orchard.codeplex.com/workitem/18664 // Converting to List, because the expression should contain an ICollection var hitIds = searchHits.Select(hit => hit.ContentItemId).ToList(); query.Where <CommonPartRecord>(record => hitIds.Contains(record.Id)); } catch (Exception ex) { if (ex.IsFatal()) { throw; } _orchardServices.Notifier.Error(T("Invalid search query: {0}", ex.Message)); } } if (!string.IsNullOrEmpty(rewriterViewModel.TypeName)) { var typeDefinition = seoContentTypes.SingleOrDefault(t => t.Name == rewriterViewModel.TypeName); if (typeDefinition == null) { return(HttpNotFound()); } rewriterViewModel.TypeDisplayName = typeDefinition.DisplayName; query = query.ForType(rewriterViewModel.TypeName); } switch (rewriterViewModel.Options.OrderBy) { case ContentsOrder.Modified: query = query.OrderByDescending <CommonPartRecord>(cr => cr.ModifiedUtc); break; case ContentsOrder.Published: query = query.OrderByDescending <CommonPartRecord>(cr => cr.PublishedUtc); break; case ContentsOrder.Created: query = query.OrderByDescending <CommonPartRecord>(cr => cr.CreatedUtc); break; } rewriterViewModel.Options.SelectedFilter = rewriterViewModel.TypeName; var pagerShape = _shapeFactory.Pager(pager).TotalItemCount(query.Count()); var pageOfContentItems = query.Slice(pager.GetStartIndex(), pager.PageSize).ToList(); var list = _shapeFactory.List(); list.AddRange( pageOfContentItems.Select( item => _prefixedEditorManager.BuildShape(item, (content => _contentManager.BuildDisplay(content, "SeoSummaryAdmin-" + rewriterViewModel.RewriterType))) ) ); dynamic viewModel = _shapeFactory.ViewModel() .ContentItems(list) .Options(rewriterViewModel.Options) .Pager(pagerShape); // Casting to avoid invalid (under medium trust) reflection over the protected View method and force a static invocation, despite // being it highly unlikely with Onestop, just in case... return(View((object)viewModel)); }
public ActionResult List(ListContentsViewModel model, PagerParameters pagerParameters) { Pager pager = new Pager(_siteService.GetSiteSettings(), pagerParameters); var versionOptions = VersionOptions.Latest; switch (model.Options.ContentsStatus) { case ContentsStatus.Published: versionOptions = VersionOptions.Published; break; case ContentsStatus.Draft: versionOptions = VersionOptions.Draft; break; case ContentsStatus.AllVersions: versionOptions = VersionOptions.AllVersions; break; default: versionOptions = VersionOptions.Latest; break; } var query = _contentManager.Query(versionOptions, GetCreatableTypes(false).Select(ctd => ctd.Name).ToArray()); if (!string.IsNullOrEmpty(model.TypeName)) { var contentTypeDefinition = _contentDefinitionManager.GetTypeDefinition(model.TypeName); if (contentTypeDefinition == null) { return(HttpNotFound()); } model.TypeDisplayName = !string.IsNullOrWhiteSpace(contentTypeDefinition.DisplayName) ? contentTypeDefinition.DisplayName : contentTypeDefinition.Name; query = query.ForType(model.TypeName); } switch (model.Options.OrderBy) { case ContentsOrder.Modified: //query = query.OrderByDescending<ContentPartRecord, int>(ci => ci.ContentItemRecord.Versions.Single(civr => civr.Latest).Id); query = query.OrderByDescending <CommonPartRecord>(cr => cr.ModifiedUtc); break; case ContentsOrder.Published: query = query.OrderByDescending <CommonPartRecord>(cr => cr.PublishedUtc); break; case ContentsOrder.Created: //query = query.OrderByDescending<ContentPartRecord, int>(ci => ci.Id); query = query.OrderByDescending <CommonPartRecord>(cr => cr.CreatedUtc); break; } //query.Where(p => Authorizer.Authorize(Authorizer.Permissions.EditContent, p)); //if (!Services.Authorizer.Authorize(Permissions.EditContent, T("Not authorized to list users"))) model.Options.SelectedFilter = model.TypeName; model.Options.FilterOptions = GetCreatableTypes(false) .Select(ctd => new KeyValuePair <string, string>(ctd.Name, ctd.DisplayName)) .ToList().OrderBy(kvp => kvp.Value); var pagerShape = Shape.Pager(pager).TotalItemCount(query.List().Count(p => Services.Authorizer.Authorize(Permissions.EditContent, p))); var pageOfContentItems = query.Slice(pager.GetStartIndex(), pager.PageSize).ToList(); var list = Shape.List(); list.AddRange(pageOfContentItems.Select(ci => _contentManager.BuildDisplay(ci, "SummaryAdmin"))); var viewModel = Shape.ViewModel() .ContentItems(list) .Pager(pagerShape) .Options(model.Options) .TypeDisplayName(model.TypeDisplayName ?? ""); return(View(viewModel)); }
public ActionResult Index(ListContentsViewModel model, PagerParameters pagerParameters) { if (!Services.Authorizer.Authorize(Permissions.OShopPermissions.AccessShopPanel, T("Not allowed to manage products"))) { return(new HttpUnauthorizedResult()); } var pager = new Pager(_siteService.GetSiteSettings(), pagerParameters); var versionOptions = VersionOptions.Latest; switch (model.Options.ContentsStatus) { case ContentsStatus.Published: versionOptions = VersionOptions.Published; break; case ContentsStatus.Draft: versionOptions = VersionOptions.Draft; break; case ContentsStatus.AllVersions: versionOptions = VersionOptions.AllVersions; break; default: versionOptions = VersionOptions.Latest; break; } var productTypes = GetProductTypes(); if (productTypes.Count() == 0) { Services.Notifier.Information(T("There is no product enabled content type. Please create one.")); return(RedirectToAction("Index", "Admin", new { Area = "Orchard.ContentTypes" })); } var query = _contentManager.Query(versionOptions, productTypes.Select(ctd => ctd.Name).ToArray()); if (!string.IsNullOrEmpty(model.TypeName)) { var contentTypeDefinition = _contentDefinitionManager.GetTypeDefinition(model.TypeName); if (contentTypeDefinition == null) { return(HttpNotFound()); } model.TypeDisplayName = !string.IsNullOrWhiteSpace(contentTypeDefinition.DisplayName) ? contentTypeDefinition.DisplayName : contentTypeDefinition.Name; query = query.ForType(model.TypeName); } switch (model.Options.OrderBy) { case ContentsOrder.Modified: query = query.OrderByDescending <CommonPartRecord>(cr => cr.ModifiedUtc); break; case ContentsOrder.Published: query = query.OrderByDescending <CommonPartRecord>(cr => cr.PublishedUtc); break; case ContentsOrder.Created: query = query.OrderByDescending <CommonPartRecord>(cr => cr.CreatedUtc); break; } model.Options.SelectedFilter = model.TypeName; model.Options.FilterOptions = GetProductTypes() .Select(ctd => new KeyValuePair <string, string>(ctd.Name, ctd.DisplayName)) .ToList().OrderBy(kvp => kvp.Value); var pagerShape = Shape.Pager(pager).TotalItemCount(query.Count()); var pageOfContentItems = query.Slice(pager.GetStartIndex(), pager.PageSize).ToList(); var list = Shape.List(); list.AddRange(pageOfContentItems.Select(ci => _contentManager.BuildDisplay(ci, "SummaryAdmin"))); var viewModel = Shape.ViewModel() .ContentItems(list) .Pager(pagerShape) .Options(model.Options); return(View(viewModel)); }
protected override DriverResult Display(CustomerPart part, string displayType, dynamic shapeHelper) { bool isAdmin = AdminFilter.IsApplied(Services.WorkContext.HttpContext.Request.RequestContext); if (isAdmin) { if (!Services.Authorizer.Authorize(Permissions.OrdersPermissions.ViewOrders)) { return(null); } } else { var customer = _customersService.GetCustomer(); if (customer == null || customer.ContentItem.Id != part.ContentItem.Id || !Services.Authorizer.Authorize(Permissions.OrdersPermissions.ViewOwnOrders)) { return(null); } } if (part.ContentItem.Id > 0) { Int32 page = 0; if (Services.WorkContext.HttpContext.Request.QueryString.AllKeys.Contains(pageKey)) { Int32.TryParse(Services.WorkContext.HttpContext.Request.QueryString[pageKey], out page); } var pager = new Pager(Services.WorkContext.CurrentSite, page, null); var orders = _contentManager.Query <CustomerOrderPart, CustomerOrderPartRecord>() .Where(o => o.CustomerId == part.ContentItem.Id) .Join <CommonPartRecord>() .OrderByDescending(c => c.CreatedUtc); var pagerShape = shapeHelper.Pager(pager) .PagerId(pageKey) .TotalItemCount(orders.Count()); var list = shapeHelper.List(); if (isAdmin) { list.AddRange(orders.Slice(pager.GetStartIndex(), pager.PageSize) .Select(o => _contentManager.BuildDisplay(o, "SummaryAdmin"))); return(ContentShape("Parts_Customer_Orders_Admin", () => shapeHelper.Parts_Customer_Orders_Admin( ContentItems: list, Pager: pagerShape ))); } else { list.AddRange(orders.Slice(pager.GetStartIndex(), pager.PageSize) .Select(o => _contentManager.BuildDisplay(o, "Summary"))); return(ContentShape("Parts_Customer_Orders", () => shapeHelper.Parts_Customer_Orders( ContentItems: list, Pager: pagerShape ))); } } else { return(null); } }