Ejemplo n.º 1
0
        public static ConversationModel GetConversationFromGroup(long groupId, Guid memId)
        {
            ConversationModel con = new ConversationModel();
            try
            {
                con.GroupMessageId = groupId;
                con.OwnerUserId = memId;
                var toMem = MemberCache.GetMemberDisplay(memId);
                con.FromName = toMem.DerbyName;

                var dc = new ManagementContext();
                var gro = (from xx in dc.GroupMessages.Include("Messages")
                           where xx.GroupId == groupId
                           where xx.IsDeleted == false
                           select new
                           {
                               xx.TitleOfMessage,
                               Messages = (from yy in xx.Messages
                                           select new
                                           {
                                               yy.FromUser,
                                               yy.Created,
                                               yy.MessageId,
                                               yy.MessageText,
                                               yy.MessagesInbox

                                           }).OrderBy(z => z.MessageId),
                               Recipients = xx.Recipients.Where(x => x.IsRemovedFromGroup == false),

                           }).AsParallel().FirstOrDefault();

                if (gro == null)
                    return null;

                foreach (var user in gro.Recipients)
                {
                    MemberDisplayMessage mem = new MemberDisplayMessage();
                    mem.DerbyName = user.Recipient.DerbyName;
                    mem.Firstname = user.Recipient.Firstname;
                    mem.LastName = user.Recipient.Lastname;
                    if (user.Recipient.Photos.OrderByDescending(x => x.Created).FirstOrDefault() != null)
                        mem.ThumbUrl = user.Recipient.Photos.OrderByDescending(x => x.Created).FirstOrDefault().ImageUrlThumb;
                    mem.MemberId = user.Recipient.MemberId;
                    mem.UserId = user.Recipient.AspNetUserId;
                    con.Recipients.Add(mem);
                }

                con.Title = gro.TitleOfMessage;
                foreach (var message in gro.Messages)
                {
                    try
                    {
                        MessageSingleModel ms = new MessageSingleModel();
                        ms.FromId = message.FromUser.MemberId;
                        ms.FromName = message.FromUser.DerbyName;
                        if (message.FromUser.Photos.OrderByDescending(x => x.Created).FirstOrDefault() != null)
                            ms.ThumbUrl = message.FromUser.Photos.OrderByDescending(x => x.Created).FirstOrDefault().ImageUrlThumb;
                        ms.MessageCreated = message.Created;
                        ms.MessageId = message.MessageId;
                        foreach (var inbox in message.MessagesInbox)
                        {
                            var user = con.Recipients.Where(x => x.MemberId == inbox.ToUser.MemberId).FirstOrDefault();
                            user.HasNotReadConversation = true;
                        }
                        if (!String.IsNullOrEmpty(message.MessageText))
                        {
                            ms.MessageText = message.MessageText;
                            ms.MessageTextHtml = message.MessageText;

                        }
                        if (ms.MessageCreated > con.LastPostDate)
                        {
                            con.LastPostDate = ms.MessageCreated;
                            //con.IsConversationRead = ms.IsMessageRead;
                            con.LastPostBy = ms.FromName;
                        }
                        if (con.Messages.Where(x => x.MessageId == ms.MessageId).FirstOrDefault() == null)
                            con.Messages.Add(ms);
                    }
                    catch (Exception exception)
                    {
                        ErrorDatabaseManager.AddException(exception, exception.GetType());
                    }
                }

            }
            catch (Exception exception)
            {
                ErrorDatabaseManager.AddException(exception, exception.GetType());
            }
            return con;
        }
