Esempio n. 1
0
        public void ChangePackageStatus(
            Package package, PackageStatusType status, string comments, User user, bool sendEmail)
        {
            if (package.Status == status && package.ReviewComments == comments)
            {
                return;
            }

            var now = DateTime.UtcNow;

            if (package.Status == PackageStatusType.Submitted)
            {
                package.SubmittedStatus = PackageSubmittedStatusType.Waiting;
            }

            if (package.Status != status && status != PackageStatusType.Unknown)
            {
                package.Status       = status;
                package.ApprovedDate = null;
                package.LastUpdated  = now;

                switch (package.Status)
                {
                case PackageStatusType.Submitted:
                case PackageStatusType.Rejected:
                    package.Listed = false;
                    break;

                case PackageStatusType.Approved:
                    package.ApprovedDate = now;
                    package.Listed       = true;
                    break;

                case PackageStatusType.Exempted:
                    package.Listed = true;
                    break;
                }

                UpdateIsLatest(package.PackageRegistration);
            }

            package.ReviewedDate = now;
            package.ReviewedById = user.Key;

            string emailComments = string.Empty;

            if (package.ReviewComments != comments && comments != null)
            {
                package.ReviewComments = comments;
                emailComments          = comments;
            }

            packageRepo.CommitChanges();
            if (sendEmail)
            {
                messageSvc.SendPackageModerationEmail(package, emailComments);
            }

            NotifyIndexingService();
        }
