コード例 #1
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);");
 }
コード例 #2
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));
 }
コード例 #3
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));
            }
        }
コード例 #4
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);
        }
コード例 #5
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));
        }
コード例 #6
0
        /// <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));
        }
コード例 #7
0
        /// <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);
                    }
                }
            }
        }