1
1
Fork 0

post/thread views are renamed, search bugs fixed

This commit is contained in:
Michael 2021-02-22 19:47:08 +00:00
parent 574f778411
commit 1792046a4f
20 changed files with 83 additions and 77 deletions

View file

@ -1462,10 +1462,10 @@ CREATE TABLE IF NOT EXISTS `workerqueue` (
) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Background tasks queue entries'; ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Background tasks queue entries';
-- --
-- VIEW post-view -- VIEW post-user-view
-- --
DROP VIEW IF EXISTS `post-view`; DROP VIEW IF EXISTS `post-user-view`;
CREATE VIEW `post-view` AS SELECT CREATE VIEW `post-user-view` AS SELECT
`post-user`.`id` AS `id`, `post-user`.`id` AS `id`,
`post-user`.`id` AS `post-user-id`, `post-user`.`id` AS `post-user-id`,
`post-user`.`uid` AS `uid`, `post-user`.`uid` AS `uid`,
@ -1620,10 +1620,10 @@ CREATE VIEW `post-view` AS SELECT
LEFT JOIN `contact` AS `parent-post-author` ON `parent-post-author`.`id` = `parent-post`.`author-id`; LEFT JOIN `contact` AS `parent-post-author` ON `parent-post-author`.`id` = `parent-post`.`author-id`;
-- --
-- VIEW post-thread-view -- VIEW post-thread-user-view
-- --
DROP VIEW IF EXISTS `post-thread-view`; DROP VIEW IF EXISTS `post-thread-user-view`;
CREATE VIEW `post-thread-view` AS SELECT CREATE VIEW `post-thread-user-view` AS SELECT
`post-user`.`id` AS `id`, `post-user`.`id` AS `id`,
`post-user`.`id` AS `post-user-id`, `post-user`.`id` AS `post-user-id`,
`post-thread-user`.`uid` AS `uid`, `post-thread-user`.`uid` AS `uid`,
@ -2034,8 +2034,10 @@ CREATE VIEW `tag-search-view` AS SELECT
`post-user`.`private` AS `private`, `post-user`.`private` AS `private`,
`post-user`.`wall` AS `wall`, `post-user`.`wall` AS `wall`,
`post-user`.`origin` AS `origin`, `post-user`.`origin` AS `origin`,
`post-user`.`global` AS `global`,
`post-user`.`gravity` AS `gravity`, `post-user`.`gravity` AS `gravity`,
`post-user`.`received` AS `received`, `post-user`.`received` AS `received`,
`post-user`.`network` AS `network`,
`tag`.`name` AS `name` `tag`.`name` AS `name`
FROM `post-tag` FROM `post-tag`
INNER JOIN `tag` ON `tag`.`id` = `post-tag`.`tid` INNER JOIN `tag` ON `tag`.`id` = `post-tag`.`tid`

View file

@ -6007,7 +6007,7 @@ function bindComments(&$data)
} }
$idStr = DBA::escape(implode(', ', $ids)); $idStr = DBA::escape(implode(', ', $ids));
$sql = "SELECT `parent`, COUNT(*) as comments FROM `post-view` WHERE `parent` IN ($idStr) AND `deleted` = ? AND `gravity`= ? GROUP BY `parent`"; $sql = "SELECT `parent`, COUNT(*) as comments FROM `post-user-view` WHERE `parent` IN ($idStr) AND `deleted` = ? AND `gravity`= ? GROUP BY `parent`";
$items = DBA::p($sql, 0, GRAVITY_COMMENT); $items = DBA::p($sql, 0, GRAVITY_COMMENT);
$itemsData = DBA::toArray($items); $itemsData = DBA::toArray($items);

View file

