public virtual ActionResult ApplyWidgetPermissions(PermissionsModel model)
        {
            var        widgetService = ServiceLocator.Current.GetInstance <IPageWidgetService>();
            PageWidget pageWidget    = widgetService.Find(model.EntityId);

            if (pageWidget != null && pageWidget.Widget != null)
            {
                ICoreWidget coreWidget =
                    MvcApplication.Widgets.FirstOrDefault(wd => wd.Identifier == pageWidget.Widget.Identifier);
                ICorePrincipal currentPrincipal = this.CorePrincipal();
                bool           isOwner          = currentPrincipal != null && pageWidget.User != null &&
                                                  currentPrincipal.PrincipalId == pageWidget.User.PrincipalId;

                if (coreWidget != null && coreWidget is BaseWidget && permissionService.IsAllowed(((BaseWidget)coreWidget).PermissionOperationCode, currentPrincipal, coreWidget.GetType(), pageWidget.Id, isOwner, PermissionOperationLevel.Object))
                {
                    permissionHelper.ApplyPermissions(model, coreWidget.GetType());

                    if (permissionService.IsAllowed(((BaseWidget)coreWidget).PermissionOperationCode, currentPrincipal, coreWidget.GetType(), pageWidget.Id, isOwner, PermissionOperationLevel.Object))
                    {
                        return(Content(Url.Action(MVC.Pages.Show(pageWidget.Page.Url))));
                    }
                }
            }

            return(Content(Url.Action(MVC.Home.Index())));
        }
    protected void PageWidget_Save_Click(object sender, EventArgs e)
    {
        PageWidget widget = Widgets.Fetch(new Guid(Request.QueryString["id"])) as PageWidget;

        if (widget == null)
        {
            throw new Exception("The widget does not exist");
        }

        try
        {
            List <int> postIds = new List <int>();
            foreach (Telligent.Glow.OrderedListItem item in existing_items.Items)
            {
                postIds.Add(int.Parse(item.Value));
            }

            widget.PostIds = postIds.ToArray();
            widget.Title   = txtTitle.Text;
            Widgets.Save(widget);
            ZCache.RemoveCache(widget.DataCacheKey);

            Response.Redirect("?ws=" + widget.Id);
        }
        catch (Exception ex)
        {
            Message.Text = "Your widget called not be saved. Reason: " + ex.Message;
            Message.Type = StatusType.Error;
            return;
        }
    }
예제 #3
0
        public void AddWidget(PageWidget widget)
        {
            if (widget == null)
                throw new ArgumentNullException("widget");

            widgets.Add(widget);
        }
예제 #4
0
        /// <summary>
        /// Gets the widget view model.
        /// </summary>
        /// <param name="pageWidgetId">The page widget id.</param>
        /// <returns></returns>
        public static WidgetHolderViewModel GetWidgetViewModel(long pageWidgetId)
        {
            var        pageWidgetService = ServiceLocator.Current.GetInstance <IPageWidgetService>();
            PageWidget pageWidget        = pageWidgetService.Find(pageWidgetId);

            return(GetWidgetViewModel(pageWidget));
        }
