Esempio n. 1
0
        public void RecountRepliesForTopic(DataModels.Message parentMessage)
        {
            var messagesQuery = from message in DbContext.Messages
                                where message.ParentId == parentMessage.Id
                                select message;

            var messages = messagesQuery.ToList();

            var updated = false;

            var replies = messages.Count();

            if (parentMessage.ReplyCount != replies)
            {
                parentMessage.ReplyCount = replies;
                updated = true;
            }

            var lastReply = messages.LastOrDefault();

            if (lastReply != null && parentMessage.LastReplyId != lastReply.Id)
            {
                parentMessage.LastReplyId     = lastReply.Id;
                parentMessage.LastReplyPosted = lastReply.TimePosted;
                parentMessage.LastReplyById   = lastReply.PostedById;
                updated = true;
            }

            if (updated)
            {
                DbContext.Update(parentMessage);
                DbContext.SaveChanges();
            }
        }
Esempio n. 2
0
        public void RemoveTopicMessageBoards(DataModels.Message sourceMessage)
        {
            var records = DbContext.MessageBoards.Where(item => item.MessageId == sourceMessage.Id);

            DbContext.RemoveRange(records);
            DbContext.SaveChanges();
        }
Esempio n. 3
0
        public void RemoveTopicParticipants(DataModels.Message sourceMessage, DataModels.Message targetMessage)
        {
            var records = DbContext.Participants.Where(item => item.MessageId == sourceMessage.Id).ToList();

            DbContext.RemoveRange(records);
            DbContext.SaveChanges();
        }
Esempio n. 4
0
        public void RemoveTopicViewlogs(DataModels.Message sourceMessage, DataModels.Message targetMessage)
        {
            var records = DbContext.ViewLogs.Where(item => item.TargetType == EViewLogTargetType.Message && (item.TargetId == sourceMessage.Id || item.TargetId == targetMessage.Id)).ToList();

            DbContext.RemoveRange(records);
            DbContext.SaveChanges();
        }
        public JsonResult SubmitMessage(Models.Message msg)
        {
            try
            {
                DataModels.Message msgToAdd = new DataModels.Message();
                msgToAdd.IsRead = false;
                msgToAdd.Name = msg.Name;
                msgToAdd.Msg = msg.MessageText;
                msgToAdd.Dtm = DateTime.Now;
                DataModels.GoodPushContext db = new DataModels.GoodPushContext();

                db.Messages.Add(msgToAdd);

                msgToAdd.Id = db.SaveChanges();
                int bgNum = db.Alerts.Where(w => w.IsRead == false).Count();
                bgNum = +db.Messages.Where(w => w.IsRead == false).Count();
                UrbanAirshipHelper.SendPush(msg.Name, msg.MessageText, bgNum);
            }
            catch (Exception ex)
            {
                return Json(new { status = String.Format("Saved but Notification failed to get delivered. Error: {0}", ex.Message) });
            }

            return Json(new { status = "Success" });
        }
Esempio n. 6
0
        public async Task RemoveTopicParticipants(DataModels.Message sourceMessage, DataModels.Message targetMessage)
        {
            var records = await DbContext.Participants.Where(item => item.MessageId == sourceMessage.Id).ToListAsync();

            DbContext.RemoveRange(records);
            await DbContext.SaveChangesAsync();
        }
Esempio n. 7
0
 public void Merge(DataModels.Message sourceMessage, DataModels.Message targetMessage)
 {
     UpdateMessagesParentId(sourceMessage, targetMessage);
     MessageRepository.RecountRepliesForTopic(targetMessage);
     RemoveTopicParticipants(sourceMessage, targetMessage);
     MessageRepository.RebuildParticipantsForTopic(targetMessage.Id);
     RemoveTopicViewlogs(sourceMessage, targetMessage);
     RemoveTopicPins(sourceMessage);
     RemoveTopicMessageBoards(sourceMessage);
 }
Esempio n. 8
0
        public void UpdateMessagesParentId(DataModels.Message sourceMessage, DataModels.Message targetMessage)
        {
            var sourceMessages = DbContext.Messages.Where(item => item.Id == sourceMessage.Id || item.ParentId == sourceMessage.Id).ToList();

            foreach (var message in sourceMessages)
            {
                message.ParentId = targetMessage.Id;
                DbContext.Update(message);
            }

            DbContext.SaveChanges();
        }
