<?php
|
|
include '../connection.php';
|
|
try {
|
$statement = $db->prepare('select * from list order by lft asc');
|
|
if(!$statement->execute()) {
|
throw new Exception(implode(', ', $statement->errorInfo()));
|
}
|
|
// fetch the flat result set from the database
|
$lists = $statement->fetchAll(PDO::FETCH_ASSOC);
|
|
// convert list result set to nested tree structure.
|
// create a dummy root node that will be the base of our tree structure
|
$root = array(
|
// all nodes in the result set should fall within these left/right bounds
|
'lft' => 0,
|
'rgt' => PHP_INT_MAX,
|
'children' => array()
|
);
|
|
$listStack = array(&$root);
|
$listCount = count($lists);
|
for($i = 0; $i < $listCount; $i++) {
|
$list = &$lists[$i];
|
|
$parent = &$listStack[count($listStack) - 1];
|
|
while($list['rgt'] > $parent['rgt']) {
|
// if the current list is not a child of parent, pop lists off the stack until we get to a list that is its parent
|
array_pop($listStack);
|
$parent = &$listStack[count($listStack) - 1];
|
}
|
// add the node to its parent node's "children" array
|
$parent['children'][] = &$list;
|
|
if($list['rgt'] - $list['lft'] > 2) { // if the node has children
|
$list['expanded'] = "1"; // nodes that have children are expanded by default
|
$list['children'] = array();
|
$listStack[] = &$list; // push the node on to the stack
|
} else if(empty($list['leaf'])) {
|
// for non leaf nodes that do not have any children we have to set "loaded" to true
|
// This prevents the TreeStore from trying to dynamically load content for these nodes when they are expanded
|
$list['loaded'] = "1";
|
unset($list['leaf']); // no need to return "leaf: null" to the client for non leaf nodes
|
}
|
}
|
|
// remove properties that are not needed by the UI (lft and rgt)
|
function removeTreeProperties(&$list) {
|
unset($list['lft']);
|
unset($list['rgt']);
|
if(isset($list['children'])) {
|
foreach($list['children'] as &$child) {
|
removeTreeProperties(&$child);
|
}
|
}
|
}
|
removeTreeProperties(&$root);
|
|
$jsonResult = array(
|
'success' => true,
|
'children' => $root['children']
|
);
|
} catch(Exception $e) {
|
$jsonResult = array(
|
'success' => false,
|
'message' => $e->getMessage()
|
);
|
}
|
|
echo json_encode($jsonResult);
|
|
?>
|