Esempio n. 1
0
        public void SaveLayoutChanges()
        {
            CurrentPage.ModifiedTime = DateTime.Now;

            foreach (var item in Widgets)
            {
                WidgetProcessEventArgs e = new WidgetProcessEventArgs
                {
                    CurrentPage = CurrentPage,
                    DesignerCulture = DesignerCulture,
                    LocatedWidgetViewModel = item
                };
                if (item.Id > 0)
                {
                    e.LocatedWidget = CurrentPage.LocatedWidgets.FirstOrDefault(it => it.Id == item.Id);
                }

                var plugin = PluginManager.FindEnabledPlugin(item.PluginName);

                if (plugin == null)
                    throw new InvalidOperationException("Cannot find plugin \"" + item.PluginName + "\" or it's not enabled.");

                var widget = plugin.FindWidget(item.WidgetName);

                if (widget == null)
                    throw new InvalidOperationException("Cannot find widget \"" + item.WidgetName + "\".");

                if (widget.WidgetProcessEventListener != null)
                {
                    widget.WidgetProcessEventListener.OnProcessing(e);
                }

                e.LocatedWidget = ProcessStateItem(item, widget);

                if (widget.WidgetProcessEventListener != null)
                {
                    widget.WidgetProcessEventListener.OnProcessed(e);
                }
            }

            Database.GetCurrentSession().Commit();
        }
        public void OnProcessed(WidgetProcessEventArgs e)
        {
            var session = Database.GetCurrentSession();

            if (e.LocatedWidgetViewModel.State == WidgetState.Removed)
            {
                var sliderId = e.LocatedWidget.Attributes.GetValue<int>("SliderId");
                if (sliderId > 0)
                {
                    var slider = session.Get<Slider>(sliderId);
                    if (slider != null)
                    {
                        session.Delete(slider);
                    }
                }
            }
            else
            {
                var data = e.LocatedWidgetViewModel.CustomData;

                if (data == null || !data.HasValues) return;

                var json = data.Value<string>("ViewModel");

                if (String.IsNullOrEmpty(json)) return;

                var model = JsonConvert.DeserializeObject<SliderWidgetEditorViewModel>(json);

                var slider = model.Slider.Id > 0 ? session.Get<Slider>(model.Slider.Id) : new Slider();

                slider.Name = model.Slider.Name;
                slider.Width = model.Slider.Width;
                slider.Height = model.Slider.Height;
                slider.ShowNavigation = model.Slider.ShowNavigation;
                slider.ShowPagination = model.Slider.ShowPagination;
                slider.AutoPlay = model.Slider.AutoPlay;
                slider.AutoPlayInterval = model.Slider.AutoPlayInterval;

                // add new items or update existing items
                foreach (var item in model.Slider.Items)
                {
                    if (item.Id == 0)
                    {
                        slider.Items.Add(item);
                    }
                    else
                    {
                        var existing = slider.Items.FirstOrDefault(x => x.Id == item.Id);
                        existing.Caption = item.Caption;
                        existing.Description = item.Description;
                        existing.DisplayOrder = item.DisplayOrder;
                        existing.ImageUrl = item.ImageUrl;
                        existing.NavigateUrl = item.NavigateUrl;
                    }
                }

                // remove deleted items
                foreach (var item in slider.Items.Where(x => x.Id > 0).ToList())
                {
                    if (!model.Slider.Items.Any(x => x.Id == item.Id))
                    {
                        slider.Items.Remove(item);
                    }
                }

                if (slider.Id == 0)
                {
                    session.Save(slider);
                }

                e.LocatedWidget.Attributes.AddOrSet("SliderId", slider.Id);
            }
        }
 public void OnProcessing(WidgetProcessEventArgs e)
 {
 }
        public void OnProcessed(WidgetProcessEventArgs e)
        {
            var session = Database.GetCurrentSession();

            if (e.LocatedWidgetViewModel.State == WidgetState.Removed)
            {
                var contentId = e.LocatedWidget.Attributes.GetValue<int>("contentId");
                var content = session.Get<TextContent>(contentId);

                if (content != null)
                {
                    session.Delete(content);
                }
            }
            else
            {
                var data = e.LocatedWidgetViewModel.CustomData;

                if (data != null)
                {
                    TextContent content = null;

                    var title = data.Value<string>("title");
                    var body = data.Value<string>("content");

                    // If the widget is just dragged to another location, both title and body will be null.
                    // So we shouldn't change the TextContent instance's Name and Body in this case,
                    // otherwise the original text will be lost unexpected.
                    if (title == null && body == null)
                    {
                        return;
                    }

                    var contentId = e.LocatedWidget.Attributes.GetValue<int>("ContentId");

                    if (contentId > 0)
                    {
                        content = session.Get<TextContent>(contentId);
                    }

                    if (content == null)
                    {
                        content = new TextContent();
                        session.Save(content);
                        e.LocatedWidget.Attributes.AddOrSet("ContentId", content.Id);
                    }

                    if (GlobalSettingManager.Instance.FrontendSettings.Multilingual)
                    {
                        if (title != null)
                        {
                            content.SetLocalized(c => c.Name, title, e.DesignerCulture);
                        }
                        if (body != null)
                        {
                            content.SetLocalized(c => c.Content, body, e.DesignerCulture);
                        }
                    }
                    else
                    {
                        if (title != null)
                        {
                            content.Name = title;
                        }
                        if (body != null)
                        {
                            content.Content = body;
                        }
                    }
                }
            }
        }