예제 #5
0
        public ActionResult DeleteConfirmed(int id)
        {
            PageWidget pageWidget = db.PageWidgets.Find(id);

            db.PageWidgets.Remove(pageWidget);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
예제 #6
0
 public static XElement ToXElement(this PageWidget widget)
 {
     return(new XElement("PageWidget",
                         new XElement("PageId", widget.PageId),
                         new XElement("WidgetId", widget.WidgetId),
                         new XElement("ZoneName", widget.ZoneName),
                         new XElement("DisplayOrder", widget.DisplayOrder)
                         ));
 }
예제 #7
0
        [HttpPost] // patch for shared server compatibility, usually would use [HttpPut]
        public JsonNetResult UpdatePageWidget(PageWidgetModel model)
        {
            PageWidget widget = Mapper.Map <PageWidget>(model);

            _pageWidgetRepository.Update(widget);
            Mapper.Map(widget, model);

            return(new JsonNetResult(model));
        }
        public virtual ActionResult ShowWidgetCSS(long pageWidgetId)
        {
            var                widgetService = ServiceLocator.Current.GetInstance <IPageWidgetService>();
            PageWidget         widget        = widgetService.Find(pageWidgetId);
            PageWidgetSettings widgetSetting = widget.Settings ?? new PageWidgetSettings {
                Widget = widget
            };

            return(PartialView(MVC.Shared.Views.Widgets.WidgetCSSSettings, new WidgetCSSModel().MapFrom(widgetSetting)));
        }
예제 #9
0
        /// <summary>
        /// Clones the widget instance.
        /// </summary>
        /// <param name="widget">The widget.</param>
        /// <returns></returns>
        private static long?CloneWidgetInstance(PageWidget widget)
        {
            var systemWidget = MvcApplication.Widgets.FirstOrDefault(w => w.Identifier == widget.Widget.Identifier);

            if (widget.InstanceId != null)
            {
                return(systemWidget.Clone(new CoreWidgetInstance {
                    InstanceId = widget.InstanceId, WidgetIdentifier = systemWidget.Identifier
                }));
            }
            return(null);
        }
예제 #10
0
        public static bool ClonePageSettingsFromTemplate(Page template, Page targetPage, long?widgetId)
        {
            var pageService             = ServiceLocator.Current.GetInstance <IPageService>();
            var permissionCommonService = ServiceLocator.Current.GetInstance <IPermissionCommonService>();

            template.Widgets.Where(widget => widget.Widget.IsPlaceHolder).AsParallel().ForAll(widget =>
            {
                var pageWidget = new PageWidget();
                pageWidget.InjectFrom <CloneEntityInjection>(widget);
                pageWidget.Page           = targetPage;
                pageWidget.ParentWidgetId = widget.Id;

                //copy widget settings
                if (widget.Settings != null)
                {
                    pageWidget.Settings = (PageWidgetSettings) new PageWidgetSettings().InjectFrom <CloneEntityInjection>(widget.Settings);
                    pageWidget.Settings.LookAndFeelSettings = new LookAndFeelSettings().InjectFrom <CloneEntityInjection>(widget.Settings.LookAndFeelSettings) as LookAndFeelSettings;
                    pageWidget.Settings.Widget = pageWidget;
                }
                if (widgetId.HasValue)
                {
                    var widgetService = ServiceLocator.Current.GetInstance <IWidgetService>();
                    pageWidget.Widget = widgetService.Find(widgetId.Value);
                }
                pageWidget.TemplateWidgetId = widget.Id;
                targetPage.AddWidget(pageWidget);
            });
            targetPage.Template = template;

            if (pageService.Save(targetPage))
            {
                //copy permissions and update page styles
                foreach (var item in targetPage.Widgets)
                {
                    if (item.ParentWidgetId == null)
                    {
                        continue;
                    }
                    var systemWidget = MvcApplication.Widgets.FirstOrDefault(w => w.Identifier == item.Widget.Identifier);
                    var sourceWidget = template.Widgets.FirstOrDefault(w => w.Id == item.ParentWidgetId);
                    if (sourceWidget != null)
                    {
                        if (targetPage.Settings != null && !String.IsNullOrEmpty(targetPage.Settings.CustomCSS))
                        {
                            targetPage.Settings.CustomCSS = targetPage.Settings.CustomCSS.Replace(String.Format(PageWidgetTemplate, sourceWidget.Id), String.Format(PageWidgetTemplate, item.Id));
                        }
                        permissionCommonService.CloneObjectPermisions(systemWidget.GetType(), sourceWidget.Id, item.Id);
                    }
                }
                return(pageService.Save(targetPage));
            }
            return(false);
        }
예제 #11
0
 public ActionResult Edit([Bind(Include = "ID,PageID,SectionID,WidgetID,Position,Region,Sort")] PageWidget pageWidget)
 {
     if (ModelState.IsValid)
     {
         db.Entry(pageWidget).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.PageID    = new SelectList(db.Pages, "ID", "Name", pageWidget.PageID);
     ViewBag.SectionID = new SelectList(db.Sections, "ID", "Name", pageWidget.SectionID);
     ViewBag.WidgetID  = new SelectList(db.Widgets, "ID", "Title", pageWidget.WidgetID);
     return(View(pageWidget));
 }
    protected void Page_Load(object sender, EventArgs e)
    {
        LiHyperLink.SetNameToCompare(Context, "presentation");
        if (!IsPostBack)
        {
            PageWidget widget = Widgets.Fetch(new Guid(Request.QueryString["id"])) as PageWidget;
            if (widget == null)
            {
                throw new Exception("The widget does not exist");
            }

            BindData(widget);
        }
    }
예제 #13
0
        // GET: Admin/PageWidget/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            PageWidget pageWidget = db.PageWidgets.Find(id);

            if (pageWidget == null)
            {
                return(HttpNotFound());
            }
            return(View(pageWidget));
        }
예제 #14
0
        /// <summary>
        /// Adds the widget to page.
        /// </summary>
        /// <param name="pageId">The page id.</param>
        /// <param name="widgetId">The widget id.</param>
        /// <param name="user">The user.</param>
        /// <param name="templateWidgetId">The template widget id.</param>
        /// <returns></returns>
        public static PageWidget AddWidgetToPage(long pageId, long?widgetId, ICorePrincipal user, long?templateWidgetId)
        {
            var pageService       = ServiceLocator.Current.GetInstance <IPageService>();
            var widgetService     = ServiceLocator.Current.GetInstance <IWidgetService>();
            var pageWidgetService = ServiceLocator.Current.GetInstance <IPageWidgetService>();

            var page = pageService.Find(pageId);

            if (page != null)
            {
                page.Widgets.Update(
                    wd =>
                {
                    wd.OrderNumber =
                        wd.ColumnNumber == 1
                                     ? wd.OrderNumber + 1
                                     : wd.OrderNumber;
                }
                    );

                pageService.Save(page);
                Widget widget = widgetService.Find(widgetId ?? 0);
                if (widget == null || widgetService.IsWidgetEnable(widget))
                {
                    var newPageWidget = new PageWidget
                    {
                        Page         = page,
                        ColumnNumber = 1,
                        OrderNumber  = 1,
                        User         =
                            user != null ? new User {
                            Id = user.PrincipalId
                        } : null,
                        Widget = widget,
                    };
                    if (templateWidgetId.HasValue)
                    {
                        newPageWidget.TemplateWidgetId = templateWidgetId;
                    }

                    if (pageWidgetService.Save(newPageWidget))
                    {
                        return(newPageWidget);
                    }
                }
            }

            return(null);
        }
예제 #15
0
        // GET: Admin/PageWidget/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            PageWidget pageWidget = db.PageWidgets.Find(id);

            if (pageWidget == null)
            {
                return(HttpNotFound());
            }
            ViewBag.PageID    = new SelectList(db.Pages, "ID", "Name", pageWidget.PageID);
            ViewBag.SectionID = new SelectList(db.Sections, "ID", "Name", pageWidget.SectionID);
            ViewBag.WidgetID  = new SelectList(db.Widgets, "ID", "Title", pageWidget.WidgetID);
            return(View(pageWidget));
        }