Ejemplo n.º 2
0
        private static void GetGroupMessages(Guid ownerId, MessageModel mess, ManagementContext dc, int page, int take)
        {
            //TODO: add Take(50) a few days from now.
            var to = (from xx in dc.GroupMessages
                      where xx.IsDeleted == false
                      where xx.Recipients.Where(z => z.IsRemovedFromGroup == false).Select(x => x.Recipient.MemberId).Contains(ownerId)
                      select xx).AsParallel().OrderByDescending(x => x.LastModified).Skip(page * take).Take(take).ToList();
            List<RDN.Library.DataModels.Messages.GroupMessage> groups = new List<DataModels.Messages.GroupMessage>();

            //foreach (var recipient in to)
            foreach (var group in to)
            {
                try
                {
                    //var group = recipient.Group;
                    //var messages = recipient.Group.Messages;
                    foreach (var message in group.Messages)
                    {
                        MessageSingleModel ms = new MessageSingleModel();
                        if (message.FromUser == null)
                        {
                            ms.FromId = new Guid();
                        }
                        else
                        {
                            ms.FromId = message.FromUser.MemberId;
                            ms.FromName = message.FromUser.DerbyName;
                        }
                        ms.MessageCreated = message.Created;
                        ms.MessageId = message.MessageId;
                        if (!String.IsNullOrEmpty(message.MessageText))
                        {
                            ms.MessageText = RDN.Portable.Util.Strings.StringExt.HtmlDecode(message.MessageText);
                            if (ms.MessageText.Length > 20)
                                ms.MessageText = ms.MessageText.Remove(20);
                        }

                        var convo = mess.Conversations.Where(x => x.GroupMessageId == group.GroupId).FirstOrDefault();
                        if (convo == null)
                        {

                            ConversationModel con = new ConversationModel();
                            con.CanDelete = true;
                            if (message.FromUser != null)
                            {
                                con.FromName = message.FromUser.DerbyName;
                                con.FromId = message.FromUser.MemberId;
                            }
                            con.LastPostDate = ms.MessageCreated;
                            if (message.MessagesInbox.Where(x => x.ToUser.MemberId == ownerId).FirstOrDefault() == null)
                                con.IsConversationRead = true;

                            con.GroupMessageId = group.GroupId;

                            if (!String.IsNullOrEmpty(group.TitleOfMessage))
                                con.Title = group.TitleOfMessage;
                            else
                                con.Title = "Message";
                            if (message.FromUser != null)
                            {
                                con.LastPostBy = message.FromUser.DerbyName;
                            }
                            var recips = group.Recipients.Where(x => x.IsRemovedFromGroup == false);
                            foreach (var rec in recips)
                            {
                                MemberDisplayMessage mem = new MemberDisplayMessage();
                                mem.DerbyName = rec.Recipient.DerbyName;
                                mem.MemberId = rec.Recipient.MemberId;
                                mem.UserId = rec.Recipient.AspNetUserId;
                                var photo = rec.Recipient.Photos.FirstOrDefault();
                                if (photo != null)
                                    mem.ThumbUrl = photo.ImageUrlThumb;

                                con.Recipients.Add(mem);
                            }
                            con.Messages.Add(ms);
                            mess.Conversations.Add(con);
                        }
                        else
                        {
                            if (ms.MessageCreated > convo.LastPostDate)
                            {
                                convo.LastPostBy = ms.FromName;
                                convo.LastPostDate = ms.MessageCreated;
                            }
                            else
                            {
                                convo.FromId = ms.FromId;
                                convo.FromName = ms.FromName;
                            }

                            if (message.MessagesInbox.Where(x => x.ToUser.MemberId == ownerId).FirstOrDefault() != null)
                                convo.IsConversationRead = false;
                            else
                                convo.IsConversationRead = true;
                            convo.Messages.Add(ms);

                        }

                        groups.Add(group);
                    }
                }
                catch (Exception exception)
                {
                    ErrorDatabaseManager.AddException(exception, exception.GetType());
                }
            }
            mess.Conversations = mess.Conversations.OrderByDescending(x => x.LastPostDate).ToList();
        }
Ejemplo n.º 3
0
        public static List<MessageSingleModel> GetMessageHistoryWithGroup(long groupId, Guid ownerId, int lastMessageId)
        {
            List<MessageSingleModel> messHistory = new List<MessageSingleModel>();
            try
            {
                var dc = new ManagementContext();
                var gro = (from xx in dc.GroupMessages.Include("Messages").Include("Message.FromUser")
                           where xx.GroupId == groupId
                           where xx.IsDeleted == false
                           select new
                           {
                               Messages = (from yy in xx.Messages
                                           where yy.MessageId > lastMessageId
                                           select new
                                           {
                                               yy.FromUser,
                                               yy.Created,
                                               yy.MessageId,
                                               yy.MessageText
                                           })
                           }).AsParallel().FirstOrDefault();
                if (gro == null)
                    return null;

                foreach (var message in gro.Messages)
                {
                    try
                    {
                        MessageSingleModel ms = new MessageSingleModel();
                        ms.FromId = message.FromUser.MemberId;
                        ms.FromName = message.FromUser.DerbyName;
                        ms.MessageCreated = message.Created;
                        ms.MessageId = message.MessageId;
                        ms.MessageText = RDN.Portable.Util.Strings.StringExt.HtmlDecode(message.MessageText);
                        if (messHistory.Where(x => x.MessageId == ms.MessageId).FirstOrDefault() == null)
                            messHistory.Add(ms);
                    }
                    catch (Exception exception)
                    {
                        ErrorDatabaseManager.AddException(exception, exception.GetType());
                    }
                }
            }
            catch (Exception exception)
            {
                ErrorDatabaseManager.AddException(exception, exception.GetType());
            }
            return messHistory;
        }
