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 = " + +
ID | User | IP | Date | Event | Entry |
---|---|---|---|---|---|
{$event['id']} | +{$event['owner_id']} | +{$event['owner_ip']} | +{$event['date']} | +{$event['event']} | +{$event['entry']} | +