. * --------------------------------------------------------------------- */ $AJAX_INCLUDE = 1; include ("../inc/includes.php"); header("Content-Type: application/json; charset=UTF-8"); Html::header_nocache(); Session::checkLoginUser(); if (isset($_GET['node'])) { $nodes = []; // Get ancestors of current entity $ancestors = getAncestorsOf('glpi_entities', $_SESSION['glpiactive_entity']); // Root node if ($_GET['node'] == -1) { foreach ($_SESSION['glpiactiveprofile']['entities'] as $entity) { $ID = $entity['id']; $is_recursive = $entity['is_recursive']; $path = [ // append r for root nodes, id are uniques in jstree. // so, in case of presence of this id in subtree of other nodes, // it will be removed from root nodes 'id' => $ID.'r', 'text' => Dropdown::getDropdownName("glpi_entities", $ID) ]; if ($is_recursive) { $result2 = $DB->request([ 'FROM' => 'glpi_entities', 'COUNT' => 'cpt', 'WHERE' => ['entities_id' => $ID] ]); $result2 = $result2->next(); if ($result2['cpt'] > 0) { $path['children'] = true; //apend a i tag (one of shortest tags) to have the is_recursive link $path['text'].= ''; if (isset($ancestors[$ID])) { $path['state']['opened'] = 'true'; } } } $nodes[] = $path; } } else { // standard node $node_id = $_GET['node']; $iterator = $DB->request([ 'SELECT' => [ 'ent.id', 'ent.name', 'ent.sons_cache', 'COUNT' => 'sub_entities.id AS nb_subs' ], 'FROM' => 'glpi_entities AS ent', 'LEFT JOIN' => [ 'glpi_entities AS sub_entities' => [ 'ON' => [ 'sub_entities' => 'entities_id', 'ent' => 'id' ] ] ], 'WHERE' => ['ent.entities_id' => $node_id], 'GROUPBY' => ['ent.id', 'ent.name', 'ent.sons_cache'], 'ORDERBY' => 'name' ]); while ($row = $iterator->next()) { $path = [ 'id' => $row['id'], 'text' => $row['name'] ]; if ($row['nb_subs'] > 0) { //apend a i tag (one of shortest tags) to have the is_recursive link $path['text'].= ''; $path['children'] = true; if (isset($ancestors[$row['id']])) { $path['state']['opened'] = 'true'; } } $nodes[] = $path; } } echo json_encode($nodes); }