/// <summary> /// /// </summary> /// <param name="userName"></param> /// <param name="isAssigned">A site can be not assigned to a user, but still exists as a record, /// this flag can suppress those that are not assigned.</param> /// <returns></returns> public override IList <Site> GetSitesByUser(string userName, bool isAssigned) { using (var transaction = new TransactionScope(_configuration)) { // Find all the Persons who match the MembershipUser id of 'username'. var userDs = new UserDataStore(transaction); User user = userDs.FindByName(_applicationName, userName); // Then, find all the sites via PersonSite that match the personIds. IList <Site> runningList = new List <Site>(); var ppDs = new PersonSiteDataStore(transaction); if (user.Person != null) { IList <PersonSite> pps = ppDs.FindSitesByPerson(user.Person.Id, isAssigned); foreach (PersonSite pSite in pps) { IEnumerable <Site> q = from x in runningList where x.Id.Equals(pSite.Site.Id) select x; if (!q.Any()) { runningList.Add(pSite.Site); } } return(runningList); } } return(new List <Site>()); }
public override IList <User> GetAccessibleItemUsers(Access access) { using (var transaction = new TransactionScope(_configuration)) { if (access.AllUsers) { var userStore = new UserDataStore(transaction); return(userStore.FindAll(_applicationName)); } if (access.AllPersonTypes && access.AllSites) { var userStore = new UserDataStore(transaction); return(userStore.FindAll(_applicationName)); } if (access.UserId != null) { var userStore = new UserDataStore(transaction); var singleUserList = new List <User>(); singleUserList.Add(userStore.FindByName(_applicationName, access.UserId)); return(singleUserList); } if (access.AllPersonTypes && access.SiteId != null) { var store = new PersonSiteDataStore(transaction); IList <PersonSite> people = store.FindPersonsBySite(access.SiteId, false); var userList = new List <User>(); var userStore = new UserDataStore(transaction); foreach (PersonSite person in people) { userList.Add(userStore.FindByPerson(_applicationName, person.Person.Id)); } return(userList); } if (access.AllSites && access.PersonTypeId != null) { var store = new PersonPersonTypeDataStore(transaction); IList <PersonPersonType> people = store.FindPersonByPersonType(access.PersonTypeId); var userList = new List <User>(); var userStore = new UserDataStore(transaction); foreach (PersonPersonType person in people) { userList.Add(userStore.FindByPerson(_applicationName, person.Person.Id)); } return(userList); } if (access.SiteId != null && access.PersonTypeId != null) { var userInPersonTypeStore = new PersonPersonTypeDataStore(transaction); IList <PersonPersonType> personInPersonType = userInPersonTypeStore.FindPersonByPersonType(access.PersonTypeId); var userInSiteStore = new PersonSiteDataStore(transaction); IList <PersonSite> userInSites = userInSiteStore.FindPersonsBySite(access.SiteId, false); //convert to a generic list to perform better search var userInSitesList = new List <PersonSite>(userInSites); var usersInBoth = new List <User>(); var userStore = new UserDataStore(transaction); foreach (PersonPersonType personPersonType in personInPersonType) { if ( userInSitesList.Exists( delegate(PersonSite ul) { return(ul.Person.Id == personPersonType.Person.Id); })) { usersInBoth.Add(userStore.FindByName(_applicationName, personPersonType.Person.Id)); } } return(usersInBoth); } return(new List <User>()); } }