/// <summary> /// Publishes the Binary Data of a Multimedia Component and sets it Multimedia URL (and ExtensionData for ECL). /// </summary> /// <param name="mmComponent">The (DD4T) Multimedia Component to Publish.</param> /// <param name="buildProperties">The DD4T Build Properties</param> public void PublishMultimediaComponent(Dynamic.Component mmComponent, BuildProperties buildProperties) { Dynamic.Multimedia multimedia = mmComponent.Multimedia; if (multimedia == null) { log.Warning("PublishMultimediaComponent called with a non-Multimedia Component: " + mmComponent.Id); return; } if (multimedia.MimeType == EclMimeType && buildProperties.ECLEnabled && mmComponent.EclId == null) { using (EclProcessor eclProcessor = new EclProcessor(engine, targetStructureGroupUri)) { eclProcessor.ProcessEclStubComponent(mmComponent); } } else if (mmComponent.EclId != null) { log.Debug(string.Format("ECL Stub Component '{0}' has already been processed (ECL ID: '{1}') ", mmComponent.Id, mmComponent.EclId)); } else { multimedia.Url = PublishMultimediaComponent(mmComponent.Id, buildProperties); } }
private void ProcessRichTextXlink(XmlElement xlinkElement, BuildProperties buildProperties) { const string xlinkNamespaceUri = "http://www.w3.org/1999/xlink"; string xlinkHref = xlinkElement.GetAttribute("href", xlinkNamespaceUri); if (string.IsNullOrEmpty(xlinkHref)) { log.Warning("No xlink:href found: " + xlinkElement.OuterXml); return; } Component component = engine.GetObject(xlinkHref) as Component; if (component == null || component.BinaryContent == null) { // XLink doesn't refer to MM Component; do nothing. return; } log.Debug("Processing XLink to Multimedia Component: " + component.Id); BinaryContent binaryContent = component.BinaryContent; MultimediaType multimediaType = binaryContent.MultimediaType; string url; if (multimediaType.MimeType == EclMimeType && buildProperties.ECLEnabled) { using (EclProcessor eclProcessor = new EclProcessor(engine, binaryPathProvider.GetTargetStructureGroupUri(component.Id))) { url = eclProcessor.ProcessEclXlink(xlinkElement); } } else { url = PublishMultimediaComponent(component.Id, buildProperties); } // Put the resolved URL (path) in an appropriate XHTML attribute string attrName = (xlinkElement.LocalName == "img") ? "src" : "href"; // Note that XHTML is case-sensitive, so case-sensitive comparison is OK. xlinkElement.SetAttribute(attrName, url); // NOTE: intentionally not removing xlink:href attribute to keep the MM Component ID available for post-processing purposes (e.g. DXA). log.Debug(string.Format("XLink to Multimedia Component '{0}' resolved to: {1}", component.Id, xlinkElement.OuterXml)); }