@@ -254,7 +254,26 @@ return $outlines; } +/** + * Helper function: return an array of available outlines as (volume_id => title). + */ +function _list_outlines_parents(){ + static $outlines_parents = NULL; + + if (empty($outlines_parents)) { + $result = db_query("SELECT ov.volume_id, ov.title, onodes.nid FROM {outline_volume} AS ov LEFT JOIN {outline_nodes} AS onodes ON (ov.volume_id = onodes.volume_id) WHERE onodes.parent = 0 ORDER BY ov.title ASC"); + $outlines = array(); + while ($volume = db_fetch_object($result)) { + $outlines_parents[$volume->volume_id] = array( + 'title' => $volume->title, + 'nid' => $volume->nid, + ); + } + } + return $outlines_parents; +} + /** * Helper function: generate a select form listing available outlines. */ @@ -1403,10 +1422,10 @@ function outline_admin_overview() { $output = ''; - $all_outlines = _list_outlines(); + $all_outlines = _list_outlines_parents(); $rows = array(); - foreach ($all_outlines as $nid => $title) { - $rows[] = array(l($title, 'node/'. $nid), l(t('administer'), 'admin/content/outline/'. $nid)); + foreach ($all_outlines as $volume_id => $outline) { + $rows[] = array(l($outline['title'], 'node/'. $outline['nid']), l(t('administer'), 'admin/content/outline/'. $outline['nid'])); } if (count($rows)) { $headers = array(t('Outline'), t('Operations'));