1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Web;
5: using EPiServer.Core;
6: using EPiServer.Filters;
7:
8: namespace EPiServer.PageProvider
9: {
10: public class FPWCProvider : PageProviderBase
11: {
12: private PropertyCriteriaCollection pcc;
13: private PageReferenceCollection pages;
14: private int maxCount;
15: private FilterSortOrder sortOrder;
16:
17: public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)
18: {
19: maxCount = int.Parse(config["maxCount"]);
20: sortOrder = FilterSortOrder.PublishedDescending;
21: if (!string.IsNullOrEmpty(config["sortOrder"]))
22: {
23: sortOrder = (FilterSortOrder)Enum.Parse(typeof(FilterSortOrder), config["sortOrder"]);
24: }
25: pcc = new PropertyCriteriaCollection();
26: PropertyCriteria pc = new PropertyCriteria();
27: pc.Name = config["propertyName"];
28: pc.Required = true;
29: pc.Type = (PropertyDataType) Enum.Parse(typeof(PropertyDataType),config["propertyType"]);
30: pc.Value = config["propertyValue"];
31: pc.Condition = (EPiServer.Filters.CompareCondition) Enum.Parse(typeof(EPiServer.Filters.CompareCondition),config["compareCondition"]);
32:
33: pcc.Add(pc);
34:
35: //Setup from config
36: base.Initialize(name, config);
37:
38: //Hook onto publish, move events. Reset Cache
39: DataFactory.Instance.PublishedPage += new PageEventHandler(Instance_PublishedPage);
40: DataFactory.Instance.MovedPage+=new PageEventHandler(Instance_PublishedPage);
41: }
42:
43: void Instance_PublishedPage(object sender, PageEventArgs e)
44: {
45: pages = null;
46: }
47:
48:
49: protected override void SetCacheSettings(PageReference pageLink, PageReferenceCollection childrenReferences, CacheSettings cacheSettings)
50: {
51: cacheSettings.CancelCaching = true;
52: }
53:
54:
55:
56: private PageReferenceCollection GetPages()
57: {
58: if (pages == null)
59: {
60: pages = new PageReferenceCollection();
61: var n = DataFactory.Instance.FindPagesWithCriteria(PageReference.StartPage, pcc);
62: FilterSort fs = new FilterSort(sortOrder);
63: fs.Filter(n);
64: FilterCount fc = new FilterCount(maxCount);
65: fc.Filter(n);
66:
67: var t = n.Select(p => p.PageLink).ToArray();
68: pages.AddRange(t);
69: return pages;
70: }
71: else return pages;
72: }
73:
74: protected override PageReferenceCollection GetChildrenReferences(PageReference pageLink, string languageID)
75: {
76: if (pageLink == EntryPoint)
77: {
78: PageReferenceCollection prc = new PageReferenceCollection();
79: var t=DataFactory.Instance.FindPagesWithCriteria(PageReference.StartPage, pcc).Select(p => p.PageLink).ToArray();
80: prc.AddRange(t);
81: return prc;
82: }
83: else return new PageReferenceCollection();
84: }
85:
86: protected override PageData GetLocalPage(PageReference pageLink, ILanguageSelector languageSelector)
87: {
88: return DataFactory.Instance.GetPage(pageLink);
89: }
90:
91: protected override Uri ResolveLocalPage(PageReference pageLink, out Guid guid)
92: {
93: guid = Guid.Empty;
94: return null;
95: }
96:
97: protected override Uri ResolveLocalPage(Guid pageGuid, out PageReference pageLink)
98: {
99: pageLink = PageReference.EmptyReference;
100: return null;
101: }
102: }
103: }