Beispiel #1
0
        public void SyncTimeZones()
        {
            var zones           = db.UserTimeZones.ToList();
            var change          = false;
            var SystemTimeZones = TimeZoneInfo.GetSystemTimeZones();

            foreach (var timezone in SystemTimeZones)
            {
                if (!zones.Any(n => n.InfoID == timezone.Id))
                {
                    //not in the database.

                    var timeZoneDb = new UserTimeZone()
                    {
                        InfoID  = timezone.Id,
                        Display = timezone.DisplayName,
                        UTCName = GetUtcName(timezone.DisplayName)
                    };
                    change = true;
                    db.UserTimeZones.Add(timeZoneDb);
                }
            }
            if (change)
            {
                db.SaveChanges();
            }
            //dbTimeZones = db.UserTimeZones.ToList();
        }
Beispiel #2
0
 public void RecoveryUserTimeZone(int id)
 {
     using (IUnitOfWork work = UnitOfWork.Begin())
     {
         UserTimeZone DUTZ = _userTimeZoneRepository.FindById(id);
         DUTZ.IsDeleted = false;
         work.Commit();
     }
 }
Beispiel #3
0
 public void AddTimeZone(UserTimeZone userTimeZone)
 {
     if (_context.User.FirstOrDefault(tz => tz.Email == userTimeZone.UserEmail) == null)
     {
         _context.User.Add(new User {
             Email = userTimeZone.UserEmail
         });
     }
     _context.Add(userTimeZone);
 }
        public static void ReadCookie(HttpCookieCollection cookies)
        {
            var timeZoneCookie = cookies["userTimeZone"];

            if (timeZoneCookie == null ||
                string.IsNullOrEmpty(timeZoneCookie.Value))
            {
                return;
            }

            UserTimeZone.SetTimeZone(timeZoneCookie.Value);
        }
        private void OnRequest(object sender, EventArgs e)
        {
            var app            = (HttpApplication)sender;
            var timeZoneCookie = app.Request.Cookies["userTimeZone"];

            if (timeZoneCookie == null ||
                string.IsNullOrEmpty(timeZoneCookie.Value))
            {
                return;
            }

            UserTimeZone.SetTimeZone(timeZoneCookie.Value);
        }
Beispiel #6
0
        public async Task Create(int userId, UserTimeZoneCreateRequest request)
        {
            var userTimeZone = new UserTimeZone
            {
                Name             = request.Name,
                CityName         = request.CityName,
                HoursDiffToGMT   = request.HoursDiffToGMT,
                MinutesDiffToGMT = request.MinutesDiffToGMT,
                OwnerId          = userId
            };

            repository.Create(userTimeZone);

            await repository.SaveChangesAsync();
        }
        /// <summary>
        /// Verifies that this DiscordUser has a timezone registered in our database and throws a PreExecutionException if they don't
        /// </summary>
        /// <param name="user">The user who should have a timezone</param>
        /// <param name="provider">The database access provider</param>
        /// <param name="timeZoneProvider"></param>
        /// <returns></returns>
        public static bool TryGetDateTimeZone(this DiscordUser user, IBotAccessProvider provider, IDateTimeZoneProvider timeZoneProvider, out DateTimeZone timeZone)
        {
            UserTimeZone userTimeZone = provider.GetUsersTimeZone(user.Id);

            try
            {
                if (userTimeZone != null)
                {
                    timeZone = timeZoneProvider[userTimeZone.TimeZoneId];
                    return(true);
                }
            }
            catch (DateTimeZoneNotFoundException)
            {
            }

            timeZone = default;
            return(false);
        }
Beispiel #8
0
        private UserTimeZoneResponse MapToTimeZoneResponse(UserTimeZone entity, int diffToGMT)
        {
            var now = DateTime.UtcNow;
            var timeZoneDateTime = now.AddHours(entity.HoursDiffToGMT).AddMinutes(entity.HoursDiffToGMT < 0 ? -entity.MinutesDiffToGMT : entity.MinutesDiffToGMT);
            var clientDateTime   = now.AddMinutes(-diffToGMT);

            return(new UserTimeZoneResponse
            {
                Id = entity.Id,
                OwnerId = entity.OwnerId,
                OwnerFullName = entity.User.FirstName + entity.User.LastName,
                Name = entity.Name,
                CityName = entity.CityName,
                HoursDiffToGMT = entity.HoursDiffToGMT,
                MinutesDiffToGMT = entity.MinutesDiffToGMT,
                TimeZoneDateTime = timeZoneDateTime,
                DiffToClient = timeZoneDateTime - clientDateTime
            });
        }
