private void LoadAvailableWebsitePagesFromReports() { foreach (var reportModel in ManageViewModel.AllAvailableReports) { foreach (var rPage in reportModel.Report.WebsitePages) { //var aWebsitePageModel = ManageViewModel.AllAvailableWebsitePages.FirstOrDefault(wpm => wpm.WebsitePageName == rPage.Name); var aWebsitePageModel = ManageViewModel.AllAvailableWebsitePages.FirstOrDefault(wpm => { if (wpm.PageType == WebsitePageTypeEnum.Static) { return(wpm.WebsitePageName == rPage.Name); } else if (wpm.PageType == WebsitePageTypeEnum.Report) { return(wpm.ReportName == reportModel.Report.Name); // rPage.Report.Name; // For whatever reason, this link is broken. I.e. the ReportPage does not have a link back up to the Report. } else { return(false); } }); if (aWebsitePageModel == null) { aWebsitePageModel = new WebsitePageModel(); ManageViewModel.AllAvailableWebsitePages.Add(aWebsitePageModel); } aWebsitePageModel.WebsitePages.AddIfUnique( new WebsitePage( WebsitePageTypeEnum.Report, rPage.Name, reportModel.Name, rPage.Audience, rPage.Path, rPage.Path, rPage.Url, rPage.IsEditable), (wp, rwp) => wp.Audience == rwp.Audience); var aWebsitePage = aWebsitePageModel.WebsitePages.FirstOrDefault(wp => wp.Audience == rPage.Audience); foreach (var rZone in rPage.WebsitePageZones) { var aZone = aWebsitePage.Zones.FirstOrDefault(z => z.Name == rZone.Name); if (aZone == null) { aZone = new WebsitePageZone( WebsitePageZoneTypeEnum.Zone, rZone.Name, rZone.CodePath, rPage.Audience); aWebsitePage.Zones.Add(aZone); } } } } }
private void LoadAvailableWebsitePagesFromBaseData() { var baseWebsitePages = WebsiteDataService.GetBaseDataWebsitePages(BDWebsitePageQueryExpression); var baseWebsitePageZones = WebsiteDataService.GetBaseDataWebsitePageZones(_ => true); foreach (var bWebsitePage in baseWebsitePages) { // Find the baseWebsitePage's WebsitePage in AvailableWebsitePages; if cannot find, add it to the AvailableWebsitePages list. var aWebsitePageModel = ManageViewModel.AllAvailableWebsitePages.FirstOrDefault(wpm => wpm.WebsitePageName == bWebsitePage.Name); if (aWebsitePageModel == null) { aWebsitePageModel = new WebsitePageModel(new WebsitePage(bWebsitePage), false); ManageViewModel.AllAvailableWebsitePages.Add(aWebsitePageModel); } else { aWebsitePageModel.WebsitePages.AddIfUnique(new WebsitePage(bWebsitePage), (a, b) => a.Audience == b.Audience); } // Find the WebsitePage and BaseWebsitePageZones (using Name[from above] and Audience[below]) var aWebsitePage = aWebsitePageModel.WebsitePages.First(wp => wp.Audience == bWebsitePage.Audience); var bZones = baseWebsitePageZones.Where(bZone => bZone.WebsitePageName == aWebsitePage.Name && bZone.Audience == aWebsitePage.Audience); // Add BaseZones to their respective WebsitePage in AllAvailableWebsitePages. foreach (var bZone in bZones) { var aZone = aWebsitePage.Zones.FirstOrDefault(z => z.Name == bZone.Name); if (aZone == null) { aZone = new WebsitePageZone(bZone); aWebsitePage.Zones.Add(aZone); } } } }
private void ComputeWebsitePageList() { if (CurrentWebsite == null) { return; } // Start with the loaded 'modified' WebsitePages. // - Care has to be taken that: // A) (for Static Pages,) Pages with the same name get added to the same WebsitePageModel. or // B) (for Report Pages,) Pages with the same Report get added to the same WebsitePageModel // - ^^ (A) happens because in DB, pages are considered unique per Audience. // - ^^ (B) happens because we currently allow Headers/Footers, to be edited at the Report (per Audience) level. WebsitePageModels.Clear(); CurrentWebsite.WebsitePages.ForEach(wp => { //var model = WebsitePageModels.FirstOrDefault(wpm => wpm.WebsitePageName == wp.Name); var model = WebsitePageModels.FirstOrDefault(wpm => { if (wpm.PageType == WebsitePageTypeEnum.Static) { return(wpm.WebsitePageName == wp.Name); } else if (wpm.PageType == WebsitePageTypeEnum.Report) { return(wpm.ReportName == wp.ReportName); } else { return(false); } }); if (model == null) { model = new WebsitePageModel(); WebsitePageModels.Add(model); } model.WebsitePages.Add(new WebsitePage(wp)); model.IsModified = true; }); // Insert any missing/unmodified WebsitePages from Available List (BaseData). foreach (var aWebsitePageModel in ManageViewModel.AllAvailableWebsitePages) { //var oWebsitePageModel = WebsitePageModels.FirstOrDefault(wpm => wpm.WebsitePageName == aWebsitePageModel.WebsitePageName); var oWebsitePageModel = WebsitePageModels.FirstOrDefault(wpm => { if (wpm.PageType == WebsitePageTypeEnum.Static) { return(wpm.WebsitePageName == aWebsitePageModel.WebsitePageName); } else if (wpm.PageType == WebsitePageTypeEnum.Report) { return(wpm.ReportName == aWebsitePageModel.ReportName); } else { return(false); } }); if (oWebsitePageModel == null) { oWebsitePageModel = new WebsitePageModel(aWebsitePageModel); WebsitePageModels.Add(oWebsitePageModel); continue; // We're adding the entire PageModel from BaseData, thus we have all the Pages(by audience) and their zones also. } foreach (var aPage in aWebsitePageModel.WebsitePages) { var oWebsitePage = oWebsitePageModel.WebsitePages.FirstOrDefault(wp => wp.Audience == aPage.Audience && wp.Name == aPage.Name); if (oWebsitePage == null) { oWebsitePage = new WebsitePage(aPage); oWebsitePageModel.WebsitePages.Add(oWebsitePage); } foreach (var aZone in aPage.Zones) { var oZone = oWebsitePage.Zones.FirstOrDefault(c => c.Name == aZone.Name); if (oZone == null) { oZone = new WebsitePageZone(aZone); oWebsitePage.Zones.Add(oZone); } } } } // Filter out: // Any Pages that are not associated with one of this websites selected Audiences. // Any (Report) Pages that are not associated with one of the websites selected Reports. // Any Model that does not have at least one Editable Page. WebsitePageModels = WebsitePageModels.Where(wpm => { return (CurrentWebsite.Audiences.ContainsAny(wpm.Audiences) && (wpm.WebsitePages[0].PageType == WebsitePageTypeEnum.Static || wpm.WebsitePages[0].PageType == WebsitePageTypeEnum.Report && CurrentWebsite.Reports.Any(r => { // We are forced to check Report.Datasets here because CurrentWebsite.Reports are not kept up to date; // particularly on Dataset delete. return wpm.WebsitePages[0].ReportName == r.Report.Name && CurrentWebsite.Datasets.AnyIn(r.Report.Datasets, (cwd, rd) => cwd.Dataset.ContentType.Name == rd); }) ) && wpm.WebsitePages.Any(wp => wp.IsEditable)); //return // CurrentWebsite.Audiences.Any(a => wpm.WebsitePage.Audiences.Contains(a)) && // CurrentWebsite.Reports.Any(r => // { // return // wpm.WebsitePage.PageType == WebsitePageTypeEnum.Static || // wpm.WebsitePage.ReportName == r.Report.Name; // }); }).ToList(); InitializeWebsitePageView(); }