Pinned posts now work for visitors in the intended way

This commit is contained in:
Michael 2019-11-08 06:52:44 +00:00
parent 2200996d44
commit fc94cad5f2
4 changed files with 34 additions and 10 deletions

View File

@ -801,10 +801,12 @@ function conversation(App $a, array $items, Pager $pager, $mode, $update, $previ
/** /**
* Fetch all comments from a query. Additionally set the newest resharer as thread owner. * Fetch all comments from a query. Additionally set the newest resharer as thread owner.
* *
* @param $thread_items Database statement with thread posts * @param array $thread_items Database statement with thread posts
* @param boolean $pinned Is the item pinned?
*
* @return array items with parents and comments * @return array items with parents and comments
*/ */
function conversation_fetch_comments($thread_items) { function conversation_fetch_comments($thread_items, $pinned) {
$comments = []; $comments = [];
$parentlines = []; $parentlines = [];
$lineno = 0; $lineno = 0;
@ -822,6 +824,10 @@ function conversation_fetch_comments($thread_items) {
$parentlines[] = $lineno; $parentlines[] = $lineno;
} }
if ($row['gravity'] == GRAVITY_PARENT) {
$row['pinned'] = $pinned;
}
$comments[] = $row; $comments[] = $row;
$lineno++; $lineno++;
} }
@ -872,7 +878,7 @@ function conversation_add_children(array $parents, $block_authors, $order, $uid)
$thread_items = Item::selectForUser(local_user(), array_merge(Item::DISPLAY_FIELDLIST, ['contact-uid', 'gravity']), $condition, $params); $thread_items = Item::selectForUser(local_user(), array_merge(Item::DISPLAY_FIELDLIST, ['contact-uid', 'gravity']), $condition, $params);
$comments = conversation_fetch_comments($thread_items); $comments = conversation_fetch_comments($thread_items, $parent['pinned'] ?? false);
if (count($comments) != 0) { if (count($comments) != 0) {
$items = array_merge($items, $comments); $items = array_merge($items, $comments);

View File

@ -148,11 +148,13 @@ class Item extends BaseObject
* *
* @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 $params Array of several parameters
* *
* @return boolean|object * @return boolean|object
* @throws \Exception * @throws \Exception
*/ */
public static function selectPinned(int $uid, array $selected = []) public static function selectPinned(int $uid, array $selected = [], array $condition = [], $params = [])
{ {
$useritems = DBA::select('user-item', ['iid'], ['uid' => $uid, 'pinned' => true]); $useritems = DBA::select('user-item', ['iid'], ['uid' => $uid, 'pinned' => true]);
if (!DBA::isResult($useritems)) { if (!DBA::isResult($useritems)) {
@ -165,7 +167,25 @@ class Item extends BaseObject
} }
DBA::close($useritems); DBA::close($useritems);
return self::selectThreadForUser($uid, $selected, ['iid' => $pinned]); if (empty($pinned)) {
return [];
}
if (empty($condition) || !is_array($condition)) {
$condition = ['iid' => $pinned];
} else {
reset($condition);
$first_key = key($condition);
if (!is_int($first_key)) {
$condition['iid'] = $pinned;
} else {
$values_string = substr(str_repeat("?, ", count($pinned)), 0, -2);
$condition[0] = '(' . $condition[0] . ") AND `iid` IN (" . $values_string . ")";
$condition = array_merge($condition, $pinned);
}
}
return self::selectThreadForUser($uid, $selected, $condition, $params);
} }
/** /**

View File

@ -350,7 +350,7 @@ class Profile extends BaseModule
$items = DBA::toArray($items_stmt); $items = DBA::toArray($items_stmt);
if ($pager->getStart() == 0 && !empty($a->profile['profile_uid'])) { if ($pager->getStart() == 0 && !empty($a->profile['profile_uid'])) {
$pinned_items = Item::selectPinned($a->profile['profile_uid'], ['uri']); $pinned_items = Item::selectPinned($a->profile['profile_uid'], ['uri', 'pinned'], ['true' . $sql_extra]);
$pinned = Item::inArray($pinned_items); $pinned = Item::inArray($pinned_items);
$items = array_merge($items, $pinned); $items = array_merge($items, $pinned);
} }

View File

@ -193,6 +193,8 @@ class Post extends BaseObject
if (DBA::isResult($parent)) { if (DBA::isResult($parent)) {
$origin = $parent['origin']; $origin = $parent['origin'];
} }
} elseif ($item['pinned']) {
$pinned = L10n::t('pinned item');
} }
if ($origin && ($item['id'] != $item['parent']) && ($item['network'] == Protocol::ACTIVITYPUB)) { if ($origin && ($item['id'] != $item['parent']) && ($item['network'] == Protocol::ACTIVITYPUB)) {
@ -288,10 +290,6 @@ class Post extends BaseObject
if ($conv->getProfileOwner() == local_user() && ($item['uid'] != 0)) { if ($conv->getProfileOwner() == local_user() && ($item['uid'] != 0)) {
if ($origin) { if ($origin) {
if ($item['pinned']) {
$pinned = L10n::t('pinned item');
}
$ispinned = ($item['pinned'] ? 'pinned' : 'unpinned'); $ispinned = ($item['pinned'] ? 'pinned' : 'unpinned');
$pin = [ $pin = [