auth->check_module_permissions('monitor'); $app->load('finediff'); // Loading the template $app->uses('tpl'); $app->tpl->newTemplate("form.tpl.htm"); $app->tpl->setInclude('content_tpl', 'templates/dataloghistory_view.htm'); $app->load_language_file('web/monitor/lib/lang/'.$_SESSION['s']['language'].'_dataloghistory_view.lng'); require('lib/lang/'.$_SESSION['s']['language'].'_dataloghistory_view.lng'); $app->tpl->setvar($wb); $id = intval($_GET['id']); $record = $app->db->queryOneRecord('SELECT * FROM sys_datalog WHERE datalog_id = ?', $id); $out['id'] = $id; $out['timestamp'] = date($app->lng('conf_format_datetime'), $record['tstamp']); $out['table'] = $record['dbtable']; $out['action_char'] = $record['action']; $out['action_name'] = $app->lng($record['action']); $out['session_id'] = $record['session_id']; if(!$data = unserialize(stripslashes($record['data']))) { $data = unserialize($record['data']); } switch ($record['action']) { case 'i': $inserts = array(); foreach ($data['new'] as $key=>$value) { $inserts[] = array( 'key' => $key, 'value' => nl2br($value), ); } $app->tpl->setLoop('inserts', $inserts); break; case 'u': $updates = array(); foreach ($data['new'] as $key=>$value) { if ($value != $data['old'][$key]) { $old = $data['old'][$key]; $new = $value; $changes = show_diff_if_needed($old, $new); $updates[] = array( 'key' => $key, 'is_diff' => $changes['is_diff'], 'old' => nl2br($changes['old']), 'new' => nl2br($changes['new']), 'diff' => nl2br($changes['diff']), ); } } if (count($updates) > 0) { $app->tpl->setLoop('updates', $updates); } else { $out['no_changes'] = true; } break; case 'd': $deletes = array(); foreach ($data['old'] as $key=>$value) { $deletes[] = array( 'key' => $key, 'value' => nl2br($value), ); } $app->tpl->setLoop('deletes', $deletes); break; } $app->tpl->setVar($out); $app->tpl->setVar('can_undo', ($out['action_char'] === 'u' || $out['action_char'] === 'd')); $app->tpl_defaults(); $app->tpl->pparse(); function show_diff_if_needed($old, $new) { global $app; $diff_min_lines = 6; if (substr_count($old, "\n") >= $diff_min_lines || substr_count($new, "\n") >= $diff_min_lines) { $opcodes = FineDiff::getDiffOpcodes($old, $new); $html = FineDiff::renderUTF8DiffToHTMLFromOpcodes($old, $opcodes); return array('is_diff'=>true, 'old'=>'', 'new'=>'', 'diff'=>$html); } else { return array('is_diff'=>false, 'old'=>$old, 'new'=>$new, 'diff'=>''); } } ?>