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