namespace Friendica\Model;
-use Friendica\BaseObject;
use Friendica\Content\Text\BBCode;
use Friendica\Content\Text\HTML;
use Friendica\Core\Config;
use Friendica\Core\System;
use Friendica\Core\Worker;
use Friendica\Database\DBA;
+use Friendica\DI;
use Friendica\Protocol\Activity;
use Friendica\Protocol\ActivityPub;
use Friendica\Protocol\Diaspora;
use Friendica\Protocol\OStatus;
-use Friendica\Util\ACLFormatter;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Map;
use Friendica\Util\Network;
use Friendica\Worker\Delivery;
use Text_LanguageDetect;
-class Item extends BaseObject
+class Item
{
// Posting types, inspired by https://www.w3.org/TR/activitystreams-vocabulary/#object-types
const PT_ARTICLE = 0;
// "Deleting" global items just means hiding them
if ($item['uid'] == 0) {
DBA::update('user-item', ['hidden' => true], ['iid' => $item['id'], 'uid' => $uid], true);
+
+ // Delete notifications
+ DBA::delete('notify', ['iid' => $item['id'], 'uid' => $uid]);
} elseif ($item['uid'] == $uid) {
self::deleteById($item['id'], PRIORITY_HIGH);
} else {
// Delete tags that had been attached to other items
self::deleteTagsFromItem($item);
+ // Delete notifications
+ DBA::delete('notify', ['iid' => $item['id'], 'uid' => $item['uid']]);
+
// Set the item to "deleted"
$item_fields = ['deleted' => true, 'edited' => DateTimeFormat::utcNow(), 'changed' => DateTimeFormat::utcNow()];
DBA::update('item', $item_fields, ['id' => $item['id']]);
$item['parent-uri'] = $item['thr-parent'];
}
- /** @var Activity $activity */
- $activity = self::getClass(Activity::class);
+ $activity = DI::activity();
if (isset($item['gravity'])) {
$item['gravity'] = intval($item['gravity']);
$guid = System::createUUID();
}
- return self::getApp()->getBaseURL() . '/objects/' . $guid;
+ return DI::app()->getBaseURL() . '/objects/' . $guid;
}
/**
"#$2", $item["body"]);
foreach ($tags as $tag) {
- if ((strpos($tag, '#') !== 0) || strpos($tag, '[url=') || $tag[1] == '#') {
+ if ((strpos($tag, '#') !== 0) || strpos($tag, '[url=') || strlen($tag) < 2 || $tag[1] == '#') {
continue;
}
*/
public static function enumeratePermissions(array $obj, bool $check_dead = false)
{
- /** @var ACLFormatter $aclFormater */
- $aclFormater = self::getClass(ACLFormatter::class);
+ $aclFormater = DI::aclFormatter();
$allow_people = $aclFormater->expand($obj['allow_cid']);
$allow_groups = Group::expand($obj['uid'], $aclFormater->expand($obj['allow_gid']), $check_dead);
*/
private static function addRedirToImageTags(array &$item)
{
- $app = self::getApp();
+ $app = DI::app();
$matches = [];
$cnt = preg_match_all('|\[img\](http[^\[]*?/photo/[a-fA-F0-9]+?(-[0-9]\.[\w]+?)?)\[\/img\]|', $item['body'], $matches, PREG_SET_ORDER);
*/
public static function prepareBody(array &$item, $attach = false, $is_preview = false)
{
- $a = self::getApp();
+ $a = DI::app();
Hook::callAll('prepare_body_init', $item);
// In order to provide theme developers more possibilities, event items
*/
public static function getPlink($item)
{
- $a = self::getApp();
+ $a = DI::app();
if ($a->user['nickname'] != "") {
$ret = [
];
if (!empty($item['plink'])) {
- $ret["href"] = $a->removeBaseURL($item['plink']);
+ $ret["href"] = DI::baseUrl()->remove($item['plink']);
$ret["title"] = L10n::t('link to source');
}
$attribute_string = $matches[2];
$attributes = ['comment' => trim($matches[1]), 'shared' => trim($matches[3])];
- foreach(['author', 'profile', 'avatar', 'guid', 'posted', 'link'] as $field) {
- if (preg_match("/$field=(['\"])(.+?)\\1/ism", $attribute_string, $matches)) {
- $attributes[$field] = trim(html_entity_decode($matches[2] ?? '', ENT_QUOTES, 'UTF-8'));
- }
+ foreach (['author', 'profile', 'avatar', 'guid', 'posted', 'link'] as $field) {
+ if (preg_match("/$field=(['\"])(.+?)\\1/ism", $attribute_string, $matches)) {
+ $attributes[$field] = trim(html_entity_decode($matches[2] ?? '', ENT_QUOTES, 'UTF-8'));
+ }
}
return $attributes;
}
// Otherwhise try to find (and possibly fetch) the item via the link. This should work for Diaspora and ActivityPub posts
$id = self::fetchByLink($shared['link'], $uid);
if (empty($id)) {
+ Logger::info('Original item not found', ['url' => $shared['link'], 'callstack' => System::callstack()]);
return $item;
}
if (!DBA::isResult($shared_item)) {
return $item;
}
+ Logger::info('Got shared data from url', ['url' => $shared['link'], 'callstack' => System::callstack()]);
+ } else {
+ Logger::info('Got shared data from guid', ['guid' => $shared['guid'], 'callstack' => System::callstack()]);
}
if (!empty($shared_item['title'])) {
$body = $shared_item['body'];
}
- $item['body'] = preg_replace("/(.*?\[share.*?\]\s?).*?(\s?\[\/share\]\s?)/ism", '$1' . $body . '$2', $item['body']);
+ $item['body'] = preg_replace("/\[share ([^\[\]]*)\].*\[\/share\]/ism", '[share $1]' . $body . '[/share]', $item['body']);
unset($shared_item['body']);
return array_merge($item, $shared_item);