aboutsummaryrefslogtreecommitdiffhomepage
path: root/Digitigrade/Model/Interaction.php
diff options
context:
space:
mode:
authorwinter2025-01-28 16:59:43 +0000
committerwinter2025-01-28 16:59:43 +0000
commit09a42d23cd067dc5c2a7d4f03e8f074a9317f6c8 (patch)
treec01ea939a0c72c2a4ed5b6479d7739f3dbaaf01f /Digitigrade/Model/Interaction.php
parent4c66a437d3125ef1a03bac96b80c82e9da060a81 (diff)
implement extensions on existing objects
Diffstat (limited to 'Digitigrade/Model/Interaction.php')
-rw-r--r--Digitigrade/Model/Interaction.php31
1 files changed, 31 insertions, 0 deletions
diff --git a/Digitigrade/Model/Interaction.php b/Digitigrade/Model/Interaction.php
index 902dbc0..e651f45 100644
--- a/Digitigrade/Model/Interaction.php
+++ b/Digitigrade/Model/Interaction.php
@@ -1,6 +1,7 @@
<?php
namespace Digitigrade\Model;
+use Digitigrade\Db;
use Digitigrade\Model\HomeTimelineItem;
use Digitigrade\Notification\Notifyable;
use Digitigrade\Timeline\ReasonReshared;
@@ -44,6 +45,36 @@ class Interaction extends PushableModel implements Notifyable {
return hostname_from_uri($this->author->uri) == hostname_from_uri($this->uri);
}
+ protected function hydrate() {
+ $this->extensions = $this->findExtensions();
+ }
+
+ protected function dehydrate() {
+ $this->saveExtensions();
+ }
+
+ private function findExtensions() {
+ $pdo = Db::getInstance()->getPdo();
+ $stmt = $pdo->prepare('SELECT uri, data FROM interaction_extension WHERE interaction_id = ?');
+ $stmt->execute([$this->id]);
+ $items = [];
+ while ($row = $stmt->fetch()) {
+ $items[$row['uri']] = json_decode($row['data']);
+ }
+ return $items;
+ }
+
+ private function saveExtensions() {
+ $pdo = Db::getInstance()->getPdo();
+ foreach ($this->extensions as $uri => $obj) {
+ $stmt = $pdo->prepare(
+ 'INSERT INTO interaction_extension(interaction_id, uri, data) VALUES (?, ?, ?) ' .
+ 'ON CONFLICT (interaction_id, uri) DO UPDATE SET data = EXCLUDED.data'
+ );
+ $stmt->execute([$this->id, $uri, json_encode($obj)]);
+ }
+ }
+
public static function findAllWithAuthor(Actor $author): array {
return self::findAllWhere('author = ?', [$author->id]);
}