Beispiel #9
0
        public void DeleteUserTimeZone(int id)
        {
            using (IUnitOfWork work = UnitOfWork.Begin())
            {
                UserTimeZone userTimeZone = _userTimeZoneRepository.FindById(id);



                userTimeZone.IsDeleted = true;
                work.Commit();

                var message = new XElement(XMLLogLiterals.LOG_MESSAGE);
                message.Add(XMLLogMessageHelper.TemplateToXml("LogMessageUserTimeZoneDeleted", new List <string> {
                    userTimeZone.Name
                }));

                _logService.CreateLog(CurrentUser.Get().Id, "web", flag, CurrentUser.Get().HostName, CurrentUser.Get().CompanyId, message.ToString());
                _controllerUpdateService.CreateControllerUpdate(CurrentUser.Get().Id, id, UpdateParameter.UserTimeZoneUpdate, ControllerStatus.Deleted, userTimeZone.Name);
            }
        }
        public async Task ExecuteGroupAsync(CommandContext context, [Description("User to request current time for")] DiscordUser member)
        {
            using IBotAccessProvider provider = this.providerBuilder.Build();
            UserTimeZone memberTimeZone = provider.GetUsersTimeZone(member.Id);

            if (memberTimeZone == null)
            {
                await context.RespondAsync("This user doesn't have a timezone set up. Please try again after the mentioned user has set up their timezone using `time init`");

                return;
            }

            DateTimeZone memberDateTimeZone = this.timeZoneProvider[memberTimeZone.TimeZoneId];

            this.clock.GetCurrentInstant().InZone(memberDateTimeZone).Deconstruct(out LocalDateTime localDateTime, out _, out _);
            localDateTime.Deconstruct(out _, out LocalTime localTime);
            DiscordEmbed outputEmbed = new DiscordEmbedBuilder()
                                       .WithAuthor(iconUrl: member.AvatarUrl)
                                       .WithTitle($"{localTime.ToString("t", null)}");

            await context.RespondAsync(embed : outputEmbed);
        }
        public async Task CurrentTimeAsync(CommandContext context)
        {
            using IBotAccessProvider provider = this.providerBuilder.Build();
            UserTimeZone memberTimeZone = provider.GetUsersTimeZone(context.User.Id);

            if (memberTimeZone == null)
            {
                await context.RespondAsync("You don't have a timezone set up. Please try again after using `time init`");

                return;
            }

            DateTimeZone memberDateTimeZone = this.timeZoneProvider[memberTimeZone.TimeZoneId];

            this.clock.GetCurrentInstant().InZone(memberDateTimeZone).Deconstruct(out LocalDateTime localDateTime, out _, out _);
            localDateTime.Deconstruct(out _, out LocalTime localTime);
            DiscordEmbed outputEmbed = new DiscordEmbedBuilder()
                                       .WithAuthor(iconUrl: context.User.AvatarUrl)
                                       .WithTitle($"{localTime.ToString("t", null)}");

            await context.RespondAsync(embed : outputEmbed);
        }
        public async Task UpdateTimeZone(CommandContext context)
        {
            using IBotAccessProvider accessProvider = this.providerBuilder.Build();

            if (accessProvider.GetUsersTimeZone(context.User.Id) == null)
            {
                await context.RespondAsync(
                    $"{context.User.Mention}, you don't have a timezone set up. To initialize your timezone please type `time init`.");

                return;
            }
            await context.RespondAsync(
                "Please navigate to https://kevinnovak.github.io/Time-Zone-Picker/ and select your timezone. After you do please hit the copy button and paste the contents into the chat.");

            InteractivityExtension interactivity        = context.Client.GetInteractivity();
            InteractivityResult <DiscordMessage> result = await interactivity.WaitForMessageAsync(msg => msg.Author.Equals(context.Message.Author));

            if (!result.TimedOut)
            {
                DateTimeZone test = this.timeZoneProvider.GetZoneOrNull(result.Result.Content);
                if (test != null)
                {
                    UserTimeZone updatedUserTimeZone = accessProvider.GetUsersTimeZone(context.Message.Author.Id);
                    updatedUserTimeZone.TimeZoneId = result.Result.Content;
                    accessProvider.UpdateUserTimeZone(updatedUserTimeZone);
                    await context.RespondAsync(
                        $"I updated your timezone to {result.Result.Content} in all guilds I am a member of.");
                }
                else
                {
                    await context.RespondAsync("You provided me with an invalid timezone. Try again by typing `time update`.");
                }
            }
            else
            {
                await context.RespondAsync(
                    "You either waited too long to respond. Try again by typing `time update`.");
            }
        }
