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; } if ($resource->hasGraph()) { $graph = $resource->getUnserializeGraph(); if ($graph->hasVertex($vertexId)) { $vertex = $graph->getVertex($vertexId); $vertex->destroy(); $resource->setGraphAndSerialize($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; } if ($resource->hasGraph()) { $graph = $resource->getUnserializeGraph(); $graphviz = new GraphViz(); //echo $graphviz->createImageHtml($graph); /** @var Vertex $mainVertice */ if ($graph->hasVertex($id)) { $mainVertex = $graph->getVertex($id); if (!empty($mainVertex)) { $vertexList = null; switch ($loadResourceType) { case 'parent': $vertexList = $mainVertex->getVerticesEdgeFrom(); break; case 'children': $vertexList = $mainVertex->getVerticesEdgeTo(); break; } $list = []; if (!empty($vertexList)) { foreach ($vertexList as $vertex) { $list[] = $vertex->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) { if ($resource->hasGraph()) { /** @var Graph $parentGraph */ $parentGraph = $resource->getUnserializeGraph(); try { $vertex = $parentGraph->getVertex($parentId); $parentMain = $parentGraph->createVertex($id); $vertex->createEdgeTo($parentMain); $resource->setGraphAndSerialize($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 ->setGraphAndSerialize($graph) ->setType(SequenceResource::SESSION_TYPE) ->setResourceId($id); } else { $sequence->setGraphAndSerialize($graph); } $manager->persist($sequence); $manager->flush(); break; } break; }