/** * Create rights wich weren't created for every descendants and returns every rights of * every descendants (include rights wich weren't created). * * @param \Claroline\CoreBundle\Entity\Role $role * @param \Claroline\CoreBundle\Entity\Resource\ResourceNode $node * * @return \Claroline\CoreBundle\Entity\Resource\ResourceRights[] */ public function updateRightsTree(Role $role, ResourceNode $node) { $this->log('Updating the right tree'); $alreadyExistings = $this->rightsRepo->findRecursiveByResourceAndRole($node, $role); $descendants = $this->resourceRepo->findDescendants($node, true); $finalRights = array(); foreach ($descendants as $descendant) { $found = false; foreach ($alreadyExistings as $existingRight) { if ($existingRight->getResourceNode() === $descendant) { $finalRights[] = $existingRight; $found = true; } } if (!$found) { $rights = $this->om->factory('Claroline\\CoreBundle\\Entity\\Resource\\ResourceRights'); $rights->setRole($role); $rights->setResourceNode($descendant); $this->om->persist($rights); $finalRights[] = $rights; } } $this->om->flush(); $this->log('Right tree updated'); return $finalRights; }
/** * Retrieves all descendants of given ResourceNode and updates their * accessibility dates. * * @param ResourceNode $node A directory * @param datetime $accessibleFrom * @param datetime $accessibleUntil */ public function changeAccessibilityDate(ResourceNode $node, $accessibleFrom, $accessibleUntil) { if ($node->getResourceType()->getName() === 'directory') { $descendants = $this->resourceNodeRepo->findDescendants($node); foreach ($descendants as $descendant) { $descendant->setAccessibleFrom($accessibleFrom); $descendant->setAccessibleUntil($accessibleUntil); $this->om->persist($descendant); } $this->om->flush(); } }