コード例 #1
0
        protected void EditOwner(ContentItem contentItem, bool createMode)
        {
            string prefix = "ContentItemPermissionPart";
            PostedEditOwnerViewModel model = new PostedEditOwnerViewModel();

            this.TryUpdateModel(model, prefix);
            this.EditOwner(contentItem, model, createMode);
        }
コード例 #2
0
        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 }
                }));
            }
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
 protected void EditOwner(ContentItem contentItem, PostedEditOwnerViewModel model, bool createMode)
 {
     this.EditOwner(contentItem, model, createMode, true);
 }