From c630de8f1ed3979e1b1f20e9ec9b35a34c383e19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= Date: Fri, 5 Aug 2022 23:17:40 +0200 Subject: [PATCH] CustomCategory: record each access to a category (once per day and session) --- init.sql | 7 ++++++- src/customCategory.php | 31 ++++++++++++++++++++++++------- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/init.sql b/init.sql index 5476b34f..5731376c 100644 --- a/init.sql +++ b/init.sql @@ -2,6 +2,11 @@ create table customCategory ( id char(32) not null, content mediumtext not null, created datetime not null default CURRENT_TIMESTAMP, - lastAccess datetime not null default CURRENT_TIMESTAMP, primary key(id) ); + +create table customCategoryAccess ( + id char(32) not null, + ts datetime not null default CURRENT_TIMESTAMP, + foreign key(id) references customCategory(id) on delete cascade +); diff --git a/src/customCategory.php b/src/customCategory.php index cb3083ca..7b4b8ff6 100644 --- a/src/customCategory.php +++ b/src/customCategory.php @@ -14,10 +14,7 @@ function ajax_customCategory ($param) { $result = $row['content']; $stmt->closeCursor(); - $stmt = $db->prepare("update customCategory set lastAccess=:now where id=:id"); - $stmt->bindValue(':id', $param['id']); - $stmt->bindValue(':now', (new DateTime())->format('Y-m-d H:i:s'), PDO::PARAM_STR); - $stmt->execute(); + customCategoryUpdateAccess($param['id']); return $result; } @@ -28,12 +25,32 @@ function ajax_customCategory ($param) { if ($param['content']) { $id = md5($param['content']); - //$stmt = $db->prepare("insert into customCategory (id, content) values (:id, :content) on duplicate key update lastAccess=:now"); - $stmt = $db->prepare("insert into customCategory (id, content) values (:id, :content) on conflict(id) do update set lastAccess=:now"); + $stmt = $db->prepare("insert or ignore into customCategory (id, content) values (:id, :content)"); $stmt->bindValue(':id', $id, PDO::PARAM_STR); $stmt->bindValue(':content', $param['content'], PDO::PARAM_STR); - $stmt->bindValue(':now', (new DateTime())->format('Y-m-d H:i:s'), PDO::PARAM_STR); $result = $stmt->execute(); + + customCategoryUpdateAccess($id); + return $result; } } + +function customCategoryUpdateAccess ($id) { + global $db; + + if (!isset($_SESSION['customCategoryAccess'])) { + $_SESSION['customCategoryAccess'] = []; + } + + // update access per session only once a day + if (array_key_exists($id, $_SESSION['customCategoryAccess']) && $_SESSION['customCategoryAccess'][$id] > time() - 86400) { + return; + } + + $_SESSION['customCategoryAccess'][$id] = time(); + + $stmt = $db->prepare("insert into customCategoryAccess (id) values (:id)"); + $stmt->bindValue(':id', $id); + $stmt->execute(); +}