tools = []; $this->entityManager = $entityManager; $this->settingsManager = $settingsManager; $this->toolRepository = $toolRepository; $this->security = $security; } public function addTool(AbstractTool $tool): void { $this->tools[$tool->getName()] = $tool; } public function getTools(): array { return $this->tools; } public function createTools(): void { $manager = $this->entityManager; $tools = $this->getTools(); /** @var AbstractTool $tool */ foreach ($tools as $tool) { $toolEntity = new Tool(); $toolEntity ->setName($tool->getName()) ; if ($tool->isCourseTool()) { $this->setToolPermissions($toolEntity); } $manager->persist($toolEntity); $types = $tool->getResourceTypes(); if (!empty($types)) { foreach ($types as $name => $data) { $resourceType = new ResourceType(); $resourceType->setName($name); $resourceType->setService($data['repository']); $resourceType->setTool($toolEntity); $manager->persist($resourceType); } } $manager->flush(); } } public function updateTools(): void { $manager = $this->entityManager; $tools = $this->getTools(); /** @var AbstractTool $tool */ foreach ($tools as $tool) { $toolEntity = new Tool(); $toolEntity ->setName($tool->getName()) ; if ($tool->getAdmin() === 1) { // Only check ROLE_ADMIN } else { $this->setToolPermissions($toolEntity); } $manager->persist($toolEntity); $types = $tool->getResourceTypes(); if (!empty($types)) { foreach ($types as $name => $data) { $resourceType = new ResourceType(); $resourceType->setName($name); $resourceType->setService($data['entity']); $resourceType->setTool($toolEntity); $manager->persist($resourceType); } } $manager->flush(); } } public function setToolPermissions(Tool $tool): void { $toolResourceRight = new ToolResourceRight(); $toolResourceRight ->setRole('ROLE_TEACHER') ->setMask(ResourceNodeVoter::getEditorMask()) ; $toolResourceRightReader = new ToolResourceRight(); $toolResourceRightReader ->setRole('ROLE_STUDENT') ->setMask(ResourceNodeVoter::getReaderMask()) ; $tool->addToolResourceRight($toolResourceRight); $tool->addToolResourceRight($toolResourceRightReader); } public function addToolsInCourse(Course $course): Course { $tools = $this->getTools(); $manager = $this->entityManager; $toolVisibility = $this->settingsManager ->getSetting('course.active_tools_on_create'); $user = $this->security->getToken()->getUser(); // Hardcoded order $toolList = [ 'course_description', 'document', 'learnpath', 'link', 'quiz', 'announcement', 'gradebook', 'glossary', 'attendance', 'course_progress', 'agenda', 'forum', 'dropbox', 'member', 'group', 'chat', 'student_publication', 'survey', 'wiki', 'notebook', 'blog', 'course_tool', 'tracking', 'course_setting', 'course_maintenance', ]; $toolList = array_flip($toolList); /** @var AbstractTool $tool */ foreach ($tools as $tool) { $visibility = in_array($tool->getName(), $toolVisibility, true); $criteria = ['name' => $tool->getName()]; // Skip global tools. if ($tool->isCourseTool() === false) { continue; } $toolEntity = $manager->getRepository('ChamiloCoreBundle:Tool')->findOneBy($criteria); $position = $toolList[$tool->getName()] + 1; $courseTool = new CTool(); $courseTool ->setTool($toolEntity) ->setName($tool->getName()) ->setPosition($position) //->setCourse($course) //->setImage($tool->getImage()) //->setName($tool->getName()) ->setVisibility($visibility) //->setLink($tool->getLink()) //->setTarget($tool->getTarget()) ->setCategory($tool->getCategory()) ; //$this->toolRepository->createNodeForResource($courseTool, $user, $course->getResourceNode()); $this->toolRepository->addResourceToCourse($courseTool, ResourceLink::VISIBILITY_PUBLISHED, $user, $course); $course->addTools($courseTool); } return $course; } /** * @param string $name * * @return AbstractTool */ public function getToolFromName($name) { $tools = $this->getTools(); if (array_key_exists($name, $tools)) { return $tools[$name]; } throw new InvalidArgumentException(sprintf("The Tool '%s' doesn't exist.", $name)); } }