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 System.Xml;
using System.Xml.Linq;
namespace Orchard.MediaLibrary.Drivers {
namespace Orchard.MediaLibrary.Drivers
{
public class OEmbedPartDriver : ContentPartDriver<OEmbedPart> {
protected override DriverResult Display(OEmbedPart part, string displayType, dynamic shapeHelper) {
return Combined(
@@ -13,18 +18,42 @@ namespace Orchard.MediaLibrary.Drivers {
}
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) {
// Don't do anything if the tag is not specified.
if (context.Data.Element(part.PartDefinition.Name) == null) {
return;
}
var partName = XmlConvert.EncodeName(typeof(OEmbedPart).Name);
context.ImportAttribute(part.PartDefinition.Name, "Source", source =>
part.Source = source
);
// Don't do anything if the tag is not specified.
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());
}
}
}
}