diff --git a/ext/random_list/main.php b/ext/random_list/main.php index 609766fb..46c49801 100644 --- a/ext/random_list/main.php +++ b/ext/random_list/main.php @@ -15,24 +15,43 @@ class RandomList extends Extension { global $config, $page; if($event->page_matches("random")) { + if(isset($_GET['search'])) { + // implode(explode()) to resolve aliases and sanitise + $search = url_escape(Tag::implode(Tag::explode($_GET['search'], false))); + if(empty($search)) { + $page->set_mode("redirect"); + $page->set_redirect(make_link("random")); + } + else { + $page->set_mode("redirect"); + $page->set_redirect(make_link('random/'.$search)); + } + return; + } + + if($event->count_args() == 0) { + $search_terms = array(); + } + else if($event->count_args() == 1) { + $search_terms = explode(' ', $event->get_arg(0)); + } + else { + throw new SCoreException("Error: too many arguments."); + } + // set vars - $page->title = "Random Images"; $images_per_page = $config->get_int("random_images_list_count", 12); $random_images = array(); - $random_html = "Refresh the page to view more images -
"; // generate random images - for ($i = 0; $i < $images_per_page; $i++) - array_push($random_images, Image::by_random()); + for ($i = 0; $i < $images_per_page; $i++) { + $random_image = Image::by_random($search_terms); + if (!$random_image) continue; + array_push($random_images, $random_image); + } - // create html to display images - foreach ($random_images as $image) - $random_html .= $this->theme->build_thumb_html($image); - - // display it - $random_html .= "
"; - $page->add_block(new Block("Random Images", $random_html)); + $this->theme->set_page($search_terms); + $this->theme->display_page($page, $random_images); } } diff --git a/ext/random_list/theme.php b/ext/random_list/theme.php index b3baf1ad..dd0f1d25 100644 --- a/ext/random_list/theme.php +++ b/ext/random_list/theme.php @@ -1,4 +1,56 @@ search_terms = $search_terms; + } + + /** + * @param Page $page + * @param Image[] $images + */ + public function display_page(Page $page, $images) { + $page->title = "Random Images"; + + $html = "Refresh the page to view more images"; + if (count($images)) { + $html .= "
"; + + foreach ($images as $image) + $html .= $this->build_thumb_html($image); + + $html .= "
"; + } else { + $html .= "

No images were found to match the search criteria"; + } + + $page->add_block(new Block("Random Images", $html)); + + $nav = $this->build_navigation($this->search_terms); + $page->add_block(new Block("Navigation", $nav, "left", 0)); + } + + /** + * @param string[] $search_terms + * @return string + */ + protected function build_navigation($search_terms) { + $h_search_string = html_escape(implode(" ", $search_terms)); + $h_search_link = make_link("random"); + $h_search = " +

+ + + +
+ "; + + return $h_search; + } +}