public async Task Templates_CanAllBeAdded() { await TestRunner.InsertTemplateAsync <CategoriesTemplate>(); await TestRunner.InsertTemplateAsync(new CustomersTemplate().WithCustomerID("Cust1")); await TestRunner.InsertTemplateAsync(new CustomerDemographicsTemplate().WithCustomerTypeID("Type1")); await TestRunner.InsertTemplateAsync(new CustomerCustomerDemoTemplate().WithCustomerID("Cust1").WithCustomerTypeID("Type1")); EmployeesTemplate employee = await TestRunner.InsertTemplateAsync(new EmployeesTemplate()); RegionTemplate region = await TestRunner.InsertTemplateAsync <RegionTemplate>(); await TestRunner.InsertTemplateAsync(new TerritoriesTemplate().WithTerritoryID("Terry1").WithRegionID((int)region.MergedData["RegionID"])); await TestRunner.InsertTemplateAsync(new EmployeeTerritoriesTemplate() .WithEmployeeID(employee.IdentityResolver) .WithTerritoryID("Terry1") ); await TestRunner.InsertTemplateAsync(new ProductsTemplate().WithProductID(3001)); await TestRunner.InsertTemplateAsync(new OrdersTemplate().WithOrderID(2001)); await TestRunner.InsertTemplateAsync(new Order_DetailsTemplate().WithOrderID(2001).WithProductID(3001)); await TestRunner.InsertTemplateAsync <ShippersTemplate>(); await TestRunner.InsertTemplateAsync <SuppliersTemplate>(); }
/// <summary> /// Gets the model for the template specified by the given id. /// </summary> /// <param name="id">The template id</param> /// <returns>The model</returns> public static PageEditModel GetById(Guid id) { PageEditModel m = new PageEditModel() ; m.Template = PageTemplate.GetSingle(id) ; m.Regions = RegionTemplate.Get("regiontemplate_template_id = @0", id, new Params() { OrderBy = "regiontemplate_seqno" }) ; return m ; }
/// <summary> /// Saves the model. /// </summary> /// <returns>Weather the operation succeeded</returns> public bool SaveAll() { using (IDbTransaction tx = Database.OpenTransaction()) { List <object> args = new List <object>(); string sql = ""; var isNew = Template.IsNew; // Delete all unattached properties args.Add(Template.Id); Template.Properties.Each((n, p) => { sql += (sql != "" ? "," : "") + "@" + (n + 1).ToString(); args.Add(p); }); Property.Execute("DELETE FROM property WHERE property_parent_id IN (" + "SELECT page_id FROM page WHERE page_template_id = @0) " + (sql != "" ? "AND property_name NOT IN (" + sql + ")" : ""), tx, args.ToArray()); // Save the template Template.Save(tx); // Update all regiontemplates with the id if this is an insert if (isNew) { Regions.ForEach(r => r.TemplateId = Template.Id); } // Delete removed regions templates sql = ""; args.Clear(); args.Add(Template.Id); var pos = 1; foreach (var reg in Regions) { if (reg.Id != Guid.Empty) { sql += (sql != "" ? "," : "") + "@" + pos.ToString(); args.Add(reg.Id); pos++; } } RegionTemplate.Execute("DELETE FROM regiontemplate WHERE regiontemplate_template_id = @0 " + (sql != "" ? "AND regiontemplate_id NOT IN (" + sql + ")" : ""), tx, args.ToArray()); // Save the regions foreach (var reg in Regions) { reg.Save(tx); } tx.Commit(); } // Reload regions Regions = RegionTemplate.Get("regiontemplate_template_id = @0", Template.Id, new Params() { OrderBy = "regiontemplate_seqno" }); return(true); }
/// <summary> /// Gets the model for the template specified by the given id. /// </summary> /// <param name="id">The template id</param> /// <param name="loadRegionTypes">If the region types should be loaded</param> /// <returns>The model</returns> public static PageEditModel GetById(Guid id, bool loadRegionTypes = true) { PageEditModel m = new PageEditModel(loadRegionTypes); m.Template = PageTemplate.GetSingle(id); m.Regions = RegionTemplate.Get("regiontemplate_template_id = @0", id, new Params() { OrderBy = "regiontemplate_seqno" }); return(m); }
/// <summary> /// Executes the current update. /// </summary> public void Execute(IDbTransaction tx) { foreach (var ptemplate in PageTemplate.Get(tx)) { for (int n = 0; n < ptemplate.PageRegions.Count; n++) { // Add region templates var rtemplate = new RegionTemplate() { TemplateId = ptemplate.Id, InternalId = ptemplate.PageRegions[n], Name = ptemplate.PageRegions[n], Type = typeof(Extend.Regions.HtmlRegion).FullName, Seqno = n + 1 }; rtemplate.Save(tx); // Set region template id for all related ids Region.Execute("UPDATE region SET region_regiontemplate_id = @0 WHERE region_name = @1 AND region_page_id IN " + "(SELECT page_id FROM page WHERE page_template_id = @2)", tx, rtemplate.Id, rtemplate.InternalId, rtemplate.TemplateId); } } }
public ActionResult Create(FormCollection collection) { try { // TODO: Add insert logic here string name = collection.Get("Name"); int deltawind = 0; if (collection.Get("Deltawind") != null) { deltawind = Convert.ToInt32(collection.Get("Deltawind")); } int deltatemperature = 0; if (collection.Get("Deltatemperature") != null) { deltatemperature = Convert.ToInt32(collection.Get("Deltatemperature")); } int territory = (int)Territory.Region; if (collection.Get("Territory") != null) { territory = Convert.ToInt32(collection.Get("Territory")); } RegionTemplate region = new RegionTemplate() { Name = name, Deltawind = deltawind, Deltatemperature = deltatemperature, Territory = territory }; IRepository <RegionTemplate> repo = new RegionTemplateRepository(); repo.Save(region); return(RedirectToAction("Index")); } catch (Exception ex) { ViewBag.Error = ex.Message + ex.Source + ex.StackTrace + ex.InnerException; return(View()); } }
public ActionResult Edit(int id, FormCollection collection) { try { string name = collection.Get("Name"); int deltawind = 0; if (collection.Get("Deltawind") != null) { deltawind = Convert.ToInt32(collection.Get("Deltawind")); } int deltatemperature = 0; if (collection.Get("Deltatemperature") != null) { deltatemperature = Convert.ToInt32(collection.Get("Deltatemperature")); } int territory = (int)Territory.Region; if (collection.Get("Territory") != null) { territory = Convert.ToInt32(collection.Get("Territory")); } RegionTemplate region = new RegionTemplate() { ID = id, Name = name, Deltawind = deltawind, Deltatemperature = deltatemperature, Territory = territory }; IRepository <RegionTemplate> repo = new RegionTemplateRepository(); repo.Update(region); return(RedirectToAction("Index")); } catch { return(View()); } }
/// <summary> /// Saves the current edit model. /// </summary> /// <returns>Whether the entity was updated or not</returns> public bool Save() { using (var db = new DataContext()) { InternalId = (!String.IsNullOrEmpty(InternalId) ? InternalId.Replace(" ", "") : Name.Replace(" ", "")).ToUpper() ; var site = db.SiteTrees.Where(s => s.Id == Id).SingleOrDefault() ; if (site == null) { // Create new dedicated namespace var name = new Namespace() { Id = Guid.NewGuid(), Name = "Site namespace", InternalId = InternalId, Description = "Namespace for the site " + InternalId, } ; db.Namespaces.Add(name) ; // Create site site = new SiteTree() ; site.Id = Id ; site.NamespaceId = NamespaceId = name.Id ; db.SiteTrees.Add(site) ; } // If we've changed namespace, update all related permalinks. if (site.NamespaceId != NamespaceId) ChangeNamespace(db, Id, NamespaceId) ; // Update the site tree site.NamespaceId = NamespaceId ; site.InternalId = InternalId ; site.Name = Name ; site.HostNames = HostNames ; site.Description = Description ; // Update the site template var template = db.PageTemplates.Include(pt => pt.RegionTemplates).Where(pt => pt.Id == Id && pt.IsSiteTemplate).SingleOrDefault() ; if (template == null) { template = new PageTemplate() ; db.PageTemplates.Add(template) ; template.Id = Id ; template.Name = Id.ToString() ; template.IsSiteTemplate = true ; } template.Preview = Template.Preview ; template.Properties = Template.Properties ; // Update the regions var currentRegions = new List<Guid>() ; foreach (var reg in Regions) { var region = template.RegionTemplates.Where(r => r.Id == reg.Id).SingleOrDefault() ; if (region == null) { region = new RegionTemplate() ; db.RegionTemplates.Add(region) ; template.RegionTemplates.Add(region) ; region.Id = Guid.NewGuid() ; region.TemplateId = template.Id ; region.Type = reg.Type ; } region.Name = reg.Name ; region.InternalId = reg.InternalId ; region.Seqno = reg.Seqno ; region.Description = reg.Description ; currentRegions.Add(region.Id) ; } // Delete removed regions foreach (var reg in template.RegionTemplates.Where(r => !currentRegions.Contains(r.Id)).ToList()) { db.RegionTemplates.Remove(reg) ; } // Check that we have a site page, if not, create it var page = db.Pages.Where(p => p.SiteTreeId == site.Id && p.TemplateId == site.Id).SingleOrDefault() ; if (page == null) { // Create page page = new Page() { Id = Guid.NewGuid(), SiteTreeId = site.Id, TemplateId = site.Id, ParentId = site.Id, Title = site.Id.ToString(), PermalinkId = Guid.NewGuid() } ; // Create published version var published = page.Clone() ; published.IsDraft = false ; // Create permalink var permalink = new Permalink() { Id = page.PermalinkId, NamespaceId = site.NamespaceId, Name = site.Id.ToString(), Type = "SITE" } ; // Attach to context page.Attach(db, EntityState.Added) ; published.Attach(db, EntityState.Added) ; permalink.Attach(db, EntityState.Added) ; } var ret = db.SaveChanges() > 0 ; Id = site.Id ; // Refresh host name configuration if (ret) WebPages.WebPiranha.RegisterDefaultHostNames() ; return ret ; } }
private void GetRelated() { // Clear related Regions.Clear(); Properties.Clear(); AttachedContent.Clear(); // Get group parents DisableGroups = SysGroup.GetParents(Page.GroupId); DisableGroups.Reverse(); // Get template & permalink Template = PageTemplate.GetSingle("pagetemplate_id = @0", Page.TemplateId); Permalink = Permalink.GetSingle(Page.PermalinkId); if (Permalink == null) { // Get the site tree using (var db = new DataContext()) { var sitetree = db.SiteTrees.Where(s => s.Id == Page.SiteTreeId).Single(); Permalink = new Permalink() { Id = Guid.NewGuid(), Type = Permalink.PermalinkType.PAGE, NamespaceId = sitetree.NamespaceId }; Page.PermalinkId = Permalink.Id; } } // Get placement ref title if (!IsSite) { if (Page.ParentId != Guid.Empty || Page.Seqno > 1) { Page refpage = null; if (Page.Seqno > 1) { if (Page.ParentId != Guid.Empty) { refpage = Page.GetSingle("page_parent_id = @0 AND page_seqno = @1", Page.ParentId, Page.Seqno - 1); } else { refpage = Page.GetSingle("page_parent_id IS NULL AND page_seqno = @0", Page.Seqno - 1); } } else { refpage = Page.GetSingle(Page.ParentId, true); } PlaceRef = refpage.Title; } } if (Template != null) { // Only load regions & properties if this is an original if (Page.OriginalId == Guid.Empty) { // Get regions var regions = RegionTemplate.Get("regiontemplate_template_id = @0", Template.Id, new Params() { OrderBy = "regiontemplate_seqno" }); foreach (var rt in regions) { var reg = Region.GetSingle("region_regiontemplate_id = @0 AND region_page_id = @1 and region_draft = @2", rt.Id, Page.Id, Page.IsDraft); if (reg != null) { Regions.Add(reg); } else { Regions.Add(new Region() { InternalId = rt.InternalId, Name = rt.Name, Type = rt.Type, PageId = Page.Id, RegiontemplateId = rt.Id, IsDraft = Page.IsDraft, IsPageDraft = Page.IsDraft }); } } // Get Properties foreach (string name in Template.Properties) { Property prp = Property.GetSingle("property_name = @0 AND property_parent_id = @1 AND property_draft = @2", name, Page.Id, Page.IsDraft); if (prp != null) { Properties.Add(prp); } else { Properties.Add(new Property() { Name = name, ParentId = Page.Id, IsDraft = Page.IsDraft }); } } } } else { throw new ArgumentException("Could not find page template for page {" + Page.Id.ToString() + "}"); } // Only load attachments if this is an original if (Page.OriginalId == Guid.Empty) { // Get attached content if (Page.Attachments.Count > 0) { // Content meta data is actually memcached, so this won't result in multiple queries Page.Attachments.ForEach(a => { Models.Content c = Models.Content.GetSingle(a, true); if (c != null) { AttachedContent.Add(c); } }); } } // Get page position Parents = BuildParentPages(Sitemap.GetStructure(Page.SiteTreeInternalId, false), Page); Parents.Insert(0, new PagePlacement() { Level = 1, IsSelected = Page.ParentId == Guid.Empty }); Siblings = BuildSiblingPages(Page.Id, Page.ParentId, Page.Seqno, Page.ParentId, Page.SiteTreeInternalId); // Only load extensions if this is an original if (Page.OriginalId == Guid.Empty) { // Get extensions Extensions = Page.GetExtensions(true); } // Initialize regions foreach (var reg in Regions) { reg.Body.InitManager(this); } // Get whether comments should be enabled EnableComments = Areas.Manager.Models.CommentSettingsModel.Get().EnablePages; if (!Page.IsNew && EnableComments) { using (var db = new DataContext()) { Comments = db.Comments. Where(c => c.ParentId == Page.Id && c.ParentIsDraft == false). OrderByDescending(c => c.Created).ToList(); } } // Get the site if this is a site page if (Permalink.Type == Models.Permalink.PermalinkType.SITE) { using (var db = new DataContext()) { SiteTree = db.SiteTrees.Where(s => s.Id == Page.SiteTreeId).Single(); } } // Check if the page can be published if (Page.OriginalId != Guid.Empty) { CanPublish = Page.GetScalar("SELECT count(*) FROM page WHERE page_id=@0 AND page_draft=0", Page.OriginalId) > 0; } }
/// <summary> /// Saves the current edit model. /// </summary> /// <returns>Whether the entity was updated or not</returns> public bool Save() { using (var db = new DataContext()) { InternalId = (!String.IsNullOrEmpty(InternalId) ? InternalId.Replace(" ", "") : Name.Replace(" ", "")).ToUpper(); var site = db.SiteTrees.Where(s => s.Id == Id).SingleOrDefault(); if (site == null) { // Create new dedicated namespace var name = new Namespace() { Id = Guid.NewGuid(), Name = "Site namespace", InternalId = InternalId, Description = "Namespace for the site " + InternalId, }; db.Namespaces.Add(name); // Create site site = new SiteTree(); site.Id = Id; site.NamespaceId = NamespaceId = name.Id; db.SiteTrees.Add(site); } // If we've changed namespace, update all related permalinks. if (site.NamespaceId != NamespaceId) { ChangeNamespace(db, Id, NamespaceId); } // Update the site tree site.NamespaceId = NamespaceId; site.InternalId = InternalId; site.Name = Name; site.HostNames = HostNames; site.Description = Description; // Update the site template var template = db.PageTemplates.Include(pt => pt.RegionTemplates).Where(pt => pt.Id == Id && pt.IsSiteTemplate).SingleOrDefault(); if (template == null) { template = new PageTemplate(); db.PageTemplates.Add(template); template.Id = Id; template.Name = Id.ToString(); template.IsSiteTemplate = true; } template.Preview = Template.Preview; template.Properties = Template.Properties; // Update the regions var currentRegions = new List <Guid>(); foreach (var reg in Regions) { var region = template.RegionTemplates.Where(r => r.Id == reg.Id).SingleOrDefault(); if (region == null) { region = new RegionTemplate(); db.RegionTemplates.Add(region); template.RegionTemplates.Add(region); region.Id = Guid.NewGuid(); region.TemplateId = template.Id; region.Type = reg.Type; } region.Name = reg.Name; region.InternalId = reg.InternalId; region.Seqno = reg.Seqno; region.Description = reg.Description; currentRegions.Add(region.Id); } // Delete removed regions foreach (var reg in template.RegionTemplates.Where(r => !currentRegions.Contains(r.Id)).ToList()) { db.RegionTemplates.Remove(reg); } // Check that we have a site page, if not, create it var page = db.Pages.Where(p => p.SiteTreeId == site.Id && p.TemplateId == site.Id).SingleOrDefault(); if (page == null) { // Create page page = new Page() { Id = Guid.NewGuid(), SiteTreeId = site.Id, TemplateId = site.Id, ParentId = site.Id, Title = site.Id.ToString(), PermalinkId = Guid.NewGuid() }; // Create published version var published = page.Clone(); published.IsDraft = false; // Create permalink var permalink = new Permalink() { Id = page.PermalinkId, NamespaceId = site.NamespaceId, Name = site.Id.ToString(), Type = "SITE" }; // Attach to context page.Attach(db, EntityState.Added); published.Attach(db, EntityState.Added); permalink.Attach(db, EntityState.Added); } var ret = db.SaveChanges() > 0; Id = site.Id; // Refresh host name configuration if (ret) { WebPages.WebPiranha.RegisterDefaultHostNames(); } return(ret); } }
private void GetRelated() { // Clear related Regions.Clear(); Properties.Clear(); AttachedContent.Clear(); // Get group parents DisableGroups = SysGroup.GetParents(Page.GroupId); DisableGroups.Reverse(); // Get placement ref title if (Page.ParentId != Guid.Empty || Page.Seqno > 1) { Page refpage = null; if (Page.Seqno > 1) { if (Page.ParentId != Guid.Empty) { refpage = Page.GetSingle("page_parent_id = @0 AND page_seqno = @1", Page.ParentId, Page.Seqno - 1); } else { refpage = Page.GetSingle("page_parent_id IS NULL AND page_seqno = @0", Page.Seqno - 1); } } else { refpage = Page.GetSingle(Page.ParentId, true); } PlaceRef = refpage.Title; } // Get template & permalink Template = PageTemplate.GetSingle("pagetemplate_id = @0", Page.TemplateId); Permalink = Permalink.GetSingle(Page.PermalinkId); if (Permalink == null) { Permalink = new Permalink() { Id = Guid.NewGuid(), Type = Permalink.PermalinkType.PAGE, NamespaceId = new Guid("8FF4A4B4-9B6C-4176-AAA2-DB031D75AC03") }; Page.PermalinkId = Permalink.Id; } if (Template != null) { // Get regions var regions = RegionTemplate.Get("regiontemplate_template_id = @0", Template.Id, new Params() { OrderBy = "regiontemplate_seqno" }); foreach (var rt in regions) { var reg = Region.GetSingle("region_regiontemplate_id = @0 AND region_page_id = @1 and region_draft = @2", rt.Id, Page.Id, Page.IsDraft); if (reg != null) { Regions.Add(reg); } else { Regions.Add(new Region() { InternalId = rt.InternalId, Name = rt.Name, Type = rt.Type, PageId = Page.Id, RegiontemplateId = rt.Id, IsDraft = Page.IsDraft, IsPageDraft = Page.IsDraft }); } } // Get Properties foreach (string name in Template.Properties) { Property prp = Property.GetSingle("property_name = @0 AND property_parent_id = @1 AND property_draft = @2", name, Page.Id, Page.IsDraft); if (prp != null) { Properties.Add(prp); } else { Properties.Add(new Property() { Name = name, ParentId = Page.Id, IsDraft = Page.IsDraft }); } } } else { throw new ArgumentException("Could not find page template for page {" + Page.Id.ToString() + "}"); } // Get attached content if (Page.Attachments.Count > 0) { // Content meta data is actually memcached, so this won't result in multiple queries Page.Attachments.ForEach(a => { Models.Content c = Models.Content.GetSingle(a); if (c != null) { AttachedContent.Add(c); } }); } // Get page position Parents = BuildParentPages(Sitemap.GetStructure(false), Page); Parents.Insert(0, new PagePlacement() { Level = 1, IsSelected = Page.ParentId == Guid.Empty }); Siblings = BuildSiblingPages(Page.Id, Page.ParentId, Page.Seqno, Page.ParentId); }