/// <summary>
        /// Copy current page as a new page instance.
        /// </summary>
        /// <param name="targetCulture"></param>
        /// <returns></returns>
        public WebPageDecorator Clone(string targetCulture = "")
        {
            var locale  = string.IsNullOrEmpty(targetCulture) ? this.Locale : targetCulture;
            var web     = Context.Find <Web>(WebID);
            var newPage = new WebPage();

            newPage.Populate(this.Model);

            newPage.WebID    = web.Id;
            newPage.ParentID = this.ParentID;
            newPage.Owner    = this.Owner;

            if (!string.IsNullOrEmpty(locale))
            {
                newPage.Locale = locale;
            }

            var slugs = Context.WebPages.Filter(p => p.Locale.Equals(newPage.Locale, StringComparison.OrdinalIgnoreCase) &&
                                                //p.ID != this.ID &&
                                                p.WebID.Equals(newPage.WebID)).Select(p => p.Slug).ToArray();

            var slug = TextUtility.Slug(newPage.Title);

            newPage.Slug = slug;

            var i = 0;

            while (slugs.Contains(newPage.Slug))
            {
                newPage.Slug = slug + "-" + (i++).ToString();
            }

            Context.WebPages.Create(newPage);
            Context.SaveChanges();

            //Generate path
            if (this.ParentID == 0)
            {
                newPage.Path = "0/" + newPage.ID;
            }
            else
            {
                newPage.Path = this.Parent.Path + "/" + newPage.ID;
            }

            Context.SaveChanges();

            //Copy roles
            if (Model.Roles != null && Model.Roles.Count() > 0)
            {
                Context.WebPages.AddRoles(newPage.ID, this.Roles);
            }

            //Copy widgets
            if (Model.Widgets != null && Model.Widgets.Count() > 0)
            {
                foreach (var w in Model.Widgets)
                {
                    if (w.ShowMode > 0)
                    {
                        continue;
                    }
                    var nw = w.Clone(locale);
                    nw.PageID = newPage.ID;
                    Context.Widgets.Create(nw);
                    if (w.Roles != null && w.Roles.Count > 0)
                    {
                        var widgetWrapper = new WidgetInstanceDecorator(nw, Context.Widgets);
                        var _roles        = w.Roles.Select(r => r.Name).ToArray();
                        widgetWrapper.AddRoles(_roles);
                    }
                }
                Context.SaveChanges();
            }

            var newresult = new WebPageDecorator(newPage, Context);

            newresult.UpdatePositions();
            return(newresult);
        }
Exemple #2
0
        /// <summary>
        /// Copy current page as a new page instance.
        /// </summary>
        /// <param name="targetCulture"></param>
        /// <returns></returns>
        public WebPageDecorator Clone(string targetCulture = "")
        {
            var locale = string.IsNullOrEmpty(targetCulture) ? this.Locale : targetCulture;
            var web = Context.Find<Web>(WebID);
            var newPage = new WebPage();
            newPage.Populate(this.Model);

            newPage.WebID = web.Id;
            newPage.ParentID = this.ParentID;
            newPage.Owner = this.Owner;

            if (!string.IsNullOrEmpty(locale))
                newPage.Locale = locale;

            var slugs = Context.WebPages.Filter(p => p.Locale.Equals(newPage.Locale, StringComparison.OrdinalIgnoreCase) &&
                //p.ID != this.ID &&
                p.WebID.Equals(newPage.WebID)).Select(p => p.Slug).ToArray();

            var slug = TextUtility.Slug(newPage.Title);
            newPage.Slug = slug;

            var i = 0;
            while (slugs.Contains(newPage.Slug))
                newPage.Slug = slug + "-" + (i++).ToString();

            Context.WebPages.Create(newPage);
            Context.SaveChanges();

            //Generate path
            if (this.ParentID == 0)
                newPage.Path = "0/" + newPage.ID;
            else
            {
                newPage.Path = this.Parent.Path + "/" + newPage.ID;
            }

            Context.SaveChanges();

            //Copy roles
            if (Model.Roles != null && Model.Roles.Count() > 0)
                Context.WebPages.AddRoles(newPage.ID, this.Roles);

            //Copy widgets
            if (Model.Widgets != null && Model.Widgets.Count() > 0)
            {
                foreach (var w in Model.Widgets)
                {
                    if (w.ShowMode > 0) continue;
                    var nw = w.Clone(locale);
                    nw.PageID = newPage.ID;
                    Context.Widgets.Create(nw);
                    if (w.Roles != null && w.Roles.Count > 0)
                    {
                        var widgetWrapper = new WidgetInstanceDecorator(nw, Context.Widgets);
                        var _roles = w.Roles.Select(r => r.Name).ToArray();
                        widgetWrapper.AddRoles(_roles);
                    }
                }
                Context.SaveChanges();
            }

            var newresult = new WebPageDecorator(newPage, Context);
            newresult.UpdatePositions();
            return newresult;
        }