/// <summary> /// Audits updates to versionless items /// </summary> /// <param name="repositoryObject"><see cref="T:Tridion.ContentManager.ContentManagement.RepositoryLocalObject" /></param> /// <param name="args">The <see cref="SaveEventArgs" /> instance containing the event data.</param> /// <param name="phase"><see cref="T:Tridion.ContentManager.Extensibility.EventPhases" /></param> private void AuditVersionless(IdentifiableObject identifiableObject, SaveEventArgs args, EventPhases phase) { if (phase == EventPhases.Initiated) { try { // Load the original unmodified item XML from the database IdentifiableObject oldIdentifiableObject = identifiableObject.Session.GetObject(identifiableObject.Id); XElement original = XElement.Parse(oldIdentifiableObject.ToXml().OuterXml); XElement updated = XElement.Parse(identifiableObject.ToXml().OuterXml); XElement difference = XMLDelta.Compare(original, updated); if (difference != null) { AuditContentEdit("Update", identifiableObject, identifiableObject.GetType().Name, new SqlXml(difference.CreateReader())); } else { AuditContentEdit("Update", identifiableObject, identifiableObject.GetType().Name, null); } } catch (Exception ex) { Logger.Write(ex, "TcmEvents.Audit", LoggingCategory.General, TraceEventType.Error); } } }
/// <summary> /// Maps a URI to an object containing the actual resource. /// </summary> /// <param name="absoluteUri">The URI returned from <see cref="M:System.Xml.XmlResolver.ResolveUri(System.Uri,System.String)" /></param> /// <param name="role">The current implementation does not use this parameter when resolving URIs. This is provided for future extensibility purposes. For example, this can be mapped to the xlink:role and used as an implementation specific argument in other scenarios.</param> /// <param name="ofObjectToReturn">The type of object to return. The current implementation only returns System.IO.Stream objects.</param> /// <returns> /// A System.IO.Stream object or null if a type other than stream is specified. /// </returns> public override object GetEntity(Uri absoluteUri, string role, Type ofObjectToReturn) { if (ofObjectToReturn != null && ofObjectToReturn != typeof(Stream)) { return(null); } String tridionUri = null; switch (absoluteUri.Scheme.ToLower()) { case "tcm": tridionUri = absoluteUri.ToString(); break; case "webdav": tridionUri = absoluteUri.PathAndQuery.ToString(); break; case "res": Assembly assembly = AppDomain.CurrentDomain.GetAssemblies() .FirstOrDefault(a => !a.IsDynamic && a.GetManifestResourceNames().Any(r => String.Equals(r, absoluteUri.PathAndQuery, StringComparison.OrdinalIgnoreCase))); if (assembly != null) { return(assembly.GetManifestResourceStream(absoluteUri.PathAndQuery)); } return(null); default: // Fall through to the original XmlUrlresolver handler return(base.GetEntity(absoluteUri, role, ofObjectToReturn)); } IdentifiableObject identifiableObject = mEngine.GetObject(tridionUri); String xml = identifiableObject is TemplateBuildingBlock ? (identifiableObject as TemplateBuildingBlock).Content : identifiableObject.ToXml().OuterXml; return(new MemoryStream(Encoding.UTF8.GetBytes(xml)) { Position = 0 }); }
/// <summary> /// Audits updates to versionless items /// </summary> /// <param name="repositoryObject"><see cref="T:Tridion.ContentManager.ContentManagement.RepositoryLocalObject" /></param> /// <param name="args">The <see cref="SaveEventArgs" /> instance containing the event data.</param> /// <param name="phase"><see cref="T:Tridion.ContentManager.Extensibility.EventPhases" /></param> private void AuditVersionless(IdentifiableObject identifiableObject, SaveEventArgs args, EventPhases phase) { if (phase == EventPhases.Initiated) { try { // Load the original unmodified item XML from the database IdentifiableObject oldIdentifiableObject = identifiableObject.Session.GetObject(identifiableObject.Id); XElement original = XElement.Parse(oldIdentifiableObject.ToXml().OuterXml); XElement updated = XElement.Parse(identifiableObject.ToXml().OuterXml); XElement difference = XMLDelta.Compare(original, updated); if (difference != null) AuditContentEdit("Update", identifiableObject, identifiableObject.GetType().Name, new SqlXml(difference.CreateReader())); else AuditContentEdit("Update", identifiableObject, identifiableObject.GetType().Name, null); } catch (Exception ex) { Logger.Write(ex, "TcmEvents.Audit", LoggingCategory.General, TraceEventType.Error); } } }