/// <summary> /// Updates sharing status. /// </summary> /// <param name="status">Status.</param> /// <returns>Update result.</returns> public PresentationSharingUpdateResult UpdateSharingStatus(PresentationSharingStatus status) { PresentationSharing[] allSharings = null; List <string> allSharingEmails = new List <string>(); List <PresentationSharing> added = new List <PresentationSharing>(); List <PresentationSharing> removed = new List <PresentationSharing>(); List <PresentationSharing> sharingsToRemove = new List <PresentationSharing>(); if (status != null && status.PresentationId > 0) { allSharings = this.Query().Where(s => s.PresentationId == status.PresentationId).ToArray(); allSharingEmails.AddRange(allSharings.Select(s => s.UserInviteEmail).Distinct()); if (status.Users == null || !status.Users.Any()) { foreach (PresentationSharing sharing in allSharings) { removed.Add(this.Delete(sharing)); } } else { // Adding new users. foreach (var user in status.Users.Where(u => !string.IsNullOrEmpty(u.UserInviteEmail) && !allSharingEmails.Contains(u.UserInviteEmail.Trim()))) { added.Add(this.Update(new PresentationSharing() { PresentationId = status.PresentationId, UserInviteEmail = user.UserInviteEmail.Trim(), UserInviteKey = System.Guid.NewGuid().ToString() })); } // Removing users (find). foreach (PresentationSharing sharing in allSharings) { if (!status.Users.Where(u => string.Compare((u.UserInviteEmail ?? string.Empty).Trim(), (sharing.UserInviteEmail ?? string.Empty).Trim(), true) == 0).Any()) { sharingsToRemove.Add(sharing); } } // Removing users (remove). foreach (PresentationSharing sharing in sharingsToRemove) { removed.Add(this.Delete(sharing)); } } } return(new PresentationSharingUpdateResult() { Added = added, Removed = removed }); }
public void UpdateSharing([FromBody] PresentationSharingStatus status) { Presentation p = null; PresentationSharingUpdateResult result = null; Dictionary <int, string> presentationTitles = new Dictionary <int, string>(); if (status != null && status.PresentationId > 0) { using (var repo = Resolver.Resolve <Storage.Repositories.IPresentationSharingRepository>()) result = repo.UpdateSharingStatus(status); if (result != null && result.Added != null) { foreach (PresentationSharing sharing in result.Added) { if (!presentationTitles.ContainsKey(sharing.PresentationId)) { p = base.Service.Read(sharing.PresentationId); if (p != null) { presentationTitles.Add(sharing.PresentationId, p.Title); } } MessageQueueManager.Current.GetQueue(MessageQueueType.Email).AddMessages(new Message[] { new Message() { Id = Guid.NewGuid().ToString(), Subject = Ifly.Resources.Frontpage.Email_PresentationSharing_Subject, Body = new GenericMessageBody ( new Tuple <string, string>("Recipient", sharing.UserInviteEmail), new Tuple <string, string>("Body", string.Format(Ifly.Resources.Frontpage.Email_PresentationSharing_Body, presentationTitles.ContainsKey(sharing.PresentationId) && !string.IsNullOrEmpty(presentationTitles[sharing.PresentationId]) ? presentationTitles[sharing.PresentationId] : Ifly.Resources.Frontpage.Email_PresentationSharing_NoTitle, string.Format("{0}://{1}/confirm-sharing?email={2}&token={3}", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Authority, HttpContext.Current.Server.UrlEncode(sharing.UserInviteEmail), sharing.UserInviteKey))) ).ToString() } }); } } } }