]> git.mxchange.org Git - friendica.git/commitdiff
Store the context as a separate field
authorMichael <heluecht@pirati.ca>
Mon, 1 Jul 2024 15:05:44 +0000 (15:05 +0000)
committerMichael <heluecht@pirati.ca>
Tue, 16 Jul 2024 20:09:08 +0000 (20:09 +0000)
database.sql
doc/database/db_inbox-entry.md
doc/database/db_post-thread-user.md
doc/database/db_post-thread.md
src/Model/Item.php
src/Protocol/ActivityPub/Processor.php
src/Protocol/ActivityPub/Queue.php
src/Protocol/ActivityPub/Transmitter.php
src/Worker/ExpirePosts.php
static/dbstructure.config.php
static/dbview.config.php

index d24a4f4009379eef739a6a4fd9e402a33a1d3009..6f5ca5fec6c07f9d050dbd7fb77b8d840a85a63a 100644 (file)
@@ -1,6 +1,6 @@
 -- ------------------------------------------
 -- Friendica 2024.06-rc (Yellow Archangel)
--- DB_UPDATE_VERSION 1569
+-- DB_UPDATE_VERSION 1570
 -- ------------------------------------------
 
 
@@ -817,6 +817,7 @@ CREATE TABLE IF NOT EXISTS `inbox-entry` (
        `activity-id` varbinary(383) COMMENT 'id of the incoming activity',
        `object-id` varbinary(383) COMMENT '',
        `in-reply-to-id` varbinary(383) COMMENT '',
+       `context` varbinary(383) COMMENT '',
        `conversation` varbinary(383) COMMENT '',
        `type` varchar(64) COMMENT 'Type of the activity',
        `object-type` varchar(64) COMMENT 'Type of the object activity',
@@ -1544,6 +1545,7 @@ CREATE TABLE IF NOT EXISTS `post-tag` (
 --
 CREATE TABLE IF NOT EXISTS `post-thread` (
        `uri-id` int unsigned NOT NULL COMMENT 'Id of the item-uri table entry that contains the item uri',
+       `context-id` int unsigned COMMENT 'Id of the item-uri table entry that contains the endpoint for the context collection',
        `conversation-id` int unsigned COMMENT 'Id of the item-uri table entry that contains the conversation uri',
        `owner-id` int unsigned NOT NULL DEFAULT 0 COMMENT 'Item owner',
        `author-id` int unsigned NOT NULL DEFAULT 0 COMMENT 'Item author',
@@ -1554,6 +1556,7 @@ CREATE TABLE IF NOT EXISTS `post-thread` (
        `changed` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Date that something in the conversation changed, indicating clients should fetch the conversation again',
        `commented` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '',
         PRIMARY KEY(`uri-id`),
+        INDEX `context-id` (`context-id`),
         INDEX `conversation-id` (`conversation-id`),
         INDEX `owner-id` (`owner-id`),
         INDEX `author-id` (`author-id`),
@@ -1561,6 +1564,7 @@ CREATE TABLE IF NOT EXISTS `post-thread` (
         INDEX `received` (`received`),
         INDEX `commented` (`commented`),
        FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
+       FOREIGN KEY (`context-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
        FOREIGN KEY (`conversation-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
        FOREIGN KEY (`owner-id`) REFERENCES `contact` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT,
        FOREIGN KEY (`author-id`) REFERENCES `contact` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT,
@@ -1646,6 +1650,7 @@ CREATE TABLE IF NOT EXISTS `post-user` (
 --
 CREATE TABLE IF NOT EXISTS `post-thread-user` (
        `uri-id` int unsigned NOT NULL COMMENT 'Id of the item-uri table entry that contains the item uri',
+       `context-id` int unsigned COMMENT 'Id of the item-uri table entry that contains the endpoint for the context collection',
        `conversation-id` int unsigned COMMENT 'Id of the item-uri table entry that contains the conversation uri',
        `owner-id` int unsigned NOT NULL DEFAULT 0 COMMENT 'Item owner',
        `author-id` int unsigned NOT NULL DEFAULT 0 COMMENT 'Item author',
@@ -1671,6 +1676,7 @@ CREATE TABLE IF NOT EXISTS `post-thread-user` (
        `post-user-id` int unsigned COMMENT 'Id of the post-user table',
         PRIMARY KEY(`uid`,`uri-id`),
         INDEX `uri-id` (`uri-id`),
+        INDEX `context-id` (`context-id`),
         INDEX `conversation-id` (`conversation-id`),
         INDEX `owner-id` (`owner-id`),
         INDEX `author-id` (`author-id`),
@@ -1693,6 +1699,7 @@ CREATE TABLE IF NOT EXISTS `post-thread-user` (
         INDEX `contact-id_received` (`contact-id`,`received`),
         INDEX `contact-id_created` (`contact-id`,`created`),
        FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
+       FOREIGN KEY (`context-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
        FOREIGN KEY (`conversation-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
        FOREIGN KEY (`owner-id`) REFERENCES `contact` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT,
        FOREIGN KEY (`author-id`) REFERENCES `contact` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT,
@@ -2280,6 +2287,8 @@ CREATE VIEW `post-origin-view` AS SELECT
        `post-origin`.`thr-parent-id` AS `thr-parent-id`,
        `conversation-item-uri`.`uri` AS `conversation`,
        `post-thread-user`.`conversation-id` AS `conversation-id`,
+       `context-item-uri`.`uri` AS `context`,
+       `post-thread-user`.`context-id` AS `context-id`,
        `quote-item-uri`.`uri` AS `quote-uri`,
        `post-content`.`quote-uri-id` AS `quote-uri-id`,
        `item-uri`.`guid` AS `guid`,
@@ -2442,6 +2451,7 @@ CREATE VIEW `post-origin-view` AS SELECT
                        LEFT JOIN `item-uri` AS `thr-parent-item-uri` ON `thr-parent-item-uri`.`id` = `post-origin`.`thr-parent-id`
                        LEFT JOIN `item-uri` AS `parent-item-uri` ON `parent-item-uri`.`id` = `post-origin`.`parent-uri-id`
                        LEFT JOIN `item-uri` AS `conversation-item-uri` ON `conversation-item-uri`.`id` = `post-thread-user`.`conversation-id`
+                       LEFT JOIN `item-uri` AS `context-item-uri` ON `context-item-uri`.`id` = `post-thread-user`.`context-id`
                        LEFT JOIN `item-uri` AS `external-item-uri` ON `external-item-uri`.`id` = `post-user`.`external-id`
                        LEFT JOIN `item-uri` AS `replies-item-uri` ON `replies-item-uri`.`id` = `post-user`.`replies-id`
                        LEFT JOIN `verb` ON `verb`.`id` = `post-origin`.`vid`
@@ -2471,6 +2481,8 @@ CREATE VIEW `post-thread-origin-view` AS SELECT
        `post-origin`.`thr-parent-id` AS `thr-parent-id`,
        `conversation-item-uri`.`uri` AS `conversation`,
        `post-thread-user`.`conversation-id` AS `conversation-id`,
+       `context-item-uri`.`uri` AS `context`,
+       `post-thread-user`.`context-id` AS `context-id`,
        `quote-item-uri`.`uri` AS `quote-uri`,
        `post-content`.`quote-uri-id` AS `quote-uri-id`,
        `item-uri`.`guid` AS `guid`,
@@ -2632,6 +2644,7 @@ CREATE VIEW `post-thread-origin-view` AS SELECT
                        LEFT JOIN `item-uri` AS `thr-parent-item-uri` ON `thr-parent-item-uri`.`id` = `post-origin`.`thr-parent-id`
                        LEFT JOIN `item-uri` AS `parent-item-uri` ON `parent-item-uri`.`id` = `post-origin`.`parent-uri-id`
                        LEFT JOIN `item-uri` AS `conversation-item-uri` ON `conversation-item-uri`.`id` = `post-thread-user`.`conversation-id`
+                       LEFT JOIN `item-uri` AS `context-item-uri` ON `context-item-uri`.`id` = `post-thread-user`.`context-id`
                        LEFT JOIN `item-uri` AS `external-item-uri` ON `external-item-uri`.`id` = `post-user`.`external-id`
                        LEFT JOIN `item-uri` AS `replies-item-uri` ON `replies-item-uri`.`id` = `post-user`.`replies-id`
                        LEFT JOIN `verb` ON `verb`.`id` = `post-origin`.`vid`
@@ -2660,6 +2673,8 @@ CREATE VIEW `post-user-view` AS SELECT
        `post-user`.`thr-parent-id` AS `thr-parent-id`,
        `conversation-item-uri`.`uri` AS `conversation`,
        `post-thread-user`.`conversation-id` AS `conversation-id`,
+       `context-item-uri`.`uri` AS `context`,
+       `post-thread-user`.`context-id` AS `context-id`,
        `quote-item-uri`.`uri` AS `quote-uri`,
        `post-content`.`quote-uri-id` AS `quote-uri-id`,
        `item-uri`.`guid` AS `guid`,
@@ -2821,6 +2836,7 @@ CREATE VIEW `post-user-view` AS SELECT
                        LEFT JOIN `item-uri` AS `thr-parent-item-uri` ON `thr-parent-item-uri`.`id` = `post-user`.`thr-parent-id`
                        LEFT JOIN `item-uri` AS `parent-item-uri` ON `parent-item-uri`.`id` = `post-user`.`parent-uri-id`
                        LEFT JOIN `item-uri` AS `conversation-item-uri` ON `conversation-item-uri`.`id` = `post-thread-user`.`conversation-id`
+                       LEFT JOIN `item-uri` AS `context-item-uri` ON `context-item-uri`.`id` = `post-thread-user`.`context-id`
                        LEFT JOIN `item-uri` AS `external-item-uri` ON `external-item-uri`.`id` = `post-user`.`external-id`
                        LEFT JOIN `item-uri` AS `replies-item-uri` ON `replies-item-uri`.`id` = `post-user`.`replies-id`
                        LEFT JOIN `verb` ON `verb`.`id` = `post-user`.`vid`
@@ -2850,6 +2866,8 @@ CREATE VIEW `post-thread-user-view` AS SELECT
        `post-user`.`thr-parent-id` AS `thr-parent-id`,
        `conversation-item-uri`.`uri` AS `conversation`,
        `post-thread-user`.`conversation-id` AS `conversation-id`,
+       `context-item-uri`.`uri` AS `context`,
+       `post-thread-user`.`context-id` AS `context-id`,
        `quote-item-uri`.`uri` AS `quote-uri`,
        `post-content`.`quote-uri-id` AS `quote-uri-id`,
        `item-uri`.`guid` AS `guid`,
@@ -3010,6 +3028,7 @@ CREATE VIEW `post-thread-user-view` AS SELECT
                        LEFT JOIN `item-uri` AS `thr-parent-item-uri` ON `thr-parent-item-uri`.`id` = `post-user`.`thr-parent-id`
                        LEFT JOIN `item-uri` AS `parent-item-uri` ON `parent-item-uri`.`id` = `post-user`.`parent-uri-id`
                        LEFT JOIN `item-uri` AS `conversation-item-uri` ON `conversation-item-uri`.`id` = `post-thread-user`.`conversation-id`
+                       LEFT JOIN `item-uri` AS `context-item-uri` ON `context-item-uri`.`id` = `post-thread-user`.`context-id`
                        LEFT JOIN `item-uri` AS `external-item-uri` ON `external-item-uri`.`id` = `post-user`.`external-id`
                        LEFT JOIN `item-uri` AS `replies-item-uri` ON `replies-item-uri`.`id` = `post-user`.`replies-id`
                        LEFT JOIN `verb` ON `verb`.`id` = `post-user`.`vid`
@@ -3034,6 +3053,8 @@ CREATE VIEW `post-view` AS SELECT
        `post`.`thr-parent-id` AS `thr-parent-id`,
        `conversation-item-uri`.`uri` AS `conversation`,
        `post-thread`.`conversation-id` AS `conversation-id`,
+       `context-item-uri`.`uri` AS `context`,
+       `post-thread`.`context-id` AS `context-id`,
        `quote-item-uri`.`uri` AS `quote-uri`,
        `post-content`.`quote-uri-id` AS `quote-uri-id`,
        `item-uri`.`guid` AS `guid`,
@@ -3162,6 +3183,7 @@ CREATE VIEW `post-view` AS SELECT
                        LEFT JOIN `item-uri` AS `thr-parent-item-uri` ON `thr-parent-item-uri`.`id` = `post`.`thr-parent-id`
                        LEFT JOIN `item-uri` AS `parent-item-uri` ON `parent-item-uri`.`id` = `post`.`parent-uri-id`
                        LEFT JOIN `item-uri` AS `conversation-item-uri` ON `conversation-item-uri`.`id` = `post-thread`.`conversation-id`
+                       LEFT JOIN `item-uri` AS `context-item-uri` ON `context-item-uri`.`id` = `post-thread`.`context-id`
                        LEFT JOIN `item-uri` AS `external-item-uri` ON `external-item-uri`.`id` = `post`.`external-id`
                        LEFT JOIN `item-uri` AS `replies-item-uri` ON `replies-item-uri`.`id` = `post`.`replies-id`
                        LEFT JOIN `verb` ON `verb`.`id` = `post`.`vid`
@@ -3184,6 +3206,8 @@ CREATE VIEW `post-thread-view` AS SELECT
        `post`.`thr-parent-id` AS `thr-parent-id`,
        `conversation-item-uri`.`uri` AS `conversation`,
        `post-thread`.`conversation-id` AS `conversation-id`,
+       `context-item-uri`.`uri` AS `context`,
+       `post-thread`.`context-id` AS `context-id`,
        `quote-item-uri`.`uri` AS `quote-uri`,
        `post-content`.`quote-uri-id` AS `quote-uri-id`,
        `item-uri`.`guid` AS `guid`,
@@ -3314,6 +3338,7 @@ CREATE VIEW `post-thread-view` AS SELECT
                        LEFT JOIN `item-uri` AS `thr-parent-item-uri` ON `thr-parent-item-uri`.`id` = `post`.`thr-parent-id`
                        LEFT JOIN `item-uri` AS `parent-item-uri` ON `parent-item-uri`.`id` = `post`.`parent-uri-id`
                        LEFT JOIN `item-uri` AS `conversation-item-uri` ON `conversation-item-uri`.`id` = `post-thread`.`conversation-id`
+                       LEFT JOIN `item-uri` AS `context-item-uri` ON `context-item-uri`.`id` = `post-thread`.`context-id`
                        LEFT JOIN `item-uri` AS `external-item-uri` ON `external-item-uri`.`id` = `post`.`external-id`
                        LEFT JOIN `item-uri` AS `replies-item-uri` ON `replies-item-uri`.`id` = `post`.`replies-id`
                        LEFT JOIN `verb` ON `verb`.`id` = `post`.`vid`
index af388d401811c0d2f8fae274fbe91cad10fc97b0..e18e66f2403289e1d85a031d2f4f613fc70b979d 100644 (file)
@@ -12,6 +12,7 @@ Fields
 | activity-id        | id of the incoming activity            | varbinary(383)   | YES  |     | NULL    |                |
 | object-id          |                                        | varbinary(383)   | YES  |     | NULL    |                |
 | in-reply-to-id     |                                        | varbinary(383)   | YES  |     | NULL    |                |
+| context            |                                        | varbinary(383)   | YES  |     | NULL    |                |
 | conversation       |                                        | varbinary(383)   | YES  |     | NULL    |                |
 | type               | Type of the activity                   | varchar(64)      | YES  |     | NULL    |                |
 | object-type        | Type of the object activity            | varchar(64)      | YES  |     | NULL    |                |
index a89d94c96fa09fa7346cc2a0836014b9072a9f7c..d00e8525472722f6c1f5c17bda32a8b05d42c571 100644 (file)
@@ -9,6 +9,7 @@ Fields
 | Field           | Description                                                                                             | Type               | Null | Key | Default             | Extra |
 | --------------- | ------------------------------------------------------------------------------------------------------- | ------------------ | ---- | --- | ------------------- | ----- |
 | uri-id          | Id of the item-uri table entry that contains the item uri                                               | int unsigned       | NO   | PRI | NULL                |       |
+| context-id      | Id of the item-uri table entry that contains the endpoint for the context collection                    | int unsigned       | YES  |     | NULL                |       |
 | conversation-id | Id of the item-uri table entry that contains the conversation uri                                       | int unsigned       | YES  |     | NULL                |       |
 | owner-id        | Item owner                                                                                              | int unsigned       | NO   |     | 0                   |       |
 | author-id       | Item author                                                                                             | int unsigned       | NO   |     | 0                   |       |
@@ -40,6 +41,7 @@ Indexes
 | -------------------- | --------------------- |
 | PRIMARY              | uid, uri-id           |
 | uri-id               | uri-id                |
+| context-id           | context-id            |
 | conversation-id      | conversation-id       |
 | owner-id             | owner-id              |
 | author-id            | author-id             |
@@ -68,6 +70,7 @@ Foreign Keys
 | Field | Target Table | Target Field |
 |-------|--------------|--------------|
 | uri-id | [item-uri](help/database/db_item-uri) | id |
+| context-id | [item-uri](help/database/db_item-uri) | id |
 | conversation-id | [item-uri](help/database/db_item-uri) | id |
 | owner-id | [contact](help/database/db_contact) | id |
 | author-id | [contact](help/database/db_contact) | id |
index b90fb2ab550af17eadfbfcb4e90b25656eea7a12..959927a468857cc78f457c722215b34d65944c85 100644 (file)
@@ -9,6 +9,7 @@ Fields
 | Field           | Description                                                                                             | Type         | Null | Key | Default             | Extra |
 | --------------- | ------------------------------------------------------------------------------------------------------- | ------------ | ---- | --- | ------------------- | ----- |
 | uri-id          | Id of the item-uri table entry that contains the item uri                                               | int unsigned | NO   | PRI | NULL                |       |
+| context-id      | Id of the item-uri table entry that contains the endpoint for the context collection                    | int unsigned | YES  |     | NULL                |       |
 | conversation-id | Id of the item-uri table entry that contains the conversation uri                                       | int unsigned | YES  |     | NULL                |       |
 | owner-id        | Item owner                                                                                              | int unsigned | NO   |     | 0                   |       |
 | author-id       | Item author                                                                                             | int unsigned | NO   |     | 0                   |       |
@@ -25,6 +26,7 @@ Indexes
 | Name            | Fields          |
 | --------------- | --------------- |
 | PRIMARY         | uri-id          |
+| context-id      | context-id      |
 | conversation-id | conversation-id |
 | owner-id        | owner-id        |
 | author-id       | author-id       |
@@ -38,6 +40,7 @@ Foreign Keys
 | Field | Target Table | Target Field |
 |-------|--------------|--------------|
 | uri-id | [item-uri](help/database/db_item-uri) | id |
+| context-id | [item-uri](help/database/db_item-uri) | id |
 | conversation-id | [item-uri](help/database/db_item-uri) | id |
 | owner-id | [contact](help/database/db_contact) | id |
 | author-id | [contact](help/database/db_contact) | id |
index a0816b7fa77d6607701a43e307b8fcfe75ad2641..a32601efc0bdd1229c51e21cb7f51187b3159b26 100644 (file)
@@ -1081,6 +1081,10 @@ class Item
                        $parent_id = 0;
                        $parent_origin = $item['origin'];
 
+                       if ($item['wall'] && empty($item['context'])) {
+                               $item['context'] = $item['parent-uri'] . '#context';
+                       }
+
                        if ($item['wall'] && empty($item['conversation'])) {
                                $item['conversation'] = $item['parent-uri'] . '#context';
                        }
@@ -1102,6 +1106,10 @@ class Item
                        $item['conversation-id'] = ItemURI::getIdByURI($item['conversation']);
                }
 
+               if (!empty($item['context']) && empty($item['context-id'])) {
+                       $item['context-id'] = ItemURI::getIdByURI($item['context']);
+               }
+
                // Is this item available in the global items (with uid=0)?
                if ($item['uid'] == 0) {
                        $item['global'] = true;
index 110fc47e0289f64483899b7cd3dd80aebc2be186..33cbfc98a4e291594ffe1ffb7f00ac0f6379027f 100644 (file)
@@ -320,13 +320,22 @@ class Processor
                        $item['object-type'] = Activity\ObjectType::COMMENT;
                }
 
+               if (!empty($activity['context'])) {
+                       $item['context'] = $activity['context'];
+               }
+
                if (!empty($activity['conversation'])) {
                        $item['conversation'] = $activity['conversation'];
-               } elseif (!empty($activity['context'])) {
-                       $item['conversation'] = $activity['context'];
                }
 
-               if (!empty($item['conversation'])) {
+               if (!empty($item['context'])) {
+                       $conversation = Post::selectFirstThread(['uri'], ['context' => $item['context']]);
+                       if (!empty($conversation)) {
+                               Logger::debug('Got context', ['context' => $item['context'], 'parent' => $conversation]);
+                               $item['parent-uri'] = $conversation['uri'];
+                               $item['parent-uri-id'] = ItemURI::getIdByURI($item['parent-uri']);
+                       }
+               } elseif (!empty($item['conversation'])) {
                        $conversation = Post::selectFirstThread(['uri'], ['conversation' => $item['conversation']]);
                        if (!empty($conversation)) {
                                Logger::debug('Got conversation', ['conversation' => $item['conversation'], 'parent' => $conversation]);
index 5d062bd58d3800c3fe3e65349605f43fa0682f14..53761585ffb8fbf16ce526088185243c58d8ad90 100644 (file)
@@ -64,8 +64,10 @@ class Queue
                }
 
                if (!empty($activity['context'])) {
-                       $fields['conversation'] = $activity['context'];
-               } elseif (!empty($activity['conversation'])) {
+                       $fields['context'] = $activity['context'];
+               }
+
+               if (!empty($activity['conversation'])) {
                        $fields['conversation'] = $activity['conversation'];
                }
 
@@ -296,9 +298,15 @@ class Queue
                        return true;
                }
 
+               if (!empty($entry['context'])) {
+                       if (DBA::exists('post-thread', ['context-id' => ItemURI::getIdByURI($entry['context'], false)])) {
+                               // We have got the context in the system, so the post can be processed
+                               return true;
+                       }
+               }
+
                if (!empty($entry['conversation'])) {
-                       $conv_id = ItemURI::getIdByURI($entry['conversation'], false);
-                       if (DBA::exists('post-thread', ['conversation-id' => $conv_id])) {
+                       if (DBA::exists('post-thread', ['conversation-id' => ItemURI::getIdByURI($entry['conversation'], false)])) {
                                // We have got the conversation in the system, so the post can be processed
                                return true;
                        }
index d76257b9d969cccb95c15c2b002dbac798c4c3ef..9308cb11b088a834fa6a95f85746c19beedc8f19 100644 (file)
@@ -1865,8 +1865,12 @@ class Transmitter
                }
                $data['sensitive'] = (bool)$item['sensitive'];
 
+               if (!empty($item['context']) && ($item['context'] != './')) {
+                       $data['context'] = $item['context'];
+               }
+
                if (!empty($item['conversation']) && ($item['conversation'] != './')) {
-                       $data['conversation'] = $data['context'] = $item['conversation'];
+                       $data['conversation'] = $item['conversation'];
                }
 
                if (!empty($title)) {
index 30da0a6cffb893686526380dd560f75f5b4e1c71..69650365bf73bf0b0685978175f8b4f4b4cfed17 100644 (file)
@@ -204,6 +204,7 @@ class ExpirePosts
                        AND NOT EXISTS(SELECT `thr-parent-id` FROM `post-user` WHERE `thr-parent-id` = `item-uri`.`id`)
                        AND NOT EXISTS(SELECT `external-id` FROM `post-user` WHERE `external-id` = `item-uri`.`id`)
                        AND NOT EXISTS(SELECT `replies-id` FROM `post-user` WHERE `replies-id` = `item-uri`.`id`)
+                       AND NOT EXISTS(SELECT `context-id` FROM `post-thread` WHERE `context-id` = `item-uri`.`id`)
                        AND NOT EXISTS(SELECT `conversation-id` FROM `post-thread` WHERE `conversation-id` = `item-uri`.`id`)
                        AND NOT EXISTS(SELECT `uri-id` FROM `mail` WHERE `uri-id` = `item-uri`.`id`)
                        AND NOT EXISTS(SELECT `uri-id` FROM `event` WHERE `uri-id` = `item-uri`.`id`)
index a020e441defb754b5d9d01ff196ed1fdab9ac7d1..b8b17ef044ab970dd09d71f36962fe8952b25077 100644 (file)
@@ -56,7 +56,7 @@ use Friendica\Database\DBA;
 
 // This file is required several times during the test in DbaDefinition which justifies this condition
 if (!defined('DB_UPDATE_VERSION')) {
-       define('DB_UPDATE_VERSION', 1569);
+       define('DB_UPDATE_VERSION', 1570);
 }
 
 return [
@@ -867,6 +867,7 @@ return [
                        "activity-id" => ["type" => "varbinary(383)", "comment" => "id of the incoming activity"],
                        "object-id" => ["type" => "varbinary(383)", "comment" => ""],
                        "in-reply-to-id" => ["type" => "varbinary(383)", "comment" => ""],
+                       "context" => ["type" => "varbinary(383)", "comment" => ""],
                        "conversation" => ["type" => "varbinary(383)", "comment" => ""],
                        "type" => ["type" => "varchar(64)", "comment" => "Type of the activity"],
                        "object-type" => ["type" => "varchar(64)", "comment" => "Type of the object activity"],
@@ -1555,6 +1556,7 @@ return [
                "comment" => "Thread related data",
                "fields" => [
                        "uri-id" => ["type" => "int unsigned", "not null" => "1", "primary" => "1", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the item uri"],
+                       "context-id" => ["type" => "int unsigned", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the endpoint for the context collection"],
                        "conversation-id" => ["type" => "int unsigned", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the conversation uri"],
                        "owner-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["contact" => "id", "on delete" => "restrict"], "comment" => "Item owner"],
                        "author-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["contact" => "id", "on delete" => "restrict"], "comment" => "Item author"],
@@ -1567,6 +1569,7 @@ return [
                ],
                "indexes" => [
                        "PRIMARY" => ["uri-id"],
+                       "context-id" => ["context-id"],
                        "conversation-id" => ["conversation-id"],
                        "owner-id" => ["owner-id"],
                        "author-id" => ["author-id"],
@@ -1641,6 +1644,7 @@ return [
                "comment" => "Thread related data per user",
                "fields" => [
                        "uri-id" => ["type" => "int unsigned", "not null" => "1", "primary" => "1", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the item uri"],
+                       "context-id" => ["type" => "int unsigned", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the endpoint for the context collection"],
                        "conversation-id" => ["type" => "int unsigned", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the conversation uri"],
                        "owner-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["contact" => "id", "on delete" => "restrict"], "comment" => "Item owner"],
                        "author-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["contact" => "id", "on delete" => "restrict"], "comment" => "Item author"],
@@ -1668,6 +1672,7 @@ return [
                "indexes" => [
                        "PRIMARY" => ["uid", "uri-id"],
                        "uri-id" => ["uri-id"],
+                       "context-id" => ["context-id"],
                        "conversation-id" => ["conversation-id"],
                        "owner-id" => ["owner-id"],
                        "author-id" => ["author-id"],
index 29756b6af4e51d31d72288d75cb7ae903a2703c9..ce06004d965457e08dc57617dde40fbe258f5ff2 100644 (file)
                        "thr-parent-id" => ["post-origin", "thr-parent-id"],
                        "conversation" => ["conversation-item-uri", "uri"],
                        "conversation-id" => ["post-thread-user", "conversation-id"],
+                       "context" => ["context-item-uri", "uri"],
+                       "context-id" => ["post-thread-user", "context-id"],
                        "quote-uri" => ["quote-item-uri", "uri"],
                        "quote-uri-id" => ["post-content", "quote-uri-id"],
                        "guid" => ["item-uri", "guid"],
                        LEFT JOIN `item-uri` AS `thr-parent-item-uri` ON `thr-parent-item-uri`.`id` = `post-origin`.`thr-parent-id`
                        LEFT JOIN `item-uri` AS `parent-item-uri` ON `parent-item-uri`.`id` = `post-origin`.`parent-uri-id`
                        LEFT JOIN `item-uri` AS `conversation-item-uri` ON `conversation-item-uri`.`id` = `post-thread-user`.`conversation-id`
+                       LEFT JOIN `item-uri` AS `context-item-uri` ON `context-item-uri`.`id` = `post-thread-user`.`context-id`
                        LEFT JOIN `item-uri` AS `external-item-uri` ON `external-item-uri`.`id` = `post-user`.`external-id`
                        LEFT JOIN `item-uri` AS `replies-item-uri` ON `replies-item-uri`.`id` = `post-user`.`replies-id`
                        LEFT JOIN `verb` ON `verb`.`id` = `post-origin`.`vid`
                        "thr-parent-id" => ["post-origin", "thr-parent-id"],
                        "conversation" => ["conversation-item-uri", "uri"],
                        "conversation-id" => ["post-thread-user", "conversation-id"],
+                       "context" => ["context-item-uri", "uri"],
+                       "context-id" => ["post-thread-user", "context-id"],
                        "quote-uri" => ["quote-item-uri", "uri"],
                        "quote-uri-id" => ["post-content", "quote-uri-id"],
                        "guid" => ["item-uri", "guid"],
                        LEFT JOIN `item-uri` AS `thr-parent-item-uri` ON `thr-parent-item-uri`.`id` = `post-origin`.`thr-parent-id`
                        LEFT JOIN `item-uri` AS `parent-item-uri` ON `parent-item-uri`.`id` = `post-origin`.`parent-uri-id`
                        LEFT JOIN `item-uri` AS `conversation-item-uri` ON `conversation-item-uri`.`id` = `post-thread-user`.`conversation-id`
+                       LEFT JOIN `item-uri` AS `context-item-uri` ON `context-item-uri`.`id` = `post-thread-user`.`context-id`
                        LEFT JOIN `item-uri` AS `external-item-uri` ON `external-item-uri`.`id` = `post-user`.`external-id`
                        LEFT JOIN `item-uri` AS `replies-item-uri` ON `replies-item-uri`.`id` = `post-user`.`replies-id`
                        LEFT JOIN `verb` ON `verb`.`id` = `post-origin`.`vid`
                        "thr-parent-id" => ["post-user", "thr-parent-id"],
                        "conversation" => ["conversation-item-uri", "uri"],
                        "conversation-id" => ["post-thread-user", "conversation-id"],
+                       "context" => ["context-item-uri", "uri"],
+                       "context-id" => ["post-thread-user", "context-id"],
                        "quote-uri" => ["quote-item-uri", "uri"],
                        "quote-uri-id" => ["post-content", "quote-uri-id"],
                        "guid" => ["item-uri", "guid"],
                        LEFT JOIN `item-uri` AS `thr-parent-item-uri` ON `thr-parent-item-uri`.`id` = `post-user`.`thr-parent-id`
                        LEFT JOIN `item-uri` AS `parent-item-uri` ON `parent-item-uri`.`id` = `post-user`.`parent-uri-id`
                        LEFT JOIN `item-uri` AS `conversation-item-uri` ON `conversation-item-uri`.`id` = `post-thread-user`.`conversation-id`
+                       LEFT JOIN `item-uri` AS `context-item-uri` ON `context-item-uri`.`id` = `post-thread-user`.`context-id`
                        LEFT JOIN `item-uri` AS `external-item-uri` ON `external-item-uri`.`id` = `post-user`.`external-id`
                        LEFT JOIN `item-uri` AS `replies-item-uri` ON `replies-item-uri`.`id` = `post-user`.`replies-id`
                        LEFT JOIN `verb` ON `verb`.`id` = `post-user`.`vid`
                        "thr-parent-id" => ["post-user", "thr-parent-id"],
                        "conversation" => ["conversation-item-uri", "uri"],
                        "conversation-id" => ["post-thread-user", "conversation-id"],
+                       "context" => ["context-item-uri", "uri"],
+                       "context-id" => ["post-thread-user", "context-id"],
                        "quote-uri" => ["quote-item-uri", "uri"],
                        "quote-uri-id" => ["post-content", "quote-uri-id"],
                        "guid" => ["item-uri", "guid"],
                        LEFT JOIN `item-uri` AS `thr-parent-item-uri` ON `thr-parent-item-uri`.`id` = `post-user`.`thr-parent-id`
                        LEFT JOIN `item-uri` AS `parent-item-uri` ON `parent-item-uri`.`id` = `post-user`.`parent-uri-id`
                        LEFT JOIN `item-uri` AS `conversation-item-uri` ON `conversation-item-uri`.`id` = `post-thread-user`.`conversation-id`
+                       LEFT JOIN `item-uri` AS `context-item-uri` ON `context-item-uri`.`id` = `post-thread-user`.`context-id`
                        LEFT JOIN `item-uri` AS `external-item-uri` ON `external-item-uri`.`id` = `post-user`.`external-id`
                        LEFT JOIN `item-uri` AS `replies-item-uri` ON `replies-item-uri`.`id` = `post-user`.`replies-id`
                        LEFT JOIN `verb` ON `verb`.`id` = `post-user`.`vid`
                        "thr-parent-id" => ["post", "thr-parent-id"],
                        "conversation" => ["conversation-item-uri", "uri"],
                        "conversation-id" => ["post-thread", "conversation-id"],
+                       "context" => ["context-item-uri", "uri"],
+                       "context-id" => ["post-thread", "context-id"],
                        "quote-uri" => ["quote-item-uri", "uri"],
                        "quote-uri-id" => ["post-content", "quote-uri-id"],
                        "guid" => ["item-uri", "guid"],
                        LEFT JOIN `item-uri` AS `thr-parent-item-uri` ON `thr-parent-item-uri`.`id` = `post`.`thr-parent-id`
                        LEFT JOIN `item-uri` AS `parent-item-uri` ON `parent-item-uri`.`id` = `post`.`parent-uri-id`
                        LEFT JOIN `item-uri` AS `conversation-item-uri` ON `conversation-item-uri`.`id` = `post-thread`.`conversation-id`
+                       LEFT JOIN `item-uri` AS `context-item-uri` ON `context-item-uri`.`id` = `post-thread`.`context-id`
                        LEFT JOIN `item-uri` AS `external-item-uri` ON `external-item-uri`.`id` = `post`.`external-id`
                        LEFT JOIN `item-uri` AS `replies-item-uri` ON `replies-item-uri`.`id` = `post`.`replies-id`
                        LEFT JOIN `verb` ON `verb`.`id` = `post`.`vid`
                        "thr-parent-id" => ["post", "thr-parent-id"],
                        "conversation" => ["conversation-item-uri", "uri"],
                        "conversation-id" => ["post-thread", "conversation-id"],
+                       "context" => ["context-item-uri", "uri"],
+                       "context-id" => ["post-thread", "context-id"],
                        "quote-uri" => ["quote-item-uri", "uri"],
                        "quote-uri-id" => ["post-content", "quote-uri-id"],
                        "guid" => ["item-uri", "guid"],
                        LEFT JOIN `item-uri` AS `thr-parent-item-uri` ON `thr-parent-item-uri`.`id` = `post`.`thr-parent-id`
                        LEFT JOIN `item-uri` AS `parent-item-uri` ON `parent-item-uri`.`id` = `post`.`parent-uri-id`
                        LEFT JOIN `item-uri` AS `conversation-item-uri` ON `conversation-item-uri`.`id` = `post-thread`.`conversation-id`
+                       LEFT JOIN `item-uri` AS `context-item-uri` ON `context-item-uri`.`id` = `post-thread`.`context-id`
                        LEFT JOIN `item-uri` AS `external-item-uri` ON `external-item-uri`.`id` = `post`.`external-id`
                        LEFT JOIN `item-uri` AS `replies-item-uri` ON `replies-item-uri`.`id` = `post`.`replies-id`
                        LEFT JOIN `verb` ON `verb`.`id` = `post`.`vid`