Esempio n. 9
0
        public async Task Merge(DataModels.Message sourceMessage, DataModels.Message targetMessage)
        {
            UpdateMessagesParentId(sourceMessage, targetMessage);
            await MessageRepository.RecountRepliesForTopic(targetMessage);

            await RemoveTopicParticipants(sourceMessage, targetMessage);

            await MessageRepository.RebuildParticipantsForTopic(targetMessage.Id);

            RemoveTopicViewlogs(sourceMessage, targetMessage);
            RemoveTopicBookmarks(sourceMessage);
            RemoveTopicMessageBoards(sourceMessage);
        }
Esempio n. 10
0
		public async Task UpdateMessageRecord(InputModels.ProcessedMessageInput message, DataModels.Message record) {
			record.OriginalBody = message.OriginalBody;
			record.DisplayBody = message.DisplayBody;
			record.ShortPreview = message.ShortPreview;
			record.LongPreview = message.LongPreview;
			record.Cards = message.Cards;
			record.TimeEdited = DateTime.Now;
			record.EditedById = UserContext.ApplicationUser.Id;
			record.Processed = true;

			DbContext.Update(record);

			await DbContext.SaveChangesAsync();
		}
Esempio n. 11
0
		async Task MergeReply(DataModels.Message record, InputModels.MessageInput input, ServiceModels.ServiceResponse serviceResponse) {
			var newBody = $"{record.OriginalBody}\n{input.Body}";
			var processedMessage = await ProcessMessageInput(serviceResponse, newBody);

			if (serviceResponse.Success) {
				await UpdateMessageRecord(processedMessage, record);
				serviceResponse.RedirectPath = UrlHelper.DisplayMessage(record.Id);

				await ForumHub.Clients.All.SendAsync("updated-message", new HubModels.Message {
					TopicId = record.ParentId > 0 ? record.ParentId : record.Id,
					MessageId = record.Id
				});
			}
		}
Esempio n. 12
0
		async Task RemoveMessageArtifacts(DataModels.Message record) {
			var messageBoards = await DbContext.MessageBoards.Where(m => m.MessageId == record.Id).ToListAsync();

			foreach (var messageBoard in messageBoards) {
				DbContext.MessageBoards.Remove(messageBoard);
			}

			var messageThoughts = await DbContext.MessageThoughts.Where(mt => mt.MessageId == record.Id).ToListAsync();

			foreach (var messageThought in messageThoughts) {
				DbContext.MessageThoughts.Remove(messageThought);
			}

			var notifications = DbContext.Notifications.Where(item => item.MessageId == record.Id).ToList();

			foreach (var notification in notifications) {
				DbContext.Notifications.Remove(notification);
			}

			DbContext.Messages.Remove(record);
		}
Esempio n. 13
0
        public async Task <DataModels.Message> CreateMessageRecord(InputModels.ProcessedMessageInput processedMessage)
        {
            var now = DateTime.Now;

            var record = new DataModels.Message {
                OriginalBody = processedMessage.OriginalBody,
                DisplayBody  = processedMessage.DisplayBody,
                ShortPreview = processedMessage.ShortPreview,
                LongPreview  = processedMessage.LongPreview,
                Cards        = processedMessage.Cards,
                TimePosted   = now,
                TimeEdited   = now,
                PostedById   = CurrentUser.Id,
            };

            DbContext.Messages.Add(record);
            await DbContext.SaveChangesAsync();

            await NotifyMentionedUsers(processedMessage.MentionedUsers, record.Id);

            return(record);
        }
Esempio n. 14
0
		public async Task RecountRepliesForTopic(DataModels.Message parentMessage) {
			var messagesQuery = from message in DbContext.Messages
								where message.ParentId == parentMessage.Id
								select new {
									message.Id,
									message.TimePosted,
									message.PostedById
								};

			var replyCount = await messagesQuery.CountAsync();

			var updated = false;

			if (parentMessage.ReplyCount != replyCount) {
				parentMessage.ReplyCount = replyCount;
				updated = true;
			}

			var lastReply = await messagesQuery.LastOrDefaultAsync();

			if (lastReply is null) {
				parentMessage.LastReplyId = 0;
				parentMessage.LastReplyPosted = parentMessage.TimePosted;
				parentMessage.LastReplyById = parentMessage.PostedById;
				updated = true;
			}
			else if (parentMessage.LastReplyId != lastReply.Id) {
				parentMessage.LastReplyId = lastReply.Id;
				parentMessage.LastReplyPosted = lastReply.TimePosted;
				parentMessage.LastReplyById = lastReply.PostedById;
				updated = true;
			}

			if (updated) {
				DbContext.Update(parentMessage);
				await DbContext.SaveChangesAsync();
			}
		}
