Example #1
0
        public static bool AddMessage(IbaCmsDbContext db, StoreMessageModel model)
        {
            try
            {
                var user      = db.Users.FirstOrDefault(u => u.Id == model.UserId);
                var dbMessage = new CmsMessage
                {
                    Url         = model.Url ?? "",
                    Created     = DateTime.UtcNow,
                    MessageType = model.MessageType,
                    Text        = model.Text ?? "",
                    Title       = model.Title,
                    Sender      = user,
                    Recipients  = model.Recipients,
                    Status      = CmsMessageStatus.Draft,
                    UrlOnly     = model.UrlOnly,
                    TimeZone    = model.TimeZone,
                    SendDate    = model.SendDate.HasValue ? model.SendDate.Value.ToUniversalTime() : (DateTime?)null
                };
                db.CmsMessages.Add(dbMessage);

                db.SaveChanges();

                model.NewId = dbMessage.Id;
            }
            catch (Exception)
            {
                return(false);
            }
            return(true);
        }
        public static bool HideMessageThread(IbaCmsDbContext cmsDb, int threadId, int myId)
        {
            var thread = cmsDb.UserMessageThreads.SingleOrDefault(r => r.InitialSenderId == threadId && r.InitialRecipientId == myId);

            if (thread == null)
            {
                thread = cmsDb.UserMessageThreads.SingleOrDefault(r => r.InitialRecipientId == threadId && r.InitialSenderId == myId);
            }
            if (thread == null)
            {
                throw new HttpException(404, "No chat history found");
            }
            if (thread.InitialSenderId == myId)
            {
                thread.InitialSenderDeletionDate = DateTime.UtcNow;
            }
            else if (thread.InitialRecipientId == myId)
            {
                thread.InitialRecipientDeletionDate = DateTime.UtcNow;
            }
            else
            {
                throw new HttpException(401, "User cannot delete this thread.");
            }
            try
            {
                cmsDb.SaveChanges();
            }
            catch (Exception e)
            {
                return(false);
            }
            return(true);
        }
        public static bool SetMessageToRead(IbaCmsDbContext cmsDb, int myId, int messageId)
        {
            try
            {
                var message = cmsDb.UserMessages.SingleOrDefault(r => r.P2PMessageId == (long)messageId);


                if (message != null)
                {
                    if (message.Thread.isInvolvedInThread(myId) && message.SenderId != myId)
                    {
                        message.ReadTime = DateTime.UtcNow;
                        if (message.DeliveredTime == null)
                        {
                            message.ReadTime = message.ReadTime;
                        }
                        cmsDb.SaveChanges();
                        return(true);
                    }
                }
            }
            catch (Exception e)
            {
                return(false);
            }
            return(false);
        }
Example #4
0
 public static void UpdateMessage(IbaCmsDbContext db, StoreMessageModel model, CmsMessage msg)
 {
     msg.Url         = model.Url ?? "";
     msg.MessageType = model.MessageType;
     msg.Text        = model.Text ?? "";
     msg.Title       = model.Title;
     msg.Recipients  = model.Recipients;
     msg.UrlOnly     = model.UrlOnly;
     msg.SendDate    = model.SendDate.HasValue ? model.SendDate.Value.ToUniversalTime() : (DateTime?)null;
     msg.Status      = CmsMessageStatus.Draft;
     db.SaveChanges();
 }
Example #5
0
 public static void CreateScheduleEventLocationsIfDoesntExist(IbaCmsDbContext db, List <ConferenceRoomViewModel> conferenceRooms)
 {
     foreach (var room in conferenceRooms)
     {
         var existingRoom = db.EventLocations.Any(r => r.LocationName == room.RoomName);
         if (!existingRoom)
         {
             var location = CreateScheduleEventLocation(room);
             db.EventLocations.Add(location);
         }
     }
     db.SaveChanges();
 }
Example #6
0
        public static void CheckTimedContent(IbaCmsDbContext db)
        {
            var dbContent = db.ContentLibraries.Where(c => c.Status == ContentStatus.AwaitingDate).OrderByDescending(c => c.Created).AsQueryable();

            foreach (var content in dbContent)
            {
                if (DateTime.Compare(DateTime.UtcNow, (DateTime)content.AvailableFromDate) > 0)
                {
                    content.Status  = ContentStatus.Active;
                    content.Created = content.AvailableFromDate;
                }
            }
            db.SaveChanges();
        }
 /// <summary>
 /// Updates the database table <see cref="Device"/> by setting to
 /// null the push tokens of each device matching the specified push
 /// token and the specified type.
 /// </summary>
 /// <param name="deviceType"></param>
 /// <param name="pushToken"></param>
 private static void NullifyDevicePushToken(DeviceType deviceType, string pushToken)
 {
     using (var db = new IbaCmsDbContext())
     {
         var devices = db.Devices
                       .Where(device => deviceType.Equals(device.DeviceType))
                       .Where(device => pushToken.Equals(device.PushToken));
         foreach (var device in devices)
         {
             device.PushToken = null;
             device.UpdatedOn = DateTime.UtcNow;
         }
         db.SaveChanges();
     }
 }
