make favorites work with 2.3
This commit is contained in:
		
							parent
							
								
									7336ff2b22
								
							
						
					
					
						commit
						e29db93834
					
				@ -16,103 +16,106 @@ class FavoriteSetEvent extends Event {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Favorites extends Extension {
 | 
					class Favorites extends SimpleExtension {
 | 
				
			||||||
	var $theme;
 | 
						public function onInitExt($event) {
 | 
				
			||||||
 | 
							global $config;
 | 
				
			||||||
	public function receive_event($event) {
 | 
							if($config->get_int("ext_favorites_version", 0) < 1) {
 | 
				
			||||||
		if(is_null($this->theme)) $this->theme = get_theme_object("favorites", "FavoritesTheme");
 | 
								$this->install();
 | 
				
			||||||
 | 
					 | 
				
			||||||
		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)"));
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						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() {
 | 
						private function install() {
 | 
				
			||||||
		global $database;
 | 
							global $database;
 | 
				
			||||||
		global $config;
 | 
							global $config;
 | 
				
			||||||
@ -124,7 +127,7 @@ class Favorites extends Extension {
 | 
				
			|||||||
				CREATE TABLE user_favorites (
 | 
									CREATE TABLE user_favorites (
 | 
				
			||||||
					image_id INTEGER NOT NULL,
 | 
										image_id INTEGER NOT NULL,
 | 
				
			||||||
					user_id INTEGER NOT NULL,
 | 
										user_id INTEGER NOT NULL,
 | 
				
			||||||
					created_at DATETIME NOT NULL,,
 | 
										created_at DATETIME NOT NULL,
 | 
				
			||||||
					UNIQUE(image_id, user_id),
 | 
										UNIQUE(image_id, user_id),
 | 
				
			||||||
					INDEX(image_id)
 | 
										INDEX(image_id)
 | 
				
			||||||
				)
 | 
									)
 | 
				
			||||||
@ -159,5 +162,4 @@ class Favorites extends Extension {
 | 
				
			|||||||
		return $result->GetArray();
 | 
							return $result->GetArray();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
add_event_listener(new Favorites());
 | 
					 | 
				
			||||||
?>
 | 
					?>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,71 +1,43 @@
 | 
				
			|||||||
<?php
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class FavoritesTheme extends Themelet {
 | 
					class FavoritesTheme extends Themelet {
 | 
				
			||||||
	public function get_voter_html($image, $is_favorited) {
 | 
						public function get_voter_html(Image $image, $is_favorited) {
 | 
				
			||||||
		$i_image_id = int_escape($image->id);
 | 
							global $page, $user;
 | 
				
			||||||
		$i_favorites = int_escape($image->favorites);
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		global $user;
 | 
					 | 
				
			||||||
		$username = $user->name;
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		$html = "
 | 
					 | 
				
			||||||
			Favorites: $i_favorites
 | 
					 | 
				
			||||||
			<br>
 | 
					 | 
				
			||||||
			<br>";
 | 
					 | 
				
			||||||
			
 | 
					 | 
				
			||||||
			if (!$is_favorited)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				$html .= "<p><form action='".make_link("change_favorite")."' method='POST'>
 | 
					 | 
				
			||||||
			<input type='hidden' name='image_id' value='$i_image_id'>
 | 
					 | 
				
			||||||
			<input type='hidden' name='favorite_action' value='set'>
 | 
					 | 
				
			||||||
			<input type='submit' value='Favorite'>
 | 
					 | 
				
			||||||
			</form></p>";
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			else
 | 
					 | 
				
			||||||
			{			
 | 
					 | 
				
			||||||
				$html .= "<p><form action='".make_link("change_favorite")."' method='POST'>
 | 
					 | 
				
			||||||
			<input type='hidden' name='image_id' value='$i_image_id'>
 | 
					 | 
				
			||||||
			<input type='hidden' name='favorite_action' value='unset'>
 | 
					 | 
				
			||||||
			<input type='submit' value='Un-Favorite'>
 | 
					 | 
				
			||||||
			</form></p>";
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			
 | 
					 | 
				
			||||||
			$pos = strpos($username, ' ');
 | 
					 | 
				
			||||||
			if ($pos === false) {
 | 
					 | 
				
			||||||
				$html .= "<br><a href='".make_link("post/list/favorited_by=$username/1")."'>Show my favorites</a><br><br>";
 | 
					 | 
				
			||||||
			} else {
 | 
					 | 
				
			||||||
				$userid = $user->id;
 | 
					 | 
				
			||||||
				$html .= "<br><a href='".make_link("post/list/favorited_by_userno=$userid/1")."'>Show my favorites</a><br><br>";
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		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
 | 
					 | 
				
			||||||
			<br><br>";
 | 
					 | 
				
			||||||
		return $html;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public function show_favorite_marks($username_array) {
 | 
					 | 
				
			||||||
		$html = '';
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
		foreach ($username_array as $row) {
 | 
					 | 
				
			||||||
			$username = $row['name'];
 | 
					 | 
				
			||||||
			$html .= "<a href='".make_link("user/$username")."'>$username</a><br>";
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		if ($html == '') {
 | 
					 | 
				
			||||||
			$html = 'Not favorited yet';
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		return $html;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							$i_image_id = int_escape($image->id);
 | 
				
			||||||
 | 
							if(!$is_favorited) {
 | 
				
			||||||
 | 
								$html = "<form action='".make_link("change_favorite")."' method='POST'>
 | 
				
			||||||
 | 
									<input type='hidden' name='image_id' value='$i_image_id'>
 | 
				
			||||||
 | 
									<input type='hidden' name='favorite_action' value='set'>
 | 
				
			||||||
 | 
									<input type='submit' value='Favorite'>
 | 
				
			||||||
 | 
									</form>
 | 
				
			||||||
 | 
								";
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
								$html = "<form action='".make_link("change_favorite")."' method='POST'>
 | 
				
			||||||
 | 
									<input type='hidden' name='image_id' value='$i_image_id'>
 | 
				
			||||||
 | 
									<input type='hidden' name='favorite_action' value='unset'>
 | 
				
			||||||
 | 
									<input type='submit' value='Un-Favorite'>
 | 
				
			||||||
 | 
									</form>
 | 
				
			||||||
 | 
								";
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							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 .= "<br><a href='".make_link("user/$username")."'>$username</a>";
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							$page->add_block(new Block("Favorited by", $html, "left", 25));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
?>
 | 
					?>
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user