示例#1
0
        private IEnumerable <string> VersionsToKeep(int contentId, UnVersionConfigEntry configEntry, SqlConnection connection)
        {
            // Get a list of all versions
            // TODO: Need to find a better way to do this, but SQL CE 4 doesn't allow sub queries
            var sql = string.Format(@"SELECT			
                                    cv.VersionId,
	                                cv.VersionDate,
	                                d.published,
	                                d.newest
                FROM				cmsContentVersion cv
                LEFT OUTER JOIN		cmsDocument d ON d.versionId = cv.VersionId
                WHERE				cv.ContentId = {0}
                ORDER BY            cv.VersionDate DESC",
                                    contentId);

            if (Logger.IsDebugEnabled)
            {
                Logger.Debug(sql);
            }

            var command = new SqlCommand(sql, connection);

            var versionsToKeep = new List <string>();
            var readerIndex    = 0;

            try
            {
                var reader = command.ExecuteReader();

                while (reader.Read())
                {
                    var versionId   = reader.GetGuid(0);
                    var versionDate = reader.GetDateTime(1);
                    var published   = reader.GetBoolean(2);
                    var newest      = reader.GetBoolean(3);

                    readerIndex++;

                    var daysDiff = (DateTime.Now - versionDate).Days;
                    if (published || newest || (daysDiff < configEntry.MaxDays && readerIndex <= configEntry.MaxCount))
                    {
                        versionsToKeep.Add("'" + versionId.ToString("D") + "'");
                    }
                }

                reader.Close();
                reader.Dispose();
            }
            catch (Exception ex)
            {
                Logger.Warn(ex);

                if (!_catchSqlExceptions)
                {
                    throw ex;
                }
            }

            return(versionsToKeep);
        }
        public void GetVersions_Returns_Right_Based_Max_Count()
        {
            var config = new UnVersionConfigEntry()
            {
                MaxCount = 5
            };

            List <IContent> versions = new List <IContent>()
            {
                TestHelper.GetVersionMock(10, new DateTime(2019, 12, 10)).Object, // should be kept
                TestHelper.GetVersionMock(20, new DateTime(2019, 12, 19)).Object, // should be kept
                TestHelper.GetVersionMock(30, new DateTime(2019, 12, 20)).Object, // should be kept
                TestHelper.GetVersionMock(40, new DateTime(2019, 12, 10)).Object, // should be kept
                TestHelper.GetVersionMock(50, new DateTime(2019, 12, 19)).Object, // should be kept
                TestHelper.GetVersionMock(60, new DateTime(2019, 12, 20)).Object, // should be deleted
                TestHelper.GetVersionMock(70, new DateTime(2019, 12, 10)).Object, // should be deleted
                TestHelper.GetVersionMock(80, new DateTime(2019, 12, 19)).Object, // should be deleted
                TestHelper.GetVersionMock(90, new DateTime(2019, 12, 20)).Object, // should be deleted
            };

            var service = new UnVersionService(null, null, null, null);

            var res = service.GetVersionsToDelete(versions, config, new DateTime(2019, 12, 30));

            Assert.IsFalse(res.Contains(50));

            Assert.IsTrue(res.Contains(60));
            Assert.IsTrue(res.Contains(70));
            Assert.IsTrue(res.Contains(80));
            Assert.IsTrue(res.Contains(90));
        }
        public void GetVersions_Returns_Right_Based_On_Date()
        {
            var config = new UnVersionConfigEntry()
            {
                MaxDays = 10
            };

            List <IContent> versions = new List <IContent>()
            {
                TestHelper.GetVersionMock(1, new DateTime(2019, 12, 10)).Object, // should be deleted
                TestHelper.GetVersionMock(2, new DateTime(2019, 12, 19)).Object, // should be deleted
                TestHelper.GetVersionMock(3, new DateTime(2019, 12, 20)).Object  // should be kept
            };

            var service = new UnVersionService(null, null, null, null);

            var res = service.GetVersionsToDelete(versions, config, new DateTime(2019, 12, 30));

            Assert.IsTrue(res.Contains(1));
            Assert.IsTrue(res.Contains(2));
            Assert.IsFalse(res.Contains(3));
        }