Example #8
0
        public static async Task SendMessage(IbaCmsDbContext db, long messageId, DateTime?time = null)
        {
            var msg = db.CmsMessages.FirstOrDefault(m => m.Id == messageId);

            if (msg != null)
            {
                msg.SendDate = time ?? DateTime.UtcNow;
                msg.Status   = CmsMessageStatus.Outbox;
                db.SaveChanges();

                foreach (var appMessage in msg.AppUserMessages)
                {
                    if (appMessage.DeviceOwner.NamedUserId != null)
                    {
                        await SendPushMessage(appMessage, time);
                    }
                }
            }
        }
Example #9
0
        public static bool LogMessageStatus(IbaCmsDbContext cmsDb, UpdateMessageStatusModel model, decimal ibaId)
        {
            var msg = cmsDb.AppUserMessages.FirstOrDefault(a => a.Id == model.AppUserMessageId && a.DeviceOwner.IbaId == ibaId); // make sure that msg updated by correct device

            if (msg == null)
            {
                return(true); // should never happen
            }
            bool updated = false;

            if (model.Read != null && msg.Read == null)
            {
                updated  = true;
                msg.Read = model.Read.Value;
            }
            if (model.Deleted != null && msg.Deleted == null)
            {
                updated     = true;
                msg.Deleted = model.Deleted.Value;
            }
            if (model.Received != null && msg.Received == null)
            {
                updated      = true;
                msg.Received = model.Received.Value;
            }
            if (!updated)
            {
                return(true);
            }
            try
            {
                cmsDb.SaveChanges();
                return(true);
            }
            catch (Exception)
            {
                return(false);
            }
        }
        public static P2pMessageSendResponseModel SendMessageToUser(IbaCmsDbContext cmsDb, IBAEntities1 Db, int user1, int user2, string messageToSend, ControllerContext context, string uuid = null)
        {
            var response = new P2pMessageSendResponseModel();

            response.Success = true;
            var thread = cmsDb.UserMessageThreads.SingleOrDefault(r => r.InitialSenderId == user1 && r.InitialRecipientId == user2);

            if (thread == null)
            {
                thread = cmsDb.UserMessageThreads.SingleOrDefault(r => r.InitialRecipientId == user1 && r.InitialSenderId == user2);
            }
            //NOTE: Users can only send messages to another user if they are both visiting the SAME conference.
            //var conferenceOnNow = IBA_Common.Models.conf_conference.ConferenceOnNow(cmsDb);
            //if (conferenceOnNow == null)
            //{
            //    response.Success = false;
            //}


            //var delegateConf = Db.conf_delegate.SingleOrDefault(r => r.conference_id == 673 && r.id == user1); // Sender is at conference
            //if (delegateConf == null)
            //{
            //    response.Success = false;
            //}

            //var delegateConf2 = Db.conf_delegate.SingleOrDefault(r => r.conference_id == 673 && r.id == user2);// Receiver is at conference
            //if (delegateConf2 == null)
            //{
            //    response.Success = false;
            //}

            if (response.Success)
            {
                var sender = Db.C_records.SingleOrDefault(r => r.id == user1);

                if (thread == null)
                {
                    //NOTE: If no thread exists this is the first contact the user has made with the other person. Check recepient device usage if last use > X days send email.
                    //var recipientDevices = cmsDb.Devices.Where(r => r.DeviceOwner.IbaId == user2);
                    //var user = Db.conf_delegate.Where(t => t.conference_id == AppSettings.ConferenceId).FirstOrDefault(r => r.record_id == user2);
                    //if (user != null)
                    //{
                    //    if(AppSettings.ShouldSendEmails)
                    //    {
                    //        if (recipientDevices.Count() == 0)
                    //        {

                    //            EmailHelper.SendEmail(user.conf_email, "IBA Members App Notification", new P2PEmailViewModel() { SenderName = sender.given_name, ProfileImageUrl = sender.ProfileImageName, MessageContents = messageToSend }, context, "~/Views/Messages/P2PMessageEmail.cshtml");
                    //        }
                    //        else
                    //        {
                    //            var lastUsed = recipientDevices.OrderByDescending(r => r.UpdatedOn).First();
                    //            if ((lastUsed.UpdatedOn - DateTime.UtcNow).Days > 10)
                    //            {
                    //                EmailHelper.SendEmail(user.conf_email, "IBA Members App Notification", new P2PEmailViewModel() { SenderName = sender.given_name, ProfileImageUrl = sender.ProfileImageName, MessageContents = messageToSend }, context, "~/Views/Messages/P2PMessageEmail.cshtml");
                    //            }
                    //        }
                    //    }

                    //}

                    thread = new P2PMessageThread()
                    {
                        Messages           = new List <P2PMessage>(),
                        InitialSenderId    = user1,
                        InitialRecipientId = user2,
                    };
                    cmsDb.UserMessageThreads.Add(thread);
                }
                thread.InitialRecipientDeletionDate = null;
                thread.InitialSenderDeletionDate    = null;
                var message = new P2PMessage()
                {
                    Message    = EncryptMessage(messageToSend),
                    SenderName = string.Format("{0} {1}", sender.given_name, sender.family_name),
                    SenderId   = (int)sender.id,
                    SentTime   = DateTime.UtcNow
                };
                thread.Messages.Add(message);
                cmsDb.SaveChanges();
                response.Message = new P2PMessageResponseModel()
                {
                    SentTime      = message.SentTime,
                    SentByMe      = message.SenderId == user1,
                    DeliveredTime = message.DeliveredTime,
                    Message       = messageToSend,
                    MessageId     = message.P2PMessageId,
                    ReadTime      = message.ReadTime,
                    UUID          = uuid //NOTE: Used by the client to tie up sent messages.
                };

                ProcessOneMessage(cmsDb, message);
            }

            return(response);
        }
