/// <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>());
        }
示例#2
0
        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>());
            }
        }