/// <summary> /// Saves or updates a checkin /// </summary> /// <param name="c"></param> /// <returns></returns> public static Checkin CheckIn(Checkin c) { using (EntityContext ctx = new EntityContext()) { c.ValidateAndRaise(); // Validate user has only one active checkin. if (ctx.Checkins.Where(ci => !ci.EndTime.HasValue && ci.UserId == c.UserId).Any()) { throw new CheckinExistsException(i18n.API_ErrorCheckinExists); } // Validate space is not being used if (ctx.Checkins.Where(ci => ci.SpaceId == c.SpaceId && !ci.EndTime.HasValue).Any()) { throw new CheckinExistsException(i18n.API_ErrorSpaceUsed); } c.CheckInId = 0; c.StartTime = c.StartTime.ToCommonTime(); c.EndTime = null; ctx.Checkins.AddObject(c); ctx.SaveChanges(); // Notify users. Notify(NotificationType.Checkin, c); return c; } }
/// <summary> /// Marks the messages as delivered. /// </summary> /// <param name="ids"></param> public static void ClearIds(List<int> ids) { using (EntityContext ctx = new EntityContext()) { ctx.MessageQueues.Where(mq => ids.Contains(mq.MessageId)).ToList().ForEach(mq => { mq.Delivered = true; }); ctx.SaveChanges(); } }
/// <summary> /// Cleans all the expired sessions. /// </summary> public static void CleanAll() { using (EntityContext ctx = new EntityContext()) { ctx.Sessions.Where(s => s.ExpiresAt < DateTime.Now.ToCommonTime() && s.ExpiresAt != DateTime.MaxValue).ToList().ForEach(s => ctx.Sessions.DeleteObject(s)); ctx.SaveChanges(); } }
/// <summary> /// Deletes a Place /// </summary> /// <param name="id"></param> /// <returns></returns> public static Place Delete(int id) { using (EntityContext ctx = new EntityContext()) { Place p = ctx.Places.Where(px => px.PlaceId == id).FirstOrDefault(); ctx.Places.DeleteObject(p); ctx.SaveChanges(); return p; } }
/// <summary> /// Deletes a Notification /// </summary> /// <param name="id"></param> /// <returns></returns> public static Notification Delete(int id) { using (EntityContext ctx = new EntityContext()) { Notification n = ctx.Notifications.Where(nx => nx.NotificationId == id).FirstOrDefault(); ctx.Notifications.DeleteObject(n); ctx.SaveChanges(); return n; } }
/// <summary> /// Deletes the role. /// </summary> /// <param name="u"></param> /// <param name="r"></param> public static void DeleteRoles(User u, List<Role> r) { using (EntityContext ctx = new EntityContext()) { ctx.UserRoles.Where(ur => ur.UserId.Equals(u.UserId) && r.Where(ri => ri.RoleId.Equals(ur.RoleId)).Any() ).ToList().ForEach(ur => ctx.UserRoles.DeleteObject(ur)); ctx.SaveChanges(); } }
/// <summary> /// Expires the current session id of a user /// </summary> /// <param name="sessionId"></param> public static void Expire(int userId) { using (EntityContext ctx = new EntityContext()) { Session session = ctx.Sessions.Where(s => s.UserId.HasValue && s.UserId.Value.Equals(userId)).FirstOrDefault(); if (session != null) { ctx.Sessions.DeleteObject(session); ctx.SaveChanges(); } } }
/// <summary> /// Expires a session /// </summary> /// <param name="sessionId"></param> public static void Expire(Guid sessionId) { using (EntityContext ctx = new EntityContext()) { Session session = ctx.Sessions.Where(s => s.SessionId.Equals(sessionId)).FirstOrDefault(); if (session != null) { ctx.Sessions.DeleteObject(session); ctx.SaveChanges(); } } }
/// <summary> /// Gets the specified session. /// If it has expired it returns none. /// </summary> /// <param name="sessionId"></param> /// <returns></returns> public static Session Get(Guid sessionId) { using (EntityContext ctx = new EntityContext()) { Session sess = ctx.Sessions.Where(s => s.SessionId.Equals(sessionId)).FirstOrDefault(); if (sess == null) { return null; } if (sess.ExpiresAt < DateTime.Now.ToCommonTime() && sess.ExpiresAt != DateTime.MaxValue) { ctx.Sessions.DeleteObject(sess); ctx.SaveChanges(); return null; } sess.LastAccess = DateTime.Now.ToCommonTime(); ctx.SaveChanges(); return sess; } }
/// <summary> /// Saves (insert or updates) a place /// </summary> /// <param name="p"></param> /// <returns></returns> public static Place Save(Place p) { using (EntityContext ctx = new EntityContext()) { p.ValidateAndRaise(); if (p.PlaceId == 0) { ctx.Places.AddObject(p); } ctx.SaveChanges(); return p; } }
/// <summary> /// Adds roles to the user. /// </summary> /// <param name="u"></param> /// <param name="r"></param> public static void AddRoles(User u, List<Role> r) { using (EntityContext ctx = new EntityContext()) { foreach (Role ri in r) { Models.UserRole ur = new Models.UserRole() { UserId = u.UserId, RoleId = ri.RoleId }; if (ctx.UserRoles.Where(uro => uro.UserId.Equals(u.UserId) && uro.RoleId.Equals(ri.RoleId)).Any()) { } else { ctx.UserRoles.AddObject(ur); } } ctx.SaveChanges(); } }
/// <summary> /// Checks out a current checkin. /// </summary> /// <param name="checkinId"></param> /// <returns></returns> public static Checkin CheckOut(int checkinId) { using (EntityContext ctx = new EntityContext()) { Checkin c = ctx.Checkins.Where(ch => ch.CheckInId == checkinId).FirstOrDefault(); if (c == null) { return null; } // Validate if users are blocking you. c.EndTime = DateTime.Now.ToCommonTime(); ctx.SaveChanges(); // Notify users Notify(NotificationType.Checkout, c); return c; } }
/// <summary> /// Sets a new session object /// </summary> /// <param name="s"></param> public static Session Set(int userId, TimeSpan timeOut, bool rememberMe) { using (EntityContext ctx = new EntityContext()) { Session s = new Session() { UserId = userId, CreatedAt = DateTime.Now, ExpiresAt = rememberMe ? DateTime.MaxValue : DateTime.Now.ToCommonTime().Add(timeOut), LastAccess = DateTime.Now.ToUniversalTime(), Data = string.Empty }; s.ValidateAndRaise(); s.SessionId = Guid.NewGuid(); ctx.Sessions.AddObject(s); ctx.SaveChanges(); return s; } }
/// <summary> /// Sets a new session object /// </summary> /// <param name="s"></param> public static Session Set(Session s) { using (EntityContext ctx = new EntityContext()) { s.ValidateAndRaise(); s.SessionId = Guid.NewGuid(); ctx.Sessions.AddObject(s); ctx.SaveChanges(); return s; } }
/// <summary> /// Saves a new Message /// </summary> /// <param name="s"></param> /// <returns></returns> public static MessageQueue Save(MessageQueue s) { using (EntityContext ctx = new EntityContext()) { s.CreatedAt = DateTime.Now; ctx.MessageQueues.AddObject(s); ctx.SaveChanges(); return s; } }
/// <summary> /// Saves or updates a notification /// </summary> /// <param name="n"></param> /// <returns></returns> public static Notification Save(Notification n) { using (EntityContext ctx = new EntityContext()) { n.ValidateAndRaise(); if (n.NotificationId == 0) { ctx.Notifications.AddObject(n); } ctx.SaveChanges(); return n; } }
/// <summary> /// Marks a user as deleted. /// </summary> /// <param name="email"></param> /// <returns></returns> public static bool DeleteUser(string email) { using (EntityContext ctx = new EntityContext()) { User u = ctx.Users.Where(ux => ux.Email.Equals(email)).FirstOrDefault(); if (u != null) { u.IsActive = false; } ctx.SaveChanges(); return true; } }
/// <summary> /// Creates a user from AD /// </summary> /// <param name="username"></param> /// <param name="password"></param> /// <returns></returns> private static User CreateUserFromAD(string username, string password) { username = username.Split('@').First(); using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "SIEENA", "daniel.ramirez", "xrZ40uye")) { UserPrincipal up = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, username); using (EntityContext ctx = new EntityContext()) { User u = new User() { Email = up.EmailAddress, CreatedAt = DateTime.Now.ToCommonTime(), IsActive = true, Password = password }; ctx.Users.AddObject(u); ctx.SaveChanges(); UserInfo ui = new UserInfo() { UserId = u.UserId, FirstName = up.Name, LastName = up.Surname }; ctx.UserInfos.AddObject(ui); ctx.SaveChanges(); User.AddRoles(u, new List<Role>() { Role.GetAll().OrderByDescending(r => r.RoleLevel).First() }); return u; } } }
/// <summary> /// /// </summary> /// <param name="u"></param> /// <returns></returns> public static User SaveUser(User u) { using (EntityContext ctx = new EntityContext()) { u.Email = u.Email.ToLower(); u.ValidateAndRaise(); u.CreatedAt = u.CreatedAt.ToCommonTime(); if (u.UserId == 0) { u.Password = Crypto.GetSHA1(u.Password); ctx.Users.AddObject(u); } else { ctx.Users.Attach(u); } ctx.SaveChanges(); return u; } }
/// <summary> /// Saves the user extra information /// </summary> /// <param name="u"></param> /// <returns></returns> public static UserInfo Save(UserInfo u) { using (EntityContext ctx = new EntityContext()) { u.ValidateAndRaise(); UserInfo existing = ctx.UserInfos.Where(ui => ui.UserId == u.UserId).FirstOrDefault(); if (existing == null) { ctx.UserInfos.AddObject(u); } else { existing.ContactEmail = u.ContactEmail; existing.PhoneCel = u.PhoneCel; existing.PhoneHome = u.PhoneHome; existing.PhoneOffice = u.PhoneOffice; existing.PhoneOfficeExtension = u.PhoneOfficeExtension; existing.FirstName = u.FirstName; existing.LastName = u.LastName; existing.Gender = u.Gender; existing.NotificationsAvailability = u.NotificationsAvailability; existing.Locale = u.Locale; } ctx.SaveChanges(); // Notify connected endpoints. PubnubFactory.GetInstance().Publish(PubnubFactory.Channels.Users, u); return u; } }
/// <summary> /// Deletes a checkin /// </summary> /// <param name="id"></param> /// <returns></returns> public static Checkin Delete(int id) { using (EntityContext ctx = new EntityContext()) { Checkin c = ctx.Checkins.Where(cx => cx.CheckInId == id).FirstOrDefault(); ctx.Checkins.DeleteObject(c); ctx.SaveChanges(); return c; } }