Add blocking author from an item context feature
This commit is contained in:
parent
d5e87011c9
commit
6b0df74ed7
3 changed files with 81 additions and 42 deletions
75
mod/item.php
75
mod/item.php
|
@ -819,24 +819,50 @@ function item_post_return($baseurl, $api_source, $return_path)
|
||||||
function item_content(App $a)
|
function item_content(App $a)
|
||||||
{
|
{
|
||||||
if (!Session::isAuthenticated()) {
|
if (!Session::isAuthenticated()) {
|
||||||
return;
|
throw new HTTPException\UnauthorizedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
$args = DI::args();
|
||||||
|
|
||||||
|
if (!$args->has(3)) {
|
||||||
|
throw new HTTPException\BadRequestException();
|
||||||
}
|
}
|
||||||
|
|
||||||
$o = '';
|
$o = '';
|
||||||
|
switch ($args->get(1)) {
|
||||||
if (($a->argc >= 3) && ($a->argv[1] === 'drop') && intval($a->argv[2])) {
|
case 'drop':
|
||||||
if (DI::mode()->isAjax()) {
|
if (DI::mode()->isAjax()) {
|
||||||
Item::deleteForUser(['id' => $a->argv[2]], local_user());
|
Item::deleteForUser(['id' => $args->get(2)], local_user());
|
||||||
// ajax return: [<item id>, 0 (no perm) | <owner id>]
|
// ajax return: [<item id>, 0 (no perm) | <owner id>]
|
||||||
System::jsonExit([intval($a->argv[2]), local_user()]);
|
System::jsonExit([intval($args->get(2)), local_user()]);
|
||||||
} else {
|
} else {
|
||||||
if (!empty($a->argv[3])) {
|
if (!empty($args->get(3))) {
|
||||||
$o = drop_item($a->argv[2], $a->argv[3]);
|
$o = drop_item($args->get(2), $args->get(3));
|
||||||
}
|
} else {
|
||||||
else {
|
$o = drop_item($args->get(2));
|
||||||
$o = drop_item($a->argv[2]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
case 'block':
|
||||||
|
$item = Post::selectFirstForUser(local_user(), ['guid', 'author-id', 'parent', 'gravity'], ['id' => $args->get(2)]);
|
||||||
|
if (empty($item['author-id'])) {
|
||||||
|
throw new HTTPException\NotFoundException('Item not found');
|
||||||
|
}
|
||||||
|
|
||||||
|
$cdata = Contact::getPublicAndUserContacID($item['author-id'], local_user());
|
||||||
|
if (empty($cdata['user'])) {
|
||||||
|
throw new HTTPException\NotFoundException('Contact not found');
|
||||||
|
}
|
||||||
|
|
||||||
|
Contact::block($cdata['user'], DI::l10n()->t('Blocked on item with guid %s', $item['guid']));
|
||||||
|
|
||||||
|
if (DI::mode()->isAjax()) {
|
||||||
|
// ajax return: [<item id>, 0 (no perm) | <owner id>]
|
||||||
|
System::jsonExit([intval($args->get(2)), local_user()]);
|
||||||
|
} else {
|
||||||
|
item_redirect_after_action($item, $args->get(3));
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $o;
|
return $o;
|
||||||
|
@ -871,20 +897,32 @@ function drop_item(int $id, string $return = '')
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((local_user() == $item['uid']) || $contact_id) {
|
if ((local_user() == $item['uid']) || $contact_id) {
|
||||||
if (!empty($item['parent'])) {
|
|
||||||
$parentitem = Post::selectFirstForUser(local_user(), ['guid'], ['id' => $item['parent']]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// delete the item
|
// delete the item
|
||||||
Item::deleteForUser(['id' => $item['id']], local_user());
|
Item::deleteForUser(['id' => $item['id']], local_user());
|
||||||
|
|
||||||
$return_url = hex2bin($return);
|
item_redirect_after_action($item, $return);
|
||||||
|
} else {
|
||||||
|
notice(DI::l10n()->t('Permission denied.'));
|
||||||
|
DI::baseUrl()->redirect('display/' . $item['guid']);
|
||||||
|
//NOTREACHED
|
||||||
|
}
|
||||||
|
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
function item_redirect_after_action($item, $returnUrlHex)
|
||||||
|
{
|
||||||
|
$return_url = hex2bin($returnUrlHex);
|
||||||
|
|
||||||
// removes update_* from return_url to ignore Ajax refresh
|
// removes update_* from return_url to ignore Ajax refresh
|
||||||
$return_url = str_replace("update_", "", $return_url);
|
$return_url = str_replace("update_", "", $return_url);
|
||||||
|
|
||||||
// Check if delete a comment
|
// Check if delete a comment
|
||||||
if ($item['gravity'] == GRAVITY_COMMENT) {
|
if ($item['gravity'] == GRAVITY_COMMENT) {
|
||||||
|
if (!empty($item['parent'])) {
|
||||||
|
$parentitem = Post::selectFirstForUser(local_user(), ['guid'], ['id' => $item['parent']]);
|
||||||
|
}
|
||||||
|
|
||||||
// Return to parent guid
|
// Return to parent guid
|
||||||
if (!empty($parentitem)) {
|
if (!empty($parentitem)) {
|
||||||
DI::baseUrl()->redirect('display/' . $parentitem['guid']);
|
DI::baseUrl()->redirect('display/' . $parentitem['guid']);
|
||||||
|
@ -904,11 +942,4 @@ function drop_item(int $id, string $return = '')
|
||||||
//NOTREACHED
|
//NOTREACHED
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
notice(DI::l10n()->t('Permission denied.'));
|
|
||||||
DI::baseUrl()->redirect('display/' . $item['guid']);
|
|
||||||
//NOTREACHED
|
|
||||||
}
|
|
||||||
|
|
||||||
return '';
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -248,6 +248,7 @@ class Page implements ArrayAccess
|
||||||
'$local_user' => local_user(),
|
'$local_user' => local_user(),
|
||||||
'$generator' => 'Friendica' . ' ' . FRIENDICA_VERSION,
|
'$generator' => 'Friendica' . ' ' . FRIENDICA_VERSION,
|
||||||
'$delitem' => $l10n->t('Delete this item?'),
|
'$delitem' => $l10n->t('Delete this item?'),
|
||||||
|
'$blockAuthor' => $l10n->t('Block this author? They won\'t be able to follow you nor see your public posts, and you won\'t be able to see their posts and their notifications.'),
|
||||||
'$update_interval' => $interval,
|
'$update_interval' => $interval,
|
||||||
'$shortcut_icon' => $shortcut_icon,
|
'$shortcut_icon' => $shortcut_icon,
|
||||||
'$touch_icon' => $touch_icon,
|
'$touch_icon' => $touch_icon,
|
||||||
|
|
|
@ -230,6 +230,7 @@ class Post
|
||||||
}
|
}
|
||||||
|
|
||||||
$drop = false;
|
$drop = false;
|
||||||
|
$block = false;
|
||||||
if (local_user()) {
|
if (local_user()) {
|
||||||
$drop = [
|
$drop = [
|
||||||
'dropping' => $dropping,
|
'dropping' => $dropping,
|
||||||
|
@ -237,6 +238,11 @@ class Post
|
||||||
'select' => DI::l10n()->t('Select'),
|
'select' => DI::l10n()->t('Select'),
|
||||||
'delete' => $delete,
|
'delete' => $delete,
|
||||||
];
|
];
|
||||||
|
$block = [
|
||||||
|
'blocking' => true,
|
||||||
|
'block' => DI::l10n()->t('Block %s', $item['author-name']),
|
||||||
|
'author_id' => $item['author-id'],
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
$filer = (($conv->getProfileOwner() == local_user() && ($item['uid'] != 0)) ? DI::l10n()->t("save to folder") : false);
|
$filer = (($conv->getProfileOwner() == local_user() && ($item['uid'] != 0)) ? DI::l10n()->t("save to folder") : false);
|
||||||
|
@ -485,6 +491,7 @@ class Post
|
||||||
'filer' => $filer,
|
'filer' => $filer,
|
||||||
'language' => $languages,
|
'language' => $languages,
|
||||||
'drop' => $drop,
|
'drop' => $drop,
|
||||||
|
'block' => $block,
|
||||||
'vote' => $buttons,
|
'vote' => $buttons,
|
||||||
'like_html' => $responses['like']['output'],
|
'like_html' => $responses['like']['output'],
|
||||||
'dislike_html' => $responses['dislike']['output'],
|
'dislike_html' => $responses['dislike']['output'],
|
||||||
|
|
Loading…
Reference in a new issue