/// <summary>
        /// Handles the page copy.
        /// </summary>
        private void HandlePageCopy()
        {
            String   mainValueQueryEvent = Process.QueryEvents["mainvalue"];
            SiteTree siteTree            = new SiteTree(Process);

            siteTree.CopyTo(mainValueQueryEvent);
        }
        /// <summary>
        /// Handles the page move.
        /// </summary>
        private void HandlePageMove()
        {
            String   newParentPath = Process.QueryEvents["mainvalue"];
            String   path          = Process.QueryData["pageidentifier"];
            SiteTree siteTree      = new SiteTree(Process);

            siteTree.Move(path, newParentPath);
        }
        /// <summary>
        /// Handles the page remove container.
        /// </summary>
        private void HandlePageRemoveContainer()
        {
            Page   currentPage         = new SiteTree(Process).GetPage(Process.QueryData["pageidentifier"]);
            String mainValueQueryEvent = Process.QueryEvents["mainvalue"];

            currentPage.Containers.Remove(int.Parse(mainValueQueryEvent) - 1);
            currentPage.Save();
        }
        /// <summary>
        /// Handles the move down.
        /// </summary>
        private void HandleMoveElementDown()
        {
            Page   currentPage = new SiteTree(Process).GetPage(Process.QueryData["pageidentifier"]);
            String element     = Process.QueryEvents["mainvalue"];

            String[] elementParts = element.Split('-');

            currentPage.Containers[int.Parse(elementParts[1]) - 1].Elements.MoveDown(int.Parse(elementParts[2]) - 1);
            currentPage.Save();
        }
        // >>> new save form handler by Kiho
        private void HandleAddComment()
        {
            Page   currentPage = new SiteTree(Process).GetPage(Process.QueryData["pageidentifier"]);
            string element     = Process.QueryEvents["mainvalue"];

            string[] list        = element.Split('_');
            string   elementname = Process.QueryData["container_" + list[1]];

            HandleCommentElement(currentPage.Containers[int.Parse(list[1]) - 1].Elements.Create(elementname));
            currentPage.Save();
        }
        /// <summary>
        /// Handles the add element.
        /// </summary>
        private void HandleAddElement()
        {
            Page   currentPage = new SiteTree(Process).GetPage(Process.QueryData["pageidentifier"]);
            String query       = Process.QueryEvents["mainvalue"];

            String[] elementParts = query.Split('_');
            String   elementType  = elementParts[0];
            int      containerId  = int.Parse(elementParts[1]);

            currentPage.Containers[containerId - 1].Elements.Create(elementType, String.Empty, false);
            currentPage.Save();
        }
        /// <summary>
        /// Handles the page create container.
        /// </summary>
        private void HandlePageCreateContainer()
        {
            Page currentPage = new SiteTree(Process).GetPage(Process.QueryData["pageidentifier"]);

            String query = Process.QueryEvents["mainvalue"];

            query = Common.CleanToSafeString(query).ToLower();

            Container container = currentPage.Containers[query];

            currentPage.Save();
        }
Esempio n. 8
0
        public static async Task <SiteTree> CreateSite(I_Content_Service cs, I_Puck_Repository repo, string rootName, List <string> variants, List <bool> variantIsPublished, int levels, int branches, string username)
        {
            var tree = new SiteTree();

            tree.Level  = 1;
            tree.Branch = 1;
            for (var i = 0; i < variants.Count; i++)
            {
                var published = variantIsPublished[i];
                var root      = await cs.Create <Folder>(Guid.Empty, variants[i], rootName, template : "template.cshtml", published : published, userName : username);

                await cs.SaveContent(root, triggerEvents : false, userName : username);

                var revision = repo.CurrentRevision(root.Id, root.Variant);
                tree.Variants.Add(revision);
            }

            async Task CreateLevel(int level, SiteTree ctree)
            {
                if (level > levels)
                {
                    return;
                }
                for (var j = 0; j < branches; j++)
                {
                    var btree = new SiteTree();
                    btree.Level  = level;
                    btree.Branch = j + 1;
                    for (var k = 0; k < variants.Count; k++)
                    {
                        var published = variantIsPublished[k];
                        var model     = await cs.Create <Folder>(ctree.Variants.First().Id, variants[k], (j + 1).ToString(), template : "template.cshtml", published : published, userName : username);

                        await cs.SaveContent(model, triggerEvents : false, userName : username);

                        var revision = repo.CurrentRevision(model.Id, model.Variant);
                        btree.Variants.Add(revision);
                    }
                    ctree.Children.Add(btree);
                    await CreateLevel(level + 1, btree);
                }
            }

            await CreateLevel(2, tree);

            return(tree);
        }
        /// <summary>
        /// Handles the add page.
        /// </summary>
        private void HandleAddPage()
        {
            String mainvalue = Process.QueryEvents["mainvalue"];

            String[] pathSplit = mainvalue.Split('*');
            String   path      = pathSplit[0];
            String   pageName  = pathSplit[1];

            SiteTree siteTree = new SiteTree(Process);

            if (!siteTree.Exists(path + "/" + pageName))
            {
                siteTree.Create(path, pageName, pageName);
            }
            else
            {
                Process.AddMessage("A page with that name already exists.");
            }
        }
