public function isDeliveryExecutionAllowed(core_kernel_classes_Resource $delivery, User $user) { $userUri = $user->getIdentifier(); if (is_null($delivery)) { common_Logger::w("Attempt to start the compiled delivery " . $delivery->getUri() . " related to no delivery"); return false; } //first check the user is assigned if (!taoDelivery_models_classes_AssignmentService::singleton()->isUserAssigned($delivery, $user)) { common_Logger::w("User " . $userUri . " attempts to start the compiled delivery " . $delivery->getUri() . " he was not assigned to."); return false; } $settings = $this->getDeliverySettings($delivery); //check Tokens $usedTokens = count(taoDelivery_models_classes_execution_ServiceProxy::singleton()->getUserExecutions($delivery, $userUri)); if ($settings[TAO_DELIVERY_MAXEXEC_PROP] != 0 and $usedTokens >= $settings[TAO_DELIVERY_MAXEXEC_PROP]) { common_Logger::d("Attempt to start the compiled delivery " . $delivery->getUri() . "without tokens"); return false; } //check time $startDate = date_create('@' . $settings[TAO_DELIVERY_START_PROP]); $endDate = date_create('@' . $settings[TAO_DELIVERY_END_PROP]); if (!$this->areWeInRange($startDate, $endDate)) { common_Logger::d("Attempt to start the compiled delivery " . $delivery->getUri() . " at the wrong date"); return false; } return true; }
/** * Get test centers a test-taker is assigned to * * @access public * @param User $user * @return array resources of testcenter */ public function getTestCentersByTestTaker(User $user) { $testcenters = $user->getPropertyValues(self::PROPERTY_MEMBERS_URI); array_walk($testcenters, function (&$testcenter) { $testcenter = new core_kernel_classes_Resource($testcenter); }); return $testcenters; }
/** * (non-PHPdoc) * @see \oat\tao\model\accessControl\func\FuncAccessControl::accessPossible() */ public function accessPossible(User $user, $controller, $action) { $isUser = false; foreach ($user->getRoles() as $role) { if ($role == INSTANCE_ROLE_BASEUSER) { $isUser = true; break; } } return $isUser || $this->inWhiteList($controller, $action); }
/** * Get file path to save message * @param User $receiver * @param boolean $refresh whether the file path must be regenerated. */ public function getFilePath(User $receiver) { $basePath = $this->getOption(self::CONFIG_FILEPATH); if (is_null($basePath) || !file_exists($basePath)) { throw new \common_exception_InconsistentData('Missing path ' . self::CONFIG_FILEPATH . ' for ' . __CLASS__); } $path = $basePath . \tao_helpers_File::getSafeFileName($receiver->getIdentifier()) . DIRECTORY_SEPARATOR; if (!file_exists($path)) { mkdir($path); } return $path . \tao_helpers_File::getSafeFileName('message.html', $path); }
/** * Get resumable (active) deliveries. * @param User $user User instance. If not given then all deliveries will be returned regardless of user URI. * @return type */ public function getResumableDeliveries(User $user) { $deliveryExecutionService = taoDelivery_models_classes_execution_ServiceProxy::singleton(); $started = array_merge($deliveryExecutionService->getActiveDeliveryExecutions($user->getIdentifier()), $deliveryExecutionService->getPausedDeliveryExecutions($user->getIdentifier())); $resumable = array(); foreach ($started as $deliveryExecution) { $delivery = $deliveryExecution->getDelivery(); if ($delivery->exists()) { $resumable[] = $deliveryExecution; } } return $resumable; }
/** * (non-PHPdoc) * @see \oat\generis\model\data\PermissionInterface::getPermissions() */ public function getPermissions(User $user, array $resourceIds) { if (in_array(INSTANCE_ROLE_SYSADMIN, $user->getRoles())) { $permissions = array(); foreach ($resourceIds as $id) { $permissions[$id] = $this->getSupportedRights(); } return $permissions; } $dbAccess = new DataBaseAccess(); $userIds = $user->getRoles(); $userIds[] = $user->getIdentifier(); return $dbAccess->getPermissions($userIds, $resourceIds); }
/** * Get resumable (active) deliveries. * @param User $user User instance. If not given then all deliveries will be returned regardless of user URI. * @return type */ public function getResumableDeliveries(User $user) { $deliveryExecutionService = \taoDelivery_models_classes_execution_ServiceProxy::singleton(); $userUri = $user->getIdentifier(); $started = array_merge($deliveryExecutionService->getActiveDeliveryExecutions($userUri), $deliveryExecutionService->getPausedDeliveryExecutions($userUri), $deliveryExecutionService->getDeliveryExecutionsByStatus($userUri, DeliveryExecution::STATE_AWAITING), $deliveryExecutionService->getDeliveryExecutionsByStatus($userUri, DeliveryExecution::STATE_AUTHORIZED)); $eligibilityService = EligibilityService::singleton(); $resumable = array(); foreach ($started as $deliveryExecution) { $delivery = $deliveryExecution->getDelivery(); if ($delivery->exists() && $eligibilityService->isDeliveryEligible($delivery, $user)) { $resumable[] = $deliveryExecution; } } return $resumable; }
/** * (non-PHPdoc) * @see \oat\tao\model\accessControl\func\FuncAccessControl::accessPossible() */ public function accessPossible(User $user, $controller, $action) { $userRoles = $user->getRoles(); try { $controllerAccess = funcAcl_helpers_Cache::getControllerAccess($controller); $allowedRoles = isset($controllerAccess['actions'][$action]) ? array_merge($controllerAccess['module'], $controllerAccess['actions'][$action]) : $controllerAccess['module']; $accessAllowed = count(array_intersect($userRoles, $allowedRoles)) > 0; if (!$accessAllowed) { common_Logger::i('Access denied to ' . $controller . '@' . $action . ' for user \'' . $user->getIdentifier() . '\''); } } catch (ReflectionException $e) { common_Logger::i('Unknown controller ' . $controller); $accessAllowed = false; } return (bool) $accessAllowed; }
/** * Set the initial outcomes defined in the rdf outcome map configuration file * * @param AssessmentTestSession $session * @param \oat\oatbox\user\User $testTaker * @throws common_exception_Error * @throws common_ext_ExtensionException */ public static function setInitialOutcomes(AssessmentTestSession $session, \oat\oatbox\user\User $testTaker) { $rdfOutcomeMap = \common_ext_ExtensionsManager::singleton()->getExtensionById('taoQtiTest')->getConfig('rdfOutcomeMap'); if (is_array($rdfOutcomeMap)) { foreach ($rdfOutcomeMap as $outcomeId => $rdfPropUri) { //set outcome value $values = $testTaker->getPropertyValues($rdfPropUri); $outcome = $session->getVariable($outcomeId); if (!is_null($outcome) && count($values)) { $outcome->setValue(new QtiString($values[0])); } } } }
/** * Get user email address. * @param User $user * @return string * @throws Exception if email address is not valid */ public function getUserMail(User $user) { $userMail = current($user->getPropertyValues(PROPERTY_USER_MAIL)); if (!$userMail || !filter_var($userMail, FILTER_VALIDATE_EMAIL)) { throw new Exception('User email is not valid.'); } return $userMail; }
protected function getDeliverySettings(core_kernel_classes_Resource $delivery, User $user) { $deliveryProps = $delivery->getPropertiesValues(array(new core_kernel_classes_Property(TAO_DELIVERY_MAXEXEC_PROP), new core_kernel_classes_Property(TAO_DELIVERY_START_PROP), new core_kernel_classes_Property(TAO_DELIVERY_END_PROP))); $propMaxExec = current($deliveryProps[TAO_DELIVERY_MAXEXEC_PROP]); $propStartExec = current($deliveryProps[TAO_DELIVERY_START_PROP]); $propEndExec = current($deliveryProps[TAO_DELIVERY_END_PROP]); $executions = taoDelivery_models_classes_execution_ServiceProxy::singleton()->getUserExecutions($delivery, $user->getIdentifier()); $allowed = $this->service->isDeliveryExecutionAllowed($delivery, $user); return array("compiledDelivery" => $delivery, "settingsDelivery" => array(TAO_DELIVERY_MAXEXEC_PROP => (!is_object($propMaxExec) or $propMaxExec == "") ? 0 : $propMaxExec->literal, TAO_DELIVERY_START_PROP => (!is_object($propStartExec) or $propStartExec == "") ? null : $propStartExec->literal, TAO_DELIVERY_END_PROP => (!is_object($propEndExec) or $propEndExec == "") ? null : $propEndExec->literal, "TAO_DELIVERY_USED_TOKENS" => count($executions), "TAO_DELIVERY_TAKABLE" => $allowed)); }
/** * get the groups of a user * * @access public * @author Joel Bout, <*****@*****.**> * @param string userUri * @return array resources of group */ public function getGroups(User $user) { $groups = $user->getPropertyValues(self::PROPERTY_MEMBERS_URI); array_walk($groups, function (&$group) { $group = new core_kernel_classes_Resource($group); }); return $groups; }
/** * Check if a user is excluded from a delivery * @param core_kernel_classes_Resource $delivery * @param string $userUri the URI of the user to check * @return boolean true if excluded */ private function isUserExcluded(core_kernel_classes_Resource $delivery, User $user) { $excludedUsers = $delivery->getPropertyValues(new core_kernel_classes_Property(TAO_DELIVERY_EXCLUDEDSUBJECTS_PROP)); return in_array($user->getIdentifier(), $excludedUsers); }
/** * Get test centers a test-taker is assigned to * * @access public * @param User $user * @return array resources of testcenter */ public function getTestCentersByTestTaker(User $user) { return $this->mergeActualResources($user->getPropertyValues(self::PROPERTY_MEMBERS_URI)); }
private static function hasWritePrivilege(User $user, $resourceId) { $resource = new \core_kernel_classes_Resource($resourceId); $lock = LockManager::getImplementation()->getLockData($resource); return is_null($lock) || $lock->getOwnerId() == $user->getIdentifier(); }
/** * @param Resource $delivery * @param User $user * @return \core_kernel_classes_Container|Resource|null * @throws \core_kernel_persistence_Exception */ public function getTestCenter(Resource $delivery, User $user) { $result = null; $class = new \core_kernel_classes_Class(EligibilityService::CLASS_URI); $eligibilities = $class->searchInstances([EligibilityService::PROPERTY_TESTTAKER_URI => $user->getIdentifier(), EligibilityService::PROPERTY_DELIVERY_URI => $delivery->getUri()]); foreach ($eligibilities as $eligibility) { /* @var \core_kernel_classes_Resource $eligibility*/ $testCenter = $eligibility->getOnePropertyValue(new \core_kernel_classes_Property(EligibilityService::PROPERTY_TESTCENTER_URI)); if ($testCenter instanceof \core_kernel_classes_Resource && $testCenter->exists()) { $result = $testCenter; break; } } return $result; }
/** * Gets the value of a string property from a user * @param User $user * @param string $property * @return string */ public static function getUserStringProp(User $user, $property) { $value = $user->getPropertyValues($property); return empty($value) ? '' : current($value); }
protected function verifyToken(core_kernel_classes_Resource $delivery, User $user) { $propMaxExec = $delivery->getOnePropertyValue(new \core_kernel_classes_Property(TAO_DELIVERY_MAXEXEC_PROP)); $maxExec = is_null($propMaxExec) ? 0 : $propMaxExec->literal; //check Tokens $usedTokens = count(\taoDelivery_models_classes_execution_ServiceProxy::singleton()->getUserExecutions($delivery, $user->getIdentifier())); if ($maxExec != 0 && $usedTokens >= $maxExec) { \common_Logger::d("Attempt to start the compiled delivery " . $delivery->getUri() . "without tokens"); return false; } return true; }
/** * Gets the value of a string property from a user * @param User $user * @param string $property * @return mixed|string */ private function getUserStringProp($user, $property) { $value = $user->getPropertyValues($property); return empty($value) ? '' : current($value); }