+
+ /**
+ * When silencing a user, silence all other users registered from that IP
+ * address.
+ *
+ * @param Profile $profile Person getting a new role
+ * @param string $role Role being assigned like 'moderator' or 'silenced'
+ *
+ * @return boolean hook value
+ */
+ public function onEndGrantRole($profile, $role)
+ {
+ if (!self::$enabled) {
+ return true;
+ }
+
+ if ($role != Profile_role::SILENCED) {
+ return true;
+ }
+
+ if (!$this->silenced) {
+ return true;
+ }
+
+ $ri = Registration_ip::getKV('user_id', $profile->id);
+
+ if (empty($ri)) {
+ return true;
+ }
+
+ $ids = Registration_ip::usersByIP($ri->ipaddress);
+
+ foreach ($ids as $id) {
+ if ($id == $profile->id) {
+ continue;
+ }
+
+ $other = Profile::getKV('id', $id);
+
+ if (empty($other)) {
+ continue;
+ }
+
+ if ($other->isSilenced()) {
+ continue;
+ }
+
+ $old = self::$enabled;
+ self::$enabled = false;
+ $other->silence();
+ self::$enabled = $old;
+ }
+ }