'drupalforfirebug_get_exec_php_callback',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implementation of hook_nodeapi()
*/
function drupalforfirebug_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
global $dfp_runtime;
$nid = (isset($node->nid)) ? $node->nid : '*'. t('NEW') . '*';
$data = drupalforfirebug_array_compare((array) $dfp_runtime['drupalforfirebug_nodes']['original'][$node->type][$nid], (array) $node);
$output = drupalforfirebug_field_object('node', $nid, $op, $data);
drupalforfirebug_log($output, 'hook_nodeapi');
}
/**
* Implementation of hook_views_pre_view();
*/
function drupalforfirebug_views_pre_view(&$view, &$display_id) {
global $dfp_runtime;
$data = drupalforfirebug_array_compare((array) $dfp_runtime['drupalforfirebug_views']['original'][$view->name], (array) $view);
$output = drupalforfirebug_field_object('view', $view->name, NULL, $data);
drupalforfirebug_log($output, 'hook_views');
}
/**
* Implementation of hook_form_alter()
*/
function drupalforfirebug_form_alter(&$form, $form_state, $form_id) {
global $dfp_runtime;
if ($form_id != 'drupalforfirebug_execute_form') {
$form_modified = (array) $form;
$data = drupalforfirebug_array_compare($dfp_runtime['drupalforfirebug_forms']['original'][$form_id], $form_modified);
$output = drupalforfirebug_field_object('form', $form_id, NULL, $data);
drupalforfirebug_log($output, 'hook_form_alter');
}
}
/**
* Implementation of hook_user()
*/
function drupalforfirebug_user($op, &$edit, &$account, $category = NULL) {
global $dfp_runtime;
if (isset($account->uid)) {
$uid = $account->uid;
$name = $account->name;
} else {
$uid = '*' . t('NEW') . '*';
$name = '*' . t('NEW') . '*';
}
if (is_object($account)) {
$account_clone = drupal_clone($account);
$account_clone->pass = '**' . t('Not shown for security reasons') . '**';
$data = drupalforfirebug_array_compare((array) $account_clone, (array) $account_clone);
$output = drupalforfirebug_field_object('user', $uid, $op, $data);
drupalforfirebug_log($output, 'hook_user');
}
}
/**
* API Function to Record a Message to the Drupal Firebug Log
*/
function drupalforfirebug_log($message, $type = 'general') {
global $dfp_runtime;
$dfp_runtime['firebug_messages'][$type][] = $message;
}
/**
* Command Function to Record a Data Element to the Drupal Firebug Log
*/
function firep($element, $title = NULL) {
if ($title) {
drupalforfirebug_log(''.$title.':');
}
drupalforfirebug_log('
'. print_r($element, true) . '
', 'general');
}
/**
* Output Function to Return the Results of the Log
*/
function drupalforfirebug_get($panetype) {
global $dfp_runtime;
$output = '';
if (isset($dfp_runtime['firebug_messages'][$panetype])) {
foreach($dfp_runtime['firebug_messages'][$panetype] as $message) {
$output .= '
'. $message .'
';
}
unset($dfp_runtime['firebug_messages'][$panetype]);
return $output;
}
}
/**
* Output Function to Return the Results of the SQL Log
*/
function drupalforfirebug_get_sql_log() {
$output = '';
return $output;
}
/**
* Generates an Execute PHP Drupal For Firebug Form
**/
function drupalforfirebug_execute_form() {
$form['code'] = array(
'#type' => 'textarea',
'#description' => t('Enter PHP code for execution. Do not use <?php ?> tags.')
);
$form['op'] = array('#type' => 'submit', '#value' => t('Execute'));
$form['#redirect'] = FALSE;
$form['#action'] = url('admin/firebug/exec', array('absolute' => TRUE));
$form['#skip_duplicate_check'] = TRUE;
return $form;
}
function drupalforfirebug_get_php_exec_area() {
$output = '';
return $output;
}
function drupalforfirebug_get_php_exec($code = NULL) {
$output = '';
print $output;
exit();
} else {
if (!$code) {
$output .= '';
$output .= drupal_get_form('drupalforfirebug_execute_form');
$output .= '';
print $output;
exit();
} else {
$output = '';
// Run the PHP command, get output in variable
ob_start();
eval($code);
$eval_result = ob_get_contents();
ob_end_clean();
$output .= '
' . $eval_result . '
';
$output .= '';
$output .= '';
print $output;
exit();
}
}
}
/**
* Outputs a Execute PHP Form
*/
function drupalforfirebug_get_exec_php_callback() {
if (isset($_POST['code'])) {
$code = $_POST['code'];
} else {
$code = NULL;
}
return drupalforfirebug_get_php_exec($code);
}
/**
* Output Function to Return Hidden Div Containers in Footer
*/
function drupalforfirebug_footer() {
if (user_access('Access Firebug Debug')) {
$output = '
';
$output .= $form_alter_output = drupalforfirebug_get('hook_form_alter');
if (!$form_alter_output) { $output .= t('There was no form altering.'); }
$output .= '
';
$output .= '
';
$output .= $user_output = drupalforfirebug_get('hook_user');
if (!$user_output) { $output .= t('There was no user processing.'); }
$output .= '
';
$output .= '
';
$output .= $node_api_output = drupalforfirebug_get('hook_nodeapi');
if (!$node_api_output) { $output .= t('There was no node processing.'); }
$output .= '
';
$output .= '
';
if (module_exists('views')) {
$output .= $views_output = drupalforfirebug_get('hook_views');
if (!$views_output) { $output .= t('There was no views processing.'); }
} else {
$output .= t('The views module is not installed.');
}
$output .= '
";
}
}
return $output;
}
/**
* Specialized Array Data Style Function
*/
function drupalforfirebug_array_highlight_code($data, $depth = 0) {
// Smartly Handling Recursion for Objects
if (is_object($data)) {
$data = (array) $data;
static $refChain = array();
foreach ($refChain as $refVal) {
if ($refVal === $data) {
$data = array('**' . t('Recursion Detected') . '**');
}
}
array_push($refChain, $data);
}
$output = '';
foreach($data as $key => $value) {
if ((string) $key != '#firebug_style') {
if (isset($data['#firebug_style'])) {
$output .= drupalforfirebug_array_row_build($key, $value, $data['#firebug_style'][$key], $depth);
}
}
}
return $output;
}
/**
* Specialized Array Data Retrival Function
*/
function drupalforfirebug_array_compare_code($a, $b, $c = array()) {
// Create the Compared Data Object
$maxcount = count($a) > count($b) ? count($a) : count($b);
$akeys = is_array($a) ? array_keys($a) : array();
$bkeys = is_array($b) ? array_keys($b) : array();
for ($x = 0; $x < $maxcount; $x++) {
// Set the Proper Styling
if (isset($akeys[$x]) && array_key_exists($akeys[$x], array_flip($bkeys))) { // is it in B array?
if ($a[$akeys[$x]] === $b[$akeys[$x]]) {
$c['#firebug_style'][$akeys[$x]] = 'SAME';
} else {
$c['#firebug_style'][$akeys[$x]] = 'DIFFERENT';
}
} else { // not in B array, must be removed
if (isset($akeys[$x])) {
$c['#firebug_style'][$akeys[$x]] = 'REMOVED';
}
}
// Set the Proper Element
if (isset($akeys[$x]) && is_array($a[$akeys[$x]])) { // is b a valid array
if (isset($c[$akeys[$x]])) {
$c[$akeys[$x]] = drupalforfirebug_array_compare_code($a[$akeys[$x]], $b[$akeys[$x]], $c[$akeys[$x]]);
} else {
$c[$akeys[$x]] = drupalforfirebug_array_compare_code($a[$akeys[$x]], $b[$akeys[$x]], array());
}
} else {
if (isset($akeys[$x]) && array_key_exists($akeys[$x], array_flip($bkeys))) { // is it in B array?
if ($a[$akeys[$x]] === $b[$akeys[$x]]) {
$c[$akeys[$x]] = $a[$akeys[$x]];
} else {
$c[$akeys[$x]] = $b[$akeys[$x]];
}
} else { // not in B array, must be removed
if (isset($akeys[$x])) {
$c[$akeys[$x]] = $a[$akeys[$x]];
}
}
}
}
if (isset($bkeys[$x]) && isset($b[$bkeys[$x]])) { // does b have a valid argument
// Set the Proper Styling
if (array_key_exists($bkeys[$x], array_flip($akeys))) { // is it in A array?
// exists in the A array, already processed
} else {
$c[$bkeys[$x]] = $b[$bkeys[$x]];
$c['#firebug_style'][$bkeys[$x]] = 'ADDED';
}
// Set the Proper Element
if (isset($a[$bkeys[$x]]) && is_array($b[$bkeys[$x]])) { // is b a valid array
$c[$bkeys[$x]] = drupalforfirebug_array_compare_code($a[$bkeys[$x]], $b[$bkeys[$x]], $c[$bkeys[$x]]);
}
}
return $c;
}
// Array Handling Helper Function
function do_offset($level) {
$offset = ""; // offset for subarry
for ($i=1; $i<$level;$i++) {
$offset = $offset . "
";
}
return $offset;
}
// Array Handling Helper Function
function drupalforfirebug_show_array($array, $level, $sub){
$output = '';
if (is_array($array) == 1){ // check if input is an array
foreach($array as $key_val => $value) {
$offset = "";
if (is_array($value) == 1){ // array is multidimensional
$output .= "
";
$output .= drupalforfirebug_show_array($value, $level+1, 1);
}
else{ // (sub)array is not multidim
if ($sub != 1){ // first entry for subarray
$output .= "