public function findOneAdminByWorkspaceAndTag(Workspace $workspace, WorkspaceTag $tag)
 {
     $dql = '
         SELECT rwt
         FROM Claroline\\CoreBundle\\Entity\\Workspace\\RelWorkspaceTag rwt
         JOIN rwt.workspace w
         JOIN rwt.tag t
         WHERE t.user IS NULL
         AND w.id = :workspaceId
         AND t.id = :tagId
     ';
     $query = $this->_em->createQuery($dql);
     $query->setParameter('workspaceId', $workspace->getId());
     $query->setParameter('tagId', $tag->getId());
     return $query->getOneOrNullResult();
 }
 /**
  * Checks if given tag or at least one of its children is associated to a workspace.
  *
  * @param int   $tagId
  * @param array $tagWorkspaces
  * @param array $hierarchy
  *
  * @return bool
  */
 private function isTagDisplayable(WorkspaceTag $tag, array $tagWorkspaces, array $hierarchy)
 {
     $displayable = false;
     $tagId = $tag->getId();
     if (isset($tagWorkspaces[$tagId]) && count($tagWorkspaces[$tagId]) > 0 || !is_null($tag->getWorkspace())) {
         $displayable = true;
     } else {
         if (isset($hierarchy[$tagId]) && count($hierarchy[$tagId]) > 0) {
             $children = $hierarchy[$tagId];
             foreach ($children as $child) {
                 $displayable = $this->isTagDisplayable($child, $tagWorkspaces, $hierarchy);
                 if ($displayable) {
                     break;
                 }
             }
         }
     }
     return $displayable;
 }
 protected static function createWorkspaceTag($name, User $user = null)
 {
     $tag = new WorkspaceTag();
     $tag->setName($name);
     $tag->setUser($user);
     self::create($name, $tag);
 }
 /**
  * @EXT\Route(
  *     "admin/tag/{workspaceTagId}/link/workspace/{workspaceId}",
  *     name="claro_admin_workspace_tag_link_workspace",
  *     defaults={"workspaceId"=null},
  *     options={"expose"=true}
  * )
  * @EXT\Method("POST")
  * @EXT\ParamConverter(
  *     "workspaceTag",
  *     class="ClarolineCoreBundle:Workspace\WorkspaceTag",
  *     options={"id" = "workspaceTagId", "strictId" = true}
  * )
  * @EXT\ParamConverter(
  *     "workspace",
  *     class="ClarolineCoreBundle:Workspace\Workspace",
  *     options={"id" = "workspaceId", "strictId" = true}
  * )
  *
  * Associate a Workspace Tag to a Workspace
  *
  * @return Response
  */
 public function adminWorkspaceTagLinkWorkspaceAction(WorkspaceTag $workspaceTag, Workspace $workspace = null)
 {
     if (!$this->authorization->isGranted('ROLE_ADMIN')) {
         throw new AccessDeniedException();
     }
     if (is_null($workspaceTag->getUser())) {
         $this->tagManager->linkWorkspace($workspaceTag, $workspace);
     }
     return new Response('success', 204);
 }