/** * 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); }