Example #11
0
        public static DeviceUpdateResponseModel UpdateDevice(IbaCmsDbContext cmsDb, DeviceUpdateRequestModel model, decimal ibaRecordId)
        {
            const string version = "2";
            var          result  = new DeviceUpdateResponseModel();

            var device = cmsDb.Devices.FirstOrDefault(d => d.DeviceUUID == model.DeviceUUID);

            if (device != null)
            {
                if (device.DeviceOwner.IbaId != ibaRecordId)
                {
                    //note: Update device to new owner.
                    var newOwner = cmsDb.DeviceOwners.FirstOrDefault(o => o.IbaId == ibaRecordId);
                    if (newOwner == null)
                    {
                        newOwner = new DeviceOwner
                        {
                            IbaId   = ibaRecordId,
                            Devices = new List <Device> {
                                device
                            },
                            LastDeviceUpdate = DateTime.UtcNow,
                            NamedUserId      = ibaRecordId.ToString()
                        };
                        cmsDb.DeviceOwners.Add(newOwner);
                    }

                    device.DeviceOwner = newOwner;
                }
                device.DeviceOwner.NamedUserId = ibaRecordId.ToString();

                if (device.PushToken == model.PushToken)
                {
                    device.DeviceOwner.LastDeviceUpdate = DateTime.UtcNow;
                    cmsDb.SaveChanges();
                    return(result);
                }
                try
                {
                    device.PushToken  = model.PushToken;
                    device.DeviceType = model.DeviceType;

                    device.ApiVersion = version;
                    device.UpdatedOn  = DateTime.UtcNow;
                    device.DeviceOwner.LastDeviceUpdate = DateTime.UtcNow;
                    cmsDb.SaveChanges();
                    return(result);
                }
                catch (Exception)
                {
                    result.SetError(HttpStatusCode.InternalServerError, "Could not update the Push Token");
                }
            }
            var owner = cmsDb.DeviceOwners.FirstOrDefault(o => o.IbaId == ibaRecordId);

            device = new Device
            {
                DeviceUUID = model.DeviceUUID,
                ApiVersion = version,
                DeviceType = model.DeviceType,
                PushToken  = model.PushToken,
                UpdatedOn  = DateTime.UtcNow
            };
            if (owner == null)
            {
                owner = new DeviceOwner
                {
                    IbaId   = ibaRecordId,
                    Devices = new List <Device> {
                        device
                    },
                    LastDeviceUpdate = DateTime.UtcNow
                };
                cmsDb.DeviceOwners.Add(owner);
            }
            else
            {
                owner.Devices.Add(device);
                owner.LastDeviceUpdate = DateTime.UtcNow;
            }
            try
            {
                cmsDb.SaveChanges();
            }
            catch (Exception)
            {
                result.SetError(HttpStatusCode.InternalServerError, "Could not update the Push Token");
            }
            return(result);
        }