image = $image; } public function get_image() { return $this->image; } } class ImageInfoBoxBuildingEvent extends Event { var $parts = array(); var $image; var $user; public function ImageInfoBoxBuildingEvent(Image $image, User $user) { $this->image = $image; $this->user = $user; } public function add_part($html, $position=50) { while(isset($this->parts[$position])) $position++; $this->parts[$position] = $html; } } class ImageInfoSetEvent extends Event { var $image; public function ImageInfoSetEvent(Image $image) { $this->image = $image; } } class ImageAdminBlockBuildingEvent extends Event { var $parts = array(); var $image = null; var $user = null; public function ImageAdminBlockBuildingEvent(Image $image, User $user) { $this->image = $image; $this->user = $user; } public function add_part(/*string*/ $html, /*int*/ $position=50) { while(isset($this->parts[$position])) $position++; $this->parts[$position] = $html; } } class ViewImage extends Extension { public function onPageRequest(PageRequestEvent $event) { global $page, $user; if( $event->page_matches("post/prev") || $event->page_matches("post/next") ) { $image_id = int_escape($event->get_arg(0)); if(isset($_GET['search'])) { $search_terms = explode(' ', $_GET['search']); $query = "#search=".url_escape($_GET['search']); } else { $search_terms = array(); $query = null; } $image = Image::by_id($image_id); if(is_null($image)) { $this->theme->display_error($page, "Image not found", "Image $image_id could not be found"); return; } if($event->page_matches("post/next")) { $image = $image->get_next($search_terms); } else { $image = $image->get_prev($search_terms); } if(is_null($image)) { $this->theme->display_error($page, "Image not found", "No more images"); return; } $page->set_mode("redirect"); $page->set_redirect(make_link("post/view/{$image->id}", $query)); } if($event->page_matches("post/view")) { $image_id = int_escape($event->get_arg(0)); $image = Image::by_id($image_id); if(!is_null($image)) { send_event(new DisplayingImageEvent($image)); $iabbe = new ImageAdminBlockBuildingEvent($image, $user); send_event($iabbe); ksort($iabbe->parts); $this->theme->display_admin_block($page, $iabbe->parts); } else { $this->theme->display_error($page, "Image not found", "No image in the database has the ID #$image_id"); } } if($event->page_matches("post/set")) { if(!isset($_POST['image_id'])) return; $image_id = int_escape($_POST['image_id']); send_event(new ImageInfoSetEvent(Image::by_id($image_id))); $page->set_mode("redirect"); $page->set_redirect(make_link("post/view/$image_id", url_escape($_POST['query']))); } } public function onDisplayingImage(DisplayingImageEvent $event) { global $user; $iibbe = new ImageInfoBoxBuildingEvent($event->get_image(), $user); send_event($iibbe); ksort($iibbe->parts); $this->theme->display_page($event->get_image(), $iibbe->parts); } } ?>