External Media (oEmbed) Export/Import Issue

Fixes #5417
This commit is contained in:
Hannan Azam Khan
2016-04-26 21:18:41 +05:00
committed by Sébastien Ros
parent c0d207f228
commit b740bae395

View File

@@ -1,7 +1,12 @@
using Orchard.ContentManagement.Drivers; using Orchard.ContentManagement;
using Orchard.ContentManagement.Drivers;
using Orchard.ContentManagement.FieldStorage.InfosetStorage;
using Orchard.MediaLibrary.Models; using Orchard.MediaLibrary.Models;
using System.Xml;
using System.Xml.Linq;
namespace Orchard.MediaLibrary.Drivers { namespace Orchard.MediaLibrary.Drivers
{
public class OEmbedPartDriver : ContentPartDriver<OEmbedPart> { public class OEmbedPartDriver : ContentPartDriver<OEmbedPart> {
protected override DriverResult Display(OEmbedPart part, string displayType, dynamic shapeHelper) { protected override DriverResult Display(OEmbedPart part, string displayType, dynamic shapeHelper) {
return Combined( return Combined(
@@ -13,18 +18,42 @@ namespace Orchard.MediaLibrary.Drivers {
} }
protected override void Exporting(OEmbedPart part, ContentManagement.Handlers.ExportContentContext context) { protected override void Exporting(OEmbedPart part, ContentManagement.Handlers.ExportContentContext context) {
context.Element(part.PartDefinition.Name).SetAttributeValue("Source", part.Source); var partName = XmlConvert.EncodeName(typeof(OEmbedPart).Name);
var infosetPart = part.As<InfosetPart>();
if (infosetPart != null) {
// OEmbedPart is not versionable thats why using Infoset.Element instead of VersionInfoset.Element
var element = infosetPart.Infoset.Element;
var partElement = element.Element(partName);
if (partElement == null)
return;
context.Element(partName).Add(partElement.Elements());
}
} }
protected override void Importing(OEmbedPart part, ContentManagement.Handlers.ImportContentContext context) { protected override void Importing(OEmbedPart part, ContentManagement.Handlers.ImportContentContext context) {
// Don't do anything if the tag is not specified. var partName = XmlConvert.EncodeName(typeof(OEmbedPart).Name);
if (context.Data.Element(part.PartDefinition.Name) == null) {
return;
}
context.ImportAttribute(part.PartDefinition.Name, "Source", source => // Don't do anything if the tag is not specified.
part.Source = source var xmlElement = context.Data.Element(partName);
); if (xmlElement == null)
return;
var infosetPart = part.As<InfosetPart>();
if (infosetPart != null) {
// OEmbedPart is not versionable thats why using Infoset.Element instead of VersionInfoset.Element
var element = infosetPart.Infoset.Element;
var partElement = element.Element(partName);
if (partElement != null)
partElement.Remove();
partElement = new XElement(partName);
element.Add(partElement);
partElement.Add(xmlElement.Elements());
}
} }
} }
} }