예제 #16
0
    private void BindData(PageWidget widget)
    {
        txtTitle.Text = widget.Title;

        Query q = Post.CreateQuery();

        q.AndWhere(Post.Columns.CategoryId, CategoryController.UnCategorizedId);
        q.AndWhere(Post.Columns.IsDeleted, false);
        q.AndWhere(Post.Columns.Status, 1);

        PostCollection pc = new PostCollection();

        pc.LoadAndCloseReader(q.ExecuteReader());

        PostCollection pcInUse    = new PostCollection();
        PostCollection pcNotInUse = new PostCollection();

        foreach (int i in widget.PostIds)
        {
            bool found = false;
            foreach (Post p in pc)
            {
                if (i == p.Id)
                {
                    pcInUse.Add(p);
                    found = true;
                }
            }

            if (found)
            {
                pc.Remove(pcInUse[pcInUse.Count - 1]);
            }
        }

        the_Posts.DataSource = pc;
        the_Posts.DataBind();

        existing_items.Items.Clear();
        foreach (Post p in pcInUse)
        {
            existing_items.Items.Add(new OrderedListItem(string.Format(ItemFormat, p.Name, p.Id), p.Name,
                                                         p.Id.ToString()));
        }
    }
예제 #17
0
        /// <summary>
        /// Gets the widget view model.
        /// </summary>
        /// <param name="pageWidget">The page widget.</param>
        /// <returns></returns>
        public static WidgetHolderViewModel GetWidgetViewModel(PageWidget pageWidget)
        {
            if (pageWidget == null || pageWidget.Widget == null)
            {
                return(null);
            }

            ICoreWidget coreWidget =
                MvcApplication.Widgets.FirstOrDefault(wd => wd.Identifier == pageWidget.Widget.Identifier);

            var            permissionService = ServiceLocator.Current.GetInstance <IPermissionCommonService>();
            ICorePrincipal currentPrincipal  = HttpContext.Current.CorePrincipal();

            var widgetModel = new WidgetHolderViewModel
            {
                Widget         = pageWidget,
                WidgetInstance = new CoreWidgetInstance
                {
                    InstanceId       = pageWidget.InstanceId,
                    WidgetIdentifier = pageWidget.Widget.Identifier,
                    PageSettings     = new CorePageSettings {
                        PageId = pageWidget.Page.Id
                    },
                    PageWidgetId = pageWidget.Id
                },

                SystemWidget = coreWidget,

                Access = coreWidget is BaseWidget?
                         permissionService.GetAccess(((BaseWidget)coreWidget).Operations,
                                                     HttpContext.Current.CorePrincipal(), coreWidget.GetType(), pageWidget.EntityId,
                                                     currentPrincipal != null && pageWidget.User != null && pageWidget.User.PrincipalId == currentPrincipal.PrincipalId) : null,
                             PageAccess = permissionService.GetAccess(pageWidget.Page.Operations, currentPrincipal, typeof(Page),
                                                                      pageWidget.Page.Id, currentPrincipal != null && pageWidget.Page.User != null &&
                                                                      pageWidget.Page.User.PrincipalId == currentPrincipal.PrincipalId),
            };

            if (pageWidget.Page.IsTemplate && pageWidget.Widget.IsPlaceHolder)
            {
                widgetModel.Access[((BaseWidget)widgetModel.SystemWidget).PermissionOperationCode] = false;
            }

            return(widgetModel);
        }