Ejemplo n.º 4
0
        public static int EmailMembersAboutMessagesWaitingInInbox()
        {
            int emailsSent = 0;
            try
            {
                var dc = new ManagementContext();
                int type = Convert.ToInt32(TaskTypeEnum.EmailMembersThatHaveMessagesSittingInInbox);
                var emailTask = dc.AutomatedTasks.Where(x => x.TaskIdForDescription == type).FirstOrDefault();

                if (emailTask == null)
                {
                    TaskForRunning newTask = new TaskForRunning();
                    newTask.FirstRun = DateTime.UtcNow;
                    newTask.HoursBetweenEachRunOfTask = HOURS_BETWEEN_EMAILS_FOR_MESSAGES_IN_INBOX;
                    newTask.LastRun = DateTime.UtcNow;
                    newTask.TaskIdForDescription = type;
                    dc.AutomatedTasks.Add(newTask);
                    dc.SaveChanges();
                }
                else
                {
                    emailTask.HoursBetweenEachRunOfTask = HOURS_BETWEEN_EMAILS_FOR_MESSAGES_IN_INBOX;
                    if (emailTask.LastRun.AddHours(HOURS_BETWEEN_EMAILS_FOR_MESSAGES_IN_INBOX) < DateTime.UtcNow)
                    {
                        List<Guid> membersToEmail = new List<Guid>();
                        MessageModel mess = new MessageModel();

                        emailTask.LastRun = DateTime.UtcNow;

                        var to = (from xx in dc.MessageInbox.Include("Message").Include("Message.FromUser").Include("ToUser")
                                  where xx.UserNotifiedViaEmail == false
                                  where xx.IsRead == false
                                  select xx).ToList();

                        foreach (var message in to)
                        {
                            message.UserNotifiedViaEmail = true;
                            message.NotifiedEmailDateTime = DateTime.UtcNow;
                            try
                            {
                                MessageSingleModel ms = new MessageSingleModel();
                                ms.FromId = message.Message.FromUser.MemberId;
                                ms.MessageText = RDN.Portable.Util.Strings.StringExt.HtmlDecode(message.Message.MessageText);
                                membersToEmail.Add(message.ToUser.MemberId);
                                if (ms.MessageText.Length > 20)
                                    ms.MessageText = ms.MessageText.Remove(20);
                                var convo = mess.Conversations.Where(x => x.ConversationWithUser == ms.FromId && x.OwnerUserId == message.ToUser.MemberId).FirstOrDefault();
                                if (convo != null)
                                {
                                    convo.Messages.Add(ms);
                                }
                                else
                                {
                                    ConversationModel con = new ConversationModel();
                                    con.ConversationWithUser = ms.FromId;
                                    con.FromName = message.Message.FromUser.DerbyName;
                                    con.OwnerUserId = message.ToUser.MemberId;
                                    con.Messages.Add(ms);
                                    mess.Conversations.Add(con);
                                }
                            }
                            catch (Exception exception)
                            {
                                ErrorDatabaseManager.AddException(exception, exception.GetType());
                            }
                        }
                        dc.SaveChanges();
                        membersToEmail = membersToEmail.Distinct().ToList();

                        var members = dc.Members.Where(x => x.AspNetUserId != null && x.AspNetUserId != new Guid()).Where(x => membersToEmail.Contains(x.MemberId)).ToList();

                        foreach (var mem in members)
                        {
                            string membersWhoSentThisMemberAMessage = String.Empty;
                            foreach (var conv in mess.Conversations.Where(x => x.OwnerUserId == mem.MemberId))
                            {
                                membersWhoSentThisMemberAMessage += conv.FromName;
                                membersWhoSentThisMemberAMessage += "<br/>";
                            }

                            try
                            {
                                var user = System.Web.Security.Membership.GetUser((object)mem.AspNetUserId);
                                var emailData = new Dictionary<string, string>
                                        {
                                            { "derbyname",mem.DerbyName}, 
                                            { "membersWhoSentMessages", membersWhoSentThisMemberAMessage}, 
                                            { "viewConversationLink",ServerConfig.VIEW_MESSAGES_INBOX_MEMBER + mem.MemberId.ToString().Replace("-","") }
                                        };

                                EmailServer.EmailServer.SendEmail(ServerConfig.DEFAULT_EMAIL, ServerConfig.DEFAULT_EMAIL_FROM_NAME, user.UserName, EmailServer.EmailServer.DEFAULT_SUBJECT + " New Messages", emailData, EmailServer.EmailServerLayoutsEnum.SendLatestConversationsThreadToUser);
                                emailsSent += 1;
                            }
                            catch (Exception exception)
                            {
                                Error.ErrorDatabaseManager.AddException(exception, exception.GetType());
                            }
                        }
                        dc.SaveChanges();
                    }
                }
            }
            catch (Exception exception)
            {
                Error.ErrorDatabaseManager.AddException(exception, exception.GetType());
            }
            return emailsSent;
        }