getRepository('ChamiloCoreBundle:SequenceResource'); switch ($action) { case 'get_icon': $link = ''; switch ($type) { case 'session': $showDelete = isset($_REQUEST['show_delete']) ? $_REQUEST['show_delete'] : false; $image = Display::return_icon('window_list.png'); $sessionInfo = api_get_session_info($id); if (!empty($sessionInfo)) { $linkDelete = ''; if ($showDelete) { $linkDelete = Display::url( get_lang('Delete'), '#', ['class' => 'delete_vertex', 'data-id' => $id] ); } $link = '
'. $image.' '.$sessionInfo['name'].$linkDelete. '
'; } break; } echo $link; break; case 'delete_vertex': $vertexId = isset($_REQUEST['vertex_id']) ? $_REQUEST['vertex_id'] : null; /** @var SequenceResource $resource */ $resource = $repository->findOneByResourceId($id); if (empty($resource)) { exit; } $graph = $resource->getGraph(); if (!empty($graph)) { /** @var Graph $graph */ $graph = unserialize($graph); if ($graph->hasVertex($vertexId)) { $vertex = $graph->getVertex($vertexId); $vertex->destroy(); $resource->setGraph(serialize($graph)); $manager->persist($resource); $manager->flush(); } } break; case 'load_resource': // children or parent $loadResourceType = isset($_REQUEST['load_resource_type']) ? $_REQUEST['load_resource_type'] : null; /** @var SequenceResource $resource */ $resource = $repository->findOneByResourceId($id); if (empty($resource)) { exit; } $graph = $resource->getGraph(); if (!empty($graph)) { /** @var Graph $graph */ $graph = unserialize($graph); $graphviz = new GraphViz(); //echo $graphviz->createImageHtml($graph); /** @var Vertex $mainVertice */ if ($graph->hasVertex($id)) { $mainVertice = $graph->getVertex($id); if (!empty($mainVertice)) { $list = []; switch ($loadResourceType) { case 'parent': $verticeList = $mainVertice->getVerticesEdgeFrom(); break; case 'children': $verticeList = $mainVertice->getVerticesEdgeTo(); break; } foreach ($verticeList as $vertice) { $list[] = $vertice->getId(); } if (!empty($list)) { echo implode(',', $list); } } } } break; case 'save_resource': $parents = isset($_REQUEST['parents']) ? $_REQUEST['parents'] : null; if (empty($parents)) { exit; } $parents = str_replace($id, '', $parents); $parents = explode(',', $parents); $parents = array_filter($parents); $graph = new Graph(); switch ($type) { case 'session': $sessionInfo = api_get_session_info($id); $name = $sessionInfo['name']; $main = $graph->createVertex($id); foreach ($parents as $parentId) { $parent = $graph->createVertex($parentId); // Check if parent Id exists in the DB /** @var SequenceResource $resource */ $resource = $repository->findOneByResourceId($parentId); if ($resource) { $parentGraph = $resource->getGraph(); if (!empty($parentGraph)) { /** @var Graph $parentGraph */ $parentGraph = unserialize($parentGraph); try { $vertex = $parentGraph->getVertex($parentId); $parentMain = $parentGraph->createVertex($id); $vertex->createEdgeTo($parentMain); $resource->setGraph(serialize($parentGraph)); $manager->persist($resource); $manager->flush(); /* $graphviz = new GraphViz(); echo $graphviz->createImageHtml($parentGraph);*/ } catch (Exception $e) { } } } $parent->createEdgeTo($main); } $graphviz = new GraphViz(); //echo $graphviz->createImageHtml($graph); /** @var SequenceResource $sequence */ $sequence = $repository->findOneByResourceId($id); if (empty($sequence)) { $sequence = new SequenceResource(); $sequence ->setGraph(serialize($graph)) ->setType(SequenceResource::SESSION_TYPE) ->setResourceId($id); } else { $sequence->setGraph(serialize($graph)); } $manager->persist($sequence); $manager->flush(); break; } break; }