protected virtual void TrimItemVersions(Item item) { var pruneMe = new List<PruneAction>(); // Get the latest valid version for this item var latestValidVersion = item.Publishing.GetValidVersion(DateTime.Now, true, false); if (latestValidVersion == null) { Log.Warn(string.Format("Item does not have a published version. This item will NOT be pruned. [{0}]", item.Paths.Path), this); return; } // Get an array of all possible versions that can be removed var versions = item.Versions.GetVersions() .Where(x => x.Version.Number < latestValidVersion.Version.Number) .OrderBy(x => x.Version.Number) .ToArray(); Log.Debug(string.Format("[{0}][latest published version #: {1}][# of pruning candidates: {2}]", item.Paths.Path, latestValidVersion, versions.Length), this); // Process each item version against the Version Filter rules foreach (var v in versions) { var ruleContext = new RuleContext(); ruleContext.Parameters["currentversion"] = latestValidVersion; ruleContext.Item = v; this.VersionFilterRules.Run(ruleContext); var a = new PruneAction { ItemVersion = v }; a.Archive = ruleContext.Parameters.ContainsKey("ArchiveThisVersion"); a.Serialize = ruleContext.Parameters.ContainsKey("SerializeThisVersion"); if (a.Archive || a.Serialize) { // Passed all rules. Add to "deleteMe" list pruneMe.Add(a); } } if (pruneMe.Count > 0) { if (pruneMe.Any(x => x.Serialize)) { // Serialize versions.. var serializeMe = pruneMe.Where(x => x.Serialize); this.Serializer.SerializeItemVersions(item, serializeMe.Select(x => x.ItemVersion.Version.Number).ToArray()); } if (pruneMe.Any(x => x.Archive)) { // Copy the to-be-deleted item versions to the Archive database.. this.Archiver.ArchiveItemVersions(pruneMe.Where(x => x.Archive).Select(x => x.ItemVersion).ToArray()); } if (pruneMe.Any(x => !x.Archive)) { foreach (var v in pruneMe.Where(x => !x.Archive)) { var msg = String.Format("Delete version: [{0}][{1}][vers# {2}]", item.Language.Name, item.Paths.FullPath, v.ItemVersion.Version.Number); Log.Audit(msg, this); v.ItemVersion.Versions.RemoveVersion(); } } } }
protected virtual void TrimItemVersions(Item item) { var pruneMe = new List <PruneAction>(); // Get the latest valid version for this item var latestValidVersion = item.Publishing.GetValidVersion(DateTime.Now, true, false); if (latestValidVersion == null) { Log.Warn(string.Format("Item does not have a published version. This item will NOT be pruned. [{0}]", item.Paths.Path), this); return; } // Get an array of all possible versions that can be removed var versions = item.Versions.GetVersions() .Where(x => x.Version.Number < latestValidVersion.Version.Number) .OrderBy(x => x.Version.Number) .ToArray(); Log.Debug(string.Format("[{0}][latest published version #: {1}][# of pruning candidates: {2}]", item.Paths.Path, latestValidVersion, versions.Length), this); // Process each item version against the Version Filter rules foreach (var v in versions) { var ruleContext = new RuleContext(); ruleContext.Parameters["currentversion"] = latestValidVersion; ruleContext.Item = v; this.VersionFilterRules.Run(ruleContext); var a = new PruneAction { ItemVersion = v }; a.Archive = ruleContext.Parameters.ContainsKey("ArchiveThisVersion"); a.Serialize = ruleContext.Parameters.ContainsKey("SerializeThisVersion"); if (a.Archive || a.Serialize) { // Passed all rules. Add to "deleteMe" list pruneMe.Add(a); } } if (pruneMe.Count > 0) { if (pruneMe.Any(x => x.Serialize)) { // Serialize versions.. var serializeMe = pruneMe.Where(x => x.Serialize); this.Serializer.SerializeItemVersions(item, serializeMe.Select(x => x.ItemVersion.Version.Number).ToArray()); } if (pruneMe.Any(x => x.Archive)) { // Copy the to-be-deleted item versions to the Archive database.. this.Archiver.ArchiveItemVersions(pruneMe.Where(x => x.Archive).Select(x => x.ItemVersion).ToArray()); } if (pruneMe.Any(x => !x.Archive)) { foreach (var v in pruneMe.Where(x => !x.Archive)) { var msg = String.Format("Delete version: [{0}][{1}][vers# {2}]", item.Language.Name, item.Paths.FullPath, v.ItemVersion.Version.Number); Log.Audit(msg, this); v.ItemVersion.Versions.RemoveVersion(); } } } }