/// <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)); }
/// <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); }
/// <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); }
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); } } }
/// <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; }
/// <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); }
/// <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; }