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(); }
public void RecoveryUserTimeZone(int id) { using (IUnitOfWork work = UnitOfWork.Begin()) { UserTimeZone DUTZ = _userTimeZoneRepository.FindById(id); DUTZ.IsDeleted = false; work.Commit(); } }
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); }
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); }
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 }); }
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`."); } }
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))); } } }
public void UpdateTimezone(UserTimeZone userTimeZone) { _context.Attach(userTimeZone); }
/* 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; }