Merge branch 'dev' into feature/widget-elements

Conflicts:
	src/Orchard.Web/Modules/Orchard.Layouts/Controllers/ElementController.cs
This commit is contained in:
Sipke Schoorstra
2015-11-12 19:38:31 +01:00
4 changed files with 13 additions and 107 deletions

View File

@@ -12,7 +12,6 @@ using Orchard.Layouts.Services;
using Orchard.Layouts.ViewModels; using Orchard.Layouts.ViewModels;
using Orchard.Localization; using Orchard.Localization;
using Orchard.UI.Admin; using Orchard.UI.Admin;
using Orchard.Utility.Extensions;
namespace Orchard.Layouts.Controllers { namespace Orchard.Layouts.Controllers {
[Admin] [Admin]
@@ -21,7 +20,6 @@ namespace Orchard.Layouts.Controllers {
private readonly IElementManager _elementManager; private readonly IElementManager _elementManager;
private readonly IShapeFactory _shapeFactory; private readonly IShapeFactory _shapeFactory;
private readonly ITransactionManager _transactionManager; private readonly ITransactionManager _transactionManager;
private readonly ICultureAccessor _cultureAccessor;
private readonly IContentManager _contentManager; private readonly IContentManager _contentManager;
private readonly IObjectStore _objectStore; private readonly IObjectStore _objectStore;
private readonly IShapeDisplay _shapeDisplay; private readonly IShapeDisplay _shapeDisplay;
@@ -32,7 +30,6 @@ namespace Orchard.Layouts.Controllers {
IElementManager elementManager, IElementManager elementManager,
IShapeFactory shapeFactory, IShapeFactory shapeFactory,
ITransactionManager transactionManager, ITransactionManager transactionManager,
ICultureAccessor cultureAccessor,
IContentManager contentManager, IContentManager contentManager,
IObjectStore objectStore, IObjectStore objectStore,
IShapeDisplay shapeDisplay, IShapeDisplay shapeDisplay,
@@ -42,92 +39,12 @@ namespace Orchard.Layouts.Controllers {
_elementManager = elementManager; _elementManager = elementManager;
_shapeFactory = shapeFactory; _shapeFactory = shapeFactory;
_transactionManager = transactionManager; _transactionManager = transactionManager;
_cultureAccessor = cultureAccessor;
_contentManager = contentManager; _contentManager = contentManager;
_objectStore = objectStore; _objectStore = objectStore;
_shapeDisplay = shapeDisplay; _shapeDisplay = shapeDisplay;
_mapper = mapper; _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] [HttpPost]
[ValidateInput(false)] [ValidateInput(false)]
public RedirectToRouteResult Edit(string session, string typeName, string elementData, string elementEditorData, int? contentId = null, string contentType = null) { 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); _objectStore.Set(session, state);
return RedirectToAction("Edit", new {session = session}); return RedirectToAction("Edit", new {session});
} }
public ViewResult Edit(string session) { public ViewResult Edit(string session) {
@@ -153,7 +70,7 @@ namespace Orchard.Layouts.Controllers {
var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, typeName); var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, typeName);
var data = elementData.Combine(ElementDataHelper.Deserialize(sessionState.ElementEditorData)); var data = elementData.Combine(ElementDataHelper.Deserialize(sessionState.ElementEditorData));
var element = _elementManager.ActivateElement(descriptor, e => e.Data = data); 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 editorResult = _elementManager.BuildEditor(context);
var viewModel = new EditElementViewModel { var viewModel = new EditElementViewModel {
@@ -172,21 +89,23 @@ namespace Orchard.Layouts.Controllers {
[HttpPost] [HttpPost]
[ValidateInput(false)] [ValidateInput(false)]
public ViewResult Update(ElementDataViewModel model, string session) { public ViewResult Update(string session) {
var sessionState = _objectStore.Get<ElementSessionState>(session); var sessionState = _objectStore.Get<ElementSessionState>(session);
var contentId = sessionState.ContentId; var contentId = sessionState.ContentId;
var contentType = sessionState.ContentType; var contentType = sessionState.ContentType;
var describeContext = CreateDescribeContext(contentId, contentType); var typeName = sessionState.TypeName;
var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, model.TypeName);
var elementData = ElementDataHelper.Deserialize(sessionState.ElementData); 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 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 editorResult = _elementManager.UpdateEditor(context);
var viewModel = new EditElementViewModel { var viewModel = new EditElementViewModel {
Layout = describeContext.Content.As<ILayoutAspect>(), Layout = describeContext.Content.As<ILayoutAspect>(),
EditorResult = editorResult, EditorResult = editorResult,
TypeName = model.TypeName, TypeName = typeName,
DisplayText = descriptor.DisplayText, DisplayText = descriptor.DisplayText,
ElementData = element.Data.Serialize(), ElementData = element.Data.Serialize(),
Tabs = editorResult.CollectTabs().ToArray(), Tabs = editorResult.CollectTabs().ToArray(),
@@ -214,22 +133,17 @@ namespace Orchard.Layouts.Controllers {
IContent content, IContent content,
Element element, Element element,
ElementDataDictionary elementData = null, ElementDataDictionary elementData = null,
ElementDataDictionary postedElementData = null,
IUpdateModel updater = null) { IUpdateModel updater = null) {
postedElementData = postedElementData ?? new ElementDataDictionary();
var valueProviderCollection = (ValueProviderCollection) ValueProvider;
valueProviderCollection.Add(postedElementData.ToValueProvider(_cultureAccessor.CurrentCulture));
var context = new ElementEditorContext { var context = new ElementEditorContext {
Session = session, Session = session,
Content = content, Content = content,
Element = element, Element = element,
Updater = updater, Updater = updater,
ElementData = elementData ?? new ElementDataDictionary(), ElementData = elementData ?? new ElementDataDictionary(),
ValueProvider = valueProviderCollection, ValueProvider = ValueProvider,
ShapeFactory = _shapeFactory ShapeFactory = _shapeFactory
}; };
ValueProvider = context.ValueProvider;
return context; return context;
} }

View File

@@ -12,10 +12,6 @@
displayType: self.element.data("display-type"), displayType: self.element.data("display-type"),
endpoints: { endpoints: {
edit: self.element.data("edit-url"), 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") applyTemplate: self.element.data("apply-template-url")
}, },
domOperations: { domOperations: {

View File

@@ -56,10 +56,8 @@
<div class="layout-designer" <div class="layout-designer"
data-modelstate-valid="@ViewData.ModelState.IsValid.ToString().ToLower()" data-modelstate-valid="@ViewData.ModelState.IsValid.ToString().ToLower()"
data-display-type="Design" data-display-type="Design"
data-edit-url="@Url.Action("Edit", "Element", new { session = Model.SessionKey, contentId = contentId, contentType = contentType, area = "Orchard.Layouts" })" data-edit-url="@Url.Action("Edit", "Element", new { session = Model.SessionKey, contentId, contentType, area = "Orchard.Layouts" })"
data-add-url="@Url.Action("Add", "Element", new {session = Model.SessionKey, contentId = contentId, contentType = contentType, area = "Orchard.Layouts"})" data-apply-template-url="@Url.Action("ApplyTemplate", "Layout", new { contentId, 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-confirm-delete-prompt="@T("Are you sure you want to delete this element?")" 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-title-format="@T("$1 Properties")"
data-editor-dialog-name="Layout" data-editor-dialog-name="Layout"

View File

@@ -15,8 +15,6 @@
} }
@Html.ValidationSummary() @Html.ValidationSummary()
@using (Html.BeginFormAntiForgeryPost(Url.Action("Update", "Element", new { session = Model.SessionKey, area = "Orchard.Layouts" }))) { @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) { foreach (var tab in Model.Tabs) {
var id = String.Format("element-{0}", tab.ToLowerInvariant()); var id = String.Format("element-{0}", tab.ToLowerInvariant());
<div id="@id" class="tab-view"> <div id="@id" class="tab-view">