use Friendica\Core\Hook;
use Friendica\Core\Logger;
use Friendica\Core\Protocol;
-use Friendica\Core\Renderer;
use Friendica\Core\Session;
use Friendica\Core\System;
use Friendica\Core\Worker;
use Friendica\Model\Item;
use Friendica\Model\Notify\Type;
use Friendica\Model\Photo;
+use Friendica\Model\Post;
use Friendica\Model\Tag;
use Friendica\Network\HTTPException;
use Friendica\Object\EMail\ItemCCEMail;
use Friendica\Protocol\Diaspora;
use Friendica\Util\DateTimeFormat;
use Friendica\Security\Security;
-use Friendica\Util\Strings;
use Friendica\Worker\Delivery;
function item_post(App $a) {
}
// Is this a reply to something?
- $toplevel_item_id = intval($_REQUEST['parent'] ?? 0);
+ $parent_item_id = intval($_REQUEST['parent'] ?? 0);
$thr_parent_uri = trim($_REQUEST['parent_uri'] ?? '');
+ $parent_item = null;
$toplevel_item = null;
- $parent_user = null;
+ $toplevel_item_id = 0;
+ $toplevel_user_id = null;
$objecttype = null;
$profile_uid = ($_REQUEST['profile_uid'] ?? 0) ?: local_user();
$posttype = ($_REQUEST['post_type'] ?? '') ?: Item::PT_ARTICLE;
- if ($toplevel_item_id || $thr_parent_uri) {
- if ($toplevel_item_id) {
- $toplevel_item = Item::selectFirst([], ['id' => $toplevel_item_id]);
+ if ($parent_item_id || $thr_parent_uri) {
+ if ($parent_item_id) {
+ $parent_item = Item::selectFirst([], ['id' => $parent_item_id]);
} elseif ($thr_parent_uri) {
- $toplevel_item = Item::selectFirst([], ['uri' => $thr_parent_uri, 'uid' => $profile_uid]);
+ $parent_item = Item::selectFirst([], ['uri' => $thr_parent_uri, 'uid' => $profile_uid]);
}
// if this isn't the top-level parent of the conversation, find it
- if (DBA::isResult($toplevel_item)) {
+ if (DBA::isResult($parent_item)) {
// The URI and the contact is taken from the direct parent which needn't to be the top parent
- $thr_parent_uri = $toplevel_item['uri'];
+ $thr_parent_uri = $parent_item['uri'];
+ $toplevel_item = $parent_item;
- if ($toplevel_item['gravity'] != GRAVITY_PARENT) {
+ if ($parent_item['gravity'] != GRAVITY_PARENT) {
$toplevel_item = Item::selectFirst([], ['id' => $toplevel_item['parent']]);
}
}
}
$toplevel_item_id = $toplevel_item['id'];
- $parent_user = $toplevel_item['uid'];
+ $toplevel_user_id = $toplevel_item['uid'];
$objecttype = Activity\ObjectType::COMMENT;
}
}
// Ensure that the user id in a thread always stay the same
- if (!is_null($parent_user) && in_array($parent_user, [local_user(), 0])) {
- $profile_uid = $parent_user;
+ if (!is_null($toplevel_user_id) && in_array($toplevel_user_id, [local_user(), 0])) {
+ $profile_uid = $toplevel_user_id;
}
// Check for multiple posts with the same message id (when the post was created via API)
if (strlen($attachments)) {
$attachments .= ',';
}
- $attachments .= '[attach]href="' . DI::baseUrl() . '/attach/' . $attachment['id'] .
- '" length="' . $attachment['filesize'] . '" type="' . $attachment['filetype'] .
- '" title="' . ($attachment['filename'] ? $attachment['filename'] : '') . '"[/attach]';
+ $attachments .= Post\Media::getAttachElement(DI::baseUrl() . '/attach/' . $attachment['id'],
+ $attachment['filesize'], $attachment['filetype'], $attachment['filename'] ?? '');
}
$body = str_replace($match[1],'',$body);
}
$datarray['pubmail'] = $pubmail_enabled;
$datarray['attach'] = $attachments;
- // This is not a bug. The item store function changes 'parent-uri' to 'thr-parent' and fetches 'parent-uri' new. (We should change this)
- $datarray['parent-uri'] = $thr_parent_uri;
+ $datarray['thr-parent'] = $thr_parent_uri;
$datarray['postopts'] = $postopts;
$datarray['origin'] = $origin;
// This field is for storing the raw conversation data
$datarray['protocol'] = Conversation::PARCEL_DFRN;
- $conversation = DBA::selectFirst('conversation', ['conversation-uri', 'conversation-href'], ['item-uri' => $datarray['parent-uri']]);
+ $conversation = DBA::selectFirst('conversation', ['conversation-uri', 'conversation-href'], ['item-uri' => $datarray['thr-parent']]);
if (DBA::isResult($conversation)) {
if ($conversation['conversation-uri'] != '') {
$datarray['conversation-uri'] = $conversation['conversation-uri'];
}
}
- // Insert an item entry for UID=0 for global entries.
- // We now do it in the background to save some time.
- // This is important in interactive environments like the frontend or the API.
- // We don't fork a new process since this is done anyway with the following command
- Worker::add(['priority' => PRIORITY_HIGH, 'dont_fork' => true], "CreateShadowEntry", $post_id);
-
// When we are doing some forum posting via ! we have to start the notifier manually.
// These kind of posts don't initiate the notifier call in the item class.
if ($only_to_forum) {