コード例 #1
0
        /// <summary>
        /// Create widget instance to specified web page.
        /// </summary>
        /// <param name="page">The page that contains the new widget.</param>
        /// <param name="zoneID">The widget zone id.</param>
        /// <param name="pos">The position index of the widget in the zone.</param>
        /// <returns>A widget instance </returns>
        public WidgetInstanceDecorator InstantiateIn(WebPage page, string zoneID, int pos = 0)
        {
            if (page == null)
            {
                throw new ArgumentNullException("page");
            }

            if (string.IsNullOrEmpty(zoneID))
            {
                throw new ArgumentNullException("zoneID");
            }

            var pageWrapper = new WebPageDecorator(page, Context);

            return(pageWrapper.Widgets.Add(this.ID, zoneID, pos));
        }
コード例 #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);
        }
コード例 #3
0
        /// <summary>
        /// Returns the widget instances of the specified page.
        /// </summary>
        /// <remarks>
        /// REST API: GET /api/widgets
        /// see : http://www.dotnetage.com/doc/dna/api-widget-list.html
        /// </remarks>
        /// <param name="url"></param>
        /// <returns></returns>
        public ActionResult Index(Uri url, int id = 0)
        {
            WebPage page = null;
            if (id == 0)
            {
                ///TODO: Find the custom MVC WebPage
                //var routeData = _context.FindRoute(url);
                //if (routeData != null)
                //    page = _context.FindWebPage(url, routeData);
            }
            else
                page = dataContext.WebPages.Find(id);

            if (page == null)
                return Json(new { error = "Page not found" }, JsonRequestBehavior.AllowGet);

            //Auth
            if (page.Web.IsRoot)
            {
                if (!page.Owner.Equals(User.Identity.Name) && !App.Get().Context.HasPermisson(this, "Explorer"))
                    return Json(new { error = "You have not enough permission to get this page." }, JsonRequestBehavior.AllowGet);
            }
            else
            {
                if (!page.Owner.Equals(User.Identity.Name))
                    return Json(new { error = "You have not enough permission to get this page." }, JsonRequestBehavior.AllowGet);
            }

            var p = new WebPageDecorator(page, dataContext);
            //var inPageWidgets=p.Widgets.ToList();
            //dataContext.Where<Widget>(f=>f.
            return Json(p.Widgets.Select(w => w.ToObject(HttpContext, page.Locale, this.CurrentWebName())), JsonRequestBehavior.AllowGet);
        }
コード例 #4
0
        private void RecurseClone(int parentID, WebPageDecorator parentPage, IEnumerable<WebPageDecorator> sources, string locale)
        {
            var pages = sources.Where(p => p.ParentID.Equals(parentID)).OrderByDescending(p => p.Pos);
            if (pages.Count() > 0)
            {
                foreach (var p in pages)
                {
                    if (p.Slug.StartsWith("lists"))
                        continue;

                    var newPage = p.Clone(locale);

                    if (parentPage != null)
                        newPage.MoveTo(parentPage.ID);
                    else
                        newPage.MoveTo(0);

                    RecurseClone(p.ID, newPage, sources, locale);
                }
            }
        }