Beispiel #13
0
        public async Task RegisterTimeZone([Summary("Your IANA or Windows timezone")][Remainder] string timeZone = null)
        {
            await Context.Channel.TriggerTypingAsync();

            _logger.LogInformation("{username}#{discriminator} executed registertimezone ({timezone}) on {server}/{channel}",
                                   Context.User.Username, Context.User.Discriminator, timeZone, Context.Guild?.Name ?? "DM", Context.Channel.Name);

            if (await ServerHelper.CheckIfContextIsDM(Context))
            {
                return;
            }

            if (timeZone == null)
            {
                await Context.Channel.SendEmbedAsync("Provide a Time Zone", "Please provide a valid windows or IANA timezone.",
                                                     ColorHelper.GetColor(await _serverService.GetServer(Context.Guild)));

                return;
            }

            if (!TryParseTimeZone(timeZone, out TimeZoneInfo timeZoneInfo))
            {
                await Context.Channel.SendEmbedAsync("Invalid Time Zone", "Please provide a valid windows or IANA timezone.",
                                                     ColorHelper.GetColor(await _serverService.GetServer(Context.Guild)));
            }
            else
            {
                var user = await _userRepository.GetByUserId(Context.User.Id);

                if (user == null)
                {
                    await _userRepository.AddAsync(new User { UserId = Context.User.Id, UserName = Context.User.Username });

                    user = await _userRepository.GetByUserId(Context.User.Id);
                }

                var userTimeZone = await _userTimeZones.GetByUserID(Context.User.Id);

                if (userTimeZone == null)
                {
                    if (user == null)
                    {
                        await _userRepository.AddAsync(new User { UserId = Context.User.Id, UserName = Context.User.Username });
                    }

                    var userTz = new UserTimeZone
                    {
                        UserId   = user.Id,
                        TimeZone = timeZone,
                    };

                    await _userTimeZones.AddAsync(userTz);

                    await Context.Channel.SendEmbedAsync("Succesfully Registered", $"Successfully registered your time zone: `{timeZoneInfo.DisplayName}`",
                                                         ColorHelper.GetColor(await _serverService.GetServer(Context.Guild)));
                }
                else
                {
                    userTimeZone.TimeZone = timeZone;
                    await _userTimeZones.EditAsync(userTimeZone);

                    await Context.Channel.SendEmbedAsync("Succesfully Updated", $"Successfully updated your time zone: `{timeZoneInfo.DisplayName}`",
                                                         ColorHelper.GetColor(await _serverService.GetServer(Context.Guild)));
                }
            }
        }
Beispiel #14
0
 public void UpdateTimezone(UserTimeZone userTimeZone)
 {
     _context.Attach(userTimeZone);
 }
