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; } } } } }