}
}
- Post\Media::insertFromAttachmentData($item['uri-id'], $fields['body']);
-
$content_fields = ['raw-body' => trim($fields['raw-body'] ?? $fields['body'])];
// Remove all media attachments from the body and store them in the post-media table
$content_fields['raw-body'] = self::setHashtags($content_fields['raw-body']);
Post\Media::insertFromRelevantUrl($item['uri-id'], $content_fields['raw-body'], $fields['body'], $item['author-network']);
+
+ Post\Media::insertFromAttachmentData($item['uri-id'], $fields['body']);
+ $content_fields['raw-body'] = BBCode::removeAttachment($content_fields['raw-body']);
+
Post\Content::update($item['uri-id'], $content_fields);
}
public static function isValid(array $item): bool
{
// When there is no content then we don't post it
- if (($item['body'] . $item['title'] == '') && empty($item['quote-uri-id']) && (empty($item['uri-id']) || !Post\Media::existsByURIId($item['uri-id']))) {
+ if (($item['body'] . $item['title'] == '') && empty($item['quote-uri-id']) && empty($item['attachments']) && (empty($item['uri-id']) || !Post\Media::existsByURIId($item['uri-id']))) {
Logger::notice('No body, no title.');
return false;
}
/*
* Do we already have this item?
* We have to check several networks since Friendica posts could be repeated
- * via OStatus (maybe Diasporsa as well)
+ * via OStatus (maybe Diaspora as well)
*/
$duplicate = self::getDuplicateID($item);
if ($duplicate) {
$item['post-type'] = empty($item['title']) ? self::PT_NOTE : self::PT_ARTICLE;
}
+ $defined_permissions = isset($item['allow_cid']) && isset($item['allow_gid']) && isset($item['deny_cid']) && isset($item['deny_gid']) && isset($item['private']);
+
$item['wall'] = intval($item['wall'] ?? 0);
$item['extid'] = trim($item['extid'] ?? '');
$item['author-name'] = trim($item['author-name'] ?? '');
$item['wall'] = $toplevel_parent['wall'];
// Reshares have to keep their permissions to allow forums to work
- if (!$item['origin'] || ($item['verb'] != Activity::ANNOUNCE)) {
+ if (!$defined_permissions && (!$item['origin'] || ($item['verb'] != Activity::ANNOUNCE))) {
$item['allow_cid'] = $toplevel_parent['allow_cid'];
$item['allow_gid'] = $toplevel_parent['allow_gid'];
$item['deny_cid'] = $toplevel_parent['deny_cid'];
* This differs from the above settings as it subtly allows comments from
* email correspondents to be private even if the overall thread is not.
*/
- if ($toplevel_parent['private']) {
+ if (!$defined_permissions && $toplevel_parent['private']) {
$item['private'] = $toplevel_parent['private'];
}
}
// ACL settings
- if (!empty($item['allow_cid'] . $item['allow_gid'] . $item['deny_cid'] . $item['deny_gid'])) {
+ if (!$defined_permissions && !empty($item['allow_cid'] . $item['allow_gid'] . $item['deny_cid'] . $item['deny_gid'])) {
$item['private'] = self::PRIVATE;
}
$item['body'] = BBCode::removeSharedData($item['body']);
}
- Post\Media::insertFromAttachmentData($item['uri-id'], $item['body']);
-
// Remove all media attachments from the body and store them in the post-media table
$item['raw-body'] = Post\Media::insertFromBody($item['uri-id'], $item['raw-body']);
$item['raw-body'] = self::setHashtags($item['raw-body']);
$author = Contact::getById($item['author-id'], ['network']);
Post\Media::insertFromRelevantUrl($item['uri-id'], $item['raw-body'], $item['body'], $author['network'] ?? '');
+ Post\Media::insertFromAttachmentData($item['uri-id'], $item['body']);
+ $item['body'] = BBCode::removeAttachment($item['body']);
+ $item['raw-body'] = BBCode::removeAttachment($item['raw-body']);
+
// Check for hashtags in the body and repair or add hashtag links
$item['body'] = self::setHashtags($item['body']);
}
// The content of activities normally doesn't matter - except for likes from Misskey
- if (!in_array($item['verb'], self::ACTIVITIES) || in_array($item['verb'], [Activity::LIKE, Activity::DISLIKE]) && !empty($item['body']) && ($item['body'] != $item['verb'])) {
+ if (!in_array($item['verb'], self::ACTIVITIES) || in_array($item['verb'], [Activity::LIKE, Activity::DISLIKE]) && !empty($item['body']) && (mb_strlen($item['body']) == 1)) {
Post\Content::insert($item['uri-id'], $item);
}
*/
public static function enumeratePermissions(array $obj, bool $check_dead = false): array
{
- $aclFormater = DI::aclFormatter();
+ $aclFormatter = DI::aclFormatter();
- $allow_people = $aclFormater->expand($obj['allow_cid']);
- $allow_groups = Group::expand($obj['uid'], $aclFormater->expand($obj['allow_gid']), $check_dead);
- $deny_people = $aclFormater->expand($obj['deny_cid']);
- $deny_groups = Group::expand($obj['uid'], $aclFormater->expand($obj['deny_gid']), $check_dead);
+ $allow_people = $aclFormatter->expand($obj['allow_cid']);
+ $allow_groups = Group::expand($obj['uid'], $aclFormatter->expand($obj['allow_gid']), $check_dead);
+ $deny_people = $aclFormatter->expand($obj['deny_cid']);
+ $deny_groups = Group::expand($obj['uid'], $aclFormatter->expand($obj['deny_gid']), $check_dead);
$recipients = array_unique(array_merge($allow_people, $allow_groups));
$deny = array_unique(array_merge($deny_people, $deny_groups));
$recipients = array_diff($recipients, $deny);
$fields = ['uri-id', 'uri', 'body', 'title', 'author-name', 'author-link', 'author-avatar', 'guid', 'created', 'plink', 'network', 'has-media', 'quote-uri-id', 'post-type'];
- $shared_uri_id = 0;
- $shared_links = [];
+ $shared_uri_id = 0;
+ $shared_links = [];
+ $quote_shared_links = [];
$shared = DI::contentItem()->getSharedPost($item, $fields);
if (!empty($shared['post'])) {
$shared_links[] = strtolower($media[0]['url']);
}
- $quote_uri_id = $shared_item['uri-id'] ?? 0;
+ if (!empty($shared_item['uri-id'])) {
+ $data = BBCode::getAttachmentData($shared_item['body']);
+ if (!empty($data['url'])) {
+ $quote_shared_links[] = $data['url'];
+ }
+
+ $quote_uri_id = $shared_item['uri-id'];
+ }
}
}
if (!empty($shared_attachments)) {
$s = self::addVisualAttachments($shared_attachments, $shared_item, $s, true);
- $s = self::addLinkAttachment($shared_uri_id ?: $item['uri-id'], $shared_attachments, $body, $s, true, []);
+ $s = self::addLinkAttachment($shared_uri_id ?: $item['uri-id'], $shared_attachments, $body, $s, true, $quote_shared_links);
$s = self::addNonVisualAttachments($shared_attachments, $item, $s, true);
$body = BBCode::removeSharedData($body);
}
DI::profiler()->stopRecording();
if (isset($data['url']) && !in_array(strtolower($data['url']), $ignore_links)) {
- if (!empty($data['description']) || !empty($data['image']) || !empty($data['preview'])) {
+ if (!empty($data['description']) || !empty($data['image']) || !empty($data['preview']) || (!empty($data['title']) && !Strings::compareLink($data['title'], $data['url']))) {
$parts = parse_url($data['url']);
if (!empty($parts['scheme']) && !empty($parts['host'])) {
if (empty($data['provider_name'])) {