/**
  * @EXT\Route(
  *     "/properties/edit/{node}",
  *     name="claro_resource_edit_properties",
  *     options={"expose"=true}
  * )
  * @EXT\Template("ClarolineCoreBundle:Resource:propertiesForm.html.twig")
  * @EXT\ParamConverter("user", options={"authenticatedUser" = true})
  *
  * Changes the resource properties.
  *
  * @param ResourceNode $node
  * @param \Claroline\CoreBundle\Entity\User $user
  * @throws \Symfony\Component\Security\Core\Exception\AccessDeniedException
  * @return SResponse
  */
 public function changePropertiesAction(ResourceNode $node, User $user)
 {
     $collection = new ResourceCollection(array($node));
     $this->checkAccess('EDIT', $collection);
     $creatorUsername = $node->getCreator()->getUsername();
     $wasPublished = $node->isPublished();
     $form = $this->formFactory->create(new ResourcePropertiesType($creatorUsername), $node);
     $form->handleRequest($this->request);
     if ($form->isValid()) {
         $name = $form->get('name')->getData();
         $file = $form->get('newIcon')->getData();
         $isRecursive = $this->request->get('isRecursive');
         if ($file) {
             $this->resourceManager->changeIcon($node, $file);
         }
         $this->resourceManager->rename($node, $name);
         if ($isRecursive) {
             $accessibleFrom = $form->get('accessibleFrom')->getData();
             $accessibleUntil = $form->get('accessibleUntil')->getData();
             $this->resourceManager->changeAccessibilityDate($node, $accessibleFrom, $accessibleUntil);
         }
         if ($node->isPublished() !== $wasPublished) {
             $eventName = "publication_change_{$node->getResourceType()->getName()}";
             $resource = $this->resourceManager->getResourceFromNode($node);
             $this->dispatcher->dispatch($eventName, 'PublicationChange', [$resource]);
         }
         $arrayNode = $this->resourceManager->toArray($node, $this->tokenStorage->getToken());
         return new JsonResponse($arrayNode);
     }
     $isDir = $node->getResourceType()->getName() === 'directory';
     return array('form' => $form->createView(), 'nodeId' => $node->getId(), 'isDir' => $isDir);
 }
Exemplo n.º 2
0
 /**
  * Convert a resource into an array (mainly used to be serialized and sent to the manager.js as
  * a json response)
  *
  * @param \Claroline\CoreBundle\Entity\Resource\ResourceNode $node
  * @param \Symfony\Component\Security\Core\Authentication\Token\TokenInterface $toke
  * @param boolean $new: set the 'new' flag to display warning in the resource manager
  * @todo check "new" from log
  * @return array
  */
 public function toArray(ResourceNode $node, TokenInterface $token, $new = false)
 {
     $resourceArray = array();
     $resourceArray['id'] = $node->getId();
     $resourceArray['name'] = $node->getName();
     $resourceArray['parent_id'] = $node->getParent() != null ? $node->getParent()->getId() : null;
     $resourceArray['creator_username'] = $node->getCreator()->getUsername();
     $resourceArray['type'] = $node->getResourceType()->getName();
     $resourceArray['large_icon'] = $node->getIcon()->getRelativeUrl();
     $resourceArray['path_for_display'] = $node->getPathForDisplay();
     $resourceArray['mime_type'] = $node->getMimeType();
     $resourceArray['published'] = $node->isPublished();
     $resourceArray['index_dir'] = $node->getIndex();
     $resourceArray['creation_date'] = $node->getCreationDate()->format($this->translator->trans('date_range.format.with_hours', array(), 'platform'));
     $resourceArray['modification_date'] = $node->getModificationDate()->format($this->translator->trans('date_range.format.with_hours', array(), 'platform'));
     $resourceArray['new'] = $new;
     $isAdmin = false;
     $roles = $this->roleManager->getStringRolesFromToken($token);
     foreach ($roles as $role) {
         if ($role === 'ROLE_ADMIN') {
             $isAdmin = true;
         }
     }
     if ($isAdmin || $token->getUser() !== 'anon.' && $node->getCreator()->getUsername() === $token->getUser()->getUsername()) {
         $resourceArray['mask'] = 1023;
     } else {
         $resourceArray['mask'] = $this->resourceRightsRepo->findMaximumRights($roles, $node);
     }
     //the following line is required because we wanted to disable the right edition in personal worksspaces...
     //this is not required for everything to work properly.
     if ($node->getWorkspace()->isPersonal() && !$this->rightsManager->canEditPwsPerm($token)) {
         $resourceArray['enableRightsEdition'] = false;
     } else {
         $resourceArray['enableRightsEdition'] = true;
     }
     if ($node->getResourceType()->getName() === 'file') {
         if ($node->getClass() === 'Claroline\\CoreBundle\\Entity\\Resource\\ResourceShortcut') {
             $shortcut = $this->getResourceFromNode($node);
             $realNode = $shortcut->getTarget();
         } else {
             $realNode = $node;
         }
         $file = $this->getResourceFromNode($realNode);
         $resourceArray['size'] = $file->getFormattedSize();
     }
     return $resourceArray;
 }
Exemplo n.º 3
0
 private function getDirectoryElement(ResourceNode $resourceNode, &$_files, $setParentNull = false)
 {
     $parentId = $resourceNode->getParent() ? $resourceNode->getParent()->getId() : null;
     if ($setParentNull) {
         $parentId = null;
     }
     $resElement = array('directory' => array('name' => $resourceNode->getName(), 'creator' => null, 'parent' => $parentId, 'published' => $resourceNode->isPublished(), 'uid' => $resourceNode->getId(), 'roles' => $this->getPermsArray($resourceNode), 'index' => $resourceNode->getIndex()));
     if ($icon = $this->getIcon($resourceNode, $_files)) {
         $resElement['directory']['icon'] = $icon;
     }
     return $resElement;
 }