예제 #18
0
        /// <summary>
        /// Toggles state of widget in panel.
        /// </summary>
        /// <param name="stackPanel">Stack panel.</param>
        /// <param name="ignoredWidgets">Ignored widget collection</param>
        /// <param name="isEnable">Enable state flag.</param>
        public void ToggleTaskPanelWidgetsState(StackPanel stackPanel, ICollection <Type> ignoredWidgets,
                                                bool isEnable)
        {
            foreach (UIElement expanderControl in stackPanel.Children)
            {
                Type type = expanderControl.GetType();
                if (type == typeof(ExpanderControl) && (null != expanderControl))
                {
                    ExpanderControl expander   = (ExpanderControl)expanderControl;
                    Type            widgetType = expander.ContentOfExpander.GetType();

                    if (!ignoredWidgets.Contains(widgetType))
                    {
                        PageWidget widget = (PageWidget)expander.ContentOfExpander;
                        widget.IsEnabled = isEnable;
                    }
                }
            }
        }
예제 #19
0
        /// <summary>
        /// Determines whether [is manage widget allowed] [the specified widget identifier].
        /// </summary>
        /// <param name="pageWidget">The page widget.</param>
        /// <param name="user">The user.</param>
        /// <param name="entityId">The entity id.</param>
        /// <returns>
        ///     <c>true</c> if [is manage widget allowed] [the specified widget identifier]; otherwise, <c>false</c>.
        /// </returns>
        public static bool IsManageWidgetAllowed(PageWidget pageWidget, ICorePrincipal user, long entityId)
        {
            bool isAllowed = true;

            if (pageWidget.Widget != null)
            {
                ICoreWidget widget =
                    MvcApplication.Widgets.FirstOrDefault(item => item.Identifier == pageWidget.Widget.Identifier);
                if (widget != null && widget is BaseWidget)
                {
                    bool isOwner = pageWidget.User != null && user != null &&
                                   pageWidget.User.PrincipalId == user.PrincipalId;
                    var permissionService = ServiceLocator.Current.GetInstance <IPermissionCommonService>();
                    isAllowed = permissionService.IsAllowed((widget as BaseWidget).ManageOperationCode, user,
                                                            widget.GetType(), entityId, isOwner,
                                                            PermissionOperationLevel.Object);
                }
            }

            return(isAllowed);
        }
        /// <summary>
        /// Shows the widget permissions.
        /// </summary>
        /// <param name="pageWidgetId">The page widget id.</param>
        /// <returns></returns>
        public virtual ActionResult ShowWidgetPermissions(long pageWidgetId)
        {
            var        widgetService = ServiceLocator.Current.GetInstance <IPageWidgetService>();
            PageWidget pageWidget    = widgetService.Find(pageWidgetId);

            if (pageWidget == null || pageWidget.Widget == null)
            {
                throw new HttpException((int)HttpStatusCode.NotFound, Translate("Messages.NotFound"));
            }
            ICoreWidget coreWidget =
                MvcApplication.Widgets.FirstOrDefault(wd => wd.Identifier == pageWidget.Widget.Identifier);
            ICorePrincipal currentPrincipal = this.CorePrincipal();
            bool           isOwner          = currentPrincipal != null && pageWidget.User != null &&
                                              currentPrincipal.PrincipalId == pageWidget.User.PrincipalId;

            if (coreWidget == null || !(coreWidget is BaseWidget) || !permissionService.IsAllowed(((BaseWidget)coreWidget).PermissionOperationCode, currentPrincipal, coreWidget.GetType(), pageWidgetId, isOwner, PermissionOperationLevel.Object))
            {
                throw new HttpException((int)HttpStatusCode.NotFound, Translate("Messages.NotFound"));
            }
            return(PartialView(MVC.Shared.Views.Widgets.WidgetPermissions, permissionHelper.BindPermissionsModel(pageWidgetId, coreWidget.GetType(), true)));
        }
