예제 #1
0
 public function testRemoveUserRoleAction()
 {
     $preCount = count($this->userOrga->getRoles());
     $this->logIn($this->adminOrga);
     $this->client->request('GET', "/api/users/{$this->userOrga->getId()}/roles/{$this->baseRole->getId()}/remove.json");
     $data = $this->client->getResponse()->getContent();
     $data = json_decode($data, true);
     $this->assertEquals($preCount - 1, count($data['roles']));
 }
 private function logClient(User $user, Client $client, $firewall = 'main')
 {
     $tokenStorage = $client->getContainer()->get('security.token_storage');
     $token = new UsernamePasswordToken($user, $user->getPlainPassword(), $firewall, $user->getRoles());
     $tokenStorage->setToken($token);
     //now we generate the cookie !
     //@see http://symfony.com/doc/current/cookbook/testing/simulating_authentication.html
     $session = $client->getContainer()->get('session');
     $session->set('_security_' . $firewall, serialize($token));
     $session->save();
     $cookie = new Cookie($session->getName(), $session->getId());
     $client->getCookieJar()->set($cookie);
     return $client;
 }
 public function findByUser(User $user)
 {
     $dql = '
         SELECT pf
         FROM Claroline\\CoreBundle\\Entity\\Facet\\PanelFacet pf
         JOIN pf.panelFacetsRole pfr
         JOIN pfr.role r
         JOIN pf.facet f
         JOIN f.frole
         WHERE (r.name in (:roles) AND pfr.isVisible = true)
         AND frole.name : (:roles)
     ';
     $query = $this->_em->createQuery($dql);
     $query->setParameter('roles', $user->getRoles());
     return $query->getResult();
 }
예제 #4
0
 /**
  * @EXT\Route(
  *     "/user/{user}/workspaces/page/{page}/max/{max}",
  *     name="claro_admin_user_workspaces",
  *     defaults={"page"=1, "max"=50},
  *     options={"expose"=true}
  * )
  * @EXT\Template
  *
  * @param User $user
  * @param int  $page
  * @param int  $max
  *
  * @return array
  */
 public function userWorkspaceListAction(User $user, $page, $max)
 {
     $pager = $this->workspaceManager->getOpenableWorkspacesByRolesPager($user->getRoles(), $page, $max);
     return ['user' => $user, 'pager' => $pager, 'page' => $page, 'max' => $max];
 }
 /**
  * @EXT\Route(
  *     "/workspace/manager/activity/{activityId}/evaluations/page/{page}",
  *     name="claro_workspace_manager_activity_evaluations_show",
  *     defaults={"page"=1}
  * )
  * @EXT\ParamConverter("currentUser", options={"authenticatedUser" = true})
  * @EXT\ParamConverter(
  *      "activity",
  *      class="ClarolineCoreBundle:Resource\Activity",
  *      options={"id" = "activityId", "strictId" = true}
  * )
  * @EXT\Template("ClarolineCoreBundle:Tool/workspace/analytics:workspaceManagerActivityEvaluations.html.twig")
  *
  * Displays evaluations of an activity for each user of the workspace
  *
  * @return Response
  *
  * @throws \Exception
  */
 public function workspaceManagerActivityEvaluationsShowAction(User $currentUser, Activity $activity, $page)
 {
     $roleNames = $currentUser->getRoles();
     $workspace = $activity->getResourceNode()->getWorkspace();
     $isWorkspaceManager = $this->isWorkspaceManager($workspace, $roleNames);
     if (!$isWorkspaceManager) {
         throw new AccessDeniedException();
     }
     $resourceNode = $activity->getResourceNode();
     $activityParams = $activity->getParameters();
     $roles = $this->roleManager->getRolesWithRightsByResourceNode($resourceNode);
     $usersPager = $this->userManager->getUsersByRolesIncludingGroups($roles, $page);
     $users = array();
     foreach ($usersPager as $user) {
         $users[] = $user;
     }
     $allEvaluations = $this->activityManager->getEvaluationsByUsersAndActivityParams($users, $activityParams);
     $evaluations = array();
     foreach ($allEvaluations as $evaluation) {
         $user = $evaluation->getUser();
         $evaluations[$user->getId()] = $evaluation;
     }
     $nbSuccess = 0;
     foreach ($users as $user) {
         if (!isset($evaluations[$user->getId()])) {
             $evaluations[$user->getId()] = $this->activityManager->createBlankEvaluation($user, $activityParams);
         }
         $status = $evaluations[$user->getId()]->getStatus();
         if ($status === AbstractEvaluation::STATUS_COMPLETED || $status === AbstractEvaluation::STATUS_PASSED) {
             $nbSuccess++;
         }
     }
     $progress = count($users) > 0 ? round($nbSuccess / count($users), 2) * 100 : 0;
     $ruleScore = null;
     if ($activityParams->getEvaluationType() === AbstractEvaluation::TYPE_AUTOMATIC && count($activityParams->getRules()) > 0) {
         $rule = $activityParams->getRules()->first();
         $score = $rule->getResult();
         $scoreMax = $rule->getResultMax();
         if (!is_null($score)) {
             $ruleScore = $score;
             if (!is_null($scoreMax)) {
                 $ruleScore .= ' / ' . $scoreMax;
             }
         }
     }
     return array('analyticsTab' => 'activities', 'activity' => $activity, 'activityParams' => $activityParams, 'workspace' => $workspace, 'users' => $usersPager, 'page' => $page, 'evaluations' => $evaluations, 'ruleScore' => $ruleScore, 'progress' => $progress);
 }
