Remove contact drop feature

- Feature was confusing, sometimes ineffective and overall overlapping with unfollow/block
This commit is contained in:
Hypolite Petovan 2021-09-22 23:05:13 -04:00
parent 600c301bc1
commit 222333f64f
10 changed files with 6 additions and 131 deletions

View File

@ -994,7 +994,6 @@ class Contact
$pm_url = ''; $pm_url = '';
$status_link = ''; $status_link = '';
$photos_link = ''; $photos_link = '';
$contact_drop_link = '';
$poke_link = ''; $poke_link = '';
if ($uid == 0) { if ($uid == 0) {
@ -1046,10 +1045,6 @@ class Contact
$posts_link = DI::baseUrl() . '/contact/' . $contact['id'] . '/conversations'; $posts_link = DI::baseUrl() . '/contact/' . $contact['id'] . '/conversations';
if (!$contact['self']) {
$contact_drop_link = DI::baseUrl() . '/contact/' . $contact['id'] . '/drop?confirm=1';
}
$follow_link = ''; $follow_link = '';
$unfollow_link = ''; $unfollow_link = '';
if (!$contact['self'] && Protocol::supportsFollow($contact['network'])) { if (!$contact['self'] && Protocol::supportsFollow($contact['network'])) {
@ -1060,10 +1055,6 @@ class Contact
} }
} }
if (!empty($follow_link) || !empty($unfollow_link)) {
$contact_drop_link = '';
}
/** /**
* Menu array: * Menu array:
* "name" => [ "Label", "link", (bool)Should the link opened in a new tab? ] * "name" => [ "Label", "link", (bool)Should the link opened in a new tab? ]
@ -1083,7 +1074,6 @@ class Contact
'photos' => [DI::l10n()->t('View Photos') , $photos_link , true], 'photos' => [DI::l10n()->t('View Photos') , $photos_link , true],
'network' => [DI::l10n()->t('Network Posts') , $posts_link , false], 'network' => [DI::l10n()->t('Network Posts') , $posts_link , false],
'edit' => [DI::l10n()->t('View Contact') , $contact_url , false], 'edit' => [DI::l10n()->t('View Contact') , $contact_url , false],
'drop' => [DI::l10n()->t('Drop Contact') , $contact_drop_link, false],
'pm' => [DI::l10n()->t('Send PM') , $pm_url , false], 'pm' => [DI::l10n()->t('Send PM') , $pm_url , false],
'poke' => [DI::l10n()->t('Poke') , $poke_link , false], 'poke' => [DI::l10n()->t('Poke') , $poke_link , false],
'follow' => [DI::l10n()->t('Connect/Follow'), $follow_link , true], 'follow' => [DI::l10n()->t('Connect/Follow'), $follow_link , true],

View File

@ -87,12 +87,6 @@ class Contact extends BaseModule
self::toggleIgnoreContact($cdata['public']); self::toggleIgnoreContact($cdata['public']);
$count_actions++; $count_actions++;
} }
if (!empty($_POST['contacts_batch_drop']) && $cdata['user']
&& self::dropContact($cdata['user'], local_user())
) {
$count_actions++;
}
} }
if ($count_actions > 0) { if ($count_actions > 0) {
info(DI::l10n()->tt('%d contact edited.', '%d contacts edited.', $count_actions)); info(DI::l10n()->tt('%d contact edited.', '%d contacts edited.', $count_actions));
@ -230,31 +224,6 @@ class Contact extends BaseModule
Model\Contact\User::setIgnored($contact_id, local_user(), $ignored); Model\Contact\User::setIgnored($contact_id, local_user(), $ignored);
} }
/**
* @param int $contact_id Id for contact with uid != 0
* @param int $uid Id for user we want to drop the contact for
* @return bool
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
private static function dropContact(int $contact_id, int $uid): bool
{
$contact = Model\Contact::getContactForUser($contact_id, $uid);
if (!DBA::isResult($contact)) {
return false;
}
$owner = Model\User::getOwnerDataById($uid);
if (!DBA::isResult($owner)) {
return false;
}
Model\Contact::terminateFriendship($owner, $contact, true);
Model\Contact::remove($contact['id']);
return true;
}
public static function content(array $parameters = [], $update = 0) public static function content(array $parameters = [], $update = 0)
{ {
if (!local_user()) { if (!local_user()) {
@ -426,38 +395,6 @@ class Contact extends BaseModule
DI::baseUrl()->redirect('contact/' . $cdata['public']); DI::baseUrl()->redirect('contact/' . $cdata['public']);
// NOTREACHED // NOTREACHED
} }
if ($cmd === 'drop' && $cdata['user']) {
// Check if we should do HTML-based delete confirmation
if (!empty($_REQUEST['confirm'])) {
DI::page()['aside'] = '';
return Renderer::replaceMacros(Renderer::getMarkupTemplate('contact_drop_confirm.tpl'), [
'$l10n' => [
'header' => DI::l10n()->t('Drop contact'),
'message' => DI::l10n()->t('Do you really want to delete this contact?'),
'confirm' => DI::l10n()->t('Yes'),
'cancel' => DI::l10n()->t('Cancel'),
],
'$contact' => self::getContactTemplateVars($orig_record),
'$method' => 'get',
'$confirm_url' => DI::args()->getCommand(),
'$confirm_name' => 't',
'$confirm_value' => BaseModule::getFormSecurityToken('contact_action'),
]);
}
// Now check how the user responded to the confirmation query
if (!empty($_REQUEST['canceled'])) {
DI::baseUrl()->redirect('contact');
}
if (self::dropContact($cdata['user'], local_user())) {
info(DI::l10n()->t('Contact has been removed.'));
}
DI::baseUrl()->redirect('contact');
// NOTREACHED
}
} }
$_SESSION['return_path'] = DI::args()->getQueryString(); $_SESSION['return_path'] = DI::args()->getQueryString();
@ -859,13 +796,11 @@ class Contact extends BaseModule
'$cmd' => DI::args()->getCommand(), '$cmd' => DI::args()->getCommand(),
'$contacts' => $contacts, '$contacts' => $contacts,
'$form_security_token' => BaseModule::getFormSecurityToken('contact_batch_actions'), '$form_security_token' => BaseModule::getFormSecurityToken('contact_batch_actions'),
'$contact_drop_confirm' => DI::l10n()->t('Do you really want to delete this contact?'),
'multiselect' => 1, 'multiselect' => 1,
'$batch_actions' => [ '$batch_actions' => [
'contacts_batch_update' => DI::l10n()->t('Update'), 'contacts_batch_update' => DI::l10n()->t('Update'),
'contacts_batch_block' => DI::l10n()->t('Block') . '/' . DI::l10n()->t('Unblock'), 'contacts_batch_block' => DI::l10n()->t('Block') . '/' . DI::l10n()->t('Unblock'),
'contacts_batch_ignore' => DI::l10n()->t('Ignore') . '/' . DI::l10n()->t('Unignore'), 'contacts_batch_ignore' => DI::l10n()->t('Ignore') . '/' . DI::l10n()->t('Unignore'),
'contacts_batch_drop' => DI::l10n()->t('Delete'),
], ],
'$h_batch_actions' => DI::l10n()->t('Batch Actions'), '$h_batch_actions' => DI::l10n()->t('Batch Actions'),
'$paginate' => $pager->renderFull($total), '$paginate' => $pager->renderFull($total),
@ -1156,23 +1091,13 @@ class Contact extends BaseModule
'id' => 'toggle-ignore', 'id' => 'toggle-ignore',
]; ];
if ($contact['uid'] != 0) { if ($contact['uid'] != 0 && Protocol::supportsRevokeFollow($contact['network']) && in_array($contact['rel'], [Model\Contact::FOLLOWER, Model\Contact::FRIEND])) {
if (Protocol::supportsRevokeFollow($contact['network']) && in_array($contact['rel'], [Model\Contact::FOLLOWER, Model\Contact::FRIEND])) { $contact_actions['revoke_follow'] = [
$contact_actions['revoke_follow'] = [ 'label' => DI::l10n()->t('Revoke Follow'),
'label' => DI::l10n()->t('Revoke Follow'), 'url' => 'contact/' . $contact['id'] . '/revoke',
'url' => 'contact/' . $contact['id'] . '/revoke', 'title' => DI::l10n()->t('Revoke the follow from this contact'),
'title' => DI::l10n()->t('Revoke the follow from this contact'),
'sel' => '',
'id' => 'revoke_follow',
];
}
$contact_actions['delete'] = [
'label' => DI::l10n()->t('Delete'),
'url' => 'contact/' . $contact['id'] . '/drop?t=' . $formSecurityToken,
'title' => DI::l10n()->t('Delete contact'),
'sel' => '', 'sel' => '',
'id' => 'delete', 'id' => 'revoke_follow',
]; ];
} }

View File

@ -236,7 +236,6 @@ return [
'/{id:\d+}/block' => [Module\Contact::class, [R::GET]], '/{id:\d+}/block' => [Module\Contact::class, [R::GET]],
'/{id:\d+}/conversations' => [Module\Contact::class, [R::GET]], '/{id:\d+}/conversations' => [Module\Contact::class, [R::GET]],
'/{id:\d+}/contacts[/{type}]' => [Module\Contact\Contacts::class, [R::GET]], '/{id:\d+}/contacts[/{type}]' => [Module\Contact\Contacts::class, [R::GET]],
'/{id:\d+}/drop' => [Module\Contact::class, [R::GET]],
'/{id:\d+}/ignore' => [Module\Contact::class, [R::GET]], '/{id:\d+}/ignore' => [Module\Contact::class, [R::GET]],
'/{id:\d+}/media' => [Module\Contact\Media::class, [R::GET]], '/{id:\d+}/media' => [Module\Contact\Media::class, [R::GET]],
'/{id:\d+}/poke' => [Module\Contact\Poke::class, [R::GET, R::POST]], '/{id:\d+}/poke' => [Module\Contact\Poke::class, [R::GET, R::POST]],

View File

@ -22,7 +22,6 @@
<li role="menuitem"><a href="#" title="{{$contact_actions.block.title}}" onclick="window.location.href='{{$contact_actions.block.url}}'; return false;">{{$contact_actions.block.label}}</a></li> <li role="menuitem"><a href="#" title="{{$contact_actions.block.title}}" onclick="window.location.href='{{$contact_actions.block.url}}'; return false;">{{$contact_actions.block.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.ignore.title}}" onclick="window.location.href='{{$contact_actions.ignore.url}}'; return false;">{{$contact_actions.ignore.label}}</a></li> <li role="menuitem"><a href="#" title="{{$contact_actions.ignore.title}}" onclick="window.location.href='{{$contact_actions.ignore.url}}'; return false;">{{$contact_actions.ignore.label}}</a></li>
{{if $contact_actions.revoke_follow.url}}<li role="menuitem"><a href="{{$contact_actions.revoke_follow.url}}" title="{{$contact_actions.revoke_follow.title}}">{{$contact_actions.revoke_follow.label}}</a></li>{{/if}} {{if $contact_actions.revoke_follow.url}}<li role="menuitem"><a href="{{$contact_actions.revoke_follow.url}}" title="{{$contact_actions.revoke_follow.title}}">{{$contact_actions.revoke_follow.label}}</a></li>{{/if}}
{{if $contact_actions.delete.url}}<li role="menuitem"><a href="{{$contact_actions.delete.url}}" title="{{$contact_actions.delete.title}}" onclick="return confirmDelete();">{{$contact_actions.delete.label}}</a></li> {{/if}}
</ul> </ul>
</div> </div>

View File

@ -38,20 +38,6 @@
return false; return false;
} }
}); });
// add javascript confirm dialog to "drop" links. Plain html url have "?confirm=1" to show confirmation form, we need to remove it
$(".drop").each(function() {
$(this).attr('href', $(this).attr('href').replace("confirm=1","") );
$(this).click(function(e){
if (confirm("{{$contact_drop_confirm}}")) {
return true;
} else {
e.preventDefault();
return false;
}
});
});
}); });
</script> </script>

View File

@ -2504,14 +2504,6 @@ ul li:hover .contact-wrapper .contact-action-link:hover {
#directory-search-wrapper { #directory-search-wrapper {
padding: 10px 0; padding: 10px 0;
} }
#contact-drop-confirm .contact-actions,
#contact-drop-confirm .contact-photo-overlay,
#contact-drop-confirm .contact-photo-menu {
display: none;
}
#contact-drop-confirm #confirm-form {
margin-top: 20px;
}
/* contact-edit */ /* contact-edit */
#contact-edit-actions { #contact-edit-actions {

