예제 #1
0
 /**
  * Get the users who've registered with this ip address.
  *
  * @param Array $ipaddress IP address to check for
  *
  * @return Array IDs of users who registered with this address.
  */
 static function usersByIP($ipaddress)
 {
     $ids = array();
     $ri = new Registration_ip();
     $ri->ipaddress = $ipaddress;
     if ($ri->find()) {
         while ($ri->fetch()) {
             $ids[] = $ri->user_id;
         }
     }
     return $ids;
 }
 /**
  * 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
  */
 function onEndGrantRole($profile, $role)
 {
     if (!self::$enabled) {
         return true;
     }
     if ($role != Profile_role::SILENCED) {
         return true;
     }
     if (!$this->silenced) {
         return true;
     }
     $ri = Registration_ip::staticGet('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::staticGet('id', $id);
         if (empty($other)) {
             continue;
         }
         if ($other->isSilenced()) {
             continue;
         }
         $old = self::$enabled;
         self::$enabled = false;
         $other->silence();
         self::$enabled = $old;
     }
 }
 /**
  * Gets the Nth registration with the given IP address.
  *
  * @param string  $ipaddress Address to key on
  * @param integer $n         Nth address
  *
  * @return Registration_ip nth registration or null if not found.
  */
 private function _getNthReg($ipaddress, $n)
 {
     $reg = new Registration_ip();
     $reg->ipaddress = $ipaddress;
     $reg->orderBy('created DESC');
     $reg->limit($n - 1, 1);
     if ($reg->find(true)) {
         return $reg;
     } else {
         return null;
     }
 }