protected void EditOwner(ContentItem contentItem, bool createMode) { string prefix = "ContentItemPermissionPart"; PostedEditOwnerViewModel model = new PostedEditOwnerViewModel(); this.TryUpdateModel(model, prefix); this.EditOwner(contentItem, model, createMode); }
public ActionResult QuickUpdate(TicketQuickUpdateViewModel model, string displyType) { if (!this.crmContentOwnershipService.IsCurrentUserOperator() && !this.crmContentOwnershipService.IsCurrentUserCustomer()) { return(new HttpUnauthorizedResult()); } if (model.Ids.Count == 0) { this.ModelState.AddModelError("Ids", "The model must contains minimum one contentItem.Id"); } var tickets = this.contentManager.GetMany <TicketPart>(model.Ids, VersionOptions.DraftRequired, new QueryHints().ExpandRecords(new[] { "TicketPartRecord", "ContentItemPermissionPartRecord" })).ToList(); if (tickets.Count != model.Ids.Count) { return(HttpNotFound()); } bool afterUpdateUserStillCanChangeOwnership = true; if (ModelState.IsValid) { foreach (var ticket in tickets) { var contentItem = ticket.ContentItem; var context = new UpdateContentContext(contentItem); this.Handlers.Invoke(handler => handler.Updating(context), Logger); if (contentItem == null) { return(HttpNotFound()); } if (!this.IsEditAuthorized(contentItem)) { this.ModelState.AddModelError("Ids", T("You don't have right access to change these items").Text); return(this.CreateActionResultBasedOnAjaxRequest(null, null)); } dynamic snapshot = this.streamService.TakeSnapshot(contentItem); if (model.UpdateBusinessUnitId || model.UpdateTeamId || model.UpdateUserId) { PostedEditOwnerViewModel postedEditOwnerViewModel = new PostedEditOwnerViewModel(); postedEditOwnerViewModel.UserId = model.UpdateUserId ? model.UserId : null; if (model.BusinessUnitId.HasValue) { postedEditOwnerViewModel.GroupId = model.UpdateBusinessUnitId ? "BusinessUnit:" + model.BusinessUnitId.Value.ToString(CultureInfo.InvariantCulture) : string.Empty; } if (model.UpdateTeamId && model.TeamId.HasValue) { postedEditOwnerViewModel.GroupId = "Team:" + model.TeamId.Value.ToString(CultureInfo.InvariantCulture); } this.EditOwner(contentItem, postedEditOwnerViewModel, false, false); afterUpdateUserStillCanChangeOwnership = this.crmContentOwnershipService.CurrentUserIsContentItemAssignee(contentItem) || this.services.Authorizer.Authorize(Permissions.AdvancedOperatorPermission); } TicketPart ticketPart = contentItem.As <TicketPart>(); // Title if (!string.IsNullOrEmpty(model.Title)) { ticketPart.Record.Title = model.Title; } // Description if (model.UpdateDescription) { ticketPart.Record.Description = model.Description; } // Priority if (model.PriorityId.HasValue) { ticketPart.Record.PriorityRecord = new PriorityRecord { Id = model.PriorityId.Value }; } else if (model.UpdatePriority) { ticketPart.Record.PriorityRecord = null; } // serviceId if (model.ServiceId.HasValue) { ticketPart.Record.Service = new ServiceRecord { Id = model.ServiceId.Value }; } else if (model.UpdateServiceId) { ticketPart.Record.Service = null; } // statusId if (model.StatusId.HasValue) { ticketPart.Record.StatusRecord = new StatusRecord { Id = model.StatusId.Value }; } else if (model.UpdateStatusId) { ticketPart.Record.StatusRecord = null; } // TicketTypeId if (model.TypeId.HasValue) { ticketPart.Record.TicketType = new TicketTypeRecord { Id = model.TypeId.Value }; } else if (model.UpdateTypeId) { ticketPart.Record.TicketType = null; } // DueDate if (model.DueDate.HasValue) { ticketPart.Record.DueDate = model.DueDate.Value; } else if (model.UpdateDueDate) { ticketPart.Record.DueDate = null; } this.Handlers.Invoke(handler => handler.Updated(context), Logger); contentManager.Publish(contentItem); this.streamService.WriteChangesToStreamActivity(contentItem, snapshot, StreamWriters.TicketStreamWriter); var documentIndex = this.indexProvider.New(contentItem.Id); this.contentManager.Index(contentItem, documentIndex); this.indexProvider.Store(TicketController.SearchIndexName, documentIndex); } } bool isAjaxRequest = Request.IsAjaxRequest(); if (isAjaxRequest) { displyType = string.IsNullOrEmpty(displyType) ? "Summary" : displyType; List <dynamic> shapes = new List <dynamic>(); foreach (var contentItem in tickets) { var shape = this.contentManager.BuildDisplay(tickets[0].ContentItem, displayType: displyType); shapes.Add(shape); } var data = new { Tickets = Newtonsoft.Json.JsonConvert.SerializeObject(shapes), ChangeOwnershipIsPossible = afterUpdateUserStillCanChangeOwnership }; AjaxMessageViewModel ajaxMessageModel = new AjaxMessageViewModel { Id = tickets[0].ContentItem.Id, IsDone = ModelState.IsValid, Data = data }; foreach (var item in ModelState) { ajaxMessageModel.Errors.AddRange(item.Value.Errors.Select(c => new KeyValuePair <string, string>(item.Key, c.Exception != null ? c.Exception.Message : c.ErrorMessage)).Where(c => !string.IsNullOrEmpty(c.Value))); } return(this.Json(ajaxMessageModel, JsonRequestBehavior.AllowGet)); } else if (!string.IsNullOrEmpty(model.returnUrl)) { return(this.Redirect(model.returnUrl)); } else { return(this.RedirectToAction("Edit", new RouteValueDictionary { { "Id", tickets[0].ContentItem.Id } })); } }
protected void EditOwner(ContentItem contentItem, PostedEditOwnerViewModel model, bool createMode, bool writeToActivityStream) { EditContentPermissionViewModel editContentPermissionViewModel = new EditContentPermissionViewModel(); editContentPermissionViewModel.AccessType = ContentItemPermissionAccessTypes.Assignee; editContentPermissionViewModel.RemoveOldPermission = false; if (model.UserId.HasValue) { editContentPermissionViewModel.Targets.Add(new TargetContentItemPermissionViewModel { UserId = model.UserId.Value, Checked = true }); } else if (!string.IsNullOrEmpty(model.GroupId)) { var targetContentItemPermissionViewModel = Converter.DecodeGroupId(model.GroupId); if (targetContentItemPermissionViewModel != null) { editContentPermissionViewModel.Targets.Add(targetContentItemPermissionViewModel); } } // try to check that the owner is changed in the model or not bool ownerIsChanged = false; var contentItemPermissionPart = contentItem.As <ContentItemPermissionPart>(); if (contentItemPermissionPart.Record.Items == null) { contentItemPermissionPart.Record.Items = new List <ContentItemPermissionDetailRecord>(); } var currentPermissionItems = contentItemPermissionPart.Record.Items.Where(c => c.AccessType == ContentItemPermissionAccessTypes.Assignee).ToList(); foreach (var target in editContentPermissionViewModel.Targets) { // user of the model doesn't exist in the current items if (target.UserId.HasValue && currentPermissionItems.Count(c => c.User != null && c.User.Id == target.UserId.Value) == 0) { ownerIsChanged = true; break; } // team of the model doesn't exist in the current items if (target.TeamId.HasValue && currentPermissionItems.Count(c => c.Team != null && c.Team.Id == target.TeamId.Value) == 0) { ownerIsChanged = true; break; } // businessUnit of the model doesn't exist in the current items if (target.BusinessUnitId.HasValue && currentPermissionItems.Count(c => c.BusinessUnit != null && c.BusinessUnit.Id == target.BusinessUnitId.Value) == 0) { ownerIsChanged = true; break; } } // owner is set to null if (currentPermissionItems.Count > 0 && editContentPermissionViewModel.Targets.Count == 0) { ownerIsChanged = true; } // return in case owner doesn't change if (!ownerIsChanged) { return; } if (createMode || this.contentOwnershipHelper.IsChangingPermissionsValid(editContentPermissionViewModel, new[] { contentItem }, ModelState)) { this.contentOwnershipHelper.Update(editContentPermissionViewModel, new[] { contentItem }, writeToActivityStream); } }
protected void EditOwner(ContentItem contentItem, PostedEditOwnerViewModel model, bool createMode) { this.EditOwner(contentItem, model, createMode, true); }