public function testOnlyGetsPageableResourcesWhereUserIsAdmin()
 {
     $pageNum = 10;
     $pageSize = 100;
     $existingFilter = new SqlFilterEquals('a', 'b');
     $groups = array(new UserGroup(1, 'g1', null, RoleLevel::SCHEDULE_ADMIN), new UserGroup(2, 'g2', null, RoleLevel::RESOURCE_ADMIN));
     $scheduleAdminGroupIds = array(1);
     $resourceAdminGroupIds = array(2);
     $this->userRepository->expects($this->once())->method('LoadGroups')->with($this->equalTo($this->fakeUser->UserId), $this->equalTo(array(RoleLevel::SCHEDULE_ADMIN, RoleLevel::RESOURCE_ADMIN)))->will($this->returnValue($groups));
     $repo = new ResourceAdminResourceRepository($this->userRepository, $this->fakeUser);
     $repo->GetList($pageNum, $pageSize, null, null, $existingFilter);
     $additionalFilter = new SqlFilterIn(new SqlFilterColumn(TableNames::SCHEDULES_ALIAS, ColumnNames::SCHEDULE_ADMIN_GROUP_ID), $scheduleAdminGroupIds);
     $expectedFilter = $existingFilter->_And($additionalFilter->_Or(new SqlFilterIn(ColumnNames::RESOURCE_ADMIN_GROUP_ID, $resourceAdminGroupIds)));
     $expectedCommand = new FilterCommand(new GetAllResourcesCommand(), $expectedFilter);
     $lastCommand = $this->db->_LastCommand;
     $this->assertEquals($expectedCommand->GetQuery(), $lastCommand->GetQuery());
 }
 public function GetList($pageNumber, $pageSize, $sortField = null, $sortDirection = null, $filter = null)
 {
     if (!$this->user->IsAdmin) {
         $scheduleAdminGroupIds = array();
         $resourceAdminGroupIds = array();
         $groups = $this->repo->LoadGroups($this->user->UserId, array(RoleLevel::SCHEDULE_ADMIN, RoleLevel::RESOURCE_ADMIN));
         foreach ($groups as $group) {
             if ($group->IsResourceAdmin) {
                 $resourceAdminGroupIds[] = $group->GroupId;
             }
             if ($group->IsScheduleAdmin) {
                 $scheduleAdminGroupIds[] = $group->GroupId;
             }
         }
         if ($filter == null) {
             $filter = new SqlFilterNull();
         }
         $additionalFilter = new SqlFilterIn(new SqlFilterColumn(TableNames::SCHEDULES_ALIAS, ColumnNames::SCHEDULE_ADMIN_GROUP_ID), $scheduleAdminGroupIds);
         $filter->_And($additionalFilter->_Or(new SqlFilterIn(new SqlFilterColumn(TableNames::RESOURCES_ALIAS, ColumnNames::RESOURCE_ADMIN_GROUP_ID), $resourceAdminGroupIds)));
     }
     return parent::GetList($pageNumber, $pageSize, $sortField, $sortDirection, $filter);
 }
 /**
  * @param int $pageNumber
  * @param int $pageSize
  * @param BlackoutFilter $filter
  * @param UserSession $user
  * @return BlackoutItemView[]|PageableData
  */
 public function LoadFiltered($pageNumber, $pageSize, $filter, $user)
 {
     $blackoutFilter = $filter->GetFilter();
     if (!$user->IsAdmin) {
         $groups = $this->userRepository->LoadGroups($user->UserId, array(RoleLevel::RESOURCE_ADMIN, RoleLevel::SCHEDULE_ADMIN));
         $groupIds = array();
         foreach ($groups as $group) {
             $groupIds[] = $group->GroupId;
         }
         $adminFilter = new SqlFilterIn(new SqlFilterColumn('r', ColumnNames::RESOURCE_ADMIN_GROUP_ID), $groupIds);
         $adminFilter->_Or(new SqlFilterIn(new SqlFilterColumn(TableNames::SCHEDULES, ColumnNames::SCHEDULE_ADMIN_GROUP_ID), $groupIds));
         $blackoutFilter->_And($adminFilter);
     }
     return $this->reservationViewRepository->GetBlackoutList($pageNumber, $pageSize, null, null, $blackoutFilter);
 }
 public function testGetsBlackoutsThatUserCanManageIfNotAdmin()
 {
     $userId = $this->fakeUser->UserId;
     $this->fakeUser->IsAdmin = false;
     $pageNumber = 10;
     $pageSize = 20;
     $filter = new BlackoutFilter();
     $groupIds = array(1, 2, 3);
     $groups = array(new UserGroup(1, null), new UserGroup(2, null), new UserGroup(3, null));
     $expectedFilter = $filter->GetFilter();
     $adminFilter = new SqlFilterIn(new SqlFilterColumn('r', ColumnNames::RESOURCE_ADMIN_GROUP_ID), $groupIds);
     $adminFilter->_Or(new SqlFilterIn(new SqlFilterColumn(TableNames::SCHEDULES, ColumnNames::SCHEDULE_ADMIN_GROUP_ID), $groupIds));
     $expectedFilter->_And($adminFilter);
     $date = Date::Now();
     $resourceId1 = 111;
     $resourceId2 = 222;
     $b1 = new TestBlackoutItemView(1, $date, $date, $resourceId1);
     $b2 = new TestBlackoutItemView(2, $date, $date, $resourceId2);
     $blackouts = array($b1, $b2);
     $roles = array(RoleLevel::RESOURCE_ADMIN, RoleLevel::SCHEDULE_ADMIN);
     $this->userRepository->expects($this->once())->method('LoadGroups')->with($this->equalTo($userId), $this->equalTo($roles))->will($this->returnValue($groups));
     $this->reservationViewRepository->expects($this->once())->method('GetBlackoutList')->with($this->equalTo($pageNumber), $this->equalTo($pageSize), $this->isNull(), $this->isNull(), $this->equalTo($expectedFilter))->will($this->returnValue(new PageableData($blackouts)));
     $this->service->LoadFiltered($pageNumber, $pageSize, $filter, $this->fakeUser);
 }