コード例 #1
0
 public function testSort()
 {
     $graph = new Structures_Graph();
     $name1 = 'node1';
     $node1 = new Structures_Graph_Node();
     $node1->setData($name1);
     $graph->addNode($node1);
     $name11 = 'node11';
     $node11 = new Structures_Graph_Node();
     $node11->setData($name11);
     $graph->addNode($node11);
     $node1->connectTo($node11);
     $name12 = 'node12';
     $node12 = new Structures_Graph_Node();
     $node12->setData($name12);
     $graph->addNode($node12);
     $node1->connectTo($node12);
     $name121 = 'node121';
     $node121 = new Structures_Graph_Node();
     $node121->setData($name121);
     $graph->addNode($node121);
     $node12->connectTo($node121);
     $name2 = 'node2';
     $node2 = new Structures_Graph_Node();
     $node2->setData($name2);
     $graph->addNode($node2);
     $name21 = 'node21';
     $node21 = new Structures_Graph_Node();
     $node21->setData($name21);
     $graph->addNode($node21);
     $node2->connectTo($node21);
     $nodes = Structures_Graph_Manipulator_TopologicalSorter::sort($graph);
     $this->assertCount(2, $nodes[0]);
     $this->assertEquals('node1', $nodes[0][0]->getData());
     $this->assertEquals('node2', $nodes[0][1]->getData());
     $this->assertCount(3, $nodes[1]);
     $this->assertEquals('node11', $nodes[1][0]->getData());
     $this->assertEquals('node12', $nodes[1][1]->getData());
     $this->assertEquals('node21', $nodes[1][2]->getData());
     $this->assertCount(1, $nodes[2]);
     $this->assertEquals('node121', $nodes[2][0]->getData());
 }
コード例 #2
0
 function test_metadata_key_exists()
 {
     $this->_graph = new Structures_Graph();
     $data = 1;
     $node = new Structures_Graph_Node();
     $node->setMetadata('5', $data);
     $this->assertTrue($node->metadataKeyExists('5'));
     $this->assertFalse($node->metadataKeyExists('1'));
 }
コード例 #3
0
ファイル: toba_datos_relacion.php プロジェクト: emma5021/toba
 /**
  * Retorna un grafo representando un conjunto de tablas y sus relaciones
  * @return Structures_Graph
  */
 static function grafo_relaciones($tablas, $relaciones)
 {
     $grafo = new Structures_Graph(true);
     // Se construyen los nodos
     $obj = array();
     $nodo = null;
     foreach ($tablas as $tabla) {
         unset($nodo);
         $nodo = new Structures_Graph_Node();
         $proveedor = isset($tabla['objeto_proveedor']) ? $tabla['objeto_proveedor'] : $tabla['objeto'];
         $obj[$proveedor] = $nodo;
         $nodo->setData($tabla);
         $grafo->addNode($obj[$proveedor]);
     }
     //Se agregan los arcos
     foreach ($relaciones as $asoc) {
         $padre = $asoc['padre_objeto'];
         $hijo = $asoc['hijo_objeto'];
         $obj[$padre]->connectTo($obj[$hijo]);
     }
     return $grafo;
 }
コード例 #4
0
 function get_grafo()
 {
     $grafo = new Structures_Graph(true);
     $perfiles = toba_info_permisos::get_perfiles_funcionales($this->s__filtro['proyecto']);
     //Nodos
     $miembros = array();
     foreach ($perfiles as $perfil) {
         $nodo = new Structures_Graph_Node();
         $nodo->setData($perfil);
         $nodos[$perfil['usuario_grupo_acc']] =& $nodo;
         $grafo->addNode($nodo);
         unset($nodo);
         //Anulo el nodo, de otra manera sobre escribe todos con los valores del ultimo setData (weird)
     }
     //Relaciones
     foreach ($perfiles as $perfil) {
         //Necesita pasarle la conexion porque aun no termino la transacción
         $miembros = toba_info_permisos::get_perfiles_funcionales_miembros($perfil['proyecto'], $perfil['usuario_grupo_acc'], toba::db());
         foreach ($miembros as $miembro) {
             $nodos[$perfil['usuario_grupo_acc']]->connectTo($nodos[$miembro['usuario_grupo_acc_pertenece']]);
         }
     }
     return $grafo;
 }