From b628bcfa86e72a99c89dcdbe26ae65cbcc6d22d6 Mon Sep 17 00:00:00 2001 From: Shish Date: Sun, 25 Mar 2012 02:41:33 +0100 Subject: [PATCH] user deletion event, with vote deletion --- contrib/numeric_score/main.php | 25 +++++++++++++++++-------- ext/user/main.php | 10 ++++++++++ 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/contrib/numeric_score/main.php b/contrib/numeric_score/main.php index 78b0f83a..19f820e2 100644 --- a/contrib/numeric_score/main.php +++ b/contrib/numeric_score/main.php @@ -93,14 +93,7 @@ class NumericScore extends Extension { } if($event->page_matches("numeric_score/remove_votes_by") && $user->check_auth_token()) { if($user->is_admin()) { - $user_id = int_escape($_POST['user_id']); - $image_ids = $database->get_col("SELECT image_id FROM numeric_score_votes WHERE user_id=?", array($user_id)); - - $database->execute( - "DELETE FROM numeric_score_votes WHERE user_id=? AND image_id IN (".implode(",", $image_ids).")", - array($user_id)); - $database->execute( - "UPDATE images SET numeric_score=(SELECT SUM(score) FROM numeric_score_votes WHERE image_id=images.id) WHERE images.id IN (".implode(",", $image_ids).")"); + $this->delete_votes_by(int_escape($_POST['user_id'])); $page->set_mode("redirect"); $page->set_redirect(make_link()); } @@ -190,6 +183,22 @@ class NumericScore extends Extension { $database->execute("DELETE FROM numeric_score_votes WHERE image_id=:id", array("id" => $event->image->id)); } + public function onUserDeletion(UserDeletionEvent $event) { + $this->delete_votes_by($event->id); + } + + public function delete_votes_by(/*int*/ $user_id) { + global $database; + + $image_ids = $database->get_col("SELECT image_id FROM numeric_score_votes WHERE user_id=?", array($user_id)); + + $database->execute( + "DELETE FROM numeric_score_votes WHERE user_id=? AND image_id IN (".implode(",", $image_ids).")", + array($user_id)); + $database->execute( + "UPDATE images SET numeric_score=(SELECT SUM(score) FROM numeric_score_votes WHERE image_id=images.id) WHERE images.id IN (".implode(",", $image_ids).")"); + } + // FIXME: on user deletion // FIXME: on user vote nuke diff --git a/ext/user/main.php b/ext/user/main.php index 57288c27..4277fbef 100644 --- a/ext/user/main.php +++ b/ext/user/main.php @@ -40,6 +40,14 @@ class UserCreationEvent extends Event { } } +class UserDeletionEvent extends Event { + var $id; + + public function __construct($id) { + $this->id = $id; + } +} + class UserCreationException extends SCoreException {} class UserPage extends Extension { @@ -511,6 +519,8 @@ class UserPage extends Extension { ); } + send_event(new UserDeletionEvent($_POST['id'])); + $database->execute( "DELETE FROM users WHERE id = :id", array("id" => $_POST['id'])