예제 #21
0
        /// <summary>
        /// Unlinks the page.
        /// </summary>
        /// <param name="page">The page.</param>
        public static void UnlinkPage(Page page)
        {
            var pageService             = ServiceLocator.Current.GetInstance <IPageService>();
            var permissionCommonService = ServiceLocator.Current.GetInstance <IPermissionCommonService>();
            var pageWidgetService       = ServiceLocator.Current.GetInstance <IPageWidgetService>();

            if (page.Template != null)
            {
                page.Template.Widgets.AsEnumerable().Each(widget =>
                {
                    PageWidget pageWidget = null;
                    if (widget.Widget.IsPlaceHolder)
                    {
                        pageWidget =
                            page.Widgets.FirstOrDefault(
                                currentPageWidget =>
                                currentPageWidget.TemplateWidgetId ==
                                widget.Id);
                        pageWidget.ColumnNumber     = widget.ColumnNumber;
                        pageWidget.OrderNumber      = widget.OrderNumber;
                        pageWidget.TemplateWidgetId = null;
                    }
                    if (pageWidget == null)
                    {
                        pageWidget = new PageWidget();
                        pageWidget.InjectFrom <CloneEntityInjection>(widget);
                        pageWidget.Page           = page;
                        pageWidget.ParentWidgetId = widget.Id;
                        //copy widget settings
                        if (widget.Settings != null)
                        {
                            pageWidget.Settings =
                                (PageWidgetSettings)
                                new PageWidgetSettings().InjectFrom
                                <CloneEntityInjection>(widget.Settings);
                            pageWidget.Settings.LookAndFeelSettings =
                                new LookAndFeelSettings().InjectFrom
                                <CloneEntityInjection>(
                                    widget.Settings.
                                    LookAndFeelSettings) as
                                LookAndFeelSettings;
                            pageWidget.Settings.Widget = pageWidget;
                        }

                        //clone page widget instance
                        if (widget.InstanceId != null)
                        {
                            pageWidget.InstanceId =
                                CloneWidgetInstance(widget);
                        }
                        //TODO: save collection
                        pageWidgetService.Save(pageWidget);
                        page.AddWidget(pageWidget);
                    }
                });

                //copy page layout
                page.PageLayout =
                    (PageLayout)
                    new PageLayout().InjectFrom <CloneEntityInjection>(
                        page.Template.PageLayout);
                page.PageLayout.Page = page;
                page.Template.PageLayout.ColumnWidths.AsParallel().ForAll(column =>
                {
                    var columnWidth =
                        (PageLayoutColumnWidthValue)
                        new PageLayoutColumnWidthValue().
                        InjectFrom <CloneEntityInjection>(
                            column);
                    columnWidth.PageLayout =
                        page.PageLayout;
                    page.PageLayout.AddColumnWidth(
                        columnWidth);
                });

                //copy page settings)
                if (page.Template.Settings != null)
                {
                    page.Settings =
                        (PageSettings) new PageSettings().InjectFrom <CloneEntityInjection>(page.Template.Settings);
                    page.Settings.LookAndFeelSettings =
                        (LookAndFeelSettings)
                        new LookAndFeelSettings().InjectFrom <CloneEntityInjection>(
                            page.Template.Settings.LookAndFeelSettings);
                    page.Settings.Page = page;
                }

                if (pageService.Save(page))
                {
                    //copy permissions and update page styles
                    foreach (var item in page.Widgets)
                    {
                        if (item.ParentWidgetId == null)
                        {
                            continue;
                        }
                        var systemWidget =
                            MvcApplication.Widgets.FirstOrDefault(w => w.Identifier == item.Widget.Identifier);
                        var sourceWidget = page.Template.Widgets.FirstOrDefault(w => w.Id == item.ParentWidgetId);
                        if (sourceWidget != null)
                        {
                            if (page.Settings != null && !String.IsNullOrEmpty(page.Settings.CustomCSS))
                            {
                                page.Settings.CustomCSS =
                                    page.Settings.CustomCSS.Replace(
                                        String.Format(PageWidgetTemplate, sourceWidget.Id),
                                        String.Format(PageWidgetTemplate, item.Id));
                            }
                            permissionCommonService.CloneObjectPermisions(systemWidget.GetType(), sourceWidget.Id,
                                                                          item.Id);
                        }
                    }
                    page.Template = null;
                    pageService.Save(page);
                }
            }
        }