Esempio n. 2
0
        public void ChangePackageStatus(
            Package package, PackageStatusType status, string comments, User user, bool sendEmail)
        {
            if (package.Status == status && package.ReviewComments == comments) return;

            var now = DateTime.UtcNow;

            if (package.Status == PackageStatusType.Submitted) package.SubmittedStatus = PackageSubmittedStatusType.Waiting;

            if (package.Status != status && status != PackageStatusType.Unknown)
            {
                package.Status = status;
                package.ApprovedDate = null;
                package.LastUpdated = now;

                switch (package.Status)
                {
                    case PackageStatusType.Submitted :
                    case PackageStatusType.Rejected :
                        package.Listed = false;
                        break;
                    case PackageStatusType.Approved :
                        package.ApprovedDate = now;
                        package.Listed = true;
                        break;
                    case PackageStatusType.Exempted :
                        package.Listed = true;
                        break;
                }

                UpdateIsLatest(package.PackageRegistration);
            }

            package.ReviewedDate = now;
            package.ReviewedById = user.Key;

            string emailComments = string.Empty;
            if (package.ReviewComments != comments && comments != null)
            {
                package.ReviewComments = comments;
                emailComments = comments;
            }

            packageRepo.CommitChanges();
            if (sendEmail) messageSvc.SendPackageModerationEmail(package, emailComments);

            NotifyIndexingService();
        }
        public void ChangePackageStatus(Package package, PackageStatusType status, string comments, string newReviewComments, User user, User reviewer, bool sendMaintainerEmail, PackageSubmittedStatusType submittedStatus, bool assignReviewer)
        {
            // no changes
            if (package.Status == status 
                && package.ReviewComments == comments 
                && string.IsNullOrWhiteSpace(newReviewComments) 
                && package.SubmittedStatus == submittedStatus) return;

            var now = DateTime.UtcNow;

            var statusChanged = false;
            var submittedStatusChanged = false;
            var newReviewCommentsOriginallyEmpty = string.IsNullOrWhiteSpace(newReviewComments);

            if (package.Status == PackageStatusType.Rejected && status == PackageStatusType.Submitted)
            {
                // unrejecting, provide another 15 days
                if (package.PackageCleanupResultDate.HasValue) package.PackageCleanupResultDate = DateTime.UtcNow;
                //todo: Set back to ready status?
                //if (package.SubmittedStatus == PackageSubmittedStatusType.Waiting && submittedStatus == package.SubmittedStatus)
            }

            if (package.Status == PackageStatusType.Submitted && package.SubmittedStatus != submittedStatus)
            {
                submittedStatusChanged = true;
                package.SubmittedStatus = submittedStatus;
            }

            if (package.Status != status && status != PackageStatusType.Unknown)
            {
                statusChanged = true;
                if (!string.IsNullOrWhiteSpace(newReviewComments)) newReviewComments += string.Format("{0}",Environment.NewLine);
                newReviewComments += string.Format("Status Change - Changed status of package from '{0}' to '{1}'.", package.Status.GetDescriptionOrValue().to_lower(), status.GetDescriptionOrValue().to_lower());
                package.Status = status;
                package.ApprovedDate = null;
                package.LastUpdated = now;

                switch (package.Status)
                {
                    case PackageStatusType.Submitted :
                    case PackageStatusType.Rejected :
                        package.Listed = false;
                        if (package.PackageTestResultStatus == PackageAutomatedReviewResultStatusType.Pending) package.PackageTestResultStatus = PackageAutomatedReviewResultStatusType.Exempted;
                        if (package.PackageValidationResultStatus == PackageAutomatedReviewResultStatusType.Pending) package.PackageValidationResultStatus = PackageAutomatedReviewResultStatusType.Exempted;
                        break;
                    case PackageStatusType.Approved :
                        package.ApprovedDate = now;
                        package.Listed = true;
                        package.PackageCleanupResultDate = null;
                        break;
                    case PackageStatusType.Exempted :
                        package.Listed = true;
                        break;
                }

                UpdateIsLatest(package.PackageRegistration);
            }

            // reviewer could be null / if user is requesting the package rejected, update
            // assign the reviewer if the user is a reviewer and the status is staying 
            // submitted, or the status is changing
            if (assignReviewer && ((user == reviewer && status == PackageStatusType.Submitted) || (statusChanged && status != PackageStatusType.Submitted)))
            {
                package.ReviewedDate = now;
                package.ReviewedById = user.Key;
            }

            if (package.ReviewComments != comments && !string.IsNullOrWhiteSpace(comments))
            {
                package.ReviewComments = comments;
            }

            if (!string.IsNullOrWhiteSpace(newReviewComments))
            {
                package.LastUpdated = now;
                var commenter = user == reviewer ? "reviewer" : "maintainer";

                if (!string.IsNullOrWhiteSpace(package.ReviewComments)) package.ReviewComments += string.Format("{0}{0}", Environment.NewLine);

                package.ReviewComments += string.Format("#### {0} ({1}) on {2} +00:00:{3}{4}", user.Username, commenter, now.ToString("dd MMM yyyy HH:mm:ss"), Environment.NewLine, newReviewComments);
            }

            packageRepo.CommitChanges();

            SendMaintainerEmail(package, newReviewComments, user, sendMaintainerEmail, statusChanged, submittedStatusChanged, newReviewCommentsOriginallyEmpty);
            SendReviewerEmail(package, newReviewComments, user, reviewer);

            InvalidateCache(package.PackageRegistration);
            NotifyIndexingService(package);
        }
        public void ChangePackageStatus(Package package, PackageStatusType status, string comments, string newComments, User user, User reviewer, bool sendMaintainerEmail, PackageSubmittedStatusType submittedStatus)
        {
            if (package.Status == status && package.ReviewComments == comments && string.IsNullOrWhiteSpace(newComments)) return;

            var now = DateTime.UtcNow;

            if (package.Status == PackageStatusType.Submitted) package.SubmittedStatus = submittedStatus;

            if (package.Status != status && status != PackageStatusType.Unknown)
            {
                if (!string.IsNullOrWhiteSpace(newComments)) newComments += string.Format("{0}",Environment.NewLine);
                newComments += string.Format("Status Change - Changed status of package from '{0}' to '{1}'.", package.Status.GetDescriptionOrValue().to_lower(), status.GetDescriptionOrValue().to_lower());
                package.Status = status;
                package.ApprovedDate = null;
                package.LastUpdated = now;

                switch (package.Status)
                {
                    case PackageStatusType.Submitted :
                    case PackageStatusType.Rejected :
                        package.Listed = false;
                        break;
                    case PackageStatusType.Approved :
                        package.ApprovedDate = now;
                        package.Listed = true;
                        break;
                    case PackageStatusType.Exempted :
                        package.Listed = true;
                        break;
                }

                UpdateIsLatest(package.PackageRegistration);
            }

            // reviewer could be null / if user is requesting the package rejected, update
            if (user == reviewer || (status == PackageStatusType.Rejected && package.Status != PackageStatusType.Rejected))
            {
                package.ReviewedDate = now;
                package.ReviewedById = user.Key;
            }

            if (package.ReviewComments != comments && !string.IsNullOrWhiteSpace(comments))
            {
                package.ReviewComments = comments;
            }

            string emailComments = string.Empty;
            
            if (!string.IsNullOrWhiteSpace(newComments))
            {
                emailComments = newComments;
                package.LastUpdated = now;
                var commenter = user == reviewer ? "reviewer" : "maintainer";

                if (!string.IsNullOrWhiteSpace(package.ReviewComments)) package.ReviewComments += string.Format("{0}{0}", Environment.NewLine);

                package.ReviewComments += string.Format("#### {0} ({1}) on {2} +00:00:{3}{4}", user.Username, commenter, now.ToString("dd MMM yyyy HH:mm:ss"), Environment.NewLine, newComments);
            }

            packageRepo.CommitChanges();
            if (sendMaintainerEmail) messageSvc.SendPackageModerationEmail(package, emailComments);

            if (user != reviewer && reviewer != null)
            {
                messageSvc.SendPackageModerationReviewerEmail(package, emailComments, user);
            }

            InvalidateCache(package.PackageRegistration);
        }