View File

@ -28,7 +28,6 @@
<li role="presentation"><a role="menuitem" href="{{$contact_actions.block.url}}" title="{{$contact_actions.block.title}}">{{$contact_actions.block.label}}</a></li> <li role="presentation"><a role="menuitem" href="{{$contact_actions.block.url}}" title="{{$contact_actions.block.title}}">{{$contact_actions.block.label}}</a></li>
<li role="presentation"><a role="menuitem" href="{{$contact_actions.ignore.url}}" title="{{$contact_actions.ignore.title}}">{{$contact_actions.ignore.label}}</a></li> <li role="presentation"><a role="menuitem" href="{{$contact_actions.ignore.url}}" title="{{$contact_actions.ignore.title}}">{{$contact_actions.ignore.label}}</a></li>
{{if $contact_actions.revoke_follow.url}}<li role="presentation"><button role="menuitem" type="button" class="btn-link" title="{{$contact_actions.revoke_follow.title}}" onclick="addToModal('{{$contact_actions.revoke_follow.url}}');">{{$contact_actions.revoke_follow.label}}</button></li>{{/if}} {{if $contact_actions.revoke_follow.url}}<li role="presentation"><button role="menuitem" type="button" class="btn-link" title="{{$contact_actions.revoke_follow.title}}" onclick="addToModal('{{$contact_actions.revoke_follow.url}}');">{{$contact_actions.revoke_follow.label}}</button></li>{{/if}}
{{if $contact_actions.delete.url}}<li role="presentation"><button role="menuitem" type="button" class="btn-link" title="{{$contact_actions.delete.title}}" onclick="addToModal('{{$contact_actions.delete.url}}&confirm=1');">{{$contact_actions.delete.label}}</button></li>{{/if}}
</ul> </ul>
</li> </li>
</ul> </ul>