@ -1266,7 +1266,7 @@ function photos_content(App $a)
// as a "post" but displaying instead the photo it is linked to // as a "post" but displaying instead the photo it is linked to
/// @todo Rewrite this query. To do so, $sql_extra must be changed /// @todo Rewrite this query. To do so, $sql_extra must be changed
$linked_items = q("SELECT `id` FROM `post-view` WHERE `resource-id` = '%s' $sql_extra LIMIT 1", $linked_items = q("SELECT `id` FROM `post-user-view` WHERE `resource-id` = '%s' $sql_extra LIMIT 1",
DBA::escape($datum) DBA::escape($datum)
); );
if (DBA::isResult($linked_items)) { if (DBA::isResult($linked_items)) {

View file

@ -412,8 +412,8 @@ function ping_get_notifications($uid)
do { do {
$r = q( $r = q(
"SELECT `notify`.*, `post-view`.`visible`, `post-view`.`deleted` "SELECT `notify`.*, `post`.`visible`, `post`.`deleted`
FROM `notify` LEFT JOIN `post-view` ON `post-view`.`id` = `notify`.`iid` FROM `notify` LEFT JOIN `post` ON `post`.`uri-id` = `notify`.`uri-id`
WHERE `notify`.`uid` = %d AND `notify`.`msg` != '' WHERE `notify`.`uid` = %d AND `notify`.`msg` != ''
AND NOT (`notify`.`type` IN (%d, %d)) AND NOT (`notify`.`type` IN (%d, %d))
AND $seensql `notify`.`seen` ORDER BY `notify`.`date` $order LIMIT %d, 50", AND $seensql `notify`.`seen` ORDER BY `notify`.`date` $order LIMIT %d, 50",

View file

@ -209,9 +209,9 @@ class ForumManager
public static function countUnseenItems() public static function countUnseenItems()
{ {
$stmtContacts = DBA::p( $stmtContacts = DBA::p(
"SELECT `contact`.`id`, `contact`.`name`, COUNT(*) AS `count` FROM `post-view` "SELECT `contact`.`id`, `contact`.`name`, COUNT(*) AS `count` FROM `post-user-view`
INNER JOIN `contact` ON `post-view`.`contact-id` = `contact`.`id` INNER JOIN `contact` ON `post-user-view`.`contact-id` = `contact`.`id`
WHERE `post-view`.`uid` = ? AND `post-view`.`visible` AND NOT `post-view`.`deleted` AND `post-view`.`unseen` WHERE `post-user-view`.`uid` = ? AND `post-user-view`.`visible` AND NOT `post-user-view`.`deleted` AND `post-user-view`.`unseen`
AND `contact`.`network` IN (?, ?) AND `contact`.`contact-type` = ? AND `contact`.`network` IN (?, ?) AND `contact`.`contact-type` = ?
AND NOT `contact`.`blocked` AND NOT `contact`.`hidden` AND NOT `contact`.`blocked` AND NOT `contact`.`hidden`
AND NOT `contact`.`pending` AND NOT `contact`.`archive` AND NOT `contact`.`pending` AND NOT `contact`.`archive`

View file

@ -99,7 +99,7 @@ class OEmbed
$html_text = DI::httpRequest()->fetch($embedurl, 15, 'text/*'); $html_text = DI::httpRequest()->fetch($embedurl, 15, 'text/*');
if ($html_text) { if ($html_text) {
$dom = new DOMDocument(); $dom = new DOMDocument();
if ($dom->loadHTML($html_text)) { if (@$dom->loadHTML($html_text)) {
$xpath = new DOMXPath($dom); $xpath = new DOMXPath($dom);
foreach ( foreach (
$xpath->query("//link[@type='application/json+oembed'] | //link[@type='text/json+oembed']") $xpath->query("//link[@type='application/json+oembed'] | //link[@type='text/json+oembed']")

View file

@ -87,24 +87,24 @@ class TagCloud
*/ */
private static function tagadelic($uid, $count = 0, $owner_id = 0, $flags = '', $type = Tag::HASHTAG) private static function tagadelic($uid, $count = 0, $owner_id = 0, $flags = '', $type = Tag::HASHTAG)
{ {
$sql_options = Item::getPermissionsSQLByUserId($uid, 'post-view'); $sql_options = Item::getPermissionsSQLByUserId($uid, 'post-user-view');
$limit = $count ? sprintf('LIMIT %d', intval($count)) : ''; $limit = $count ? sprintf('LIMIT %d', intval($count)) : '';
if ($flags) { if ($flags) {
if ($flags === 'wall') { if ($flags === 'wall') {
$sql_options .= ' AND `post-view`.`wall` '; $sql_options .= ' AND `post-user-view`.`wall` ';
} }
} }
if ($owner_id) { if ($owner_id) {
$sql_options .= ' AND `post-view`.`owner-id` = ' . intval($owner_id) . ' '; $sql_options .= ' AND `post-user-view`.`owner-id` = ' . intval($owner_id) . ' ';
} }
// Fetch tags // Fetch tags
$tag_stmt = DBA::p("SELECT `name`, COUNT(`name`) AS `total` FROM `tag-search-view` $tag_stmt = DBA::p("SELECT `name`, COUNT(`name`) AS `total` FROM `tag-search-view`
LEFT JOIN `post-view` ON `tag-search-view`.`uri-id` = `post-view`.`uri-id` LEFT JOIN `post-user-view` ON `tag-search-view`.`uri-id` = `post-user-view`.`uri-id` AND `tag-search-view`.`uid` = `post-user-view`.`uid`
WHERE `tag-search-view`.`uid` = ? WHERE `tag-search-view`.`uid` = ?
AND `post-view`.`visible` AND NOT `post-view`.`deleted` AND `post-user-view`.`visible` AND NOT `post-user-view`.`deleted`
$sql_options $sql_options
GROUP BY `name` ORDER BY `total` DESC $limit", GROUP BY `name` ORDER BY `total` DESC $limit",
$uid $uid

View file

@ -516,8 +516,8 @@ class Event
} }
// Query for the event by event id // Query for the event by event id
$events = DBA::toArray(DBA::p("SELECT `event`.*, `post-view`.`id` AS `itemid` FROM `event` $events = DBA::toArray(DBA::p("SELECT `event`.*, `post-user-view`.`id` AS `itemid` FROM `event`
LEFT JOIN `post-view` ON `post-view`.`event-id` = `event`.`id` AND `post-view`.`uid` = `event`.`uid` LEFT JOIN `post-user-view` ON `post-user-view`.`event-id` = `event`.`id` AND `post-user-view`.`uid` = `event`.`uid`
WHERE `event`.`uid` = %d AND `event`.`id` = %d $sql_extra", WHERE `event`.`uid` = %d AND `event`.`id` = %d $sql_extra",
$owner_uid, $event_id)); $owner_uid, $event_id));
@ -555,8 +555,8 @@ class Event
// Query for the event by date. // Query for the event by date.
// @todo Slow query (518 seconds to run), to be optimzed // @todo Slow query (518 seconds to run), to be optimzed
$events = DBA::toArray(DBA::p("SELECT `event`.*, `post-view`.`id` AS `itemid` FROM `event` $events = DBA::toArray(DBA::p("SELECT `event`.*, `post-user-view`.`id` AS `itemid` FROM `event`
LEFT JOIN `post-view` ON `post-view`.`event-id` = `event`.`id` AND `post-view`.`uid` = `event`.`uid` LEFT JOIN `post-user-view` ON `post-user-view`.`event-id` = `event`.`id` AND `post-user-view`.`uid` = `event`.`uid`
WHERE `event`.`uid` = ? AND `event`.`ignore` = ? WHERE `event`.`uid` = ? AND `event`.`ignore` = ?
AND ((NOT `adjust` AND (`finish` >= ? OR (`nofinish` AND `start` >= ?)) AND `start` <= ?) AND ((NOT `adjust` AND (`finish` >= ? OR (`nofinish` AND `start` >= ?)) AND `start` <= ?)
OR (`adjust` AND (`finish` >= ? OR (`nofinish` AND `start` >= ?)) AND `start` <= ?))" . $sql_extra, OR (`adjust` AND (`finish` >= ? OR (`nofinish` AND `start` >= ?)) AND `start` <= ?))" . $sql_extra,

View file

@ -160,7 +160,7 @@ class Group
public static function countUnseen() public static function countUnseen()
{ {
$stmt = DBA::p("SELECT `group`.`id`, `group`.`name`, $stmt = DBA::p("SELECT `group`.`id`, `group`.`name`,
(SELECT COUNT(*) FROM `post-view` (SELECT COUNT(*) FROM `post-user-view`
WHERE `uid` = ? WHERE `uid` = ?
AND `unseen` AND `unseen`
AND `contact-id` IN AND `contact-id` IN

View file

@ -1190,7 +1190,7 @@ class Item
*/ */
public static function distribute($itemid, $signed_text = '') public static function distribute($itemid, $signed_text = '')
{ {
$condition = ["`id` IN (SELECT `parent` FROM `post-view` WHERE `id` = ?)", $itemid]; $condition = ["`id` IN (SELECT `parent` FROM `post-user-view` WHERE `id` = ?)", $itemid];
$parent = Post::selectFirst(['owner-id'], $condition); $parent = Post::selectFirst(['owner-id'], $condition);
if (!DBA::isResult($parent)) { if (!DBA::isResult($parent)) {
Logger::warning('Item not found', ['condition' => $condition]); Logger::warning('Item not found', ['condition' => $condition]);

View file

@ -132,7 +132,7 @@ class Post
* @throws \Exception * @throws \Exception
*/ */
public static function exists($condition) { public static function exists($condition) {
return DBA::exists('post-view', $condition); return DBA::exists('post-user-view', $condition);
} }
/** /**
@ -153,7 +153,7 @@ class Post
*/ */
public static function count(array $condition = [], array $params = []) public static function count(array $condition = [], array $params = [])
{ {
return DBA::count('post-view', $condition, $params); return DBA::count('post-user-view', $condition, $params);
} }
/** /**
@ -211,7 +211,7 @@ class Post
/** /**
* Select rows from the given view * Select rows from the given view
* *
* @param string $view View (post-view or post-thread-view) * @param string $view View (post-user-view or post-thread-user-view)
* @param array $selected Array of selected fields, empty for all * @param array $selected Array of selected fields, empty for all
* @param array $condition Array of fields for condition * @param array $condition Array of fields for condition
* @param array $params Array of several parameters * @param array $params Array of several parameters
@ -224,7 +224,7 @@ class Post
if (empty($selected)) { if (empty($selected)) {
$selected = array_merge(Item::DISPLAY_FIELDLIST, Item::ITEM_FIELDLIST); $selected = array_merge(Item::DISPLAY_FIELDLIST, Item::ITEM_FIELDLIST);
if ($view == 'post-thread-view') { if ($view == 'post-thread-user-view') {
$selected = array_merge($selected, ['ignored']); $selected = array_merge($selected, ['ignored']);
} }
} }
@ -246,7 +246,7 @@ class Post
*/ */
public static function select(array $selected = [], array $condition = [], $params = []) public static function select(array $selected = [], array $condition = [], $params = [])
{ {
return self::selectView('post-view', $selected, $condition, $params); return self::selectView('post-user-view', $selected, $condition, $params);
} }
/** /**
@ -261,13 +261,13 @@ class Post
*/ */
public static function selectThread(array $selected = [], array $condition = [], $params = []) public static function selectThread(array $selected = [], array $condition = [], $params = [])
{ {
return self::selectView('post-thread-view', $selected, $condition, $params); return self::selectView('post-thread-user-view', $selected, $condition, $params);
} }
/** /**
* Select rows from the given view for a given user * Select rows from the given view for a given user
* *
* @param string $view View (post-view or post-thread-view) * @param string $view View (post-user-view or post-thread-user-view)
* @param integer $uid User ID * @param integer $uid User ID
* @param array $selected Array of selected fields, empty for all * @param array $selected Array of selected fields, empty for all
* @param array $condition Array of fields for condition * @param array $condition Array of fields for condition
@ -329,7 +329,7 @@ class Post
*/ */
public static function selectForUser($uid, array $selected = [], array $condition = [], $params = []) public static function selectForUser($uid, array $selected = [], array $condition = [], $params = [])
{ {
return self::selectViewForUser('post-view', $uid, $selected, $condition, $params); return self::selectViewForUser('post-user-view', $uid, $selected, $condition, $params);
} }
/** /**
@ -345,7 +345,7 @@ class Post
*/ */
public static function selectThreadForUser($uid, array $selected = [], array $condition = [], $params = []) public static function selectThreadForUser($uid, array $selected = [], array $condition = [], $params = [])
{ {
return self::selectViewForUser('post-thread-view', $uid, $selected, $condition, $params); return self::selectViewForUser('post-thread-user-view', $uid, $selected, $condition, $params);
} }
/** /**
@ -443,7 +443,7 @@ class Post
$update_fields = DBStructure::getFieldsForTable('post-user', $fields); $update_fields = DBStructure::getFieldsForTable('post-user', $fields);
if (!empty($update_fields)) { if (!empty($update_fields)) {
$affected_count = 0; $affected_count = 0;
$posts = DBA::select('post-view', ['post-user-id'], $condition); $posts = DBA::select('post-user-view', ['post-user-id'], $condition);
while ($rows = DBA::toArray($posts, false, 100)) { while ($rows = DBA::toArray($posts, false, 100)) {
$puids = array_column($rows, 'post-user-id'); $puids = array_column($rows, 'post-user-id');
if (!DBA::update('post-user', $update_fields, ['id' => $puids])) { if (!DBA::update('post-user', $update_fields, ['id' => $puids])) {
@ -460,7 +460,7 @@ class Post
$update_fields = DBStructure::getFieldsForTable('post-content', $fields); $update_fields = DBStructure::getFieldsForTable('post-content', $fields);
if (!empty($update_fields)) { if (!empty($update_fields)) {
$affected_count = 0; $affected_count = 0;
$posts = DBA::select('post-view', ['uri-id'], $condition, ['group_by' => ['uri-id']]); $posts = DBA::select('post-user-view', ['uri-id'], $condition, ['group_by' => ['uri-id']]);
while ($rows = DBA::toArray($posts, false, 100)) { while ($rows = DBA::toArray($posts, false, 100)) {
$uriids = array_column($rows, 'uri-id'); $uriids = array_column($rows, 'uri-id');
if (!DBA::update('post-content', $update_fields, ['uri-id' => $uriids])) { if (!DBA::update('post-content', $update_fields, ['uri-id' => $uriids])) {
@ -477,7 +477,7 @@ class Post
$update_fields = DBStructure::getFieldsForTable('post', $fields); $update_fields = DBStructure::getFieldsForTable('post', $fields);
if (!empty($update_fields)) { if (!empty($update_fields)) {
$affected_count = 0; $affected_count = 0;
$posts = DBA::select('post-view', ['uri-id'], $condition, ['group_by' => ['uri-id']]); $posts = DBA::select('post-user-view', ['uri-id'], $condition, ['group_by' => ['uri-id']]);
while ($rows = DBA::toArray($posts, false, 100)) { while ($rows = DBA::toArray($posts, false, 100)) {
$uriids = array_column($rows, 'uri-id'); $uriids = array_column($rows, 'uri-id');
if (!DBA::update('post', $update_fields, ['uri-id' => $uriids])) { if (!DBA::update('post', $update_fields, ['uri-id' => $uriids])) {
@ -494,7 +494,7 @@ class Post
$update_fields = Post\DeliveryData::extractFields($fields); $update_fields = Post\DeliveryData::extractFields($fields);
if (!empty($update_fields)) { if (!empty($update_fields)) {
$affected_count = 0; $affected_count = 0;
$posts = DBA::select('post-view', ['uri-id'], $condition, ['group_by' => ['uri-id']]); $posts = DBA::select('post-user-view', ['uri-id'], $condition, ['group_by' => ['uri-id']]);
while ($rows = DBA::toArray($posts, false, 100)) { while ($rows = DBA::toArray($posts, false, 100)) {
$uriids = array_column($rows, 'uri-id'); $uriids = array_column($rows, 'uri-id');
if (!DBA::update('post-delivery-data', $update_fields, ['uri-id' => $uriids])) { if (!DBA::update('post-delivery-data', $update_fields, ['uri-id' => $uriids])) {
@ -511,7 +511,7 @@ class Post
$update_fields = DBStructure::getFieldsForTable('post-thread', $fields); $update_fields = DBStructure::getFieldsForTable('post-thread', $fields);
if (!empty($update_fields)) { if (!empty($update_fields)) {
$affected_count = 0; $affected_count = 0;
$posts = DBA::select('post-view', ['uri-id'], $thread_condition, ['group_by' => ['uri-id']]); $posts = DBA::select('post-user-view', ['uri-id'], $thread_condition, ['group_by' => ['uri-id']]);
while ($rows = DBA::toArray($posts, false, 100)) { while ($rows = DBA::toArray($posts, false, 100)) {
$uriids = array_column($rows, 'uri-id'); $uriids = array_column($rows, 'uri-id');
if (!DBA::update('post-thread', $update_fields, ['uri-id' => $uriids])) { if (!DBA::update('post-thread', $update_fields, ['uri-id' => $uriids])) {
@ -528,7 +528,7 @@ class Post
$update_fields = DBStructure::getFieldsForTable('post-thread-user', $fields); $update_fields = DBStructure::getFieldsForTable('post-thread-user', $fields);
if (!empty($update_fields)) { if (!empty($update_fields)) {
$affected_count = 0; $affected_count = 0;
$posts = DBA::select('post-view', ['post-user-id'], $thread_condition); $posts = DBA::select('post-user-view', ['post-user-id'], $thread_condition);
while ($rows = DBA::toArray($posts, false, 100)) { while ($rows = DBA::toArray($posts, false, 100)) {
$thread_puids = array_column($rows, 'post-user-id'); $thread_puids = array_column($rows, 'post-user-id');
if (!DBA::update('post-thread-user', $update_fields, ['post-user-id' => $thread_puids])) { if (!DBA::update('post-thread-user', $update_fields, ['post-user-id' => $thread_puids])) {

View file

@ -109,8 +109,8 @@ class Content
public static function getURIIdListBySearch(string $search, int $uid = 0, int $start = 0, int $limit = 100, int $last_uriid = 0) public static function getURIIdListBySearch(string $search, int $uid = 0, int $start = 0, int $limit = 100, int $last_uriid = 0)
{ {
$condition = ["`uri-id` IN (SELECT `uri-id` FROM `post-content` WHERE MATCH (`title`, `content-warning`, `body`) AGAINST (? IN BOOLEAN MODE)) $condition = ["`uri-id` IN (SELECT `uri-id` FROM `post-content` WHERE MATCH (`title`, `content-warning`, `body`) AGAINST (? IN BOOLEAN MODE))
AND (NOT `private` OR (`private` AND `uid` = ?)) AND (`network` IN (?, ?, ?, ?) OR (`uid` = ? AND `uid` != ?))", AND (`uid` = ? OR (`uid` = ? AND NOT `global`)) AND (`network` IN (?, ?, ?, ?) OR (`uid` = ? AND `uid` != ?))",
$search, $uid, Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS, $uid, 0]; $search, 0, $uid, Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS, $uid, 0];
if (!empty($last_uriid)) { if (!empty($last_uriid)) {
$condition = DBA::mergeConditions($condition, ["`uri-id` < ?", $last_uriid]); $condition = DBA::mergeConditions($condition, ["`uri-id` < ?", $last_uriid]);
@ -118,7 +118,6 @@ class Content
$params = [ $params = [
'order' => ['uri-id' => true], 'order' => ['uri-id' => true],
'group_by' => ['uri-id'],
'limit' => [$start, $limit] 'limit' => [$start, $limit]
]; ];
@ -136,8 +135,8 @@ class Content
public static function countBySearch(string $search, int $uid = 0) public static function countBySearch(string $search, int $uid = 0)
{ {
$condition = ["`uri-id` IN (SELECT `uri-id` FROM `post-content` WHERE MATCH (`title`, `content-warning`, `body`) AGAINST (? IN BOOLEAN MODE)) $condition = ["`uri-id` IN (SELECT `uri-id` FROM `post-content` WHERE MATCH (`title`, `content-warning`, `body`) AGAINST (? IN BOOLEAN MODE))
AND (NOT `private` OR (`private` AND `uid` = ?)) AND (`network` IN (?, ?, ?, ?) OR (`uid` = ? AND `uid` != ?))", AND (`uid` = ? OR (`uid` = ? AND NOT `global`)) AND (`network` IN (?, ?, ?, ?) OR (`uid` = ? AND `uid` != ?))",
$search, $uid, Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS, $uid, 0]; $search, 0, $uid, Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS, $uid, 0];
return Post::count($condition); return Post::count($condition);
} }
} }

View file

@ -149,7 +149,7 @@ class UserNotification
// Add every user who participated so far in this thread // Add every user who participated so far in this thread
// This can only happen with participations on global items. (means: uid = 0) // This can only happen with participations on global items. (means: uid = 0)
$users = DBA::p("SELECT DISTINCT(`contact-uid`) AS `uid` FROM `post-view` $users = DBA::p("SELECT DISTINCT(`contact-uid`) AS `uid` FROM `post-user-view`
WHERE `contact-uid` != 0 AND `parent-uri-id` = ? AND `uid` = ?", $item['parent-uri-id'], $uid); WHERE `contact-uid` != 0 AND `parent-uri-id` = ? AND `uid` = ?", $item['parent-uri-id'], $uid);
while ($user = DBA::fetch($users)) { while ($user = DBA::fetch($users)) {
$uids[] = $user['uid']; $uids[] = $user['uid'];

View file

@ -455,12 +455,11 @@ class Tag
*/ */
public static function countByTag(string $search, int $uid = 0) public static function countByTag(string $search, int $uid = 0)
{ {
$condition = ["`name` = ? AND (NOT `private` OR (`private` AND `uid` = ?)) $condition = ["`name` = ? AND (`uid` = ? OR (`uid` = ? AND NOT `global`))
AND `uri-id` IN (SELECT `uri-id` FROM `post-view` WHERE `network` IN (?, ?, ?, ?))", AND (`network` IN (?, ?, ?, ?) OR (`uid` = ? AND `uid` != ?))",
$search, $uid, Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS]; $search, 0, $uid, Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS, $uid, 0];
$params = ['group_by' => ['uri-id']];
return DBA::count('tag-search-view', $condition, $params); return DBA::count('tag-search-view', $condition);
} }
/** /**
@ -475,9 +474,9 @@ class Tag
*/ */
public static function getURIIdListByTag(string $search, int $uid = 0, int $start = 0, int $limit = 100, int $last_uriid = 0) public static function getURIIdListByTag(string $search, int $uid = 0, int $start = 0, int $limit = 100, int $last_uriid = 0)
{ {
$condition = ["`name` = ? AND (NOT `private` OR (`private` AND `uid` = ?)) $condition = ["`name` = ? AND (`uid` = ? OR (`uid` = ? AND NOT `global`))
AND `uri-id` IN (SELECT `uri-id` FROM `post-view` WHERE `network` IN (?, ?, ?, ?))", AND (`network` IN (?, ?, ?, ?) OR (`uid` = ? AND `uid` != ?))",
$search, $uid, Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS]; $search, 0, $uid, Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS, $uid, 0];
if (!empty($last_uriid)) { if (!empty($last_uriid)) {
$condition = DBA::mergeConditions($condition, ["`uri-id` < ?", $last_uriid]); $condition = DBA::mergeConditions($condition, ["`uri-id` < ?", $last_uriid]);
@ -485,7 +484,6 @@ class Tag
$params = [ $params = [
'order' => ['uri-id' => true], 'order' => ['uri-id' => true],
'group_by' => ['uri-id'],
'limit' => [$start, $limit] 'limit' => [$start, $limit]
]; ];

View file

@ -62,11 +62,11 @@ class PublicTimeline extends BaseApi
'uid' => 0, 'network' => Protocol::FEDERATED]; 'uid' => 0, 'network' => Protocol::FEDERATED];
if ($local) { if ($local) {
$condition = DBA::mergeConditions($condition, ["`uri-id` IN (SELECT `uri-id` FROM `post-view` WHERE `origin`)"]); $condition = DBA::mergeConditions($condition, ["`uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE `origin`)"]);
} }
if ($remote) { if ($remote) {
$condition = DBA::mergeConditions($condition, ["NOT `uri-id` IN (SELECT `uri-id` FROM `post-view` WHERE `origin`)"]); $condition = DBA::mergeConditions($condition, ["NOT `uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE `origin`)"]);
} }
if (!empty($max_id)) { if (!empty($max_id)) {

View file

@ -336,7 +336,7 @@ class Community extends BaseModule
$condition[] = $item_id; $condition[] = $item_id;
} else { } else {
if (local_user() && !empty($_REQUEST['no_sharer'])) { if (local_user() && !empty($_REQUEST['no_sharer'])) {
$condition[0] .= " AND NOT EXISTS (SELECT `uri-id` FROM `post-user` WHERE `post-user`.`uri-id` = `post-thread-view`.`uri-id` AND `post-user`.`uid` = ?)"; $condition[0] .= " AND NOT EXISTS (SELECT `uri-id` FROM `post-user` WHERE `post-user`.`uri-id` = `post-thread-user-view`.`uri-id` AND `post-user`.`uid` = ?)";
$condition[] = local_user(); $condition[] = local_user();
} }

View file

@ -180,13 +180,11 @@ class Status extends BaseProfile
} }
$condition = DBA::mergeConditions($condition, ["((`gravity` = ? AND `wall`) OR $condition = DBA::mergeConditions($condition, ["((`gravity` = ? AND `wall`) OR
(`gravity` = ? AND `vid` = ? AND `origin` AND `thr-parent-id` IN (`gravity` = ? AND `vid` = ? AND `origin`
(SELECT `uri-id` FROM `post-view` AND EXISTS(SELECT `uri-id` FROM `post` WHERE `gravity` = ? AND `network` IN (?, ?, ?, ?)
WHERE `gravity` = ? AND `network` IN (?, ?, ?, ?) AND `uid` IN (?, ?) AND `uri-id` = `post-user-view`.`thr-parent-id`)))",
AND `uri-id` = `thr-parent-id`)))",
GRAVITY_PARENT, GRAVITY_ACTIVITY, Verb::getID(Activity::ANNOUNCE), GRAVITY_PARENT, GRAVITY_PARENT, GRAVITY_ACTIVITY, Verb::getID(Activity::ANNOUNCE), GRAVITY_PARENT,
Protocol::DFRN, Protocol::ACTIVITYPUB, Protocol::DIASPORA, Protocol::OSTATUS, Protocol::DFRN, Protocol::ACTIVITYPUB, Protocol::DIASPORA, Protocol::OSTATUS]);
0, $a->profile['uid']]);
$condition = DBA::mergeConditions($condition, ['uid' => $a->profile['uid'], 'network' => Protocol::FEDERATED, $condition = DBA::mergeConditions($condition, ['uid' => $a->profile['uid'], 'network' => Protocol::FEDERATED,
'visible' => true, 'deleted' => false]); 'visible' => true, 'deleted' => false]);

View file

@ -81,7 +81,7 @@ class Profile extends BaseModule
} }
$items_stmt = DBA::p( $items_stmt = DBA::p(
"SELECT DISTINCT(`parent-uri-id`) AS `uri-id`, MAX(`created`), MAX(`received`) FROM `post-view` "SELECT DISTINCT(`parent-uri-id`) AS `uri-id`, MAX(`created`), MAX(`received`) FROM `post-user-view`
WHERE `uid` = ? AND NOT `contact-blocked` AND NOT `contact-pending` WHERE `uid` = ? AND NOT `contact-blocked` AND NOT `contact-pending`
AND `visible` AND (NOT `deleted` OR `gravity` = ?) AND `visible` AND (NOT `deleted` OR `gravity` = ?)
AND `wall` $sql_extra4 $sql_extra AND `wall` $sql_extra4 $sql_extra

View file

@ -44,29 +44,36 @@ class Expire
if ($param == 'delete') { if ($param == 'delete') {
Logger::log('Delete expired items', Logger::DEBUG); Logger::log('Delete expired items', Logger::DEBUG);
// physically remove anything that has been deleted for more than two months // physically remove anything that has been deleted for more than two months
$condition = ["`deleted` AND `changed` < UTC_TIMESTAMP() - INTERVAL 60 DAY"]; $condition = ["`gravity` = ? AND `deleted` AND `changed` < UTC_TIMESTAMP() - INTERVAL 60 DAY", GRAVITY_PARENT];
$rows = Post::select(['guid', 'uri-id', 'uid'], $condition); $rows = Post::select(['guid', 'uri-id', 'uid'], $condition);
while ($row = Post::fetch($rows)) { while ($row = Post::fetch($rows)) {
Logger::info('Delete expired item', ['uri-id' => $row['uri-id'], 'guid' => $row['guid']]); Logger::info('Delete expired item', ['uri-id' => $row['uri-id'], 'guid' => $row['guid']]);
if (DBStructure::existsTable('item')) { if (DBStructure::existsTable('item')) {
DBA::delete('item', ['uri-id' => $row['uri-id'], 'uid' => $row['uid']]); DBA::delete('item', ['parent-uri-id' => $row['uri-id'], 'uid' => $row['uid']]);
} }
Post\User::delete(['uri-id' => $row['uri-id'], 'uid' => $row['uid']]); Post\User::delete(['parent-uri-id' => $row['uri-id'], 'uid' => $row['uid']]);
Post\ThreadUser::delete(['uri-id' => $row['uri-id'], 'uid' => $row['uid']]);
} }
DBA::close($rows); DBA::close($rows);
Logger::info('Deleting orphaned post-content - start'); Logger::info('Deleting orphaned post entries- start');
/// @todo Replace "item with "post-user" in the future when "item" is removed $condition = ["NOT EXISTS (SELECT `uri-id` FROM `post-user` WHERE `post-user`.`uri-id` = `post`.`uri-id`)"];
DBA::delete('post', $condition);
Logger::info('Orphaned post entries deleted', ['rows' => DBA::affectedRows()]);
Logger::info('Deleting orphaned post-content entries - start');
$condition = ["NOT EXISTS (SELECT `uri-id` FROM `post-user` WHERE `post-user`.`uri-id` = `post-content`.`uri-id`)"]; $condition = ["NOT EXISTS (SELECT `uri-id` FROM `post-user` WHERE `post-user`.`uri-id` = `post-content`.`uri-id`)"];
DBA::delete('post-content', $condition); DBA::delete('post-content', $condition);
Logger::info('Orphaned post-content deleted', ['rows' => DBA::affectedRows()]); Logger::info('Orphaned post-content entries deleted', ['rows' => DBA::affectedRows()]);
Logger::info('Deleting orphaned post-thread - start'); Logger::info('Deleting orphaned post-thread entries - start');
/// @todo Replace "item with "post-user" in the future when "item" is removed
$condition = ["NOT EXISTS (SELECT `uri-id` FROM `post-user` WHERE `post-user`.`uri-id` = `post-thread`.`uri-id`)"]; $condition = ["NOT EXISTS (SELECT `uri-id` FROM `post-user` WHERE `post-user`.`uri-id` = `post-thread`.`uri-id`)"];
DBA::delete('post-thread', $condition); DBA::delete('post-thread', $condition);
Logger::info('Orphaned item content deleted', ['rows' => DBA::affectedRows()]); Logger::info('Orphaned post-thread entries deleted', ['rows' => DBA::affectedRows()]);
Logger::info('Deleting orphaned post-thread-user entries - start');
$condition = ["NOT EXISTS (SELECT `uri-id` FROM `post-user` WHERE `post-user`.`uri-id` = `post-thread-user`.`uri-id`)"];
DBA::delete('post-thread-user', $condition);
Logger::info('Orphaned post-thread-user entries deleted', ['rows' => DBA::affectedRows()]);
Logger::log('Delete expired items - done', Logger::DEBUG); Logger::log('Delete expired items - done', Logger::DEBUG);
return; return;

View file

@ -37,7 +37,7 @@
*/ */
return [ return [
"post-view" => [ "post-user-view" => [
"fields" => [ "fields" => [
"id" => ["post-user", "id"], "id" => ["post-user", "id"],
"post-user-id" => ["post-user", "id"], "post-user-id" => ["post-user", "id"],
@ -193,7 +193,7 @@
LEFT JOIN `post-user` AS `parent-post` ON `parent-post`.`uri-id` = `post-user`.`parent-uri-id` AND `parent-post`.`uid` = `post-user`.`uid` LEFT JOIN `post-user` AS `parent-post` ON `parent-post`.`uri-id` = `post-user`.`parent-uri-id` AND `parent-post`.`uid` = `post-user`.`uid`
LEFT JOIN `contact` AS `parent-post-author` ON `parent-post-author`.`id` = `parent-post`.`author-id`" LEFT JOIN `contact` AS `parent-post-author` ON `parent-post-author`.`id` = `parent-post`.`author-id`"
], ],
"post-thread-view" => [ "post-thread-user-view" => [
"fields" => [ "fields" => [
"id" => ["post-user", "id"], "id" => ["post-user", "id"],
"post-user-id" => ["post-user", "id"], "post-user-id" => ["post-user", "id"],
@ -591,8 +591,10 @@
"private" => ["post-user", "private"], "private" => ["post-user", "private"],
"wall" => ["post-user", "wall"], "wall" => ["post-user", "wall"],
"origin" => ["post-user", "origin"], "origin" => ["post-user", "origin"],
"global" => ["post-user", "global"],
"gravity" => ["post-user", "gravity"], "gravity" => ["post-user", "gravity"],
"received" => ["post-user", "received"], "received" => ["post-user", "received"],
"network" => ["post-user", "network"],
"name" => ["tag", "name"], "name" => ["tag", "name"],
], ],
"query" => "FROM `post-tag` "query" => "FROM `post-tag`