コード例 #5
0
ファイル: WebDecorator.cs プロジェクト: howej/dotnetage
        /// <summary>
        /// Create a new web page for content view
        /// </summary>
        /// <param name="view">The content view </param>
        /// <param name="parentId">The parent page id.</param>
        /// <param name="title">The page title</param>
        /// <param name="desc">The page description</param>
        /// <returns>A web page decorator object that wrapps the web page model.</returns>
        public WebPageDecorator CreatePage(ContentViewDecorator view, int parentId = 0, string title = "", string desc = "")
        {
            var slugFormatted = string.Format("lists/{0}/views/{1}", view.Parent.Name, view.Name);
            var locale = view.Parent.Locale;

            var existingPage = FindPage(locale, slugFormatted);

            if (existingPage != null)
                return new WebPageDecorator(existingPage, Context);

            var newpage = new WebPage()
            {
                Slug = slugFormatted,
                IsShared = false,
                IsStatic = false,
                Title = view.IsDefault ? view.Parent.Title : view.Title,
                Description = view.Description,
                ShowInMenu = false,
                ShowInSitemap = true,
                AllowAnonymous = true,
                Created = DateTime.Now,
                LastModified = DateTime.Now,
                WebID = this.Id,
                Owner = this.Owner,
                Dir = this.Dir,
                Locale = locale,
                ParentID = parentId
            };

            if (!string.IsNullOrEmpty(title))
                newpage.Title = title;

            if (!string.IsNullOrEmpty(desc))
                newpage.Description = desc;

            Context.Add(newpage);
            Context.SaveChanges();
            if (parentId > 0)
            {
                var parentPage = Context.Find<WebPage>(parentId);
                if (parentPage != null)
                {
                    newpage.Path = parentPage.Path + "/" + newpage.ID.ToString();
                    Context.SaveChanges();
                }
            }

            if (string.IsNullOrEmpty(newpage.Path))
            {
                newpage.Path = "0/" + newpage.ID.ToString();
            }

            #region create static widgets
            var app = App.Get();
            var listInfoDescriptor = app.Descriptors[@"content\listinfo"];
            var listInfoWidget = app.AddWidgetTo(this.Name, newpage.ID, listInfoDescriptor.ID, "ContentZone", 0);
            listInfoWidget.ShowHeader = false;
            listInfoWidget.ShowBorder = false;
            listInfoWidget.Title = view.Parent.Title;
            listInfoWidget.SetUserPreference("listName", view.Parent.Name);
            listInfoWidget.SetUserPreference("showTitle", false);
            listInfoWidget.SetUserPreference("showTools", true);
            listInfoWidget.Save();

            //create view widget
            var viewDescriptor = app.Descriptors[@"content\dataview"];
            var viewWidget = app.AddWidgetTo(this.Name, newpage.ID, viewDescriptor.ID, "ContentZone", 1);
            viewWidget.ShowHeader = false;
            viewWidget.ShowBorder = false;
            viewWidget.IsStatic = true;
            viewWidget.Title = view.Title;
            viewWidget.SetUserPreference("listName", view.Parent.Name);
            viewWidget.SetUserPreference("viewName", view.Name);
            viewWidget.SetUserPreference("allowFiltering", false);
            viewWidget.SetUserPreference("allowSorting", false);
            viewWidget.SetUserPreference("allowPaging", view.AllowPaging);
            viewWidget.SetUserPreference("pagingInfo", true);
            viewWidget.SetUserPreference("pageIndex", view.PageIndex);
            viewWidget.SetUserPreference("pageSize", view.PageSize);
            viewWidget.Save();

            #endregion

            var pageWrapper = new WebPageDecorator(newpage, Context);
            if (view.Roles != null && view.Roles.Count() > 0)
                pageWrapper.AddRoles(pageWrapper.Roles);

            //Context.SaveChanges();
            pageWrapper.UpdatePositions();
            app.CurrentWeb.ClearCache();
            return pageWrapper;
        }
コード例 #6
0
        /// <summary>
        /// Create widget instance to specified web page.
        /// </summary>
        /// <param name="page">The page that contains the new widget.</param>
        /// <param name="zoneID">The widget zone id.</param>
        /// <param name="pos">The position index of the widget in the zone.</param>
        /// <returns>A widget instance </returns>
        public WidgetInstanceDecorator InstantiateIn(WebPage page, string zoneID, int pos = 0)
        {
            if (page == null)
                throw new ArgumentNullException("page");

            if (string.IsNullOrEmpty(zoneID))
                throw new ArgumentNullException("zoneID");

            var pageWrapper = new WebPageDecorator(page, Context);
            return pageWrapper.Widgets.Add(this.ID, zoneID, pos);
        }
コード例 #7
0
ファイル: WebPageDecorator.cs プロジェクト: howej/dotnetage
        /// <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;
        }