Adding sequence name + improving performance. see BT#9893

1.10.x
Julio Montoya 11 years ago
parent 70d8a12410
commit f17a014689
  1. 34
      main/admin/resource_sequence.php
  2. 159
      main/inc/ajax/sequence.ajax.php
  3. 21
      main/template/default/admin/resource_sequence.tpl
  4. 6
      src/Chamilo/CoreBundle/Entity/Repository/SequenceRepository.php
  5. 90
      src/Chamilo/CoreBundle/Entity/Sequence.php
  6. 61
      src/Chamilo/CoreBundle/Entity/SequenceResource.php

@ -1,6 +1,8 @@
<?php
/* For licensing terms, see /license.txt */
use Chamilo\CoreBundle\Entity\Sequence;
$cidReset = true;
require_once '../inc/global.inc.php';
@ -8,7 +10,6 @@ require_once '../inc/global.inc.php';
api_protect_global_admin_script();
$tpl = new Template(get_lang('ResourcesSequencing'));
$layout = $tpl->get_template('admin/resource_sequence.tpl');
$sessionList = SessionManager::get_sessions_list();
if (!empty($sessionList)) {
@ -16,8 +17,36 @@ if (!empty($sessionList)) {
$sessionList = array_column($sessionList, 'name', 'id');
}
$formSequence = new FormValidator('sequence_form', 'post', api_get_self());
$formSequence->addText('name', get_lang('Sequence'));
$formSequence->addButtonCreate(get_lang('AddSequence'), 'submit_sequence');
$em = Database::getManager();
if ($formSequence->validate()) {
//$values = $form->getSubmitValue('name');
$values = $formSequence->exportValues();
$sequence = new Sequence();
$sequence->setName($values['name']);
$em->persist($sequence);
$em->flush();
header('Location: '.api_get_self());
exit;
}
$form = new FormValidator('');
$form->addHidden('sequence_type', 'session');
$em = Database::getManager();
$sequenceList = $em->getRepository('ChamiloCoreBundle:Sequence')->findAll();
$form->addSelect(
'sequence',
get_lang('Sequence'),
$sequenceList,
['id' => 'sequence_id']
);
$form->addSelect(
'sessions',
get_lang('Sessions'),
@ -28,6 +57,7 @@ $form->addButtonNext(get_lang('UseAsReference'), 'use_as_reference');
$form->addButtonCreate(get_lang('SetAsRequirementForSelected'), 'set_requirement');
$form->addButtonSave(get_lang('Save'), 'save_resource');
$tpl->assign('left_block', $form->returnForm());
$tpl->assign('left_block', $formSequence->returnForm().$form->returnForm());
$layout = $tpl->get_template('admin/resource_sequence.tpl');
$tpl->display($layout);

@ -5,10 +5,10 @@
* Responses to AJAX calls
*/
use Chamilo\CoreBundle\Entity\Sequence;
use Chamilo\CoreBundle\Entity\SequenceResource;
use Fhaculty\Graph\Graph;
use Fhaculty\Graph\Vertex;
use Graphp\GraphViz\GraphViz;
require_once '../global.inc.php';
@ -18,13 +18,14 @@ api_protect_admin_script();
$action = isset($_REQUEST['a']) ? $_REQUEST['a'] : null;
$id = isset($_REQUEST['id']) ? $_REQUEST['id'] : null;
$type = isset($_REQUEST['type']) ? $_REQUEST['type'] : null;
$manager = Database::getManager();
$repository = $manager->getRepository('ChamiloCoreBundle:SequenceResource');
$em = Database::getManager();
$repository = $em->getRepository('ChamiloCoreBundle:SequenceResource');
switch ($action) {
case 'get_icon':
$link = '';
switch ($type) {
case 'session':
$type = SequenceResource::SESSION_TYPE;
$showDelete = isset($_REQUEST['show_delete']) ? $_REQUEST['show_delete'] : false;
$image = Display::return_icon('window_list.png');
$sessionInfo = api_get_session_info($id);
@ -48,23 +49,36 @@ switch ($action) {
break;
case 'delete_vertex':
$vertexId = isset($_REQUEST['vertex_id']) ? $_REQUEST['vertex_id'] : null;
/** @var SequenceResource $resource */
$resource = $repository->findOneByResourceId($id);
$sequenceId = isset($_REQUEST['sequence_id']) ? $_REQUEST['sequence_id'] : 0;
if (empty($resource)) {
$type = SequenceResource::SESSION_TYPE;
/** @var Sequence $sequence */
$sequence = $em->getRepository('ChamiloCoreBundle:Sequence')->find($sequenceId);
if (empty($sequence)) {
exit;
}
if ($resource->hasGraph()) {
$graph = $resource->getUnserializeGraph();
/** @var SequenceResource $sequenceResource */
$sequenceResource = $repository->findOneBy(
['resourceId' => $id, 'type' => $type, 'sequence' => $sequence]
);
if (empty($sequenceResource)) {
exit;
}
if ($sequenceResource->getSequence()->hasGraph()) {
$graph = $sequenceResource->getSequence()->getUnSerializeGraph();
if ($graph->hasVertex($vertexId)) {
$vertex = $graph->getVertex($vertexId);
$vertex->destroy();
$em->remove($sequenceResource);
$resource->setGraphAndSerialize($graph);
$manager->persist($resource);
$manager->flush();
$sequence->setGraphAndSerialize($graph);
$em->persist($sequence);
$em->flush();
}
}
@ -72,16 +86,28 @@ switch ($action) {
case 'load_resource':
// children or parent
$loadResourceType = isset($_REQUEST['load_resource_type']) ? $_REQUEST['load_resource_type'] : null;
/** @var SequenceResource $resource */
$resource = $repository->findOneByResourceId($id);
$sequenceId = isset($_REQUEST['sequence_id']) ? $_REQUEST['sequence_id'] : 0;
$type = SequenceResource::SESSION_TYPE;
if (empty($resource)) {
/** @var Sequence $sequence */
$sequence = $em->getRepository('ChamiloCoreBundle:Sequence')->find($sequenceId);
if (empty($sequence)) {
exit;
}
if ($resource->hasGraph()) {
$graph = $resource->getUnserializeGraph();
$graphviz = new GraphViz();
/** @var SequenceResource $sequenceResource */
$sequenceResource = $repository->findOneBy(
['resourceId' => $id, 'type' => $type, 'sequence' => $sequence]
);
if (empty($sequenceResource)) {
exit;
}
if ($sequenceResource->hasGraph()) {
$graph = $sequenceResource->getSequence()->getUnSerializeGraph();
//$graphviz = new GraphViz();
//echo $graphviz->createImageHtml($graph);
/** @var Vertex $mainVertice */
@ -115,10 +141,21 @@ switch ($action) {
}
break;
case 'save_resource':
$parents = isset($_REQUEST['parents']) ? $_REQUEST['parents'] : null;
if (empty($parents)) {
$parents = isset($_REQUEST['parents']) ? $_REQUEST['parents'] : '';
$sequenceId = isset($_REQUEST['sequence_id']) ? $_REQUEST['sequence_id'] : 0;
$type = isset($_REQUEST['type']) ? $_REQUEST['type'] : '';
if (empty($parents) || empty($sequenceId) || empty($type)) {
exit;
}
/** @var Sequence $sequence */
$sequence = $em->getRepository('ChamiloCoreBundle:Sequence')->find($sequenceId);
if (empty($sequence)) {
exit;
}
$parents = str_replace($id, '', $parents);
$parents = explode(',', $parents);
$parents = array_filter($parents);
@ -127,6 +164,9 @@ switch ($action) {
switch ($type) {
case 'session':
$type = SequenceResource::SESSION_TYPE;
$sessionInfo = api_get_session_info($id);
$name = $sessionInfo['name'];
@ -134,49 +174,66 @@ switch ($action) {
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()) {
$parent->createEdgeTo($main);
}
foreach ($parents as $parentId) {
$sequenceResourceParent = $repository->findOneBy(
['resourceId' => $parentId, 'type' => $type, 'sequence' => $sequence]
);
if (empty($sequenceResourceParent)) {
$sequenceResourceParent = new SequenceResource();
$sequenceResourceParent
->setSequence($sequence)
->setType(SequenceResource::SESSION_TYPE)
->setResourceId($parentId);
$em->persist($sequenceResourceParent);
if ($sequenceResourceParent->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) {
}
/* $parentGraph = $resource->getGraph()getUnserializeGraph();
try {
$vertex = $parentGraph->getVertex($parentId);
$parentMain = $parentGraph->createVertex($id);
$vertex->createEdgeTo($parentMain);
$resource->setGraphAndSerialize($parentGraph);
$em->persist($resource);
$em->flush();
/*
$graphviz = new GraphViz();
echo $graphviz->createImageHtml($parentGraph);*/
/*} catch (Exception $e) {
}*/
}
}
$parent->createEdgeTo($main);
}
$graphviz = new GraphViz();
//$graphviz = new GraphViz();
//echo $graphviz->createImageHtml($graph);
/** @var SequenceResource $sequenceResource */
$sequenceResource = $repository->findOneBy(
['resourceId' => $id, 'type' => $type, 'sequence' => $sequence]
);
/** @var SequenceResource $sequence */
$sequence = $repository->findOneByResourceId($id);
if (empty($sequence)) {
$sequence = new SequenceResource();
$sequence
->setGraphAndSerialize($graph)
if (empty($sequenceResource)) {
// Create
$sequence->setGraphAndSerialize($graph);
$sequenceResource = new SequenceResource();
$sequenceResource
->setSequence($sequence)
->setType(SequenceResource::SESSION_TYPE)
->setResourceId($id);
} else {
$sequence->setGraphAndSerialize($graph);
// Update
$sequenceResource->getSequence()->setGraphAndSerialize($graph);
}
$manager->persist($sequence);
$manager->flush();
$em->persist($sequenceResource);
$em->flush();
break;
}
break;

@ -5,6 +5,7 @@
var url = '{{ _p.web_ajax }}sequence.ajax.php';
var parentList = [];
var resourceId = 0;
var sequenceId = 0;
$(document).ready(function() {
var type = $('input[name="sequence_type"]').val();
@ -17,7 +18,7 @@
if (vertexId) {
$.ajax({
url: url + '?a=delete_vertex&id='+resourceId+'&vertex_id=' + vertexId + '&type=' + type,
url: url + '?a=delete_vertex&id='+resourceId+'&vertex_id=' + vertexId + '&type=' +type+'&sequence_id='+sequenceId,
success: function (data) {
parent.remove();
}
@ -30,18 +31,20 @@
var id = $("#item option:selected" ).val();
sequenceId = $("#sequence_id option:selected" ).val();
// Cleaning parent list.
parentList = [];
// Check if data exists and load parents
$.ajax({
url: url + '?a=load_resource&load_resource_type=parent&id=' + id + '&type='+type,
url: url + '?a=load_resource&load_resource_type=parent&id=' + id + '&type='+type+'&sequence_id='+sequenceId,
success: function (data) {
if (data) {
var listLoaded = data.split(',');
listLoaded.forEach(function(value) {
$.ajax({
url: url + '?a=get_icon&id='+ value+'&type='+type+'&show_delete=1',
url: url + '?a=get_icon&id='+ value+'&type='+type+'&sequence_id='+sequenceId+'&show_delete=1',
success:function(data){
$('#parents').append(data);
parentList.push(id);
@ -54,13 +57,13 @@
// Check if data exists and load children
$.ajax({
url: url + '?a=load_resource&load_resource_type=children&id=' + id + '&type='+type,
url: url + '?a=load_resource&load_resource_type=children&id=' + id + '&type='+type+'&sequence_id='+sequenceId,
success: function (data) {
if (data) {
var listLoaded = data.split(',');
listLoaded.forEach(function(value) {
$.ajax({
url: url + '?a=get_icon&id='+ value+'&type='+type,
url: url + '?a=get_icon&id='+ value+'&type='+type+'&sequence_id='+sequenceId,
success:function(data){
$('#children').append(data);
}
@ -75,7 +78,7 @@
$('#children').html('');
$.ajax({
url: url + '?a=get_icon&id='+ id+'&type='+type,
url: url + '?a=get_icon&id='+ id+'&type='+type+'&sequence_id='+sequenceId,
success:function(data){
$('#resource').html(data);
parentList.push(id);
@ -91,7 +94,7 @@
var id = $(this).val();
if ($.inArray(id, parentList) == -1) {
$.ajax({
url: url + '?a=get_icon&id=' + id + '&type=' + type,
url: url + '?a=get_icon&id=' + id + '&type='+type+'&sequence_id='+sequenceId,
success: function (data) {
$('#parents').append(data);
parentList.push(id);
@ -106,7 +109,7 @@
if (resourceId != 0) {
var params = decodeURIComponent(parentList);
$.ajax({
url: url + '?a=save_resource&id=' + resourceId + '&parents=' + params+'&type='+type,
url: url + '?a=save_resource&id=' + resourceId + '&parents=' + params+'&type='+type+'&sequence_id='+sequenceId,
success: function (data) {
alert('saved');
}
@ -127,9 +130,11 @@
</h3>
<div id="parents">
</div>
<h3>{{ 'Item' | get_lang }}</h3>
<div id="resource">
</div>
<h3>{{ 'Dependencies' | get_lang }}</h3>
<div id="children">
</div>

@ -44,7 +44,7 @@ class SequenceRepository extends EntityRepository
$sequence = $this->findRequirementForResource($resourceId, $type);
$result = ['requirements' => '', 'dependencies' => ''];
if ($sequence && $sequence->hasGraph()) {
$graph = $sequence->getUnserializeGraph();
$graph = $sequence->getUnSerializeGraph();
$vertex = $graph->getVertex($resourceId);
$from = $vertex->getVerticesEdgeFrom();
@ -79,7 +79,7 @@ class SequenceRepository extends EntityRepository
if ($sequence && $sequence->hasGraph()) {
$em = $this->getEntityManager();
$graph = $sequence->getUnserializeGraph();
$graph = $sequence->getUnSerializeGraph();
$mainVertex = $graph->getVertex($resourceId);
$vertices = $graph->getVertices();
@ -89,7 +89,7 @@ class SequenceRepository extends EntityRepository
$subResourceId = $vertex->getId();
$subSequence = $this->findRequirementForResource($subResourceId, $type);
if ($sequence && $subSequence->hasGraph()) {
$graph = $subSequence->getUnserializeGraph();
$graph = $subSequence->getUnSerializeGraph();
$subMainVertex = $graph->getVertex($resourceId);
$subMainVertex->destroy();
$subSequence->setGraphAndSerialize($graph);

@ -4,6 +4,7 @@
namespace Chamilo\CoreBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Fhaculty\Graph\Graph;
/**
* Class Sequence
@ -25,86 +26,111 @@ class Sequence
/**
* @var string
*
* @ORM\Column(name="is_part", type="boolean")
* @ORM\Column(name="name", type="string")
*/
private $part;
private $name;
/**
* @ORM\ManyToOne(targetEntity="SequenceRowEntity")
* @ORM\JoinColumn(name="sequence_row_entity_id", referencedColumnName="id")
**/
private $rowEntity;
/**
* @ORM\ManyToOne(targetEntity="SequenceRowEntity")
* @ORM\JoinColumn(name="sequence_row_entity_id_next", referencedColumnName="id")
**/
private $rowEntityNext;
* @var string
*
* @ORM\Column(name="graph", type="text", nullable=true)
*/
private $graph;
/**
* Get id
*
* @return integer
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* @param int $id
* @return Sequence
*/
public function setId($id)
{
$this->id = $id;
return $this;
}
/**
* @return string
*/
public function getPart()
public function getName()
{
return $this->part;
return $this->name;
}
/**
* @param string $part
* @param string $name
* @return Sequence
*/
public function setPart($part)
public function setName($name)
{
$this->part = $part;
$this->name = $name;
return $this;
}
/**
* @return mixed
* @return string
*/
public function getRowEntity()
public function getGraph()
{
return $this->rowEntity;
return $this->graph;
}
/**
* @param mixed $rowEntity
* @param string $graph
*
* @return Sequence
*/
public function setRowEntity($rowEntity)
public function setGraph($graph)
{
$this->rowEntity = $rowEntity;
$this->graph = $graph;
return $this;
}
/**
* @return mixed
* @return bool
*/
public function hasGraph()
{
return !empty($this->graph) ? true : false;
}
/**
* @return Graph
*/
public function getRowEntityNext()
public function getUnSerializeGraph()
{
return $this->rowEntityNext;
return unserialize($this->graph);
}
/**
* @param mixed $rowEntityNext
* @param string $graph
*
* @return Sequence
*/
public function setRowEntityNext($rowEntityNext)
public function setGraphAndSerialize($graph)
{
$this->rowEntityNext = $rowEntityNext;
$this->setGraph(serialize($graph));
return $this;
}
/**
* @return string
*/
public function __toString()
{
return $this->name;
}
}

@ -4,7 +4,6 @@
namespace Chamilo\CoreBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Fhaculty\Graph\Graph;
/**
* Class SequenceResource
@ -34,18 +33,19 @@ class SequenceResource
private $type;
/**
* @var integer
* @var Sequence
*
* @ORM\Column(name="resource_id", type="integer")
*/
private $resourceId;
* @ORM\ManyToOne(targetEntity="Sequence")
* @ORM\JoinColumn(name="sequence_id", referencedColumnName="id")
**/
protected $sequence;
/**
* @var string
* @var integer
*
* @ORM\Column(name="graph", type="text")
* @ORM\Column(name="resource_id", type="integer")
*/
private $graph;
private $resourceId;
/**
* Get id
@ -82,15 +82,7 @@ class SequenceResource
*/
public function getGraph()
{
return $this->graph;
}
/**
* @return Graph
*/
public function getUnserializeGraph()
{
return unserialize($this->graph);
return $this->getSequence()->getGraph();
}
/**
@ -98,50 +90,47 @@ class SequenceResource
*/
public function hasGraph()
{
return !empty($this->graph) ? true : false;
return !empty($this->getSequence()->getGraph()) ? true : false;
}
/**
* @param string $graph
*
* @return SequenceResource
* @return int
*/
public function setGraph($graph)
public function getResourceId()
{
$this->graph = $graph;
return $this;
return $this->resourceId;
}
/**
* @param string $graph
* @param int $resourceId
*
* @return SequenceResource
* @return $this
*/
public function setGraphAndSerialize($graph)
public function setResourceId($resourceId)
{
$this->setGraph(serialize($graph));
$this->resourceId = $resourceId;
return $this;
}
/**
* @return int
* @return Sequence
*/
public function getResourceId()
public function getSequence()
{
return $this->resourceId;
return $this->sequence;
}
/**
* @param int $resourceId
*
* @param mixed $sequence
* @return $this
*/
public function setResourceId($resourceId)
public function setSequence(Sequence $sequence)
{
$this->resourceId = $resourceId;
$this->sequence = $sequence;
return $this;
}
}

Loading…
Cancel
Save