Пример #1
0
        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
                                    )));
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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));
        }
Пример #6
0
        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));
        }
Пример #7
0
        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));
        }
Пример #8
0
        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));
        }
Пример #9
0
        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));
        }
Пример #10
0
        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));
        }
Пример #11
0
        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);
            }
        }