示例#4
0
        /// <summary>
        /// Iterates a list of IContent versions and returns items to be removed based on a configEntry.
        /// </summary>
        /// <param name="versions"></param>
        /// <param name="configEntry"></param>
        /// <param name="currentDateTime"></param>
        /// <returns></returns>
        public List <int> GetVersionsToDelete(List <IContent> versions, UnVersionConfigEntry configEntry, DateTime currentDateTime)
        {
            List <int> versionIdsToDelete = new List <int>();

            int iterationCount = 0;


            _logger.Debug <UnVersionService>("Getting versions for config entry. {alias}, {maxCount}, {maxDays}, {rootXpath}", configEntry.DocTypeAlias, configEntry.MaxCount, configEntry.MaxDays, configEntry.RootXPath);

            foreach (var version in versions)
            {
                iterationCount++;
                _logger.Debug <UnVersionService>("Comparing version {versionId}, iterationCount is {iterationCount}", version.VersionId, iterationCount);

                // If we have a maxCount and the current iteration is above that max-count
                if (configEntry.MaxCount > 0 && iterationCount > configEntry.MaxCount)
                {
                    _logger.Debug <UnVersionService>("Remove version {versionId}, because iterationCount is {iterationCount} and max count is {maxCount}", version.VersionId, iterationCount, configEntry.MaxCount);
                    versionIdsToDelete.Add(version.VersionId);
                    // no need to compare dates since we've already added this version for deletion
                    continue;
                }

                // If we have a max days and the current version is older
                if (configEntry.MaxDays > 0 && configEntry.MaxDays != int.MaxValue)
                {
                    var dateRemoveBefore = currentDateTime.AddDays(0 - configEntry.MaxDays);
                    if (version.UpdateDate < dateRemoveBefore)
                    {
                        _logger.Debug <UnVersionService>("Remove version {versionId}, because version is updated {updateDate} and max days is {maxDays} (cutoff: {dateRemoveBefore})", version.VersionId, version.UpdateDate, configEntry.MaxDays, dateRemoveBefore);
                        versionIdsToDelete.Add(version.VersionId);
                    }
                }
            }

            return(versionIdsToDelete);
        }
示例#5
0
        private IEnumerable<string> VersionsToKeep(int contentId, UnVersionConfigEntry configEntry, SqlConnection connection)
        {
            // Get a list of all versions
            // TODO: Need to find a better way to do this, but SQL CE 4 doesn't allow sub queries
            var sql = string.Format(@"SELECT
                                    cv.VersionId,
                                    cv.VersionDate,
                                    d.published,
                                    d.newest
                FROM				cmsContentVersion cv
                LEFT OUTER JOIN		cmsDocument d ON d.versionId = cv.VersionId
                WHERE				cv.ContentId = {0}
                ORDER BY            cv.VersionDate DESC",
                contentId);

            if (Logger.IsDebugEnabled)
                Logger.Debug(sql);

            var command = new SqlCommand(sql, connection);

            var versionsToKeep = new List<string>();
            var readerIndex = 0;

            try
            {
                var reader = command.ExecuteReader();

                while (reader.Read())
                {
                    var versionId = reader.GetGuid(0);
                    var versionDate = reader.GetDateTime(1);
                    var published = reader.GetBoolean(2);
                    var newest = reader.GetBoolean(3);

                    readerIndex++;

                    var daysDiff = (DateTime.Now - versionDate).Days;
                    if (published || newest || (daysDiff < configEntry.MaxDays && readerIndex <= configEntry.MaxCount))
                        versionsToKeep.Add("'" + versionId.ToString("D") + "'");
                }

                reader.Close();
                reader.Dispose();
            }
            catch (Exception ex)
            {
                Logger.Warn(ex);

                if (!_catchSqlExceptions)
                    throw ex;
            }

            return versionsToKeep;
        }