Example #1
0
        public int CreateReminder(DataManager dbMgr, User user, MessageParser msgPar, UserManager userMgr)
        {
            // TODO: add exception handling
            string   strPattern;
            DateTime dt;

            try
            {
                strPattern = "yyyy-MM-dd HH:mm:ss";
                dt         = DateTime.ParseExact(msgPar.ServerTimeString, strPattern, null);
            }
            catch (Exception e)
            {
                throw e;
            }


            Reminder rmdr = null;
            User     toUser;

            if (msgPar.ToUser.ToLower().Trim() == @"me" || msgPar.ToUser.ToLower().Trim() == user.Username.ToLower().Trim())
            {
                toUser = userMgr.GetUserByID(user.UserID);                 // this saves precious calls to the db
            }
            else
            {
                toUser = dbMgr.GetUserByUsername(msgPar.ToUser);
            }
            //toUser = dbMgr.GetUser(msgPar.ToUser);

            if (toUser == null)
            {
                throw new ReminderException("(" + msgPar.ToUser + ") is not a valid RemindMe username.");
            }


            if (msgPar.ToUser.ToLower().Trim() == @"me" || msgPar.ToUser.ToLower().Trim() == user.Username.ToLower().Trim())
            {
                //if (reminderMgr.UserReminderCount(user.UserID) >= user.MaxNumReminders)
                if (dbMgr.GetUserReminderCount(user.UserID) >= user.MaxNumReminders)
                {
                    ResourceManager rm     = new ResourceManager("server.botMsgs", this.GetType().Assembly);
                    string          strMsg = rm.GetString("max_reminder_error");
                    strMsg = strMsg.Replace("%d", user.MaxNumReminders.ToString());
                    throw new ReminderException(strMsg);
                }

                // create a reminder for the user
                rmdr = new Reminder(user.UserID, user.UserID, msgPar.MessageText, dt, msgPar.UserTimeString);
            }
            else if (msgPar.ToUser.Trim().Length >= 3)
            {
                // create a person-to-person reminder

                // TODO: somewhere here you would do a check for commas to check for
                // something like: remind amy,bob,frank in 10 minutes to meet in conference room b

                // TODO: Change this to user.UserID
                if (toUser.Buddies.IndexOf(user.Username.ToLower()) < 0 && user.Class != UserClassType.ADMIN)
                {
                    throw new ReminderException(@"This user has not added you to his or her allow list to receive reminders.");
                }

                // see if the touser has any ptp reminders left
                if (toUser.MaxNumPTPReminders <= dbMgr.GetUserPTPReminderCount(toUser.UserID))
                {
                    throw new ReminderException(@"That user's reminder inbox is full!");
                }

                rmdr = new Reminder(toUser.UserID, user.UserID, msgPar.MessageText, dt, msgPar.UserTimeString);
            }

            if (rmdr == null)
            {
                throw new Exception(@"ReminderManager.CreateReminder(): rmdr = null");
            }

            // pass it a reference, dbMgr will assign the ID
            int wId = dbMgr.CreateReminder(ref rmdr, toUser.BotName);

            if (wId == 0)
            {
                throw new ReminderException(@"There has been an internal error. Please report error code 0x19 to [email protected]");
            }

            if (m_strBotName == toUser.BotName)
            {
                reminders.Add(rmdr);
            }

            return(wId);
        }