internal static void SaveViewTable(ContentViewDecorator view, DataTable table) { var listPath = App.Get().NetDrive.MapPath(view.Parent.DefaultListPath); var viewFile = Path.Combine(listPath, "cache", "view_" + view.Name + ".xml"); table.WriteXml(viewFile); }
/// <summary> /// Converts the content view url virtual (relative) path to an application absolute path. /// </summary> /// <param name="helper">The url helper object.</param> /// <param name="view">The view object</param> /// <returns>A absolute url of content view.</returns> public static string Content(this UrlHelper helper, ContentViewDecorator view) { if (view == null) throw new ArgumentNullException("view"); if (!string.IsNullOrEmpty(view.Url)) return helper.Content(view.Url); return "javascript:void(0);"; }
/// <summary> /// Initializes a new instance of the ContentFieldRef class. /// </summary> /// <param name="parent">The parent view object.</param> /// <param name="field">The content field.</param> public ContentFieldRef(ContentViewDecorator parent, ContentField field) { this.ParentView = parent; this.Parent = parent.Parent; field.CopyTo(this, "Parent"); isFilterable = field.IsFilterable; this.Field = field; Template = new ContentTemplate(); if (field.HasViewTemplate) Template.Source = field.ViewTemplate; }
/// <summary> /// Add children nodes to specified parent element. /// </summary> /// <param name="parent">The parent xml element.</param> /// <param name="results">The item query result.</param> /// <param name="view">The view object</param> /// <param name="currentPath">The current data item path.</param> /// <param name="dynamicLoad">Specified the tree node load on demand.</param> public static void AddChildren(XElement parent, ContentQueryResult results, ContentViewDecorator view, string currentPath, bool dynamicLoad = true) { var Url = DNA.Utility.UrlUtility.CreateUrlHelper(); var fieldName = view.Parent.GetDefaultTitleField().Name; foreach (var item in results) { var hasChildren = item.HasChildren; var element = new XElement("li"); parent.Add(element); if (hasChildren) element.Add(new XAttribute("class", "d-node d-node-hasChildren")); else element.Add(new XAttribute("class", "d-node")); var isInPath = false; if (!string.IsNullOrEmpty(currentPath) && !string.IsNullOrEmpty(item.Path) && currentPath.StartsWith(item.Path)) { isInPath = true; if (hasChildren) element.Add(new XAttribute("data-expanded", "true")); if (item.Path==currentPath) element.Add(new XAttribute("data-selected", "true")); } element.Add(new XAttribute("data-id", item.ID.ToString())); if (item.ParentID != Guid.Empty) element.Add(new XAttribute("data-parentid", item.ParentID.ToString())); var linkElement = new XElement("a", new XAttribute("href", item.UrlComponent), item[fieldName]); element.Add(linkElement); if (hasChildren) { if (!isInPath && dynamicLoad) { var urlformat = "~/api/{0}/contents/items?name={1}&slug={2}&parentId={3}"; var popupUrl = Url.Content(string.Format(urlformat, view.Parent.Web.Name, view.Parent.Name, view.Name, item.ID.ToString())); element.Add(new XAttribute("data-popupurl", popupUrl)); } else { var childrenElement = new XElement("ul"); element.Add(childrenElement); AddChildren(childrenElement, view.Items(string.Format("parentId='{0}'", item.ID.ToString())), view, currentPath); } } } }
/// <summary> /// Initializes a new instance of the ContentFieldRef class. /// </summary> /// <param name="parent">The parent view object.</param> /// <param name="field">The content field.</param> public ContentFieldRef(ContentViewDecorator parent, ContentField field) { this.ParentView = parent; this.Parent = parent.Parent; field.CopyTo(this, "Parent"); isFilterable = field.IsFilterable; this.Field = field; Template = new ContentTemplate(); if (field.HasViewTemplate) { Template.Source = field.ViewTemplate; } }
public ActionResult Save(int id, string title, string desc, string sort, string filter, bool? allowPaging, bool? isDefault, int size = 0) { var view = App.Get().DataContext.Find<ContentView>(id); var list = App.Get().FindList(view.ParentID); if (!list.IsOwner(HttpContext)) return new HttpUnauthorizedResult(); if (title != null) view.Title = title; if (desc != null) view.Description = desc; if (filter != null) { view.Filter = filter; var wrapper = new ContentViewDecorator(view, App.Get().DataContext); wrapper.Refresh(); } if (sort != null) { view.Sort = sort; var wrapper = new ContentViewDecorator(view, App.Get().DataContext); wrapper.Refresh(); } if (allowPaging.HasValue) view.AllowPaging = allowPaging.Value; if (isDefault.HasValue) { if (isDefault.Value) { var views = App.Get().DataContext.Where<ContentView>(v => v.ParentID == view.ParentID && v.ID != view.ID); foreach (var v in views) v.IsDefault = false; } view.IsDefault = isDefault.Value; } if (size > 0) view.PageSize = size; App.Get().DataContext.SaveChanges(); return new HttpStatusCodeResult(200); }
/// <summary> /// Initializes a new instance of the ContentQueryResultItem class. /// </summary> /// <param name="parent"></param> /// <param name="objectItem"></param> internal ContentQueryResultItem(ContentViewDecorator parent, dynamic objectItem) { if (parent == null) { throw new ArgumentNullException("parent"); } if (objectItem == null) { throw new ArgumentNullException("objectItem"); } this.View = parent; this.Data = objectItem; }
internal static DataTable GetViewTable(ContentViewDecorator view) { var listPath = App.Get().NetDrive.MapPath(view.Parent.DefaultListPath); var viewFile = Path.Combine(listPath, "cache", "view_" + view.Name + ".xml"); var schemaFile = Path.Combine(listPath, "cache", "schema_" + view.Name + ".xml"); if (File.Exists(viewFile) && File.Exists(schemaFile)) { var dt = new DataTable(); dt.ReadXmlSchema(schemaFile); dt.ReadXml(viewFile); return(dt); } return(null); }
internal static DataTable GetViewTable(ContentViewDecorator view) { var listPath = App.Get().NetDrive.MapPath(view.Parent.DefaultListPath); var viewFile = Path.Combine(listPath, "cache", "view_" + view.Name + ".xml"); var schemaFile = Path.Combine(listPath, "cache", "schema_" + view.Name + ".xml"); if (File.Exists(viewFile) && File.Exists(schemaFile)) { var dt = new DataTable(); dt.ReadXmlSchema(schemaFile); dt.ReadXml(viewFile); return dt; } return null; }
internal static DataRow CreateDataRow(DataTable dt, ContentViewDecorator view, ContentDataItemDecorator item) { var vfs = view.FieldRefs.Count == 0 ? view.Parent.Fields.Select(f => f).ToList() : view.FieldRefs.Select(f => f.Field).ToList(); return(CreateDataRow(dt, vfs, item)); }
public ActionResult AddView(int id, int pageID, string zoneID, int pos) { try { var app = App.Get(); var page = app.CurrentWeb.FindPage(pageID); if (!page.IsOwner(HttpContext)) return new HttpUnauthorizedResult(); var viewDescriptor = app.Descriptors[@"content\dataview"]; //var widget = app.AddWidgetTo(pageID, viewDescriptor.ID, zoneID, pos); var widget = page.Widgets.Add(viewDescriptor.Model, zoneID, pos); var view = new ContentViewDecorator(app.DataContext.Find<ContentView>(id), app.DataContext); widget.ShowHeader = true; widget.ShowBorder = false; widget.Title = view.Title; widget.Link = Url.Content(view.Url); widget.SetUserPreference("listName", view.Parent.Name); widget.SetUserPreference("viewName", view.Name); widget.SetUserPreference("allowFiltering", false); widget.SetUserPreference("allowSorting", false); widget.SetUserPreference("allowPaging", view.AllowPaging); widget.SetUserPreference("pagingInfo", false); widget.SetUserPreference("pageIndex", view.PageIndex); widget.SetUserPreference("pageSize", view.PageSize); widget.Save(); ClearCache(widget); //var widget = app.AddWidgetTo(pageID, id, zoneID, pos); return Content(widget.ToJsonString(HttpContext, app.Context.Locale, this.CurrentWebName()), "application/json", System.Text.Encoding.UTF8); } catch (Exception e) { return Json(new { error = e.Message }, JsonRequestBehavior.AllowGet); } }
public ActionResult ValidateFilter(int id, string filter) { if (!string.IsNullOrEmpty(filter)) { var view = App.Get().DataContext.Find<ContentView>(id); var wrapper = new ContentViewDecorator(view, App.Get().DataContext); try { wrapper.Items(filter); } catch (Exception e) { return Json(false, JsonRequestBehavior.AllowGet); } } return Json(true, JsonRequestBehavior.AllowGet); }
internal static DataRow CreateDataRow(DataTable dt, ContentViewDecorator view, ContentDataItemDecorator item) { var vfs = view.FieldRefs.Count == 0 ? view.Parent.Fields.Select(f => f).ToList() : view.FieldRefs.Select(f => f.Field).ToList(); return CreateDataRow(dt, vfs, item); }
/// <summary> /// Renders the data items that returns by a content query. /// </summary> /// <param name="html">The html helper object.</param> /// <param name="view">The content view object that use to execute query.</param> /// <param name="query">The content query object.</param> public static void RenderQueryResults(this HtmlHelper html, ContentViewDecorator view, ContentQuery query) { RenderQueryResults(html, view.GetItems(query)); }
internal static void Bind(ContentViewDecorator view, DataRow row, ContentDataItemDecorator item) { var vfs = view.FieldRefs.Count == 0 ? view.Parent.Fields.Select(f => f).ToList() : view.FieldRefs.Select(f => f.Field).ToList(); Bind(vfs, row, item); }
/// <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> /// Initializes a new instance of the ContentFieldRefCollection class. /// </summary> /// <param name="context">The data context object.</param> /// <param name="parent">The content view object.</param> public ContentFieldRefCollection(IDataContext context, ContentViewDecorator parent) { this.DataContext = context; this.Parent = parent; if (string.IsNullOrEmpty(this.Parent.Model.FieldRefsXml)) { var fields = parent.Parent.Fields; foreach (var f in fields) { this.Add(new ContentFieldRef(parent, f)); } } else { var element = XElement.Parse(parent.Model.FieldRefsXml); var ns = element.GetDefaultNamespace(); var needUpdate = false; foreach (var fieldElement in element.Elements()) { var _ref = parent.Parent.Fields[fieldElement.StrAttr("name")]; if (_ref == null) { needUpdate = true; continue; } var _refIns = new ContentFieldRef(parent, _ref); if (!string.IsNullOrEmpty(fieldElement.StrAttr("toFeed"))) { _refIns.ToFeedItemField = fieldElement.Attribute("toFeed").Value; } if (fieldElement.HasAttributes && fieldElement.Attribute("hidden") != null) { _refIns.IsHidden = fieldElement.BoolAttr("hidden"); } _refIns.ShowLabel = fieldElement.BoolAttr("showLabel"); if (fieldElement.HasElements) { _refIns.Template = new ContentTemplate(fieldElement.Element(ns + "tmpl").OuterXml()); } else { ///Apply default view template if (_refIns.HasViewTemplate) { _refIns.Template = new ContentTemplate() { Source = _refIns.ViewTemplate } } ; } this.Add(_refIns); } if (needUpdate) { Save(); } } }
/// <summary> /// Render an items tree for specified view /// </summary> /// <param name="view">The data view object to get data items .</param> /// <param name="parentID">The root data item id.</param> /// <param name="currentPath">The current data item path.</param> /// <param name="htmlAttributes">The html attributes for treeview element.</param> /// <param name="dynamicLoad">Specified the tree node load on demand.</param> /// <returns></returns> public static HelperResult Tree(ContentViewDecorator view, string parentID = "", string currentPath = "", object htmlAttributes = null, bool dynamicLoad = true) { var items = view.Items(string.Format("parentId='{0}'", string.IsNullOrEmpty(parentID) ? Guid.Empty.ToString() : parentID)); return Tree(items, currentPath, htmlAttributes, dynamicLoad); }
internal static void SaveViewTable(ContentViewDecorator view,DataTable table) { var listPath = App.Get().NetDrive.MapPath(view.Parent.DefaultListPath); var viewFile = Path.Combine(listPath, "cache", "view_" + view.Name + ".xml"); table.WriteXml(viewFile); }
/// <summary> /// Render the specified view object to HTML /// </summary> /// <param name="html">The html helper object.</param> /// <param name="view">The view to render.</param> public static void RenderViewResults(this HtmlHelper html, ContentViewDecorator view) { html.RenderQueryResults(view.GetItems()); }