/// <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
            });
        }
Example #2
0
        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()
                                                                                                                 } });
                    }
                }
            }
        }