mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-14 19:04:51 +08:00
Merge branch 'dev' into feature/widget-elements
Conflicts: src/Orchard.Web/Modules/Orchard.Layouts/Controllers/ElementController.cs
This commit is contained in:
@@ -12,7 +12,6 @@ using Orchard.Layouts.Services;
|
||||
using Orchard.Layouts.ViewModels;
|
||||
using Orchard.Localization;
|
||||
using Orchard.UI.Admin;
|
||||
using Orchard.Utility.Extensions;
|
||||
|
||||
namespace Orchard.Layouts.Controllers {
|
||||
[Admin]
|
||||
@@ -21,7 +20,6 @@ namespace Orchard.Layouts.Controllers {
|
||||
private readonly IElementManager _elementManager;
|
||||
private readonly IShapeFactory _shapeFactory;
|
||||
private readonly ITransactionManager _transactionManager;
|
||||
private readonly ICultureAccessor _cultureAccessor;
|
||||
private readonly IContentManager _contentManager;
|
||||
private readonly IObjectStore _objectStore;
|
||||
private readonly IShapeDisplay _shapeDisplay;
|
||||
@@ -32,7 +30,6 @@ namespace Orchard.Layouts.Controllers {
|
||||
IElementManager elementManager,
|
||||
IShapeFactory shapeFactory,
|
||||
ITransactionManager transactionManager,
|
||||
ICultureAccessor cultureAccessor,
|
||||
IContentManager contentManager,
|
||||
IObjectStore objectStore,
|
||||
IShapeDisplay shapeDisplay,
|
||||
@@ -42,92 +39,12 @@ namespace Orchard.Layouts.Controllers {
|
||||
_elementManager = elementManager;
|
||||
_shapeFactory = shapeFactory;
|
||||
_transactionManager = transactionManager;
|
||||
_cultureAccessor = cultureAccessor;
|
||||
_contentManager = contentManager;
|
||||
_objectStore = objectStore;
|
||||
_shapeDisplay = shapeDisplay;
|
||||
_mapper = mapper;
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public JsonResult CreateDirect(string typeName, int? contentId = null, string contentType = null) {
|
||||
var describeContext = CreateDescribeContext(contentId, contentType);
|
||||
var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, typeName);
|
||||
var element = _elementManager.ActivateElement(descriptor);
|
||||
|
||||
var dto = new {
|
||||
typeName = typeName,
|
||||
typeLabel = descriptor.DisplayText.Text,
|
||||
typeClass = descriptor.DisplayText.Text.HtmlClassify(),
|
||||
data = element.Data.Serialize(),
|
||||
html = RenderElement(element, describeContext)
|
||||
};
|
||||
|
||||
return Json(dto);
|
||||
}
|
||||
|
||||
public ViewResult Create(string id, string session, int? contentId = null, string contentType = null) {
|
||||
var sessionState = new ElementSessionState {
|
||||
TypeName = id,
|
||||
ElementData = null,
|
||||
ContentId = contentId,
|
||||
ContentType = contentType
|
||||
};
|
||||
|
||||
_objectStore.Set(session, sessionState);
|
||||
|
||||
var describeContext = CreateDescribeContext(contentId, contentType);
|
||||
var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, id);
|
||||
var element = _elementManager.ActivateElement(descriptor);
|
||||
var context = CreateEditorContext(session, describeContext.Content, element);
|
||||
var editorResult = _elementManager.BuildEditor(context);
|
||||
var viewModel = new EditElementViewModel {
|
||||
SessionKey = session,
|
||||
Layout = describeContext.Content.As<ILayoutAspect>(),
|
||||
EditorResult = editorResult,
|
||||
TypeName = id,
|
||||
DisplayText = descriptor.DisplayText,
|
||||
ElementData = element.Data.Serialize(),
|
||||
Submitted = !descriptor.EnableEditorDialog,
|
||||
ElementHtml = RenderElement(element, describeContext),
|
||||
Tabs = editorResult.CollectTabs().ToArray()
|
||||
};
|
||||
|
||||
return View(viewModel);
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
[ValidateInput(false)]
|
||||
public ViewResult Create(ElementDataViewModel model, string session) {
|
||||
var sessionState = _objectStore.Get<ElementSessionState>(session);
|
||||
var contentId = sessionState.ContentId;
|
||||
var contentType = sessionState.ContentType;
|
||||
var describeContext = CreateDescribeContext(contentId, contentType);
|
||||
var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, model.TypeName);
|
||||
var data = Request.Form.ToDictionary();
|
||||
var element = _elementManager.ActivateElement(descriptor, e => e.Data = data);
|
||||
var context = CreateEditorContext(session, describeContext.Content, element, postedElementData: data, updater: this);
|
||||
var editorResult = _elementManager.UpdateEditor(context);
|
||||
var viewModel = new EditElementViewModel {
|
||||
SessionKey = session,
|
||||
Layout = describeContext.Content.As<ILayoutAspect>(),
|
||||
EditorResult = editorResult,
|
||||
TypeName = model.TypeName,
|
||||
DisplayText = descriptor.DisplayText,
|
||||
ElementData = element.Data.Serialize(),
|
||||
Tabs = editorResult.CollectTabs().ToArray(),
|
||||
};
|
||||
|
||||
if (!ModelState.IsValid) {
|
||||
_transactionManager.Cancel();
|
||||
}
|
||||
else {
|
||||
viewModel.Submitted = true;
|
||||
viewModel.ElementEditorModel = _mapper.ToEditorModel(element, describeContext);
|
||||
}
|
||||
return View(viewModel);
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
[ValidateInput(false)]
|
||||
public RedirectToRouteResult Edit(string session, string typeName, string elementData, string elementEditorData, int? contentId = null, string contentType = null) {
|
||||
@@ -140,7 +57,7 @@ namespace Orchard.Layouts.Controllers {
|
||||
};
|
||||
|
||||
_objectStore.Set(session, state);
|
||||
return RedirectToAction("Edit", new {session = session});
|
||||
return RedirectToAction("Edit", new {session});
|
||||
}
|
||||
|
||||
public ViewResult Edit(string session) {
|
||||
@@ -153,7 +70,7 @@ namespace Orchard.Layouts.Controllers {
|
||||
var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, typeName);
|
||||
var data = elementData.Combine(ElementDataHelper.Deserialize(sessionState.ElementEditorData));
|
||||
var element = _elementManager.ActivateElement(descriptor, e => e.Data = data);
|
||||
var context = CreateEditorContext(session, describeContext.Content, element, postedElementData: data, elementData: elementData);
|
||||
var context = CreateEditorContext(session, describeContext.Content, element, elementData);
|
||||
var editorResult = _elementManager.BuildEditor(context);
|
||||
|
||||
var viewModel = new EditElementViewModel {
|
||||
@@ -172,21 +89,23 @@ namespace Orchard.Layouts.Controllers {
|
||||
|
||||
[HttpPost]
|
||||
[ValidateInput(false)]
|
||||
public ViewResult Update(ElementDataViewModel model, string session) {
|
||||
public ViewResult Update(string session) {
|
||||
var sessionState = _objectStore.Get<ElementSessionState>(session);
|
||||
var contentId = sessionState.ContentId;
|
||||
var contentType = sessionState.ContentType;
|
||||
var describeContext = CreateDescribeContext(contentId, contentType);
|
||||
var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, model.TypeName);
|
||||
var typeName = sessionState.TypeName;
|
||||
var elementData = ElementDataHelper.Deserialize(sessionState.ElementData);
|
||||
var data = Request.Form.ToDictionary();
|
||||
var describeContext = CreateDescribeContext(contentId, contentType);
|
||||
var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, typeName);
|
||||
var data = elementData.Combine(ElementDataHelper.Deserialize(sessionState.ElementEditorData));
|
||||
var element = _elementManager.ActivateElement(descriptor, e => e.Data = data);
|
||||
var context = CreateEditorContext(session, describeContext.Content, element, postedElementData: data, elementData: elementData, updater: this);
|
||||
var context = CreateEditorContext(session, describeContext.Content, element, elementData, this);
|
||||
var editorResult = _elementManager.UpdateEditor(context);
|
||||
|
||||
var viewModel = new EditElementViewModel {
|
||||
Layout = describeContext.Content.As<ILayoutAspect>(),
|
||||
EditorResult = editorResult,
|
||||
TypeName = model.TypeName,
|
||||
TypeName = typeName,
|
||||
DisplayText = descriptor.DisplayText,
|
||||
ElementData = element.Data.Serialize(),
|
||||
Tabs = editorResult.CollectTabs().ToArray(),
|
||||
@@ -214,22 +133,17 @@ namespace Orchard.Layouts.Controllers {
|
||||
IContent content,
|
||||
Element element,
|
||||
ElementDataDictionary elementData = null,
|
||||
ElementDataDictionary postedElementData = null,
|
||||
IUpdateModel updater = null) {
|
||||
|
||||
postedElementData = postedElementData ?? new ElementDataDictionary();
|
||||
var valueProviderCollection = (ValueProviderCollection) ValueProvider;
|
||||
valueProviderCollection.Add(postedElementData.ToValueProvider(_cultureAccessor.CurrentCulture));
|
||||
var context = new ElementEditorContext {
|
||||
Session = session,
|
||||
Content = content,
|
||||
Element = element,
|
||||
Updater = updater,
|
||||
ElementData = elementData ?? new ElementDataDictionary(),
|
||||
ValueProvider = valueProviderCollection,
|
||||
ValueProvider = ValueProvider,
|
||||
ShapeFactory = _shapeFactory
|
||||
};
|
||||
ValueProvider = context.ValueProvider;
|
||||
return context;
|
||||
}
|
||||
|
||||
|
@@ -12,10 +12,6 @@
|
||||
displayType: self.element.data("display-type"),
|
||||
endpoints: {
|
||||
edit: self.element.data("edit-url"),
|
||||
add: self.element.data("add-url"),
|
||||
addDirect: self.element.data("add-direct-url"),
|
||||
settings: self.element.data("settings-url"),
|
||||
browse: self.element.data("element-browser-url"),
|
||||
applyTemplate: self.element.data("apply-template-url")
|
||||
},
|
||||
domOperations: {
|
||||
|
@@ -56,10 +56,8 @@
|
||||
<div class="layout-designer"
|
||||
data-modelstate-valid="@ViewData.ModelState.IsValid.ToString().ToLower()"
|
||||
data-display-type="Design"
|
||||
data-edit-url="@Url.Action("Edit", "Element", new { session = Model.SessionKey, contentId = contentId, contentType = contentType, area = "Orchard.Layouts" })"
|
||||
data-add-url="@Url.Action("Add", "Element", new {session = Model.SessionKey, contentId = contentId, contentType = contentType, area = "Orchard.Layouts"})"
|
||||
data-add-direct-url="@Url.Action("CreateDirect", "Element", new { contentId = contentId, contentType = contentType, area = "Orchard.Layouts" })"
|
||||
data-apply-template-url="@Url.Action("ApplyTemplate", "Layout", new { contentId = contentId, contentType = contentType, area = "Orchard.Layouts" })"
|
||||
data-edit-url="@Url.Action("Edit", "Element", new { session = Model.SessionKey, contentId, contentType, area = "Orchard.Layouts" })"
|
||||
data-apply-template-url="@Url.Action("ApplyTemplate", "Layout", new { contentId, contentType, area = "Orchard.Layouts" })"
|
||||
data-confirm-delete-prompt="@T("Are you sure you want to delete this element?")"
|
||||
data-editor-dialog-title-format="@T("$1 Properties")"
|
||||
data-editor-dialog-name="Layout"
|
||||
|
@@ -15,8 +15,6 @@
|
||||
}
|
||||
@Html.ValidationSummary()
|
||||
@using (Html.BeginFormAntiForgeryPost(Url.Action("Update", "Element", new { session = Model.SessionKey, area = "Orchard.Layouts" }))) {
|
||||
@Html.HiddenFor(m => m.TypeName)
|
||||
@Html.HiddenFor(m => m.ElementData)
|
||||
foreach (var tab in Model.Tabs) {
|
||||
var id = String.Format("element-{0}", tab.ToLowerInvariant());
|
||||
<div id="@id" class="tab-view">
|
||||
|
Reference in New Issue
Block a user