forked from GNUsocial/gnu-social
Disallow repeats (retweets) of private notices
We disallow repeating a notice (or whatever) if the scope of the notice is too private. So, only notices that are public scope (available to everyone in the world) or site scope (available to everyone on the site) can be repeated. Enforce this rule at a low level in Notice.php, and in the API, commands, and Web UI. Repeat button doesn't appear on tightly-scoped notices in the Web UI.
This commit is contained in:
@@ -544,7 +544,22 @@ class RepeatCommand extends Command
|
||||
return;
|
||||
}
|
||||
|
||||
if ($this->user->getProfile()->hasRepeated($notice->id)) {
|
||||
// Is it OK to repeat that notice (general enough scope)?
|
||||
|
||||
if ($notice->scope != Notice::SITE_SCOPE &&
|
||||
$notice->scope != Notice::PUBLIC_SCOPE) {
|
||||
$channel->error($this->user, _('You may not repeat a private notice.'));
|
||||
}
|
||||
|
||||
$profile = $this->user->getProfile();
|
||||
|
||||
// Can the profile actually see that notice?
|
||||
|
||||
if (!$notice->inScope($profile)) {
|
||||
$channel->error($this->user, _('You have no access to that notice.'));
|
||||
}
|
||||
|
||||
if ($profile->hasRepeated($notice->id)) {
|
||||
// TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
|
||||
$channel->error($this->user, _('Already repeated that notice.'));
|
||||
return;
|
||||
|
Reference in New Issue
Block a user