diff --git a/ext/image_view_counter/main.php b/ext/image_view_counter/main.php index 653bbd09..5e7fca1e 100644 --- a/ext/image_view_counter/main.php +++ b/ext/image_view_counter/main.php @@ -1,75 +1,32 @@ add_bool_option("image_viewcounter_adminonly", "Display view counter only to admin"); - - $event->panel->add_block($sb); - } - - # Adds view to database if needed public function onDisplayingImage(DisplayingImageEvent $event) - { - $imgid = $event->image->id; // determines image id - $this->addview($imgid); // adds a view - } - - # display views to user or admin below image if allowed - public function onImageInfoBoxBuilding(ImageInfoBoxBuildingEvent $event) - { - global $user, $config; - - $adminonly = $config->get_bool("image_viewcounter_adminonly"); // todo - if ($adminonly == false || ($adminonly && $user->can(Permissions::SEE_IMAGE_VIEW_COUNTS))) { - $event->add_part( - "Views:". - $this->get_view_count($event->image->id) . - "", - 38 - ); - } - } - - # Installs DB table - public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) - { - global $database, $config; - - // if the sql table doesn't exist yet, create it - if ($config->get_bool("image_viewcounter_installed") == false) { //todo - $database->create_table("image_views", " - id SCORE_AIPK, - image_id INTEGER NOT NULL, - user_id INTEGER NOT NULL, - timestamp INTEGER NOT NULL, - ipaddress SCORE_INET NOT NULL"); - $config->set_bool("image_viewcounter_installed", true); - } - } - - /** - * Adds a view to the item if needed - */ - private function addview(int $imgid) { global $database, $user; + $imgid = $event->image->id; + + // counts views from current IP in the last hour + $recent_from_ip = (int)$database->get_one( + " + SELECT COUNT(*) + FROM image_views + WHERE ipaddress=:ipaddress AND timestamp >:lasthour AND image_id =:image_id + ", + [ + "ipaddress" => $_SERVER['REMOTE_ADDR'], + "lasthour" => time() - $this->view_interval, + "image_id" => $imgid + ] + ); + // don't add view if person already viewed recently - if ($this->can_add_view($imgid) === false) { + if ($recent_from_ip > 0) { return; } @@ -88,80 +45,59 @@ class ImageViewCounter extends Extension ); } - /** - * Returns true if this IP hasn't recently viewed this image - */ - private function can_add_view(int $imgid) + public function onImageInfoBoxBuilding(ImageInfoBoxBuildingEvent $event) { - global $database; + global $user, $database; - // counts views from current IP in the last hour - $recent_from_ip = (int)$database->get_one( - " - SELECT COUNT(*) - FROM image_views - WHERE ipaddress=:ipaddress AND timestamp >:lasthour AND image_id =:image_id - ", - [ - "ipaddress" => $_SERVER['REMOTE_ADDR'], - "lasthour" => time() - $this->view_interval, - "image_id" => $imgid - ] - ); - - // if no views were found with the set criteria, return true - if ($recent_from_ip == 0) { - return true; - } else { - return false; - } - } - - /** - * Returns the int of the view count from the given image id - */ - private function get_view_count(int $imgid = 0) - { - global $database; - - if ($imgid == 0) { // return view count of all images - $view_count = (int)$database->get_one( - "SELECT COUNT(*) FROM image_views" - ); - } else { // return view count of specified image + if ($user->can(Permissions::SEE_IMAGE_VIEW_COUNTS)) { $view_count = (int)$database->get_one( "SELECT COUNT(*) FROM image_views WHERE image_id =:image_id", - ["image_id" => $imgid] + ["image_id" => $event->image->id] + ); + + $event->add_part( + "Views:$view_count", + 38 ); } - - // returns the count as int - return $view_count; } - - //All of this below is new stuff - + + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) + { + global $database, $config; + + if ($config->get_bool("image_viewcounter_installed") == false) { //todo + $database->create_table("image_views", " + id SCORE_AIPK, + image_id INTEGER NOT NULL, + user_id INTEGER NOT NULL, + timestamp INTEGER NOT NULL, + ipaddress SCORE_INET NOT NULL"); + $config->set_bool("image_viewcounter_installed", true); + } + } + public function onPageRequest(PageRequestEvent $event) { - global $config, $database, $user, $page; + global $database; if ($event->page_matches("popular_images")) { - $sql = "SELECT image_id , count(*) as total_views - FROM image_views,images - WHERE image_views.image_id = image_views.image_id - AND image_views.image_id = images.id - GROUP BY image_views.image_id - ORDER BY total_views desc"; - $result = $database->get_col($sql); - $images = []; + $sql = " + SELECT image_id, count(*) AS total_views + FROM image_views, images + WHERE image_views.image_id = image_views.image_id + AND image_views.image_id = images.id + GROUP BY image_views.image_id + ORDER BY total_views DESC + "; + $result = $database->get_col($sql); + $images = []; foreach ($result as $id) { - $images[] = Image::by_id(intval($id)); + $images[] = Image::by_id(intval($id)); } $this->theme->view_popular($images); } } - - public function onPageSubNavBuilding(PageSubNavBuildingEvent $event) { @@ -169,7 +105,4 @@ class ImageViewCounter extends Extension $event->add_nav_link("sort_by_visits", new Link('popular_images'), "Popular Images"); } } - -//This is the end of the struct - } diff --git a/ext/image_view_counter/theme.php b/ext/image_view_counter/theme.php index ef000b70..782a2a6b 100644 --- a/ext/image_view_counter/theme.php +++ b/ext/image_view_counter/theme.php @@ -7,29 +7,18 @@ class ImageViewCounterTheme extends Themelet global $page, $config; $pop_images = ""; foreach ($images as $image) { - $thumb_html = $this->build_thumb_html($image); - $pop_images .= $thumb_html . "\n"; + $pop_images .= $this->build_thumb_html($image) . "\n"; } - - $html = "\n". - "

\n". - " « {$dte[1]} »\n". - "

\n". - "
\n".$pop_images; - - $nav_html = "Index"; $page->set_heading($config->get_string(SetupConfig::TITLE)); $page->add_block(new Block("Navigation", $nav_html, "left", 10)); - $page->add_block(new Block(null, $html, "main", 30)); + $page->add_block(new Block(null, $pop_images, "main", 30)); } - public function get_help_html() { return '

Search for images that have received views by users.

'; - } }