mirror of
https://github.com/friendica/friendica
synced 2025-04-27 01:50:11 +00:00
Merge pull request #8357 from annando/private
Support unlisted public posts
This commit is contained in:
commit
dd613cda45
30 changed files with 183 additions and 156 deletions
|
@ -113,6 +113,10 @@ class Item
|
|||
Activity::FOLLOW,
|
||||
Activity::ANNOUNCE];
|
||||
|
||||
const PUBLIC = 0;
|
||||
const PRIVATE = 1;
|
||||
const UNLISTED = 2;
|
||||
|
||||
private static $legacy_mode = null;
|
||||
|
||||
public static function isLegacyMode()
|
||||
|
@ -1542,7 +1546,7 @@ class Item
|
|||
$item['allow_gid'] = trim($item['allow_gid'] ?? '');
|
||||
$item['deny_cid'] = trim($item['deny_cid'] ?? '');
|
||||
$item['deny_gid'] = trim($item['deny_gid'] ?? '');
|
||||
$item['private'] = intval($item['private'] ?? 0);
|
||||
$item['private'] = intval($item['private'] ?? self::PUBLIC);
|
||||
$item['body'] = trim($item['body'] ?? '');
|
||||
$item['tag'] = trim($item['tag'] ?? '');
|
||||
$item['attach'] = trim($item['attach'] ?? '');
|
||||
|
@ -1738,8 +1742,8 @@ class Item
|
|||
* The original author commented, but as this is a comment, the permissions
|
||||
* weren't fixed up so it will still show the comment as private unless we fix it here.
|
||||
*/
|
||||
if ((intval($parent['forum_mode']) == 1) && $parent['private']) {
|
||||
$item['private'] = 0;
|
||||
if ((intval($parent['forum_mode']) == 1) && ($parent['private'] != self::PUBLIC)) {
|
||||
$item['private'] = self::PUBLIC;
|
||||
}
|
||||
|
||||
// If its a post that originated here then tag the thread as "mention"
|
||||
|
@ -1809,7 +1813,7 @@ class Item
|
|||
|
||||
// ACL settings
|
||||
if (strlen($allow_cid) || strlen($allow_gid) || strlen($deny_cid) || strlen($deny_gid)) {
|
||||
$private = 1;
|
||||
$private = self::PRIVATE;
|
||||
} else {
|
||||
$private = $item['private'];
|
||||
}
|
||||
|
@ -2218,7 +2222,7 @@ class Item
|
|||
// Only distribute public items from native networks
|
||||
$condition = ['id' => $itemid, 'uid' => 0,
|
||||
'network' => array_merge(Protocol::FEDERATED ,['']),
|
||||
'visible' => true, 'deleted' => false, 'moderated' => false, 'private' => false];
|
||||
'visible' => true, 'deleted' => false, 'moderated' => false, 'private' => [self::PUBLIC, self::UNLISTED]];
|
||||
$item = self::selectFirst(self::ITEM_FIELDLIST, $condition);
|
||||
if (!DBA::isResult($item)) {
|
||||
return;
|
||||
|
@ -2368,7 +2372,7 @@ class Item
|
|||
}
|
||||
|
||||
// Is it a visible public post?
|
||||
if (!$item["visible"] || $item["deleted"] || $item["moderated"] || $item["private"]) {
|
||||
if (!$item["visible"] || $item["deleted"] || $item["moderated"] || ($item["private"] == Item::PRIVATE)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2559,7 +2563,7 @@ class Item
|
|||
Contact::unmarkForArchival($contact);
|
||||
}
|
||||
|
||||
$update = (!$arr['private'] && ((($arr['author-link'] ?? '') === ($arr['owner-link'] ?? '')) || ($arr["parent-uri"] === $arr["uri"])));
|
||||
$update = (($arr['private'] != self::PRIVATE) && ((($arr['author-link'] ?? '') === ($arr['owner-link'] ?? '')) || ($arr["parent-uri"] === $arr["uri"])));
|
||||
|
||||
// Is it a forum? Then we don't care about the rules from above
|
||||
if (!$update && in_array($arr["network"], [Protocol::ACTIVITYPUB, Protocol::DFRN]) && ($arr["parent-uri"] === $arr["uri"])) {
|
||||
|
@ -2573,7 +2577,7 @@ class Item
|
|||
['id' => $arr['contact-id']]);
|
||||
}
|
||||
// Now do the same for the system wide contacts with uid=0
|
||||
if (!$arr['private']) {
|
||||
if ($arr['private'] != self::PRIVATE) {
|
||||
DBA::update('contact', ['success_update' => $arr['received'], 'last-item' => $arr['received']],
|
||||
['id' => $arr['owner-id']]);
|
||||
|
||||
|
@ -2752,7 +2756,7 @@ class Item
|
|||
|
||||
// also reset all the privacy bits to the forum default permissions
|
||||
|
||||
$private = ($user['allow_cid'] || $user['allow_gid'] || $user['deny_cid'] || $user['deny_gid']) ? 1 : 0;
|
||||
$private = ($user['allow_cid'] || $user['allow_gid'] || $user['deny_cid'] || $user['deny_gid']) ? self::PRIVATE : self::PUBLIC;
|
||||
|
||||
$psid = PermissionSet::getIdFromACL(
|
||||
$user['uid'],
|
||||
|
@ -2799,7 +2803,7 @@ class Item
|
|||
return false;
|
||||
}
|
||||
|
||||
if (($contact['network'] != Protocol::FEED) && $datarray['private']) {
|
||||
if (($contact['network'] != Protocol::FEED) && ($datarray['private'] == self::PRIVATE)) {
|
||||
Logger::log('Not public', Logger::DEBUG);
|
||||
return false;
|
||||
}
|
||||
|
@ -2837,7 +2841,7 @@ class Item
|
|||
$urlpart = parse_url($datarray2['author-link']);
|
||||
$datarray["app"] = $urlpart["host"];
|
||||
} else {
|
||||
$datarray['private'] = 0;
|
||||
$datarray['private'] = self::PUBLIC;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3381,7 +3385,7 @@ class Item
|
|||
*
|
||||
* default permissions - anonymous user
|
||||
*/
|
||||
$sql = " AND NOT `item`.`private`";
|
||||
$sql = sprintf(" AND `item`.`private` != %d", self::PRIVATE);
|
||||
|
||||
// Profile owner - everything is visible
|
||||
if ($local_user && ($local_user == $owner_id)) {
|
||||
|
@ -3397,12 +3401,12 @@ class Item
|
|||
$set = PermissionSet::get($owner_id, $remote_user);
|
||||
|
||||
if (!empty($set)) {
|
||||
$sql_set = " OR (`item`.`private` IN (1,2) AND `item`.`wall` AND `item`.`psid` IN (" . implode(',', $set) . "))";
|
||||
$sql_set = sprintf(" OR (`item`.`private` = %d AND `item`.`wall` AND `item`.`psid` IN (", self::PRIVATE) . implode(',', $set) . "))";
|
||||
} else {
|
||||
$sql_set = '';
|
||||
}
|
||||
|
||||
$sql = " AND (NOT `item`.`private`" . $sql_set . ")";
|
||||
$sql = sprintf(" AND (`item`.`private` != %d", self::PRIVATE) . $sql_set . ")";
|
||||
}
|
||||
|
||||
return $sql;
|
||||
|
@ -3504,7 +3508,7 @@ class Item
|
|||
continue;
|
||||
}
|
||||
|
||||
if ((local_user() == $item['uid']) && ($item['private'] == 1) && ($item['contact-id'] != $app->contact['id']) && ($item['network'] == Protocol::DFRN)) {
|
||||
if ((local_user() == $item['uid']) && ($item['private'] == self::PRIVATE) && ($item['contact-id'] != $app->contact['id']) && ($item['network'] == Protocol::DFRN)) {
|
||||
$img_url = 'redir/' . $item['contact-id'] . '?url=' . urlencode($mtch[1]);
|
||||
$item['body'] = str_replace($mtch[0], '[img]' . $img_url . '[/img]', $item['body']);
|
||||
}
|
||||
|
@ -3682,7 +3686,7 @@ class Item
|
|||
$ret["title"] = DI::l10n()->t('link to source');
|
||||
}
|
||||
|
||||
} elseif (!empty($item['plink']) && ($item['private'] != 1)) {
|
||||
} elseif (!empty($item['plink']) && ($item['private'] != self::PRIVATE)) {
|
||||
$ret = [
|
||||
'href' => $item['plink'],
|
||||
'orig' => $item['plink'],
|
||||
|
|
|
@ -82,7 +82,7 @@ class Term
|
|||
WHERE `thread`.`visible`
|
||||
AND NOT `thread`.`deleted`
|
||||
AND NOT `thread`.`moderated`
|
||||
AND NOT `thread`.`private`
|
||||
AND `thread`.`private` = ?
|
||||
AND t.`uid` = 0
|
||||
AND t.`otype` = ?
|
||||
AND t.`type` = ?
|
||||
|
@ -91,6 +91,7 @@ class Term
|
|||
GROUP BY `term`
|
||||
ORDER BY `score` DESC
|
||||
LIMIT ?",
|
||||
Item::PUBLIC,
|
||||
Term::OBJECT_TYPE_POST,
|
||||
Term::HASHTAG,
|
||||
$period,
|
||||
|
@ -122,11 +123,10 @@ class Term
|
|||
FROM `term` t
|
||||
JOIN `item` i ON i.`id` = t.`oid` AND i.`uid` = t.`uid`
|
||||
JOIN `thread` ON `thread`.`iid` = i.`id`
|
||||
JOIN `user` ON `user`.`uid` = `thread`.`uid` AND NOT `user`.`hidewall`
|
||||
WHERE `thread`.`visible`
|
||||
AND NOT `thread`.`deleted`
|
||||
AND NOT `thread`.`moderated`
|
||||
AND NOT `thread`.`private`
|
||||
AND `thread`.`private` = ?
|
||||
AND `thread`.`wall`
|
||||
AND `thread`.`origin`
|
||||
AND t.`otype` = ?
|
||||
|
@ -136,6 +136,7 @@ class Term
|
|||
GROUP BY `term`
|
||||
ORDER BY `score` DESC
|
||||
LIMIT ?",
|
||||
Item::PUBLIC,
|
||||
Term::OBJECT_TYPE_POST,
|
||||
Term::HASHTAG,
|
||||
$period,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue