public static function getTree(array $ids, array $data = null, $level = 1, $language = null)
{
// redefine
$level = (int) $level;
$language = $language !== null ? (string) $language : BL::getWorkingLanguage();
// get data
$data[$level] = (array) BackendModel::getContainer()->get('database')->getRecords('SELECT
i.id, i.title, i.parent_id, i.navigation_title, i.type, i.hidden, i.data,
m.url, m.data AS meta_data,
IF(COUNT(e.id) > 0, "Y", "N") AS has_extra,
GROUP_CONCAT(b.extra_id) AS extra_ids,
IF(COUNT(p.id), "Y", "N") AS has_children
FROM pages AS i
INNER JOIN meta AS m ON i.meta_id = m.id
LEFT OUTER JOIN pages_blocks AS b ON b.revision_id = i.revision_id
LEFT OUTER JOIN modules_extras AS e ON e.id = b.extra_id AND e.type = ?
LEFT OUTER JOIN pages AS p ON p.parent_id = i.id AND p.status = "active" AND p.hidden = "N"
AND p.language = i.language
WHERE i.parent_id IN (' . implode(', ', $ids) . ')
AND i.status = ? AND i.language = ?
GROUP BY i.revision_id
ORDER BY i.sequence ASC', array('block', 'active', $language), 'id');
// get the childIDs
$childIds = array_keys($data[$level]);
// build array
if (!empty($data[$level])) {
return self::getTree($childIds, $data, ++$level, $language);
} else {
// cleanup
unset($data[$level]);
}
// return
return $data;
}