Пример #1
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);
                }
            }
        }
        /// <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
            });
        }
Пример #3
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);
                }
            }
        }