/**
  * Gets the list of authorized proctors for a selection of test centers
  * @param $testCenters
  * @return array
  * @throws \common_exception_Error
  */
 protected function getAuthorization($testCenters)
 {
     $requestOptions = $this->getRequestOptions();
     $currentUser = SessionManager::getSession()->getUser();
     $proctors = ProctorManagementService::singleton()->getAssignedProctors($currentUser->getIdentifier(), $testCenters);
     return DataTableHelper::paginate($proctors, $requestOptions, function ($proctors) use($testCenters) {
         $testCentersByProctors = ProctorManagementService::singleton()->getProctorsAuthorization($testCenters);
         $nbTestCenters = count($testCenters);
         $authorizations = array();
         foreach ($proctors as $proctor) {
             $userId = $proctor->getUri();
             $user = UserHelper::getUser($proctor);
             $lastName = UserHelper::getUserLastName($user);
             $firstName = UserHelper::getUserFirstName($user, empty($lastName));
             $login = UserHelper::getUserStringProp($user, PROPERTY_USER_LOGIN);
             $authorizedLabel = array();
             if (isset($testCentersByProctors[$userId])) {
                 $authorized = array_intersect($testCentersByProctors[$userId], $testCenters);
                 if (count($authorized) == $nbTestCenters) {
                     $status = self::FULLY_AUTHORIZED;
                 } else {
                     foreach ($authorized as $testCenterUri) {
                         $testCenter = new \core_kernel_classes_Resource($testCenterUri);
                         $authorizedLabel[] = $testCenter->getLabel();
                     }
                     $status = self::PARTIALLY_AUTHORIZED;
                 }
             } else {
                 $status = self::NOT_AUTHORIZED;
             }
             $authorizations[] = array('id' => $userId, 'firstname' => $firstName, 'lastname' => $lastName, 'login' => $login, 'status' => $status, 'authorized' => implode(', ', $authorizedLabel));
         }
         return $authorizations;
     });
 }
 /**
  * Gets the test takers assigned to a delivery
  *
  * @param $deliveryId
  * @param array $options
  * @param string $testCenterId
  * @return User[]
  */
 public function getDeliveryTestTakers($deliveryId, $testCenterId, $options = array())
 {
     $groups = $this->getGroupClass()->searchInstances(array(PROPERTY_GROUP_DELVIERY => $deliveryId, self::PROPERTY_GROUP_TEST_CENTERS => $testCenterId), array('recursive' => true, 'like' => false));
     $userIds = array();
     foreach ($groups as $group) {
         foreach (GroupsService::singleton()->getUsers($group) as $user) {
             $userIds[] = $user->getUri();
         }
     }
     $userIds = array_unique($userIds);
     $users = array();
     foreach ($userIds as $id) {
         // assume Tao Users
         $users[] = new core_kernel_users_GenerisUser($this->getResource($id));
     }
     usort($users, function ($a, $b) {
         return strcasecmp(UserHelper::getUserLastName($a), UserHelper::getUserLastName($b));
     });
     return $users;
 }
 /**
  * Gets the test takers available for a delivery as a table page
  *
  * @param core_kernel_classes_Resource $delivery
  * @param core_kernel_classes_Resource $testCenter
  * @param array [$options]
  * @param string [$testCenterId]
  * @return array
  * @throws \Exception
  * @throws \common_exception_Error
  * @throws \oat\oatbox\service\ServiceNotFoundException
  */
 public static function getAvailableTestTakers($delivery, $testCenter, $options = array())
 {
     $deliveryService = ServiceManager::getServiceManager()->get(DeliveryService::CONFIG_ID);
     $users = EligibilityService::singleton()->getEligibleTestTakers($testCenter, $delivery);
     $assignedUsers = $deliveryService->getDeliveryTestTakers($delivery->getUri(), $testCenter->getUri(), $options);
     array_walk($assignedUsers, function (&$value) {
         $value = $value->getIdentifier();
     });
     $users = array_diff($users, $assignedUsers);
     array_walk($users, function (&$user) {
         $user = new \core_kernel_users_GenerisUser(new \core_kernel_classes_Resource($user));
     });
     usort($users, function ($a, $b) {
         return strcasecmp(UserHelper::getUserLastName($a), UserHelper::getUserLastName($b));
     });
     return DataTableHelper::paginate($users, $options, function ($users) {
         $testTakers = array();
         foreach ($users as $user) {
             $userId = $user->getIdentifier();
             $lastName = UserHelper::getUserLastName($user);
             $firstName = UserHelper::getUserFirstName($user, empty($lastName));
             $testTakers[] = array('id' => $userId, 'firstname' => _dh($firstName), 'lastname' => _dh($lastName), 'identifier' => $userId);
         }
         return $testTakers;
     });
 }
 /**
  * Update test-taker's last name
  */
 private function updateTestTakerLastName()
 {
     $result = UserHelper::getUserLastName($this->getUser());
     $this->addValue(DeliveryMonitoringService::TEST_TAKER_LAST_NAME, $result, true);
 }