diff --git a/plugins/RegisterThrottle/RegisterThrottlePlugin.php b/plugins/RegisterThrottle/RegisterThrottlePlugin.php index b1e352474f..1150cd0112 100644 --- a/plugins/RegisterThrottle/RegisterThrottlePlugin.php +++ b/plugins/RegisterThrottle/RegisterThrottlePlugin.php @@ -81,6 +81,13 @@ class RegisterThrottlePlugin extends Plugin return true; } + public function onRouterInitialized(URLMapper $m) + { + $m->connect('main/ipregistrations/:ipaddress', + array('action' => 'ipregistrations'), + array('ipaddress' => '[0-9a-f\.\:]+')); + } + /** * Called when someone tries to register. * @@ -141,6 +148,12 @@ class RegisterThrottlePlugin extends Plugin return true; } + $target = $action->getTarget(); + if (!$target->isSilenced()) { + // Only show the IP of users who are not silenced. + return true; + } + $scoped = $action->getScoped(); if (!$scoped instanceof Profile || !$scoped->hasRight(self::VIEWMODLOG)) { // only continue if we are allowed to VIEWMODLOG @@ -160,7 +173,11 @@ class RegisterThrottlePlugin extends Plugin $action->element('h2', null, _('Registration IP')); $action->element('strong', null, _('Registered from:')); - $action->element('span', ['class'=>'ipaddress'], $ipaddress ?: 'unknown'); + $action->element('a', + [ 'class'=>'ipaddress', + 'href'=>common_local_url('ipregistrations', array('ipaddress'=>$ipaddress)), + ], + $ipaddress ?: 'unknown'); $action->elementEnd('div'); } @@ -185,8 +202,8 @@ class RegisterThrottlePlugin extends Plugin $reg = new Registration_ip(); - $reg->user_id = $profile->id; - $reg->ipaddress = $ipaddress; + $reg->user_id = $profile->getID(); + $reg->ipaddress = mb_strtolower($ipaddress); $reg->created = common_sql_now(); $result = $reg->insert(); diff --git a/plugins/RegisterThrottle/actions/ipregistrations.php b/plugins/RegisterThrottle/actions/ipregistrations.php new file mode 100644 index 0000000000..31217483b5 --- /dev/null +++ b/plugins/RegisterThrottle/actions/ipregistrations.php @@ -0,0 +1,40 @@ +ipaddress); + } + + protected function doPreparation() + { + if (!$scoped->hasRight(self::VIEWMODLOG) && !$scoped->hasRole(Profile_role::ADMINISTRATOR)) { + throw new AuthorizationException(_('You do not have privileges to see this page')); + } + + $this->ipaddress = $this->trimmed('ipaddress'); + $this->profile_ids = Registration_ip::usersByIP($this->ipaddress); + } + + public function showContent() + { + $this->elementStart('ul'); + foreach (Profile::listGet('id', $this->profile_ids) as $profile) { + $this->elementStart('li'); + try { + $this->element('a', ['href'=>$profile->getUrl()], $profile->getFancyName()); + } catch (InvalidUrlException $e) { + $this->element('span', null, $profile->getFancyName()); + } + $this->elementEnd('li'); + } + $this->elementEnd('ul'); + } +}