예제 #22
0
        private void MapFromTemplate(Page page)
        {
            HasTemplate = true;
            Layout      = page.Template.PageLayout;
            Settings    = page.Template.Settings;
            Access[PageTemplate.UnlinkOperationCode] = Access[(int)PageOperations.Update];
            Access[(int)PageOperations.Update]       = false;
            ICorePrincipal currentPrincipal = HttpContext.Current.CorePrincipal();
            var            widgetService    = ServiceLocator.Current.GetInstance <IWidgetService>();

            foreach (var widget in page.Template.Widgets.OrderBy(wd => wd.OrderNumber))
            {
                var widgetToShow = !widget.Widget.IsPlaceHolder
                                       ? widget
                                       : page.Widgets.Where(pageWidget => pageWidget.TemplateWidgetId == widget.Id).
                                   FirstOrDefault();
                if (widget.Widget.IsPlaceHolder)
                {
                    widgetToShow.PageSection  = widget.PageSection;
                    widgetToShow.ColumnNumber = widget.ColumnNumber;
                }
                PageWidget  widget1    = widgetToShow;
                ICoreWidget coreWidget =
                    widgetToShow.Widget != null?MvcApplication.Widgets.FirstOrDefault(wd => wd.Identifier == widget1.Widget.Identifier) : null;

                bool isWidetEnabled = widgetService.IsWidgetEnable(widget1.Widget);
                var  widgetModel    = new WidgetHolderViewModel
                {
                    WidgetInstance = new CoreWidgetInstance
                    {
                        InstanceId       = widgetToShow.InstanceId,
                        WidgetIdentifier =
                            coreWidget != null ? coreWidget.Identifier : null,
                        PageSettings =
                            new CorePageSettings {
                            PageId = page.Template.Id
                        },
                        PageWidgetId = widgetToShow.Id
                    },
                    Widget = widget1,
                    Access = coreWidget is BaseWidget
                                                       ? permissionService.GetAccess(
                        ((BaseWidget)coreWidget).Operations,
                        HttpContext.Current.CorePrincipal(), coreWidget.GetType(),
                        widget1.EntityId,
                        currentPrincipal != null && widget1.User != null &&
                        widget1.User.PrincipalId == currentPrincipal.PrincipalId)
                                                       : null,
                    PageAccess   = Access,
                    SystemWidget = (isWidetEnabled && coreWidget != null) ? coreWidget : null
                };
                if (!widget.Widget.IsPlaceHolder)
                {
                    widgetModel.Access[((BaseWidget)widgetModel.SystemWidget).ManageOperationCode]     = false;
                    widgetModel.Access[((BaseWidget)widgetModel.SystemWidget).PermissionOperationCode] = false;
                }
                Widgets.Add(widgetModel);

                if (coreWidget != null && coreWidget.Plugin != null)
                {
                    if (!PagePlugins.Any(t => t.PluginLocation == coreWidget.Plugin.PluginLocation))
                    {
                        PagePlugins.Add(coreWidget.Plugin);
                    }
                    if (coreWidget is BaseWorkflowWidget)
                    {
                        var workflowWidget = (BaseWorkflowWidget)coreWidget;
                        foreach (var innerPlugin in workflowWidget.InnerPlugins)
                        {
                            ICorePlugin plugin = innerPlugin;
                            if (!PagePlugins.Any(t => t.Identifier == plugin.Identifier))
                            {
                                PagePlugins.Add(plugin);
                            }
                        }
                    }
                }
            }
        }
