Beispiel #1
0
        /// <summary>
        /// Processes items or their versions that were deleted from the target database. There are 3 possible scenarios that items or versions are unpublished. Publishing Restrictions, Delete, Archive.
        /// </summary>
        /// <param name="sourceDatabase"><see cref="Database"/></param>
        /// <param name="itemResult">A list of item results which indicates items or their version(s) were removed from the publishing target. <see cref="ManifestOperationResult"/></param>
        /// <returns><see cref="ChangedItem"/></returns>
        public ChangedItem ProcessDeletedItem(IDatabase sourceDatabase, ManifestOperationResult <ItemResult> itemResult)
        {
            var itemId = ID.Parse(itemResult.EntityId);

            // Try to retrieve straight as an item. If an item is found from the source database, it will most likely have something to do with Publishing Restrictions imposed to the item
            var item = sourceDatabase.Database.GetItem(itemId);

            if (item == null)
            {
                ArchiveEntry archiveEntry;

                // Try to retrieve from Recycle Bin
                var recyclebinItem = _archiveManagerWrapper.GetEntries("recyclebin", sourceDatabase.Database, itemId).FirstOrDefault(ent => ent.ItemId == itemId);

                if (recyclebinItem != null)
                {
                    _publishingLog.Debug(string.Format("Item {0} found in Recycle Bin", itemId));
                    archiveEntry = recyclebinItem;
                }
                else
                {
                    // Try to retrieve from Archive
                    var archiveItem = _archiveManagerWrapper.GetEntries("archive", sourceDatabase.Database, itemId).FirstOrDefault(ent => ent.ItemId == itemId);
                    if (archiveItem != null)
                    {
                        _publishingLog.Debug(string.Format("Item {0} found in Archive", itemId));
                        archiveEntry = archiveItem;
                    }
                    else
                    {
                        return(null);
                    }
                }

                var changedItem = new ChangedItem
                {
                    ItemId = itemId, ItemOperationResultType = itemResult.Type, Path = archiveEntry.OriginalLocation, ResultChangeType = ResultChangeType.Deleted
                };

                return(changedItem);
            }
            else
            {
                _publishingLog.Debug(string.Format("Item {0} found in source databbase {1}", itemId, sourceDatabase.Name));
                var changedItem = new ChangedItem
                {
                    ItemId = itemId,
                    ItemOperationResultType = itemResult.Type,
                    ItemPath     = item.Paths,
                    Path         = item.Paths.FullPath,
                    FieldChanges = itemResult.Metadata.FieldChanges
                };

                return(changedItem);
            }
        }
Beispiel #2
0
        /// <summary>
        /// Processes items that were created and modified during publishing.
        /// </summary>
        /// <param name="sourceDatabase">This should be the 'master' database.<see cref="Database"/></param>
        /// <param name="itemResult">A list of item results which indicates items or their version(s) were removed from the publishing target. <see cref="ManifestOperationResult"/></param>
        /// <returns><see cref="ChangedItem"/></returns>
        public ChangedItem ProcessChangedItem(IDatabase sourceDatabase, ManifestOperationResult <ItemResult> itemResult)
        {
            var itemId = ID.Parse(itemResult.EntityId);
            var item   = sourceDatabase.Database.GetItem(itemId, Language.Parse(itemResult.Metadata.VarianceChanges[0].Item1), Version.Parse(itemResult.Metadata.VarianceChanges[0].Item2));

            if (item == null)
            {
                return(null);
            }
            var changedItem = new ChangedItem
            {
                ItemId = itemId,
                ItemOperationResultType = itemResult.Type,
                ItemPath         = item.Paths,
                Path             = item.Paths.FullPath,
                Language         = itemResult.Metadata.VarianceChanges[0].Item1,
                Version          = itemResult.Metadata.VarianceChanges[0].Item2,
                ResultChangeType = itemResult.Metadata.VarianceChanges[0].Item3,
                FieldChanges     = itemResult.Metadata.FieldChanges
            };

            _publishingLog.Debug(string.Format("Item {0} found in source database {1}", itemId, sourceDatabase.Name));
            return(changedItem);
        }