use Friendica\App;
use Friendica\Content\Item as ItemHelper;
+use Friendica\Content\PageInfo;
use Friendica\Content\Text\BBCode;
use Friendica\Core\Hook;
use Friendica\Core\Logger;
use Friendica\Util\Strings;
use Friendica\Worker\Delivery;
-require_once __DIR__ . '/../include/items.php';
-
function item_post(App $a) {
if (!Session::isAuthenticated()) {
throw new HTTPException\ForbiddenException();
throw new HTTPException\NotFoundException(DI::l10n()->t('Unable to locate original post.'));
}
+ // When commenting on a public post then store the post for the current user
+ // This enables interaction like starring and saving into folders
+ if ($toplevel_item['uid'] == 0) {
+ $stored = Item::storeForUserByUriId($toplevel_item['uri-id'], local_user());
+ Logger::info('Public item stored for user', ['uri-id' => $toplevel_item['uri-id'], 'uid' => $uid, 'stored' => $stored]);
+ if ($stored) {
+ $toplevel_item = Item::selectFirst([], ['id' => $stored]);
+ }
+ }
+
$toplevel_item_id = $toplevel_item['id'];
$parent_user = $toplevel_item['uid'];
];
}
- $att_bbcode = add_page_info_data($attachment);
+ $att_bbcode = "\n" . PageInfo::getFooterFromData($attachment);
$body .= $att_bbcode;
}
System::jsonExit(['preview' => '']);
}
- info(DI::l10n()->t('Empty post discarded.'));
+ notice(DI::l10n()->t('Empty post discarded.'));
if ($return_path) {
DI::baseUrl()->redirect($return_path);
}
// get contact info for owner
if ($profile_uid == local_user() || $allow_comment) {
- $contact_record = $author;
+ $contact_record = $author ?: [];
} else {
- $contact_record = DBA::selectFirst('contact', [], ['uid' => $profile_uid, 'self' => true]);
+ $contact_record = DBA::selectFirst('contact', [], ['uid' => $profile_uid, 'self' => true]) ?: [];
}
// Look for any tags and linkify them
$original_contact_id = $contact_id;
- if (!$toplevel_item_id && count($forum_contact) && ($private_forum || $only_to_forum)) {
+ if (!$toplevel_item_id && !empty($forum_contact) && ($private_forum || $only_to_forum)) {
// we tagged a forum in a top level post. Now we change the post
$private = $private_forum;
$datarray['gravity'] = $gravity;
$datarray['network'] = $network;
$datarray['contact-id'] = $contact_id;
- $datarray['owner-name'] = $contact_record['name'];
- $datarray['owner-link'] = $contact_record['url'];
- $datarray['owner-avatar'] = $contact_record['thumb'];
+ $datarray['owner-name'] = $contact_record['name'] ?? '';
+ $datarray['owner-link'] = $contact_record['url'] ?? '';
+ $datarray['owner-avatar'] = $contact_record['thumb'] ?? '';
$datarray['owner-id'] = Contact::getIdForURL($datarray['owner-link']);
$datarray['author-name'] = $author['name'];
$datarray['author-link'] = $author['url'];
// update filetags in pconfig
FileTag::updatePconfig($uid, $categories_old, $categories_new, 'category');
- info(DI::l10n()->t('Post updated.'));
if ($return_path) {
DI::baseUrl()->redirect($return_path);
}
$post_id = Item::insert($datarray);
if (!$post_id) {
- info(DI::l10n()->t('Item wasn\'t stored.'));
+ notice(DI::l10n()->t('Item wasn\'t stored.'));
if ($return_path) {
DI::baseUrl()->redirect($return_path);
}
FileTag::updatePconfig($uid, $categories_old, $categories_new, 'category');
// These notifications are sent if someone else is commenting other your wall
- if ($toplevel_item_id) {
- if ($contact_record != $author) {
+ if ($contact_record != $author) {
+ if ($toplevel_item_id) {
notification([
'type' => Type::COMMENT,
'notify_flags' => $user['notify-flags'],
'parent' => $toplevel_item_id,
'parent_uri' => $toplevel_item['uri']
]);
- }
- } else {
- if (($contact_record != $author) && !count($forum_contact)) {
+ } elseif (empty($forum_contact)) {
notification([
'type' => Type::WALL,
'notify_flags' => $user['notify-flags'],
return $post_id;
}
- info(DI::l10n()->t('Post published.'));
item_post_return(DI::baseUrl(), $api_source, $return_path);
// NOTREACHED
}
$item = Item::selectFirstForUser(local_user(), $fields, ['id' => $id]);
if (!DBA::isResult($item)) {
- notice(DI::l10n()->t('Item not found.') . EOL);
+ notice(DI::l10n()->t('Item not found.'));
DI::baseUrl()->redirect('network');
}
}
if ((local_user() == $item['uid']) || $contact_id) {
- // Check if we should do HTML-based delete confirmation
- if (!empty($_REQUEST['confirm'])) {
- // <form> can't take arguments in its "action" parameter
- // so add any arguments as hidden inputs
- $query = explode_querystring(DI::args()->getQueryString());
- $inputs = [];
-
- foreach ($query['args'] as $arg) {
- if (strpos($arg, 'confirm=') === false) {
- $arg_parts = explode('=', $arg);
- $inputs[] = ['name' => $arg_parts[0], 'value' => $arg_parts[1]];
- }
- }
-
- return Renderer::replaceMacros(Renderer::getMarkupTemplate('confirm.tpl'), [
- '$method' => 'get',
- '$message' => DI::l10n()->t('Do you really want to delete this item?'),
- '$extra_inputs' => $inputs,
- '$confirm' => DI::l10n()->t('Yes'),
- '$confirm_url' => $query['base'],
- '$confirm_name' => 'confirmed',
- '$cancel' => DI::l10n()->t('Cancel'),
- ]);
- }
- // Now check how the user responded to the confirmation query
- if (!empty($_REQUEST['canceled'])) {
- DI::baseUrl()->redirect('display/' . $item['guid']);
- }
-
- $is_comment = ($item['gravity'] == GRAVITY_COMMENT) ? true : false;
- $parentitem = null;
- if (!empty($item['parent'])){
- $fields = ['guid'];
- $parentitem = Item::selectFirstForUser(local_user(), $fields, ['id' => $item['parent']]);
+ if (!empty($item['parent'])) {
+ $parentitem = Item::selectFirstForUser(local_user(), ['guid'], ['id' => $item['parent']]);
}
// delete the item
$return_url = str_replace("update_", "", $return_url);
// Check if delete a comment
- if ($is_comment) {
+ if ($item['gravity'] == GRAVITY_COMMENT) {
// Return to parent guid
if (!empty($parentitem)) {
DI::baseUrl()->redirect('display/' . $parentitem['guid']);
//NOTREACHED
- }
- // In case something goes wrong
+ } // In case something goes wrong
else {
DI::baseUrl()->redirect('network');
//NOTREACHED
}
- }
- else {
+ } else {
// if unknown location or deleting top level post called from display
if (empty($return_url) || strpos($return_url, 'display') !== false) {
DI::baseUrl()->redirect('network');