From 77368cb03b28a7e132ad83ddc2ed5a59147f97d1 Mon Sep 17 00:00:00 2001
From: Shish
Date: Tue, 28 Jul 2009 11:21:41 +0100
Subject: [PATCH] make favorites work with 2.3
---
contrib/favorites/main.php | 194 ++++++++++++++++++------------------
contrib/favorites/theme.php | 98 +++++++-----------
2 files changed, 133 insertions(+), 159 deletions(-)
diff --git a/contrib/favorites/main.php b/contrib/favorites/main.php
index 55f4fc2e..c60f2864 100644
--- a/contrib/favorites/main.php
+++ b/contrib/favorites/main.php
@@ -16,103 +16,106 @@ class FavoriteSetEvent extends Event {
}
}
-class Favorites extends Extension {
- var $theme;
-
- public function receive_event($event) {
- if(is_null($this->theme)) $this->theme = get_theme_object("favorites", "FavoritesTheme");
-
- if(is_a($event, 'InitExtEvent')) {
- global $config;
- if($config->get_int("ext_favorites_version", 0) < 1) {
- $this->install();
- }
- }
-
- if(is_a($event, 'DisplayingImageEvent')) {
- global $user;
- if(!$user->is_anonymous()) {
-
- $user_id = $user->id;
- $image_id = $event->image->id;
-
- global $database;
-
- $is_favorited = false;
- $sqlresult = $database->execute("SELECT COUNT(*) AS ct FROM user_favorites WHERE user_id = ? AND image_id = ?", array($user_id, $image_id));
- if(!$sqlresult->EOF)
- {
- $is_favorited = $sqlresult->fields['ct'] > 0;
- }
-
- $html = $this->theme->get_voter_html($event->image, $is_favorited);
- } else {
- $html = $this->theme->show_anonymous_html($event->image);
- }
- $event->page->add_block(new Block("Favorites", $html, "left", 20));
-
- $html = $this->theme->show_favorite_marks($this->list_persons_who_have_favorited($event->image));
-
- $event->page->add_block(new Block("Favorited by", $html, "left", 25));
- }
-
- if(is_a($event, 'PageRequestEvent') && ($event->page_name == "change_favorite")) {
- if(!$event->user->is_anonymous()) {
- $image_id = int_escape($_POST['image_id']);
- if (($_POST['favorite_action'] == "set") || ($_POST['favorite_action'] == "unset")) {
- send_event(new FavoriteSetEvent($image_id, $event->user, ($_POST['favorite_action'] == "set")));
- }
- $event->page->set_mode("redirect");
- $event->page->set_redirect(make_link("post/view/$image_id"));
- }
- }
-
- if(is_a($event, 'ImageInfoSetEvent')) {
- global $user;
- if (($_POST['favorite_action'] == "set") || ($_POST['favorite_action'] == "unset")) {
- send_event(new FavoriteSetEvent($event->image_id, $user, ($_POST['favorite_action'] == "set")));
- }
- }
-
- if(is_a($event, 'FavoriteSetEvent')) {
- $this->add_vote($event->image_id, $event->user->id, $event->do_set);
- }
-
- if(is_a($event, 'ImageDeletionEvent')) {
- global $database;
- $database->execute("DELETE FROM user_favorites WHERE image_id=?", array($event->image->id));
- }
-
- if(is_a($event, 'ParseLinkTemplateEvent')) {
- $event->replace('$favorites', $event->image->favorites);
- }
-
- if(is_a($event, 'SearchTermParseEvent')) {
- $matches = array();
- if(preg_match("/favorites(<|>|<=|>=|=)(\d+)/", $event->term, $matches)) {
- $cmp = $matches[1];
- $favorites = $matches[2];
- $event->set_querylet(new Querylet("favorites $cmp $favorites"));
- }
- else if(preg_match("/favorited_by=(.*)/i", $event->term, $matches)) {
- global $database;
- $user = $database->get_user_by_name($matches[1]);
- if(!is_null($user)) {
- $user_id = $user->id;
- }
- else {
- $user_id = -1;
- }
-
- $event->set_querylet(new Querylet("images.id IN (SELECT image_id FROM user_favorites WHERE user_id = $user_id)"));
- }
- else if(preg_match("/favorited_by_userno=([0-9]+)/i", $event->term, $matches)) {
- $user_id = int_escape($matches[1]);
- $event->set_querylet(new Querylet("images.id IN (SELECT image_id FROM user_favorites WHERE user_id = $user_id)"));
- }
+class Favorites extends SimpleExtension {
+ public function onInitExt($event) {
+ global $config;
+ if($config->get_int("ext_favorites_version", 0) < 1) {
+ $this->install();
}
}
+ public function onImageAdminBlockBuilding($event) {
+ global $database, $page, $user;
+ if(!$user->is_anonymous()) {
+ $user_id = $user->id;
+ $image_id = $event->image->id;
+
+ $is_favorited = $database->db->GetOne(
+ "SELECT COUNT(*) AS ct FROM user_favorites WHERE user_id = ? AND image_id = ?",
+ array($user_id, $image_id)) > 0;
+
+ $event->add_part($this->theme->get_voter_html($event->image, $is_favorited));
+ }
+ }
+
+ public function onDisplayingImage($event) {
+ $people = $this->list_persons_who_have_favorited($event->image);
+ if(count($people) > 0) {
+ $html = $this->theme->display_people($people);
+ }
+ }
+
+ public function onPageRequest($event) {
+ global $page, $user;
+ if($event->page_matches("change_favorite") && !$user->is_anonymous()) {
+ $image_id = int_escape($_POST['image_id']);
+ if (($_POST['favorite_action'] == "set") || ($_POST['favorite_action'] == "unset")) {
+ send_event(new FavoriteSetEvent($image_id, $user, ($_POST['favorite_action'] == "set")));
+ }
+ $page->set_mode("redirect");
+ $page->set_redirect(make_link("post/view/$image_id"));
+ }
+ }
+
+ public function onImageInfoSet($event) {
+ global $user;
+ if(($_POST['favorite_action'] == "set") || ($_POST['favorite_action'] == "unset")) {
+ send_event(new FavoriteSetEvent($event->image_id, $user, ($_POST['favorite_action'] == "set")));
+ }
+ }
+
+ public function onFavoriteSet($event) {
+ global $user;
+ $this->add_vote($event->image_id, $user->id, $event->do_set);
+ }
+
+ public function onImageDeletion($event) {
+ global $database;
+ $database->execute("DELETE FROM user_favorites WHERE image_id=?", array($event->image->id));
+ }
+
+ public function onParseLinkTemplate($event) {
+ $event->replace('$favorites', $event->image->favorites);
+ }
+
+ public function onUserBlockBuilding($event) {
+ global $user;
+ if(strpos($user->name, ' ') === false) {
+ $username = url_escape($user->name);
+ $link = make_link("post/list/favorited_by=$username/1");
+ } else {
+ $userid = $user->id;
+ $link = make_link("post/list/favorited_by_userno=$userid/1");
+ }
+ $event->add_link("My Favorites", $link);
+ }
+
+ public function onSearchTermParse($event) {
+ $matches = array();
+ if(preg_match("/favorites(<|>|<=|>=|=)(\d+)/", $event->term, $matches)) {
+ $cmp = $matches[1];
+ $favorites = $matches[2];
+ $event->set_querylet(new Querylet("favorites $cmp $favorites"));
+ }
+ else if(preg_match("/favorited_by=(.*)/i", $event->term, $matches)) {
+ global $database;
+ $user = User::by_name($matches[1]);
+ if(!is_null($user)) {
+ $user_id = $user->id;
+ }
+ else {
+ $user_id = -1;
+ }
+
+ $event->add_querylet(new Querylet("images.id IN (SELECT image_id FROM user_favorites WHERE user_id = $user_id)"));
+ }
+ else if(preg_match("/favorited_by_userno=([0-9]+)/i", $event->term, $matches)) {
+ $user_id = int_escape($matches[1]);
+ $event->add_querylet(new Querylet("images.id IN (SELECT image_id FROM user_favorites WHERE user_id = $user_id)"));
+ }
+ }
+
+
private function install() {
global $database;
global $config;
@@ -124,7 +127,7 @@ class Favorites extends Extension {
CREATE TABLE user_favorites (
image_id INTEGER NOT NULL,
user_id INTEGER NOT NULL,
- created_at DATETIME NOT NULL,,
+ created_at DATETIME NOT NULL,
UNIQUE(image_id, user_id),
INDEX(image_id)
)
@@ -159,5 +162,4 @@ class Favorites extends Extension {
return $result->GetArray();
}
}
-add_event_listener(new Favorites());
?>
diff --git a/contrib/favorites/theme.php b/contrib/favorites/theme.php
index 6324a268..935c665e 100644
--- a/contrib/favorites/theme.php
+++ b/contrib/favorites/theme.php
@@ -1,71 +1,43 @@
id);
- $i_favorites = int_escape($image->favorites);
-
- global $user;
- $username = $user->name;
-
- $html = "
- Favorites: $i_favorites
-
-
";
-
- if (!$is_favorited)
- {
- $html .= "
";
- }
- else
- {
- $html .= "";
- }
-
- $pos = strpos($username, ' ');
- if ($pos === false) {
- $html .= "
Show my favorites
";
- } else {
- $userid = $user->id;
- $html .= "
Show my favorites
";
- }
- return $html;
- }
-
- public function show_anonymous_html($image) {
- $i_image_id = int_escape($image->id);
- $i_favorites = int_escape($image->favorites);
-
- $html = "
- Favorites: $i_favorites
-
";
- return $html;
- }
-
- public function show_favorite_marks($username_array) {
- $html = '';
-
- foreach ($username_array as $row) {
- $username = $row['name'];
- $html .= "$username
";
- }
-
- if ($html == '') {
- $html = 'Not favorited yet';
- }
-
- return $html;
+ public function get_voter_html(Image $image, $is_favorited) {
+ global $page, $user;
+ $i_image_id = int_escape($image->id);
+ if(!$is_favorited) {
+ $html = "
+ ";
+ }
+ else {
+ $html = "
+ ";
+ }
+
+ return $html;
+ }
+
+ public function display_people($username_array) {
+ global $page;
+
+ $i_favorites = count($username_array);
+ $html = "$i_favorites people:";
+
+ foreach($username_array as $row) {
+ $username = html_escape($row['name']);
+ $html .= "
$username";
+ }
+
+ $page->add_block(new Block("Favorited by", $html, "left", 25));
}
-
}
?>