Esempio n. 10
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 ;
			}
		}
        /// <summary>
        /// Handles the save.
        /// </summary>
        private void HandleSave()
        {
            String elementName = String.Empty;
            Page   currentPage = new SiteTree(Process).GetPage(Process.QueryData["pageidentifier"]);

            for (int i = 0; i < Process.QueryData.Count; i++)
            {
                Query    query      = Process.QueryData[i];
                String[] queryParts = query.Name.Split('_');

                if (queryParts.Length > 1)
                {
                    switch (queryParts[0])
                    {
                    case "attribute":
                        if (queryParts[1].EndsWith("-list"))
                        {
                            XmlNode xmlNode = currentPage.GetAttribute(queryParts[1]);
                            xmlNode.InnerText = String.Empty;
                            foreach (String tmpString in query.Value.Split('\n'))
                            {
                                CommonXml.GetNode(xmlNode, "item", EmptyNodeHandling.ForceCreateNew).InnerText = tmpString;
                            }
                        }
                        else
                        {
                            currentPage[queryParts[1]] = query.Value;
                        }
                        break;

                    case "element":
                        Container container = currentPage.Containers[int.Parse(queryParts[1]) - 1];

                        if (queryParts[3].EndsWith("-list"))
                        {
                            XmlNode xmlNode = CommonXml.GetNode(container.Elements[int.Parse(queryParts[2]) - 1].Node, queryParts[3]);
                            xmlNode.InnerText = String.Empty;
                            foreach (String tmpString in query.Value.Split('\n'))
                            {
                                if (tmpString != String.Empty)
                                {
                                    XmlNode tmpNode = CommonXml.GetNode(xmlNode, "item", EmptyNodeHandling.ForceCreateNew);
                                    tmpNode.InnerText = tmpString;
                                    CommonXml.AppendAttribute(tmpNode, "id", Common.CleanToSafeString(tmpString));
                                }
                            }
                        }
                        else
                        {
                            if (elementName != query.Name.Substring(0, query.Name.LastIndexOf('_')))
                            {
                                elementName = query.Name.Substring(0, query.Name.LastIndexOf('_'));
                                container.Elements[int.Parse(queryParts[2]) - 1].Publish = false.ToString(CultureInfo.InvariantCulture).ToLower();
                            }

                            if (query.Name.EndsWith("elementtitle"))
                            {
                                container.Elements[int.Parse(queryParts[2]) - 1].Name = query.Value;
                            }
                            else if (query.Name.EndsWith("elementpublish"))
                            {
                                container.Elements[int.Parse(queryParts[2]) - 1].Publish = query.Value.ToLower() == "publish"
                                        ? true.ToString(CultureInfo.InvariantCulture).ToLower()
                                        : false.ToString(CultureInfo.InvariantCulture).ToLower();
                            }
                            else
                            {
                                container.Elements[int.Parse(queryParts[2]) - 1][queryParts[3]] = query.Value;
                            }
                        }
                        break;
                    }
                }
            }

            currentPage.Save();
        }
Esempio n. 12
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);
            }
        }