예제 #23
0
        /// <summary>
        /// Clones the target page settings to source page.
        /// </summary>
        /// <param name="sourcePage">The source page.</param>
        /// <param name="targetPage">The target page.</param>
        /// <returns></returns>
        public static bool ClonePageSettings(Page sourcePage, Page targetPage)
        {
            var pageService             = ServiceLocator.Current.GetInstance <IPageService>();
            var permissionCommonService = ServiceLocator.Current.GetInstance <IPermissionCommonService>();

            sourcePage.Widgets.AsParallel().ForAll(widget =>
            {
                var pageWidget = new PageWidget();
                pageWidget.InjectFrom <CloneEntityInjection>(widget);
                pageWidget.Page           = targetPage;
                pageWidget.ParentWidgetId = widget.Id;

                //copy widget settings
                if (widget.Settings != null)
                {
                    pageWidget.Settings = (PageWidgetSettings) new PageWidgetSettings().InjectFrom <CloneEntityInjection>(widget.Settings);
                    pageWidget.Settings.LookAndFeelSettings = new LookAndFeelSettings().InjectFrom <CloneEntityInjection>(widget.Settings.LookAndFeelSettings) as LookAndFeelSettings;
                    pageWidget.Settings.Widget = pageWidget;
                }

                //clone page widget instance
                if (widget.InstanceId != null)
                {
                    pageWidget.InstanceId = CloneWidgetInstance(widget);
                }
                targetPage.AddWidget(pageWidget);
            });

            //copy page layout
            targetPage.PageLayout = (PageLayout) new PageLayout {
                Id = targetPage.PageLayout.Id
            }.InjectFrom <CloneEntityInjection>(sourcePage.PageLayout);
            targetPage.PageLayout.Page = targetPage;
            sourcePage.PageLayout.ColumnWidths.AsParallel().ForAll(column =>
            {
                var columnWidth        = (PageLayoutColumnWidthValue) new PageLayoutColumnWidthValue().InjectFrom <CloneEntityInjection>(column);
                columnWidth.PageLayout = targetPage.PageLayout;
                targetPage.PageLayout.AddColumnWidth(columnWidth);
            });

            //copy page settings)
            if (sourcePage.Settings != null)
            {
                targetPage.Settings = (PageSettings) new PageSettings().InjectFrom <CloneEntityInjection>(sourcePage.Settings);
                targetPage.Settings.LookAndFeelSettings = (LookAndFeelSettings) new LookAndFeelSettings().InjectFrom <CloneEntityInjection>(sourcePage.Settings.LookAndFeelSettings);
                targetPage.Settings.Page = targetPage;
            }

            if (pageService.Save(targetPage))
            {
                //copy permissions and update page styles
                foreach (var item in targetPage.Widgets)
                {
                    if (item.ParentWidgetId == null)
                    {
                        continue;
                    }
                    var systemWidget = MvcApplication.Widgets.FirstOrDefault(w => w.Identifier == item.Widget.Identifier);
                    var sourceWidget = sourcePage.Widgets.FirstOrDefault(w => w.Id == item.ParentWidgetId);
                    if (sourceWidget != null)
                    {
                        if (targetPage.Settings != null && !String.IsNullOrEmpty(targetPage.Settings.CustomCSS))
                        {
                            targetPage.Settings.CustomCSS = targetPage.Settings.CustomCSS.Replace(String.Format(PageWidgetTemplate, sourceWidget.Id), String.Format(PageWidgetTemplate, item.Id));
                        }
                        permissionCommonService.CloneObjectPermisions(systemWidget.GetType(), sourceWidget.Id, item.Id);
                    }
                }
                return(pageService.Save(targetPage));
            }
            return(false);
        }