public ActionResult RestoreAnnotationReplies(string connectionId, string fileId, string annotationGuid, AnnotationReplyInfo[] replies, string callback = null) { try { var result = (replies == null || replies.Length == 0 ? new RestoreRepliesResult { AnnotationGuid = annotationGuid, ReplyIds = new string[0] } : _annotationSvc.RestoreAnnotationReplies(connectionId, fileId, annotationGuid, replies)); return this.JsonOrJsonP(result, callback); } catch(AnnotatorException e) { return this.JsonOrJsonP(new FailedResponse { Reason = e.Message }, callback); } }
/// <summary> /// Restores a hierarchy of annotation replies /// </summary> /// <param name="connectionId">Socket connection identifier to validate user permissions for</param> /// <param name="fileId">The document path to update the reply text for</param> /// <param name="annotationGuid">The annotation global unique identifier</param> /// <param name="replies">The list of annotation replies to restore</param> /// <returns>An instance of an object containing the operation result</returns> public RestoreRepliesResult RestoreAnnotationReplies(string connectionId, string fileId, string annotationGuid, AnnotationReplyInfo[] replies) { var reviewer = _annotationBroadcaster.GetConnectionUser(connectionId); if(reviewer == null) { throw new AnnotatorException("There is no such reviewer."); } var user = _userSvc.GetUserByGuid(reviewer.Value.UserGuid); var document = GetDocument(fileId, user.Id); _annotator.CheckReviewerPermissions(user.Id, document.Id, AnnotationReviewerRights.CanAnnotate); if(replies == null || replies.Length == 0) { return new RestoreRepliesResult { AnnotationGuid = annotationGuid, ReplyIds = new string[0] }; } var idsMap = new StringDictionary(); var result = new RestoreRepliesResult { AnnotationGuid = annotationGuid, ReplyIds = new string[replies.Length] }; var annotation = _mapper.Map<CreateAnnotationResult>(_annotator.GetAnnotation(annotationGuid, document.Id, user.Id)); for(var i = 0; i < replies.Length; i++) { var r = replies[i]; var parentGuid = (!string.IsNullOrEmpty(r.ParentReplyGuid) && idsMap.ContainsKey(r.ParentReplyGuid) ? idsMap[r.ParentReplyGuid] : r.ParentReplyGuid); var replyResult = _annotator.CreateAnnotationReply(annotation.Id, r.Message, parentGuid, document.Id, user.Id); idsMap[r.Guid] = replyResult.ReplyGuid; result.ReplyIds[i] = replyResult.ReplyGuid; } return result; }
public void DeleteAnnotationReply(IList<string> collaboratorGuids, string connectionIdToExclude, string annotationGuid, string replyGuid, AnnotationReplyInfo[] replies) { Array.ForEach( _annotationsHub.GetConnectionIdsToCall(connectionIdToExclude, collaboratorGuids), x => GetClient(x).deleteAnnotationReplyOnClient(connectionIdToExclude, annotationGuid, replyGuid, replies)); }