Example #1
0
        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);
        }
Example #2
0
 /// <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);";
 }
Example #3
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);
                    }
                }
            }
        }
Example #5
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;
     }
 }
Example #6
0
        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);
        }
Example #7
0
        /// <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;
        }
Example #8
0
        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);
        }
Example #9
0
        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;
        }
Example #10
0
        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));
        }
Example #11
0
        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);
            }
        }
Example #12
0
 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);
 }
Example #13
0
 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);
 }
Example #14
0
 /// <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));
 }
Example #15
0
 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);
 }
Example #16
0
        /// <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);
 }
Example #19
0
        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);
        }
Example #20
0
 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);
 }
Example #21
0
 /// <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());
 }