コード例 #1
0
        /// <summary>
        /// Поиск пользователей в базе данных
        /// </summary>
        /// <param name="userInfo">Строка шаблона поиска. Через пробел задаются нужное кол-во букв фамилии имени и отчества</param>
        /// <param name="userRole">Определяет роль пользователей, внутри которой произволится поиск. В случае TestorUserRole.NotDefined роль не имеет значения</param>
        /// <param name="userStatus">Статус пользователя. В случае TestorUserStatus.Any ствтус не имеет значения</param>
        /// <param name="groupId">В случае, если параметр не равен нулю, поиск производится внутри группы</param>
        /// <param name="getRemoved">Искать ли только среди активных пользователей или только среди удалёных</param>
        /// <param name="takeCount">Кол-во извлекаемых записей о пользователях. Если передаётся 0, то извлекаются все записи</param>
        /// <param name="getDetails">Получать ли подробную информацию о пользователе</param>
        /// <returns>Массив данных о пользователях</returns>
        public static TestorCoreUser[] FindUsers(string userInfo, TestorUserRole userRole,
                                                 TestorUserStatus userStatus, int groupId, bool getRemoved, int takeCount, bool getDetails)
        {
            Debug.Assert(userInfo != null);

            string[] names = userInfo.Trim().Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
            string   fname = String.Empty;
            string   lName = String.Empty;
            string   sName = String.Empty;

            if (names.Length >= 1)
            {
                lName = names[0];
            }
            if (names.Length >= 2)
            {
                fname = names[1];
            }
            if (names.Length >= 3)
            {
                sName = names[2];
            }

            return(FindUsers(lName, fname, sName, userRole, userStatus, groupId, getRemoved, takeCount, getDetails));
        }
コード例 #2
0
        /// <summary>
        /// Поиск пользователей в базе данных
        /// </summary>
        /// <param name="userInfo">Строка шаблона поиска. Через пробел задаются нужное кол-во букв фамилии имени и отчества</param>
        /// <param name="userRole">Определяет роль пользователей, внутри которой произволится поиск. В случае TestorUserRole.NotDefined роль не имеет значения</param>
        /// <param name="userStatus">Статус пользователя. В случае TestorUserStatus.Any ствтус не имеет значения</param>
        /// <param name="takeCount">Кол-во извлекаемых записей о пользователях. Если передаётся 0, то извлекаются все записи</param>
        /// <param name="getDetails">Получать ли подробную информацию о пользователе</param>
        /// <returns>Массив данных о пользователях</returns>
        public static TestorCoreUser[] FindUsers(string userInfo, TestorUserRole userRole,
                                                 TestorUserStatus userStatus, int takeCount, bool getDetails)
        {
            Debug.Assert(userInfo != null);

            return(FindUsers(userInfo, userRole, userStatus, 0, false, takeCount, getDetails));
        }
