/// <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)); }
/// <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); } }
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)); }