rendered paste body<?php
define('WHITE', 0);
define('GREY', 1);
define('BLACK', 2);
$hooks['comment']['nodeapi'] = array();
$hooks['node']['nodeapi'] = array();
$hooks['taxonomy']['nodeapi']['after'] = array('comment');
$hooks['forum']['nodeapi']['before'] = array('node');
$hooks['poll']['nodeapi'] = array('before' => array('forum'), 'after' => array('taxonomy'));
$queue = $current_hook = array();
foreach ($hooks as $module => $element) {
$current_hook[$module] = $element['nodeapi'];
}
$colors = array();
foreach ($current_hook as $start => $hook) {
if (isset($hook['after'])) {
$colors[$start] = WHITE;
// edges pointing out from this vertex
foreach ($hook['after'] as $end) {
$adj[$start][$end] = 1;
if (!isset($adj[$end])) {
$adj[$end] = array();
$colors[$end] = WHITE;
}
}
}
if (isset($hook['before'])) {
$colors[$start] = WHITE;
// edges pointing to this vertex
if (!isset($adj[$start])) {
$adj[$start] = array();
}
foreach ($hook['before'] as $end) {
$adj[$end][$start] = 1;
}
}
}
function dfs(&$colors, $key, $adj_set = NULL) {
static $time = 1, $adj, $ordered = array();;
if (!isset($adj)) {
$adj = $adj_set;
return;
}
$colors[$key] = GREY;
foreach (array_keys($adj[$key]) as $new_key) {
if ($colors[$new_key] == WHITE) {
dfs($colors, $new_key);
}
}
$colors[$key] = BLACK;
$ordered[] = $key;
return $ordered;
}
$ordered = array();
dfs($c, NULL, $adj);
foreach (array_keys($adj) as $key) {
if ($colors[$key]['color'] == WHITE) {
$ordered = dfs($colors, $key);
}
}
var_dump($ordered);