Esempio n. 1
0
        /// <summary>
        /// Run a filter based on the user inputs from the Filter page including the version key values for the selected version,
        /// the list of allowed content class names, the filters and a paging spec
        /// </summary>
        /// <param name="versionFilter">list of version keys in the order they appear in VersionManager.SelectionViewModel</param>
        /// <param name="classFilter">List of content class names</param>
        /// <param name="filters">List of filters</param>
        /// <param name="pagingSpec">Specification of paging</param>
        /// <returns>A list of container x summary tuples which are the results of filtering</returns>
        public List <Tuple <object, Summary> > RunFilter(List <string> versionFilter, string[] classFilter, List <ListFilter> filters, PagingSpec pagingSpec)
        {
            if (filters == null)
            {
                filters = new List <ListFilter>();
            }

            var reqVersion = new ItemVersion();
            var u          = LyniconSecurityManager.Current.User;
            var v          = VersionManager.Instance.CurrentVersion;
            var vsvms      = VersionManager.Instance.SelectionViewModel(u, v);
            int vIdx       = 0;

            foreach (var vsvm in vsvms)
            {
                object vVal = JsonConvert.DeserializeObject(versionFilter[vIdx]);
                reqVersion.Add(vsvm.VersionKey, vVal is Int64 ? Convert.ToInt32(vVal) : vVal);
                vIdx++;
            }

            VersionManager.Instance.PushState(VersioningMode.Specific, reqVersion);

            List <Tuple <object, Summary> > pagedResult = null;

            try
            {
                var types = (classFilter ?? new string[0]).Select(c => ContentTypeHierarchy.GetAnyType(c)).ToList();

                var vm = new ItemListerViewModel();

                for (var i = 0; i < filters.Count; i++)
                {
                    filters[i].MergeOriginal(vm.Filters[filters[i].Idx]);
                }

                var containerFilters = filters.Where(f => (f.Active || f.Sort != 0) && !typeof(Summary).IsAssignableFrom(f.ApplicableType)).ToList();
                var summaryFilters   = filters.Where(f => (f.Active || f.Sort != 0) && typeof(Summary).IsAssignableFrom(f.ApplicableType)).ToList();

                var filterResult = FilterManager.Instance.GetFilterSummaries(types, containerFilters, summaryFilters);

                pagingSpec.Total = filterResult.Count;

                pagedResult = filterResult.ApplyPaging(pagingSpec).ToList();

                //var resultView = pagedResult.Select(t => new List<string> { t.Item2.Url, t.Item2.Title }).ToList();

                //foreach (var filt in filters.Where(f => f.Show))
                //{
                //    for (int i = 0; i < resultView.Count; i++)
                //        resultView[i].Add(filt.GetShowText(pagedResult[i]));
                //}
            }
            finally
            {
                VersionManager.Instance.PopState();
            }

            return(pagedResult);
        }
Esempio n. 2
0
 /// <summary>
 /// Create an ItemVersion with null values for all the keys applicable to a type
 /// </summary>
 /// <param name="type">The type for which to create the ItemVersion</param>
 /// <returns>ItemVersion with null values for all the keys applicable</returns>
 public ItemVersion VersionForType(Type type)
 {
     var iv = new ItemVersion();
     foreach (var versioner in Versioners)
         if (versioner.Versionable(type))
             iv.Add(versioner.VersionKey, null);
     return iv;
 }
Esempio n. 3
0
 /// <summary>
 /// Make the ItemVersion applicable to a given type by removing any inapplicable keys
 /// </summary>
 /// <param name="version">The original ItemVersion</param>
 /// <param name="t">The type to which to make it applicable</param>
 /// <returns>The modified, applicable ItemVersion</returns>
 public ItemVersion GetApplicableVersion(ItemVersion version, Type t)
 {
     ItemVersion res = new ItemVersion();
     foreach (var versioner in Versioners)
     {
         if (!version.ContainsKey(versioner.VersionKey))
             continue;
         if (versioner.Versionable(t))
             res.Add(versioner.VersionKey, version[versioner.VersionKey]);
     }
     return res;
 }
Esempio n. 4
0
 /// <summary>
 /// Expand the abstract version to a list of fully-specified versions
 /// with all the keys of all the registered versions
 /// </summary>
 /// <param name="iv">Abstract version to expand</param>
 /// <returns>List of fully-specified versions</returns>
 public List<ItemVersion> ContainingVersions(ItemVersion iv)
 {
     var expIv = new ItemVersion(iv);
     foreach (var versioner in Versioners)
     {
         if (!iv.ContainsKey(versioner.VersionKey))
             expIv.Add(versioner.VersionKey, null);
     }
     return expIv.Expand();
 }
Esempio n. 5
0
        public void ItemVersionOperations()
        {
            // means published English vsn
            var iv1 = new ItemVersion {
                { "Published", true }, { "Locale", "en-GB" }
            };
            // means unpublished vsn used for all locales
            var iv2 = new ItemVersion {
                { "Published", false }, { "Locale", null }
            };
            // means Spanish vsn of type which is not versionable for publishing
            var iv3 = new ItemVersion {
                { "Locale", "es-ES" }
            };

            var iv4 = iv1.GetAddressablePart();

            Assert.AreEqual(new ItemVersion {
                { "Locale", "en-GB" }
            }, iv4);

            var iv5 = iv1.GetUnaddressablePart();

            Assert.AreEqual(new ItemVersion {
                { "Published", true }
            }, iv5);

            var iv6 = iv1.GetApplicablePart(typeof(TestContent));

            Assert.AreEqual(new ItemVersion {
                { "Locale", "en-GB" }
            }, iv6);

            var iv7 = iv1.Superimpose(new ItemVersion {
                { "Published", false }, { "A", "x" }
            });

            Assert.AreEqual(true, iv1["Published"]); // does not mutate iv1
            Assert.AreEqual(new ItemVersion {
                { "Published", false }, { "Locale", "en-GB" }, { "A", "x" }
            }, iv7);

            var iv9 = new ItemVersion(iv1);

            iv9.Add("X", null);

            var iv8 = iv9.Overlay(new ItemVersion {
                { "Published", false }, { "Locale", null }
            });

            Assert.AreEqual(new ItemVersion {
                { "Published", false }, { "Locale", null }, { "X", null }
            }, iv8);
            Assert.AreEqual("en-GB", iv9["Locale"]); // does not mutate iv1

            var iv10 = iv9.Mask(new ItemVersion {
                { "Published", null }, { "Locale", "es-ES" }
            });

            Assert.AreEqual(new ItemVersion {
                { "Published", true }, { "Locale", "es-ES" }
            }, iv10);
            Assert.AreEqual("es-ES", iv10["Locale"]);
        }