From 5bec0b6ba85b494e93955881c93f008bb25a6543 Mon Sep 17 00:00:00 2001 From: shish Date: Fri, 24 Aug 2007 22:34:17 +0000 Subject: [PATCH] event log to stable before it becomes incompatible git-svn-id: file:///home/shish/svn/shimmie2/branches/branch_2.1@479 7f39781d-f577-437e-ae19-be835c7a54ca --- contrib/event_log/main.php | 82 +++++++++++++++++++++++++++++++++++++ contrib/event_log/theme.php | 37 +++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 contrib/event_log/main.php create mode 100644 contrib/event_log/theme.php diff --git a/contrib/event_log/main.php b/contrib/event_log/main.php new file mode 100644 index 00000000..5ec532c7 --- /dev/null +++ b/contrib/event_log/main.php @@ -0,0 +1,82 @@ + + * Link: http://trac.shishnet.org/shimmie2/ + * License: GPLv2 + * Description: A log of things that happen, for abuse tracking + */ + +class EventLog extends Extension { + var $theme; + + public function receive_event($event) { + if(is_null($this->theme)) $this->theme = get_theme_object("event_log", "EventLogTheme"); + + if(is_a($event, 'InitExtEvent')) { + $this->setup(); + } + + if(is_a($event, 'PageRequestEvent') && $event->page_name == "event_log") { + global $user; + if($user->is_admin()) { + global $database; + $events = $database->db->GetAll("SELECT * FROM event_log WHERE date > date_sub(now(), interval 1 day) ORDER BY date DESC"); + $this->theme->display_page($event->page, $events); + } + else { + $this->theme->display_error($event->page, "Denied", "Only admins can see the event log"); + } + } + if(is_a($event, 'UserBlockBuildingEvent')) { + if($event->user->is_admin()) { + $event->add_link("Event Log", make_link("event_log")); + } + } + + global $user; // bad + if(is_a($event, 'WikiUpdateEvent')) { + $this->add_to_log($event->user, 'Wiki Update', "Edited '{$event->page->title}'"); + } + if(is_a($event, 'ConfigSaveEvent')) { + $this->add_to_log($user, 'Config Save', "Updated the board config"); + } + if(is_a($event, 'ImageDeletionEvent')) { + $this->add_to_log($user, 'Image Deletion', "Deleted image {$event->image->id} (tags: {$event->image->get_tag_list()})"); + } + if(is_a($event, 'SourceSetEvent')) { + $this->add_to_log($user, 'Source Set', "Source for image #{$event->image_id} set to '{$event->source}'"); + } + if(is_a($event, 'TagSetEvent')) { + $this->add_to_log($user, 'Tags Set', "Tags for image #{$event->image_id} set to '{$event->tags}'"); + } + } + + private function add_to_log($user, $event, $entry) { + global $database; + + $database->execute(" + INSERT INTO event_log (owner_id, owner_ip, date, event, entry) + VALUES (?, ?, now(), ?, ?)", + array($user->id, $_SERVER['REMOTE_ADDR'], $event, $entry)); + } + + private function setup() { + global $database; + global $config; + + if($config->get_int("ext_event_log_version", 0) < 1) { + $database->Execute("CREATE TABLE event_log ( + id int(11) NOT NULL auto_increment primary key, + owner_id int(11) NOT NULL, + owner_ip char(15) NOT NULL, + date datetime NOT NULL, + event varchar(32) NOT NULL, + entry varchar(255) NOT NULL + )"); + $config->set_int("ext_event_log_version", 1); + } + } +} +add_event_listener(new EventLog()); +?> diff --git a/contrib/event_log/theme.php b/contrib/event_log/theme.php new file mode 100644 index 00000000..5322d544 --- /dev/null +++ b/contrib/event_log/theme.php @@ -0,0 +1,37 @@ +set_title("Event Log"); + $page->set_heading("Event Log"); + $page->add_block(new NavBlock()); + + $table = " + + + + "; + foreach($events as $event) { + $table .= " + + + + + + + + + "; + } + $table .= "
IDUserIPDateEventEntry
{$event['id']}{$event['owner_id']}{$event['owner_ip']}{$event['date']}{$event['event']}{$event['entry']}
"; + $page->add_block(new Block("Log Contents", $table)); + } +} +?>