View File

@ -65,11 +65,6 @@
<i class="fa fa-user" aria-hidden="true"></i> <i class="fa fa-user" aria-hidden="true"></i>
</a> </a>
{{/if}} {{/if}}
{{if $contact.photo_menu.drop}}
<button type="button" class="contact-action-link btn-link" onclick="addToModal('{{$contact.photo_menu.drop.1}}'); return false;" data-toggle="tooltip" title="{{$contact.photo_menu.drop.0}}">
<i class="fa fa-user-times" aria-hidden="true"></i>
</button>
{{/if}}
{{if $contact.photo_menu.follow}} {{if $contact.photo_menu.follow}}
<a class="contact-action-link btn-link" href="{{$contact.photo_menu.follow.1}}" data-toggle="tooltip" title="{{$contact.photo_menu.follow.0}}"> <a class="contact-action-link btn-link" href="{{$contact.photo_menu.follow.1}}" data-toggle="tooltip" title="{{$contact.photo_menu.follow.0}}">
<i class="fa fa-user-plus" aria-hidden="true"></i> <i class="fa fa-user-plus" aria-hidden="true"></i>
@ -198,11 +193,6 @@ We use this part to filter the contacts with jquery.textcomplete *}}
<i class="fa fa-user" aria-hidden="true"></i> <i class="fa fa-user" aria-hidden="true"></i>
</a> </a>
{/if} {/if}
{if $photo_menu.drop}
<a class="contact-action-link btn-link" href="{$photo_menu.drop.1}" data-toggle="tooltip" title="{$photo_menu.drop.0}">
<i class="fa fa-user-times" aria-hidden="true"></i>
</a>
{/if}
{if $photo_menu.follow} {if $photo_menu.follow}
<a class="contact-action-link btn-link" href="{$photo_menu.follow.1}" data-toggle="tooltip" title="{$photo_menu.follow.0}"> <a class="contact-action-link btn-link" href="{$photo_menu.follow.1}" data-toggle="tooltip" title="{$photo_menu.follow.0}">
<i class="fa fa-user-plus" aria-hidden="true"></i> <i class="fa fa-user-plus" aria-hidden="true"></i>

