Exemple #1
0
        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>();
        }
Exemple #2
0
		/// <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);
        }
Exemple #4
0
        /// <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);
        }
Exemple #5
0
		/// <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());
            }
        }
Exemple #8
0
        /// <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);
                }
            }
        }
		/// <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 ;
			}
		}
Exemple #10
0
        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;
            }
        }
Exemple #11
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);
            }
        }
Exemple #12
0
        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);
        }