예제 #6
0
 /**
  * Logs the current user
  */
 public function logUser(User $user)
 {
     $this->strictEventDispatcher->dispatch('log', 'Log\\LogUserLogin', array($user));
     $token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
     $this->container->get('security.token_storage')->setToken($token);
 }
예제 #7
0
 public function findWorkspacesByManager(User $user, $executeQuery = true)
 {
     $roles = $user->getRoles();
     $managerRoles = [];
     foreach ($roles as $role) {
         if (strpos('_' . $role, 'ROLE_WS_MANAGER')) {
             $managerRoles[] = $role;
         }
     }
     $dql = "\n            SELECT w\n            FROM Claroline\\CoreBundle\\Entity\\Workspace\\Workspace w\n            JOIN w.roles r\n            WHERE r.name IN (:roleNames)\n\n        ";
     $query = $this->_em->createQuery($dql);
     $query->setParameter('roleNames', $managerRoles);
     return $executeQuery ? $query->getResult() : $query;
 }
예제 #8
0
 /**
  * Logs the current user.
  */
 public function logUser(User $user)
 {
     $this->strictEventDispatcher->dispatch('log', 'Log\\LogUserLogin', [$user]);
     $token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
     $this->tokenStorage->setToken($token);
 }
예제 #9
0
 private function isWorkspaceManager(Workspace $workspace, User $user)
 {
     $isWorkspaceManager = false;
     $managerRole = 'ROLE_WS_MANAGER_' . $workspace->getGuid();
     $roleNames = $user->getRoles();
     if (in_array('ROLE_ADMIN', $roleNames) || in_array($managerRole, $roleNames)) {
         $isWorkspaceManager = true;
     }
     return $isWorkspaceManager;
 }
예제 #10
0
 /**
  * @Route(
  *     "edit/activity/past/evaluation/{pastEvaluationId}",
  *     name="claro_activity_past_evaluation_edit",
  *     options={"expose"=true}
  * )
  * @ParamConverter("currentUser", options={"authenticatedUser" = true})
  * @ParamConverter(
  *      "pastEvaluation",
  *      class="ClarolineCoreBundle:Activity\PastEvaluation",
  *      options={"id" = "pastEvaluationId", "strictId" = true}
  * )
  * @Template()
  */
 public function editActivityPastEvaluationAction(User $currentUser, PastEvaluation $pastEvaluation)
 {
     $isWorkspaceManager = false;
     $activityParams = $pastEvaluation->getActivityParameters();
     $activity = $activityParams->getActivity();
     if (!is_null($activity)) {
         $workspace = $activity->getResourceNode()->getWorkspace();
         $roleNames = $currentUser->getRoles();
         $isWorkspaceManager = $this->isWorkspaceManager($workspace, $roleNames);
     }
     if (!$isWorkspaceManager) {
         throw new AccessDeniedException();
     }
     $form = $this->formFactory->create(new ActivityPastEvaluationType(), $pastEvaluation);
     $form->handleRequest($this->request);
     if ($form->isValid()) {
         $this->activityManager->editPastEvaluation($pastEvaluation);
         return new Response('success', 204);
     }
     return array('form' => $form->createView(), 'pastEvaluation' => $pastEvaluation);
 }