Esempio n. 15
0
        public async Task DeleteMessageFromTopic(DataModels.Message message, DataModels.Topic topic)
        {
            var directRepliesQuery = from m in DbContext.Messages
                                     where m.ReplyId == message.Id
                                     where !m.Deleted
                                     select m;

            foreach (var reply in directRepliesQuery)
            {
                reply.OriginalBody =
                    $"[quote]{message.OriginalBody}\n" +
                    $"Message deleted by {CurrentUser.ApplicationUser.DisplayName} on {DateTime.Now.ToString("MMMM dd, yyyy")}[/quote]" +
                    reply.OriginalBody;

                reply.ReplyId = 0;

                DbContext.Update(reply);
            }

            message.Deleted = true;
            DbContext.Update(message);
            await DbContext.SaveChangesAsync();
        }
Esempio n. 16
0
        public DataModels.Message CreateMessageRecord(InputModels.ProcessedMessageInput processedMessage, DataModels.Message replyRecord)
        {
            var parentId = 0;
            var replyId  = 0;

            DataModels.Message parentMessage = null;

            if (replyRecord != null)
            {
                if (replyRecord.ParentId == 0)
                {
                    parentId = replyRecord.Id;
                    replyId  = 0;

                    parentMessage = replyRecord;
                }
                else
                {
                    parentId = replyRecord.ParentId;
                    replyId  = replyRecord.Id;

                    parentMessage = DbContext.Messages.First(item => item.Id == replyRecord.ParentId);
                }
            }

            var currentTime = DateTime.Now;

            var record = new DataModels.Message {
                OriginalBody = processedMessage.OriginalBody,
                DisplayBody  = processedMessage.DisplayBody,
                ShortPreview = processedMessage.ShortPreview,
                LongPreview  = processedMessage.LongPreview,
                Cards        = processedMessage.Cards,

                TimePosted      = currentTime,
                TimeEdited      = currentTime,
                LastReplyPosted = currentTime,

                PostedById    = UserContext.ApplicationUser.Id,
                EditedById    = UserContext.ApplicationUser.Id,
                LastReplyById = UserContext.ApplicationUser.Id,

                ParentId = parentId,
                ReplyId  = replyId,

                Processed = true
            };

            DbContext.Messages.Add(record);
            DbContext.SaveChanges();

            if (replyId > 0)
            {
                replyRecord.LastReplyId     = record.Id;
                replyRecord.LastReplyById   = UserContext.ApplicationUser.Id;
                replyRecord.LastReplyPosted = currentTime;

                DbContext.Update(replyRecord);

                if (replyRecord.PostedById != UserContext.ApplicationUser.Id)
                {
                    var notification = new DataModels.Notification {
                        MessageId    = record.Id,
                        UserId       = replyRecord.PostedById,
                        TargetUserId = UserContext.ApplicationUser.Id,
                        Time         = DateTime.Now,
                        Type         = Enums.ENotificationType.Quote,
                        Unread       = true,
                    };

                    DbContext.Notifications.Add(notification);
                }
            }

            if (parentMessage != null && parentId != replyId)
            {
                parentMessage.ReplyCount++;
                parentMessage.LastReplyId     = record.Id;
                parentMessage.LastReplyById   = UserContext.ApplicationUser.Id;
                parentMessage.LastReplyPosted = currentTime;

                DbContext.Update(parentMessage);

                if (parentMessage.PostedById != UserContext.ApplicationUser.Id)
                {
                    var notification = new DataModels.Notification {
                        MessageId    = record.Id,
                        UserId       = parentMessage.PostedById,
                        TargetUserId = UserContext.ApplicationUser.Id,
                        Time         = DateTime.Now,
                        Type         = Enums.ENotificationType.Reply,
                        Unread       = true,
                    };

                    DbContext.Notifications.Add(notification);
                }
            }

            NotifyMentionedUsers(processedMessage.MentionedUsers, record.Id);

            var topicId = parentId == 0 ? record.Id : parentId;

            UpdateTopicParticipation(topicId, UserContext.ApplicationUser.Id, DateTime.Now);

            DbContext.SaveChanges();

            return(record);
        }