View File

@ -1,8 +1,4 @@
<script type="text/javascript">
var dropContact = "{{$contact_drop_confirm}}";
</script>
{{$tabs nofilter}} {{$tabs nofilter}}
<div id="contacts" class="generic-page-wrapper"> <div id="contacts" class="generic-page-wrapper">

View File

@ -23,7 +23,6 @@
<li role="menuitem"><a href="#" title="{{$contact_actions.block.title}}" onclick="window.location.href='{{$contact_actions.block.url}}'; return false;">{{$contact_actions.block.label}}</a></li> <li role="menuitem"><a href="#" title="{{$contact_actions.block.title}}" onclick="window.location.href='{{$contact_actions.block.url}}'; return false;">{{$contact_actions.block.label}}</a></li>
<li role="menuitem"><a href="#" title="{{$contact_actions.ignore.title}}" onclick="window.location.href='{{$contact_actions.ignore.url}}'; return false;">{{$contact_actions.ignore.label}}</a></li> <li role="menuitem"><a href="#" title="{{$contact_actions.ignore.title}}" onclick="window.location.href='{{$contact_actions.ignore.url}}'; return false;">{{$contact_actions.ignore.label}}</a></li>
{{if $contact_actions.revoke_follow.url}}<li role="menuitem"><a href="{{$contact_actions.revoke_follow.url}}" title="{{$contact_actions.revoke_follow.title}}">{{$contact_actions.revoke_follow.label}}</a></li>{{/if}} {{if $contact_actions.revoke_follow.url}}<li role="menuitem"><a href="{{$contact_actions.revoke_follow.url}}" title="{{$contact_actions.revoke_follow.title}}">{{$contact_actions.revoke_follow.label}}</a></li>{{/if}}
{{if $contact_actions.delete.url}}<li role="menuitem"><a href="{{$contact_actions.delete.url}}" title="{{$contact_actions.delete.title}}" onclick="return confirmDelete();">{{$contact_actions.delete.label}}</a></li>{{/if}}
</ul> </ul>
</div> </div>