diff --git a/database.sql b/database.sql index d24a4f4009..6f5ca5fec6 100644 --- a/database.sql +++ b/database.sql @@ -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` diff --git a/doc/database/db_inbox-entry.md b/doc/database/db_inbox-entry.md index af388d4018..e18e66f240 100644 --- a/doc/database/db_inbox-entry.md +++ b/doc/database/db_inbox-entry.md @@ -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 | | diff --git a/doc/database/db_post-thread-user.md b/doc/database/db_post-thread-user.md index a89d94c96f..d00e852547 100644 --- a/doc/database/db_post-thread-user.md +++ b/doc/database/db_post-thread-user.md @@ -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 | diff --git a/doc/database/db_post-thread.md b/doc/database/db_post-thread.md index b90fb2ab55..959927a468 100644 --- a/doc/database/db_post-thread.md +++ b/doc/database/db_post-thread.md @@ -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 | diff --git a/src/Model/Item.php b/src/Model/Item.php index a0816b7fa7..a32601efc0 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -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; diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php index 110fc47e02..33cbfc98a4 100644 --- a/src/Protocol/ActivityPub/Processor.php +++ b/src/Protocol/ActivityPub/Processor.php @@ -320,13 +320,22 @@ class Processor $item['object-type'] = Activity\ObjectType::COMMENT; } - if (!empty($activity['conversation'])) { - $item['conversation'] = $activity['conversation']; - } elseif (!empty($activity['context'])) { - $item['conversation'] = $activity['context']; + if (!empty($activity['context'])) { + $item['context'] = $activity['context']; } - if (!empty($item['conversation'])) { + if (!empty($activity['conversation'])) { + $item['conversation'] = $activity['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]); diff --git a/src/Protocol/ActivityPub/Queue.php b/src/Protocol/ActivityPub/Queue.php index 5d062bd58d..53761585ff 100644 --- a/src/Protocol/ActivityPub/Queue.php +++ b/src/Protocol/ActivityPub/Queue.php @@ -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; } diff --git a/src/Protocol/ActivityPub/Transmitter.php b/src/Protocol/ActivityPub/Transmitter.php index d76257b9d9..9308cb11b0 100644 --- a/src/Protocol/ActivityPub/Transmitter.php +++ b/src/Protocol/ActivityPub/Transmitter.php @@ -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)) { diff --git a/src/Worker/ExpirePosts.php b/src/Worker/ExpirePosts.php index 30da0a6cff..69650365bf 100644 --- a/src/Worker/ExpirePosts.php +++ b/src/Worker/ExpirePosts.php @@ -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`) diff --git a/static/dbstructure.config.php b/static/dbstructure.config.php index a020e441de..b8b17ef044 100644 --- a/static/dbstructure.config.php +++ b/static/dbstructure.config.php @@ -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"], diff --git a/static/dbview.config.php b/static/dbview.config.php index 29756b6af4..ce06004d96 100644 --- a/static/dbview.config.php +++ b/static/dbview.config.php @@ -261,6 +261,8 @@ "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"], @@ -424,6 +426,7 @@ 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` @@ -450,6 +453,8 @@ "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"], @@ -612,6 +617,7 @@ 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` @@ -637,6 +643,8 @@ "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"], @@ -799,6 +807,7 @@ 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` @@ -825,6 +834,8 @@ "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"], @@ -986,6 +997,7 @@ 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` @@ -1007,6 +1019,8 @@ "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"], @@ -1136,6 +1150,7 @@ 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` @@ -1155,6 +1170,8 @@ "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"], @@ -1286,6 +1303,7 @@ 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`