Exemplo n.º 1
0
        /// <summary>
        /// Редактирует подписку
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public ActionResult Edit(Guid id)
        {
            var subscriptionRepository = CurrentAccountDbContext.GetSubscriptionRepository();
            var subscription           = subscriptionRepository.GetById(id);
            var model = new SubscriptionEditModel()
            {
                ModalMode            = Request.IsAjaxRequest(),
                ReturnUrl            = Url.Action("Index", new { userId = subscription.UserId }),
                Id                   = subscription.Id,
                Object               = subscription.Object,
                NotifyBetterStatus   = subscription.NotifyBetterStatus,
                UserId               = subscription.UserId,
                ComponentTypeId      = subscription.ComponentTypeId,
                ComponentId          = subscription.ComponentId,
                Channel              = subscription.Channel,
                CanShowChannel       = false,
                CanShowComponentType = false,
                CanShowComponent     = false,
                IsEnabled            = subscription.IsEnabled,
                Color                = ColorStatusSelectorValue.FromEventImportance(subscription.Importance),
                MinimumDuration      = TimeSpanHelper.FromSeconds(subscription.DurationMinimumInSeconds),
                ResendTime           = TimeSpanHelper.FromSeconds(subscription.ResendTimeInSeconds)
            };

            return(View(model));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Добавление новой подписки
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="channel"></param>
        /// <param name="componentTypeId"></param>
        /// <param name="componentId"></param>
        /// <returns></returns>
        public ActionResult Add(
            Guid?userId,
            SubscriptionObject? @object,
            SubscriptionChannel?channel,
            Guid?componentTypeId,
            Guid?componentId)
        {
            if (@object == null)
            {
                throw new UserFriendlyException("Не указан тип добавляемой подписки");
            }
            userId = userId ?? CurrentUser.Id;
            var model = new SubscriptionEditModel()
            {
                ModalMode            = Request.IsAjaxRequest(),
                ReturnUrl            = Url.Action("Index", new { userId = userId }),
                Id                   = null,
                Object               = @object.Value,
                NotifyBetterStatus   = false,
                UserId               = userId,
                CanShowChannel       = channel == null,
                CanShowComponentType = componentTypeId == null,
                CanShowComponent     = componentId == null,
                Channel              = channel ?? SubscriptionChannel.Email,
                IsEnabled            = true,
                Color                = ColorStatusSelectorValue.FromColor(ObjectColor.Gray),
                MinimumDuration      = null,
                ResendTime           = null,
                ComponentTypeId      = componentTypeId,
                ComponentId          = componentId
            };

            return(View("Edit", model));
        }
        public void AdminTest()
        {
            // Создадим пользователя
            var account = TestHelper.GetTestAccount();
            var user    = TestHelper.CreateTestUser(account.Id);
            var admin   = TestHelper.GetAccountAdminUser(account.Id);

            // Проверим, что админ может видеть чужие подписки
            SubscriptionListModel model;

            using (var controller = new SubscriptionsController(account.Id, admin.Id))
            {
                // прочитаем подписки админа
                var result = (ViewResultBase)controller.Index(user.Id);
                model = (SubscriptionListModel)result.Model;
            }
            Assert.Equal(user.Id, model.UserId);
            Assert.True(model.Subscriptions.Length > 0);
            Assert.True(model.Subscriptions.All(t => t.UserId == user.Id));

            // откроем подписку админа на редактирование
            var userSubscription            = model.Subscriptions.First();
            SubscriptionEditModel editModel = null;

            using (var controller = new SubscriptionsController(account.Id, user.Id))
            {
                var result = (ViewResultBase)controller.Edit(userSubscription.Id);
                editModel = (SubscriptionEditModel)result.Model;
                Assert.Null(editModel.MinimumDuration);
            }

            // сохраним изменения в подписке пользователя
            using (var controller = new SubscriptionsController(account.Id, admin.Id))
            {
                editModel.MinimumDuration = TimeSpan.FromSeconds(10);
                controller.Edit(editModel);
            }

            // проверим, что настройки подписки изменились
            using (var accountDbContext = account.CreateAccountDbContext())
            {
                var subscription = accountDbContext.Subscriptions.Find(userSubscription.Id);
                Assert.Equal(10, subscription.DurationMinimumInSeconds);
            }
        }
Exemplo n.º 4
0
        public ActionResult Edit(SubscriptionEditModel model)
        {
            var modelState = new ModelStateHelper <SubscriptionEditModel>(ModelState);

            // Проверка ComponentTypeId
            if (model.Object == SubscriptionObject.ComponentType && model.ComponentTypeId == null)
            {
                modelState.AddErrorFor(x => x.ComponentTypeId, "Выберите тип компонента");
            }

            // Проверка ComponentId
            if (model.Object == SubscriptionObject.Component && model.ComponentId == null)
            {
                modelState.AddErrorFor(x => x.ComponentId, "Выберите компонент");
            }

            // Проверка Channel
            if (model.Id == null && model.Channel == null)
            {
                // канал должен указываться явно только для новых подписок
                modelState.AddErrorFor(x => x.Channel, "Выберите канал");
            }

            // Проверка UserId
            if (model.Id == null && model.UserId == null)
            {
                // Пользователь должен указываться явно только для новых подписок
                modelState.AddErrorFor(x => x.UserId, "Выберите пользователя");
            }

            // проверка цвета
            var color = model.Color.GetSelectedOne();

            if (color == null)
            {
                modelState.AddErrorFor(x => x.Color, "Укажите цвет");
            }

            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            try
            {
                // проверка прав
                var isOtherUser = CurrentUser.Id != model.UserId;
                if (isOtherUser)
                {
                    if (CurrentUser.IsAdmin() == false)
                    {
                        throw new UserFriendlyException("Нет прав на создание подписок другим пользователям");
                    }
                }

                var importance = ImportanceHelper.Get(color).Value;
                var client     = GetDispatcherClient();
                if (model.Id == null)
                {
                    // создание новой подписки
                    var createData = new CreateSubscriptionRequestData()
                    {
                        UserId  = model.UserId.Value,
                        Channel = model.Channel.Value,
                        DurationMinimumInSeconds = TimeSpanHelper.GetSeconds(model.MinimumDuration),
                        ResendTimeInSeconds      = TimeSpanHelper.GetSeconds(model.ResendTime),
                        Importance         = importance,
                        IsEnabled          = model.IsEnabled,
                        NotifyBetterStatus = model.NotifyBetterStatus,
                        Object             = model.Object
                    };
                    if (model.Object == SubscriptionObject.Component)
                    {
                        createData.ComponentId = model.ComponentId;
                    }
                    if (model.Object == SubscriptionObject.ComponentType)
                    {
                        createData.ComponentTypeId = model.ComponentTypeId;
                    }
                    var response = client.CreateSubscription(CurrentUser.AccountId, createData);
                    response.Check();
                    model.Id = response.Data.Id;
                }
                else
                {
                    // редактирование существующей подписки
                    var updateData = new UpdateSubscriptionRequestData()
                    {
                        Id = model.Id.Value,
                        NotifyBetterStatus       = model.NotifyBetterStatus,
                        IsEnabled                = model.IsEnabled,
                        ResendTimeInSeconds      = TimeSpanHelper.GetSeconds(model.ResendTime),
                        DurationMinimumInSeconds = TimeSpanHelper.GetSeconds(model.MinimumDuration),
                        Importance               = importance
                    };
                    var response = client.UpdateSubscription(CurrentUser.AccountId, updateData);
                    response.Check();
                }
                if (model.ModalMode)
                {
                    return(GetSuccessJsonResponse(new { subscriptionId = model.Id }));
                }
                return(Redirect(model.ReturnUrl));
            }
            catch (UserFriendlyException exception)
            {
                model.Exception = exception;
            }

            return(View(model));
        }