From 07c481cc5bb89e74a7bf93280faa0e3af622cbf1 Mon Sep 17 00:00:00 2001 From: Jerome Bakker Date: Mon, 17 Sep 2018 12:15:03 +0200 Subject: [PATCH] fixed: slow query in counter check Moved logic to session and no longer check database for viewed entities --- .../entity_view_counter/extends/counter.php | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/views/default/entity_view_counter/extends/counter.php b/views/default/entity_view_counter/extends/counter.php index 1dfb5c4..74afc7a 100644 --- a/views/default/entity_view_counter/extends/counter.php +++ b/views/default/entity_view_counter/extends/counter.php @@ -23,19 +23,23 @@ // check if we didn't already view this entity // views are locked by session id -$session_id = session_id(); +$session = elgg_get_session(); -$existing_annotations = elgg_get_entities_from_annotations([ - 'guid' => $entity->guid, - 'annotation_name' => ENTITY_VIEW_COUNTER_ANNOTATION_NAME, - 'annotation_value' => $session_id, - 'count' => true, -]); +$viewed_guids = $session->get('entity_view_counter', []); +if (!is_array($viewed_guids)) { + $viewed_guids = []; +} -if ($existing_annotations) { +if (in_array($entity->guid, $viewed_guids)) { return; } +// write to session, for speed +$viewed_guids[] = $entity->guid; +$session->set('entity_view_counter', $viewed_guids); + +$session_id = $session->getId(); + // log the user who is viewing // if no logged in user, log by entity $owner_guid = elgg_get_logged_in_user_guid() ?: $entity->guid;