getPageTitle();
$html = $SpecialDieSpammers->output();
}
class SpecialDieSpammers extends SpecialPagePlugin
{
protected $pageName = 'DieSpammers';
public function output()
{
global $wgDatabase;
$User = DekiUser::getCurrent();
if (!$User->isAdmin())
{
$this->redirectHome();
return;
}
// by default, get past couple hundred users
$DekiPlug = DekiPlug::getInstance();
$Request = DekiRequest::getInstance();
if ($Request->isPost())
{
$values = $Request->getVal('user');
$userids = array_keys($values); /* checked users */
$ipaddreses = array();
if (!empty($userids))
{
foreach ($userids as $userid)
{
$User = DekiUser::newFromId($userid);
$nt = Title::newFromText($User->getName(), NS_USER);
$pageid = $nt->getArticleId();
$delhtml = $banhtml = '';
if ($pageid > 0)
{
$Result = $DekiPlug->At('pages', $pageid)->With('recursive', 'true')->Delete();
if ($Result->getStatus() == 200)
{
$delhtml = ', and their user pages have been deleted';
}
}
$User->disable();
$User->update();
// if has IP address
$row = $wgDatabase->selectRow('logins', array('login_ip_address'), array('login_user_id' => $User->getId()));
$ipaddresses[] = $row ? $row->login_ip_address: null;
if ($row)
{
$banhtml = ', and '.$row->login_ip_address.' has been banned';
}
DekiMessage::success($User->getName().' has been deactivated'.$delhtml.$banhtml.'.');
}
// ban by ip addresses; unique
if (!empty($ipaddresses))
{
$ipaddresses = array_unique($ipaddresses);
foreach ($ipaddresses as $ipaddy)
{
$Ban = new DekiBan;
$Ban->setExpiry('infinity');
$Ban->setBannedUser('ip', $ipaddy);
$Ban->Bannee = null;
$Response = $DekiPlug->At('site', 'bans')->Post($Ban->toArray());
}
}
}
$st = Title::newFromText($this->pageName, NS_SPECIAL);
$this->redirect($st->getLocalUrl());
return;
}
$Result = $DekiPlug->At('users')
->With('sortby', '-id')
->With('limit', $Request->getVal('limit', 100))
->With('offset', $Request->getVal('offset', 0))
->With('activatedfilter', 'true')->Get();
$Users = $Result->getAll('body/users/user');
$html = '';
if (!empty($Users))
{
$checked = !is_null($Request->getVal('offset')) || !is_null($Request->getVal('limit'));
foreach ($Users as $user)
{
$User = DekiUser::newFromArray($user);
$row = $wgDatabase->selectRow('logins', array('login_ip_address'), array('login_user_id' => $User->getId()));
$ipaddresses[] = $row ? $row->login_ip_address: null;
$ipaddy = "";
if ($row)
{
$ipaddy = $row->login_ip_address;
}
$html .= DekiForm::singleInput('checkbox', 'user['.$User->getId().']', null, array('checked' => $checked ? 'checked': null), $User->getName() .' ('.$User->getEmail().')'). ' (' . $ipaddy . ')
';
}
}
return '