*/
public $silenced = true;
+ /**
+ * Auto-silence all other users from the same registration_ip
+ * as the one being silenced. Caution: Many users may come from
+ * the same IP (even entire countries) without having any sort
+ * of relevant connection for moderation.
+ */
+ public $auto_silence_by_ip = false;
+
/**
* Whether we're enabled; prevents recursion.
*/
return true;
}
- if ($role != Profile_role::SILENCED) {
+ if ($role !== Profile_role::SILENCED) {
return true;
}
- if (!$this->silenced) {
+ if (!$this->auto_silence_by_ip) {
return true;
}
- $ri = Registration_ip::getKV('user_id', $profile->id);
+ $ri = Registration_ip::getKV('user_id', $profile->getID());
if (empty($ri)) {
return true;
$ids = Registration_ip::usersByIP($ri->ipaddress);
foreach ($ids as $id) {
- if ($id == $profile->id) {
+ if ($id == $profile->getID()) {
continue;
}
- $other = Profile::getKV('id', $id);
-
- if (empty($other)) {
+ try {
+ $other = Profile::getByID($id);
+ } catch (NoResultException $e) {
continue;
}
continue;
}
+ // 'enabled' here is used to prevent recursion, since
+ // we'll end up in this function again on ->silence()
+ // though I actually think it doesn't matter since we
+ // do this in onEndGrantRole and that means the above
+ // $other->isSilenced() test should've 'continue'd...
$old = self::$enabled;
self::$enabled = false;
$other->silence();