コード例 #3
0
        /// <summary>
        /// Поиск пользователей в базе данных
        /// </summary>
        /// <param name="lastName">Фамилия</param>
        /// <param name="firstName">Имя</param>
        /// <param name="secondName">Отчество</param>
        /// <param name="userRole">Определяет роль пользователей, внутри которой произволится поиск. В случае TestorUserRole.NotDefined роль не имеет значения</param>
        /// <param name="userStatus">Статус пользователя. В случае TestorUserStatus.Any ствтус не имеет значения</param>
        /// <param name="groupId">В случае, если параметр не равен нулю, поиск производится внутри группы</param>
        /// <param name="getRemoved">Искать ли только среди активных пользователей или только среди удалёных</param>
        /// <param name="takeCount">Кол-во извлекаемых записей о пользователях. Если передаётся 0, то извлекаются все записи</param>
        /// <param name="getDetails">Получать ли подробную информацию о пользователе</param>
        /// <returns>Массив данных о пользователях</returns>
        public static TestorCoreUser[] FindUsers(string lastName, string firstName, string secondName,
                                                 TestorUserRole userRole, TestorUserStatus userStatus, int groupId, bool getRemoved, int takeCount, bool getDetails)
        {
            Debug.Assert(lastName != null);
            Debug.Assert(firstName != null);
            Debug.Assert(secondName != null);

            using (DataClassesTestorCoreDataContext dataContext = new DataClassesTestorCoreDataContext(TestorSecurityProvider.ConnectionString))
            {
                IQueryable <User> retValue = null;
                if (groupId > 0)
                {
                    retValue = from c in dataContext.UserGroups
                               join usr in dataContext.Users
                               on c.UserId equals usr.UserId
                               where c.GroupId == groupId
                               select usr;
                }
                else
                {
                    retValue = from c in dataContext.Users
                               where
                               c.LastName.StartsWith(lastName) && c.FirstName.StartsWith(firstName) && c.SecondName.StartsWith(secondName)
                               select c;
                }

                if (userRole != TestorUserRole.NotDefined)
                {
                    retValue = retValue.Where(c => c.UserRole == (short)userRole);
                }

                if (userStatus != TestorUserStatus.Any)
                {
                    retValue = retValue.Where(c => c.UserRole == (short)userRole);
                }

                if (!getRemoved)
                {
                    retValue = retValue.Where(c => c.Status != (short)TestorUserStatus.Removed);
                }
                else
                {
                    retValue = retValue.Where(c => c.Status == (short)TestorUserStatus.Removed);
                }

                if (takeCount != 0)
                {
                    retValue = retValue.Take(takeCount);
                }

                retValue = from c in retValue
                           orderby c.LastName, c.FirstName
                select c;

                return(GetUsers(retValue, getDetails));
            }
        }
コード例 #4
0
        public byte[] FindUsers(string userInfo, TestorUserRole userRole, TestorUserStatus userStatus, bool getRemoved, int groupId, int takeCount)
        {
            if (Provider.CurrentUser.UserRole == TestorUserRole.NotDefined || Provider.CurrentUser.UserRole == TestorUserRole.Anonymous ||
                Provider.CurrentUser.UserRole == TestorUserRole.Student)
            {
                if (userRole != TestorUserRole.NotDefined && userRole != TestorUserRole.Anonymous &&
                    userRole != TestorUserRole.Student)
                {
                    Provider.ThrowAccessFaultException();
                }
            }

            return(DataCompressor.CompressData <TestorCoreUser[]>(UserSearchHelper.FindUsers(userInfo, userRole, userStatus, groupId, getRemoved, takeCount, true)));
        }
コード例 #5
0
        private void toolStripComboBoxRole_SelectedIndexChanged(object sender, EventArgs e)
        {
            _getRemoved = false;
            TestorUserRole selectedRole = TestorUserRole.NotDefined;

            if (toolStripComboBoxRole.SelectedIndex != toolStripComboBoxRole.Items.Count - 1)
            {
                selectedRole = (TestorUserRole)toolStripComboBoxRole.SelectedIndex + 1;
            }
            else
            {
                _getRemoved = true;
            }
            testorCoreUserDataGridView.GetUsers(selectedRole, TestorUserStatus.Any, _getRemoved);
        }
コード例 #6
0
        public TestorCoreUser AlterUser(TestorCoreUser user, bool alterGroups)
        {
            Debug.Assert(user.UserId > 0);

            Provider.TestRoles(TestorUserRole.Administrator, TestorUserRole.Teacher, TestorUserRole.Laboratorian);

            using (DataClassesTestorCoreDataContext dataContext = new DataClassesTestorCoreDataContext(TestorSecurityProvider.ConnectionString))
            {
                if (user.UserId <= 0)
                {
                    return(null);
                }
                var testorUser = dataContext.Users.Where(c => c.UserId == user.UserId).FirstOrDefault();
                if (testorUser != null)
                {
                    TestorUserRole alterRole = (TestorUserRole)testorUser.UserRole;
                    if (user.UserId != Provider.CurrentUser.UserId)
                    {
                        if (Provider.CurrentUser.UserRole != TestorUserRole.Administrator && !(alterRole == TestorUserRole.Student || alterRole == TestorUserRole.Anonymous ||
                                                                                               alterRole == TestorUserRole.NotDefined))
                        {
                            Provider.ThrowAccessFaultException();
                            return(null);
                        }
                    }
                    if (alterRole != user.UserRole && Provider.CurrentUser.UserRole != TestorUserRole.Administrator)
                    {
                        user.UserRole = alterRole;
                    }
                    SetUserSettings(testorUser, user, true, false, dataContext);
                    if (Provider.CurrentUser.UserRole == TestorUserRole.Administrator && alterGroups)
                    {
                        SetUserGroups(testorUser, user.UserGroups, dataContext);
                    }
                    dataContext.SubmitChanges();
                }
                return(UserSearchHelper.GetUser(testorUser));
            }
        }
