DynamicForms: Importing and Exporting a TaxonomyElement now uses Identity (#6828), fixes #6821

This commit is contained in:
Sergio Navarro 2019-08-22 20:23:33 +02:00 committed by Benedek Farkas
parent c34c00ef49
commit 3ad43bcf3f

View File

@ -3,12 +3,14 @@ using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Web.Mvc;
using Orchard.ContentManagement;
using Orchard.DynamicForms.Elements;
using Orchard.Environment.Extensions;
using Orchard.Layouts.Framework.Display;
using Orchard.Layouts.Framework.Drivers;
using Orchard.Layouts.Helpers;
using Orchard.Layouts.Services;
using Orchard.Taxonomies.Models;
using Orchard.Taxonomies.Services;
using Orchard.Tokens;
using DescribeContext = Orchard.Forms.Services.DescribeContext;
@ -18,11 +20,13 @@ namespace Orchard.DynamicForms.Drivers {
public class TaxonomyElementDriver : FormsElementDriver<Taxonomy> {
private readonly ITaxonomyService _taxonomyService;
private readonly ITokenizer _tokenizer;
private readonly IContentManager _contentManager;
public TaxonomyElementDriver(IFormsBasedElementServices formsServices, ITaxonomyService taxonomyService, ITokenizer tokenizer)
public TaxonomyElementDriver(IFormsBasedElementServices formsServices, ITaxonomyService taxonomyService, ITokenizer tokenizer, IContentManager contentManager)
: base(formsServices) {
_taxonomyService = taxonomyService;
_tokenizer = tokenizer;
_contentManager = contentManager;
}
protected override EditorResult OnBuildEditor(Taxonomy element, ElementEditorContext context) {
@ -146,6 +150,24 @@ namespace Orchard.DynamicForms.Drivers {
context.ElementShape.Metadata.Alternates.Add(String.Format("Elements_{0}_{1}__{2}", typeName, displayType, element.InputType));
}
protected override void OnExporting(Taxonomy element, ExportElementContext context) {
var taxonomy = element.TaxonomyId != null ? _contentManager.Get<TaxonomyPart>(element.TaxonomyId.Value) : default(TaxonomyPart);
var taxonomyIdentity = taxonomy != null ? _contentManager.GetItemMetadata(taxonomy).Identity.ToString() : default(string);
if (taxonomyIdentity != null)
context.ExportableData["TaxonomyId"] = taxonomyIdentity;
}
protected override void OnImportCompleted(Taxonomy element, ImportElementContext context) {
var taxonomyIdentity = context.ExportableData.Get("TaxonomyId");
var taxonomy = taxonomyIdentity != null ? context.Session.GetItemFromSession(taxonomyIdentity) : default(ContentManagement.ContentItem);
if (taxonomy == null)
return;
element.TaxonomyId = taxonomy.Id;
}
private IEnumerable<SelectListItem> GetTermOptions(Taxonomy element, string displayType, int? taxonomyId, IDictionary<string, object> tokenData) {
var optionLabel = element.OptionLabel;
var runtimeValues = GetRuntimeValues(element);