From 28fd3e311f2d08252b1dc2a6e6f6b74771d3982e Mon Sep 17 00:00:00 2001 From: Shish Date: Thu, 13 Aug 2009 19:26:23 +0100 Subject: [PATCH] replace numeric_score 'favorite' with 'upvoted_by=name' (and add the same for downvote) --- contrib/numeric_score/main.php | 23 ++++++++++++++++++++--- contrib/numeric_score/test.php | 8 ++++++++ ext/index/main.php | 3 +++ 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/contrib/numeric_score/main.php b/contrib/numeric_score/main.php index 2d76723d..30d6e052 100644 --- a/contrib/numeric_score/main.php +++ b/contrib/numeric_score/main.php @@ -69,10 +69,27 @@ class NumericScore implements Extension { if(preg_match("/^score(<|<=|=|>=|>)(\d+)$/", $event->term, $matches)) { $cmp = $matches[1]; $score = $matches[2]; - $event->set_querylet(new Querylet("numeric_score $cmp $score")); + $event->add_querylet(new Querylet("numeric_score $cmp $score")); } - if(preg_match("/^favou?rite$/", $event->term, $matches)) { - $event->set_querylet(new Querylet("images.id in (SELECT image_id FROM numeric_score_votes WHERE user_id=? AND score=1)", array($user->id))); + if(preg_match("/^upvoted_by=(.*)$/", $event->term, $matches)) { + $duser = User::by_name($matches[1]); + if(is_null($duser)) { + throw new SearchTermParseException( + "Can't find the user named ".html_escape($matches[1])); + } + $event->add_querylet(new Querylet( + "images.id in (SELECT image_id FROM numeric_score_votes WHERE user_id=? AND score=1)", + array($duser->id))); + } + if(preg_match("/^downvoted_by=(.*)$/", $event->term, $matches)) { + $duser = User::by_name($matches[1]); + if(is_null($duser)) { + throw new SearchTermParseException( + "Can't find the user named ".html_escape($matches[1])); + } + $event->add_querylet(new Querylet( + "images.id in (SELECT image_id FROM numeric_score_votes WHERE user_id=? AND score=-1)", + array($duser->id))); } } } diff --git a/contrib/numeric_score/test.php b/contrib/numeric_score/test.php index eebe0219..59b5a8d2 100644 --- a/contrib/numeric_score/test.php +++ b/contrib/numeric_score/test.php @@ -12,8 +12,16 @@ class NumericScoreTest extends ShimmieWebTestCase { # FIXME: "remove vote" button? # FIXME: test that up and down are hidden if already voted up or down + # test search by score $this->get_page("post/list/score=1/1"); $this->assertTitle("Image $image_id: pbx"); + + # test search by vote + $this->get_page("post/list/upvoted_by=demo/1"); + $this->assertTitle("Image $image_id: pbx"); + + $this->get_page("post/list/downvoted_by=demo/1"); + $this->assertTitle("Image $image_id: pbx"); $this->log_out(); $this->log_in_as_admin(); diff --git a/ext/index/main.php b/ext/index/main.php index 491fc42f..0f0da1e3 100644 --- a/ext/index/main.php +++ b/ext/index/main.php @@ -26,6 +26,9 @@ class SearchTermParseEvent extends Event { } } +class SearchTermParseException extends SCoreException { +} + class PostListBuildingEvent extends Event { var $search_terms = null;