コード例 #7
0
ファイル: TestorUsersDataGrid.cs プロジェクト: clgray/Locator
 public void GetUsers(TestorUserRole selectedRole, TestorUserStatus status, bool getRemoved)
 {
     if (SystemStateManager.TestState())
     {
         return;
     }
     this.CurrentBindingSource.DataSource = null;
     SystemStateManager.OnStateChanged(true);
     _currentThread = new Thread(new ThreadStart(() =>
     {
         try
         {
             _users.Clear();
             _users.InsertRange(0, DataCompressor.DecompressData <TestorCoreUser[]>(StaticServerProvider.UserManagement.FindUsers(
                                                                                        String.Empty, selectedRole, status, getRemoved,
                                                                                        this.SelectedGroup.ItemId, 0)));
             if ((this.TopLevelControl as Form).IsHandleCreated)
             {
                 this.Invoke((Action)(() =>
                 {
                     OnUsersGetted();
                     SystemStateManager.OnStateChanged(false);
                 }));
             }
         }
         catch (Exception ex)
         {
             if ((this.TopLevelControl as Form).IsHandleCreated)
             {
                 this.Invoke((Action)(() =>
                 {
                     SystemMessage.ShowErrorMessage(ex);
                     SystemStateManager.OnStateChanged(false);
                 }));
             }
         }
     }));
     _currentThread.Start();
 }
コード例 #8
0
        private void ToolStripMenuItemAdditional_Click(object sender, EventArgs e)
        {
            if (SystemStateManager.TestState())
            {
                return;
            }
            var                        row          = testorCoreUserDataGridView.SelectedRows[0];
            TestorCoreUser             selUser      = testorCoreUserDataGridView.SelectedUser;
            TestorUserRole             role         = selUser.UserRole;
            TestorUserStatus           status       = selUser.Status;
            UserAdditionalSettingsForm settingsForm = new UserAdditionalSettingsForm(selUser);

            if (settingsForm.ShowDialog() != DialogResult.OK)
            {
                return;
            }
            if (settingsForm.User.UserRole != role || (settingsForm.User.Status == TestorUserStatus.Removed && status != TestorUserStatus.Removed) ||
                (status == TestorUserStatus.Removed && settingsForm.User.Status != TestorUserStatus.Removed))
            {
                testorCoreUserDataGridView.Rows.Remove(row);
            }
            selUser.SetSettings(settingsForm.User);
            toolStripTextBoxSearch_TextChanged(this, new EventArgs());
        }
コード例 #9
0
        public void SetUserStatus(int userId, TestorUserStatus status)
        {
            Debug.Assert(userId > 0);

            Provider.TestRoles(TestorUserRole.Administrator, TestorUserRole.Teacher, TestorUserRole.Laboratorian);

            using (DataClassesTestorCoreDataContext dataContext = new DataClassesTestorCoreDataContext(TestorSecurityProvider.ConnectionString))
            {
                var user = dataContext.Users.Where(c => c.UserId == userId).FirstOrDefault();

                if (userId != Provider.CurrentUser.UserId)
                {
                    TestorUserRole alterRole = (TestorUserRole)user.UserRole;
                    if (Provider.CurrentUser.UserRole != TestorUserRole.Administrator && !(alterRole == TestorUserRole.Student || alterRole == TestorUserRole.Anonymous ||
                                                                                           alterRole == TestorUserRole.NotDefined))
                    {
                        Provider.ThrowAccessFaultException();
                        return;
                    }
                }
                user.Status = (short)status;
                dataContext.SubmitChanges();
            }
        }