public ActionResult Set(ImpersonationStatus status)
        {
            if (status.Impersonating)
            {
                using (SwitchOrgScope(status.OrganisationId))
                {
                    var user = _getUserQuery.Invoke(new GetUserRequest
                    {
                        UserId         = status.UserId,
                        OrganisationId = status.OrganisationId
                    }).User;

                    if (user == null)
                    {
                        return(RedirectWithViewModel(status, "index", "Failed to find user with Id {0}".FormatWith(status.UserId)));
                    }

                    status.ExpiryUtc    = DateTime.Now.AddMinutes(30);
                    status.EmailAddress = user.Email;
                    _impersonationManager.Impersonate(status);
                }
            }
            else
            {
                _impersonationManager.StopImpersonating();
            }

            ConfirmationNotification("Success!");
            return(RedirectToAction("Index"));
        }
Example #2
0
 public ActionResult Edit(string userId)
 {
     return(EditUser(_getUserQuery.Invoke(new GetUserRequest
     {
         OrganisationId = Core.AppContext.CurrentUser.OrganisationId,
         UserId = userId
     }).User, false));
 }
        public UpdateIssueDetailsResponse Invoke(UpdateIssueDetailsRequest request)
        {
            Trace("Starting...");

            var issue = Load <Issue>(Issue.GetId(request.IssueId));

            if (issue == null)
            {
                return(new UpdateIssueDetailsResponse
                {
                    Status = UpdateIssueDetailsStatus.IssueNotFound
                });
            }

            _authorisationManager.Authorise(issue, request.CurrentUser);

            //if we are assigning this issue to a new user, notify them
            if (issue.UserId != request.AssignedUserId && request.AssignedUserId != request.CurrentUser.Id)
            {
                var user = _getUserQuery.Invoke(new GetUserRequest
                {
                    UserId         = request.AssignedUserId,
                    OrganisationId = issue.OrganisationId
                }).User;

                _sendNotificationCommand.Invoke(new SendNotificationRequest
                {
                    EmailInfo = new IssueAssignedToUserEmailInfo
                    {
                        To        = user.Email,
                        IssueId   = issue.Id,
                        IssueName = request.Name
                    },
                    OrganisationId = issue.OrganisationId,
                    Organisation   = request.CurrentUser.ActiveOrganisation
                });
            }

            if (issue.Status != request.Status)
            {
                Store(new IssueHistory
                {
                    DateAddedUtc   = DateTime.UtcNow.ToDateTimeOffset(request.CurrentUser.ActiveOrganisation.TimezoneId),
                    IssueId        = issue.Id,
                    NewStatus      = request.Status,
                    PreviousStatus = issue.Status,
                    SystemMessage  = true,
                    UserId         = request.CurrentUser.Id,
                    Type           = HistoryItemType.StatusUpdated,
                    ApplicationId  = issue.ApplicationId,
                });
            }

            if (issue.UserId != request.AssignedUserId)
            {
                Store(new IssueHistory
                {
                    DateAddedUtc     = DateTime.UtcNow.ToDateTimeOffset(request.CurrentUser.ActiveOrganisation.TimezoneId),
                    IssueId          = issue.Id,
                    SystemMessage    = true,
                    UserId           = request.CurrentUser.Id,
                    AssignedToUserId = request.AssignedUserId,
                    Type             = HistoryItemType.AssignedUserChanged,
                    ApplicationId    = issue.ApplicationId
                });
            }

            issue.Status          = request.Status;
            issue.UserId          = request.AssignedUserId;
            issue.Name            = request.Name;
            issue.NotifyFrequency = request.NotifyFrequency;
            issue.Reference       = request.Reference;
            issue.LastModifiedUtc = DateTime.UtcNow;

            if (request.Comment.IsNotNullOrEmpty())
            {
                Store(new IssueHistory
                {
                    DateAddedUtc     = DateTime.UtcNow.ToDateTimeOffset(request.CurrentUser.ActiveOrganisation.TimezoneId),
                    IssueId          = issue.Id,
                    UserId           = request.CurrentUser.Id,
                    AssignedToUserId = request.AssignedUserId,
                    Type             = HistoryItemType.Comment,
                    Comment          = request.Comment,
                    ApplicationId    = issue.ApplicationId
                });
            }

            Session.AddCommitAction(new RaiseIssueModifiedEvent(issue));

            return(new UpdateIssueDetailsResponse
            {
                Status = UpdateIssueDetailsStatus.Ok
            });
        }
Example #4
0
        public BatchStatusUpdateResponse Invoke(BatchStatusUpdateRequest request)
        {
            Trace("Starting...");

            if (request.AssignToUserId != null)
            {
                var assignToUser = _getUserQuery.Invoke(new GetUserRequest
                {
                    OrganisationId = request.CurrentUser.OrganisationId,
                    UserId         = request.AssignToUserId
                }).User;

                _authorisationManager.Authorise(assignToUser, request.CurrentUser);
            }

            var issuesToUpdate = new List <Issue>();

            foreach (var issueId in request.IssueIds.Select(issueId => issueId.Split('|')[0]))
            {
                var issue = Load <Issue>(Issue.GetId(issueId));

                if (issue != null)
                {
                    _authorisationManager.Authorise(issue, request.CurrentUser);

                    issuesToUpdate.Add(issue);

                    if (request.AssignToUserId != null)
                    {
                        issue.UserId = request.AssignToUserId;

                        Store(new IssueHistory
                        {
                            DateAddedUtc     = DateTime.UtcNow.ToDateTimeOffset(request.CurrentUser.ActiveOrganisation.TimezoneId),
                            UserId           = request.CurrentUser.Id,
                            AssignedToUserId = request.AssignToUserId,
                            Type             = HistoryItemType.AssignedUserChanged,
                            IssueId          = issue.Id,
                            ApplicationId    = issue.ApplicationId,
                            SystemMessage    = true
                        });
                    }

                    Store(new IssueHistory
                    {
                        DateAddedUtc   = DateTime.UtcNow.ToDateTimeOffset(request.CurrentUser.ActiveOrganisation.TimezoneId),
                        UserId         = request.CurrentUser.Id,
                        PreviousStatus = issue.Status,
                        NewStatus      = request.Status,
                        Type           = HistoryItemType.StatusUpdated,
                        IssueId        = issue.Id,
                        ApplicationId  = issue.ApplicationId,
                        SystemMessage  = true
                    });

                    issue.Status = request.Status;
                }
            }

            if (issuesToUpdate.Count > 0)
            {
                Session.AddCommitAction(new RaiseIssueModifiedEvent(issuesToUpdate));
            }

            return(new BatchStatusUpdateResponse
            {
                Status = BulkStatusUpdateStatus.Ok
            });
        }