Beispiel #15
0
        /*   public void SynchonizeUserTimeZones(int userId)
         * {
         *     int[] userTimeZoneIds = (from utz in _userTimeZoneRepository.FindAll(x => !x.IsDeleted && x.UserId == userId && x.TimeZoneId.HasValue) select utz.TimeZoneId.Value).ToArray();
         *     int[] commonTimeZoneIds = (from tz in _timeZoneRepository.FindAll(x => !x.IsDeleted) select tz.Id).ToArray();
         *     int[] copyTimeZoneIds = (from id in commonTimeZoneIds where !userTimeZoneIds.Contains(id) select id).ToArray();
         *     string loginName = _userRepository.FindById(userId).LoginName;
         *
         *     foreach (int id in copyTimeZoneIds)
         *     {
         *         var tz = _timeZoneRepository.FindById(id);
         *         var createTz = true;
         *         if( CurrentUser.Get().IsCompanyManager )
         *         {
         *             var utz = tz.UserTimeZones.Where(x => !x.IsDeleted && x.IsCompanySpecific).FirstOrDefault();
         *
         *             if( utz != null )
         *             {
         *                 var user = _userRepository.FindById(utz.UserId);
         *                 if( user.CompanyId != CurrentUser.Get().CompanyId )
         *                 {
         *                     createTz = false;
         *                 }
         *             }
         *         }
         *
         *         if( createTz )
         *         {
         *             using (IUnitOfWork work = UnitOfWork.Begin())
         *             {
         *                 UserTimeZone userTimeZone = DomainObjectFactory.CreateUserTimeZone();
         *                 //TimeZone timeZone = new //_timeZoneRepository.FindById(id);
         *
         *                 userTimeZone.UserId = userId;
         *                 //userTimeZone.TimeZoneId = timeZone.Id;           Edit Later
         *                 userTimeZone.ParentUserTimeZoneId = null;
         *                 //userTimeZone.Name = timeZone.Name;
         *                 userTimeZone.Uid = Guid.NewGuid();
         *                 userTimeZone.IsOriginal = true;
         *                 userTimeZone.IsDeleted = false;
         *                 userTimeZone.IsCompanySpecific = false;
         *
         *                 var tzProperties = _timeZonePropertyRepository.FindAll(x => x.TimeZoneId == timeZone.Id).ToList();
         *
         *                 foreach (var tzp in tzProperties)
         *                 {
         *                     UserTimeZoneProperty utzp = DomainObjectFactory.CreateUserTimeZoneProperty();
         *
         *                     utzp.UserTimeZoneId = userTimeZone.Id;
         *                     utzp.TimeZoneId = tzp.TimeZoneId;
         *                     utzp.OrderInGroup = tzp.OrderInGroup;
         *                     utzp.ValidFrom = tzp.ValidFrom;
         *                     utzp.ValidTo = tzp.ValidTo;
         *                     utzp.IsMonday = tzp.IsMonday;
         *                     utzp.IsTuesday = tzp.IsTuesday;
         *                     utzp.IsWednesday = tzp.IsWednesday;
         *                     utzp.IsThursday = tzp.IsThursday;
         *                     utzp.IsFriday = tzp.IsFriday;
         *                     utzp.IsSaturday = tzp.IsSaturday;
         *                     utzp.IsSunday = tzp.IsSunday;
         *
         *                     userTimeZone.UserTimeZoneProperties.Add(utzp);
         *
         *                     var message = new XElement(XMLLogLiterals.LOG_MESSAGE);
         *                     message.Add(XMLLogMessageHelper.TemplateToXml("LogMessageUTZPropertyforUTZCreated",
         *                                                                   new List<string> {userTimeZone.Name, loginName}));
         *
         *
         *                     message.Add(XMLLogMessageHelper.TemplateToXml("LogMessageTimeZoneId",
         *                                                                   new List<string> {utzp.TimeZoneId.ToString()}));
         *                     message.Add(XMLLogMessageHelper.TemplateToXml("LogMessageOrderInGroup",
         *                                                                   new List<string> {utzp.OrderInGroup.ToString()}));
         *                     message.Add(XMLLogMessageHelper.TemplateToXml("LogMessageValidFrom",
         *                                                                   new List<string>
         *                                                                     {
         *                                                                         utzp.ValidFrom.HasValue
         *                                                                             ? utzp.ValidFrom.Value.ToString("HH:mm")
         *                                                                             : ""
         *                                                                     }));
         *                     message.Add(XMLLogMessageHelper.TemplateToXml("LogMessageValidTo",
         *                                                                   new List<string>
         *                                                                     {
         *                                                                         utzp.ValidTo.HasValue ? utzp.ValidTo.Value.ToString("HH:mm") : ""
         *                                                                     }));
         *                     message.Add(XMLLogMessageHelper.TemplateToXml("LogMessageIsMonday", new List<string> {utzp.IsMonday.ToString()}));
         *                     message.Add(XMLLogMessageHelper.TemplateToXml("LogMessageIsTuesday", new List<string> {utzp.IsTuesday.ToString()}));
         *                     message.Add(XMLLogMessageHelper.TemplateToXml("LogMessageIsWednesday",
         *                                                                   new List<string> {utzp.IsWednesday.ToString()}));
         *                     message.Add(XMLLogMessageHelper.TemplateToXml("LogMessageIsThursday",
         *                                                                   new List<string> {utzp.IsThursday.ToString()}));
         *                     message.Add(XMLLogMessageHelper.TemplateToXml("LogMessageIsFriday", new List<string> {utzp.IsFriday.ToString()}));
         *                     message.Add(XMLLogMessageHelper.TemplateToXml("LogMessageIsSaturday",
         *                                                                   new List<string> {utzp.IsSaturday.ToString()}));
         *                     message.Add(XMLLogMessageHelper.TemplateToXml("LogMessageIsSunday", new List<string> {utzp.IsSunday.ToString()}));
         *
         *                     _logService.CreateLog(CurrentUser.Get().Id, "web", CurrentUser.Get().HostName, CurrentUser.Get().CompanyId,
         *                                           message.ToString());
         *                 }
         *
         *                 _userTimeZoneRepository.Add(userTimeZone);
         *
         *                 work.Commit();
         *
         *                 var mesage = new XElement(XMLLogLiterals.LOG_MESSAGE);
         *                 mesage.Add(XMLLogMessageHelper.TemplateToXml("LogMessageUserTimeZoneCommonCreated",
         *                                                              new List<string> {userTimeZone.Name, loginName}));
         *                 _logService.CreateLog(CurrentUser.Get().Id, "web", CurrentUser.Get().HostName, CurrentUser.Get().CompanyId, mesage.ToString());
         *                 _controllerUpdateService.CreateControllerUpdate(CurrentUser.Get().Id, userTimeZone.Id, UpdateParameter.UserTimeZoneUpdate, ControllerStatus.Created, userTimeZone.Name);
         *             }
         *         }
         *     }
         * }
         */

        public int CreateUserTimeZone(string name)
        {
            using (IUnitOfWork work = UnitOfWork.Begin())
            {
                UserTimeZone userTimeZone = DomainObjectFactory.CreateUserTimeZone();
                if (CurrentUser.Get().IsCompanyManager)
                {
                    UserTimeZone mtz = _userTimeZoneRepository.FindAll(x => x.CompanyId == null && x.Name == name).First();
                    userTimeZone.TimeZoneId        = mtz.TimeZoneId;
                    userTimeZone.CompanyId         = CurrentUser.Get().CompanyId;
                    userTimeZone.UserId            = CurrentUser.Get().Id;
                    userTimeZone.Name              = name;
                    userTimeZone.Uid               = Guid.NewGuid();
                    userTimeZone.IsOriginal        = false;
                    userTimeZone.IsDeleted         = false;
                    userTimeZone.IsCompanySpecific = CurrentUser.Get().IsCompanyManager;
                    var timezoneprop = (from tzp in _userTimeZonePropertyRepository.FindAll(x => x.UserTimeZoneId == mtz.Id) select tzp);

                    for (int i = 0; i < 4; i++)
                    {
                        var userTimeZoneProperty  = DomainObjectFactory.CreateUserTimeZoneProperty();
                        UserTimeZoneProperty utzp = (from tzp in timezoneprop where tzp.OrderInGroup == i select tzp).First();
                        userTimeZoneProperty.UserTimeZoneId = userTimeZone.Id;
                        userTimeZoneProperty.TimeZoneId     = userTimeZone.TimeZoneId;
                        userTimeZoneProperty.OrderInGroup   = i;
                        userTimeZoneProperty.ValidFrom      = utzp.ValidFrom;
                        userTimeZoneProperty.ValidTo        = utzp.ValidTo;
                        userTimeZoneProperty.IsMonday       = utzp.IsMonday;
                        userTimeZoneProperty.IsTuesday      = utzp.IsTuesday;
                        userTimeZoneProperty.IsWednesday    = utzp.IsWednesday;
                        userTimeZoneProperty.IsThursday     = utzp.IsThursday;
                        userTimeZoneProperty.IsFriday       = utzp.IsFriday;
                        userTimeZoneProperty.IsSaturday     = utzp.IsSaturday;
                        userTimeZoneProperty.IsSunday       = utzp.IsSunday;

                        userTimeZone.UserTimeZoneProperties.Add(userTimeZoneProperty);
                    }
                }
                else
                {
                    var userTimeZoneIds = (from tz in _userTimeZoneRepository.FindAll(x => x.IsDeleted == true && x.CompanyId == null) select tz);
                    if (userTimeZoneIds.Count() != 0)
                    {
                        userTimeZoneIds.First().Name      = name;
                        userTimeZoneIds.First().IsDeleted = false;
                    }
                    else
                    {
                        var maxid = (from tz in _userTimeZoneRepository.FindAll() where tz.CompanyId == null select tz.TimeZoneId).Max();
                        userTimeZone.CompanyId         = CurrentUser.Get().IsSuperAdmin ? null : CurrentUser.Get().CompanyId;
                        userTimeZone.UserId            = CurrentUser.Get().Id;
                        userTimeZone.Name              = name;
                        userTimeZone.Uid               = Guid.NewGuid();
                        userTimeZone.IsOriginal        = true;
                        userTimeZone.IsDeleted         = false;
                        userTimeZone.IsCompanySpecific = CurrentUser.Get().IsSuperAdmin;

                        if (maxid != null)
                        {
                            userTimeZone.TimeZoneId = maxid + 1;
                        }
                        else
                        {
                            userTimeZone.TimeZoneId = 1;
                        }
                    }

                    for (int i = 0; i < 4; i++)
                    {
                        var validFrom = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 8, 0, 0);
                        var validTo   = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 20, 0, 0);
                        UserTimeZoneProperty userTimeZoneProperty = DomainObjectFactory.CreateUserTimeZoneProperty();
                        userTimeZoneProperty.UserTimeZoneId = userTimeZone.Id;
                        userTimeZoneProperty.TimeZoneId     = userTimeZone.TimeZoneId;
                        userTimeZoneProperty.OrderInGroup   = i;
                        userTimeZoneProperty.ValidFrom      = validFrom;
                        userTimeZoneProperty.ValidTo        = validTo;
                        userTimeZoneProperty.IsMonday       = true;
                        userTimeZoneProperty.IsTuesday      = false;
                        userTimeZoneProperty.IsWednesday    = false;
                        userTimeZoneProperty.IsThursday     = false;
                        userTimeZoneProperty.IsFriday       = false;
                        userTimeZoneProperty.IsSaturday     = false;
                        userTimeZoneProperty.IsSunday       = false;
                        userTimeZone.UserTimeZoneProperties.Add(userTimeZoneProperty);
                    }
                }
                _userTimeZoneRepository.Add(userTimeZone);
                work.Commit();
                var message = new XElement(XMLLogLiterals.LOG_MESSAGE);
                message.Add(XMLLogMessageHelper.TemplateToXml("LogMessageUserTimeZoneCreated", new List <string> {
                    name, CurrentUser.Get().LoginName
                }));

                _logService.CreateLog(CurrentUser.Get().Id, "web", flag, CurrentUser.Get().HostName, CurrentUser.Get().CompanyId,
                                      message.ToString());
                _controllerUpdateService.CreateControllerUpdate(CurrentUser.Get().Id, userTimeZone.Id, UpdateParameter.UserTimeZoneUpdate, ControllerStatus.Created, name);
                return(userTimeZone.Id);
            }
        }
 public Delete(UserTimeZone userTimeZone)
 {
     this.UserTimeZone = userTimeZone;
 }