mirror of
https://github.com/e107inc/e107.git
synced 2025-01-17 20:58:30 +01:00
997 lines
28 KiB
PHP
997 lines
28 KiB
PHP
<?php
|
|
/*
|
|
* e107 website system
|
|
*
|
|
* Copyright (C) 2008-2012 e107 Inc (e107.org)
|
|
* Released under the terms and conditions of the
|
|
* GNU General Public License (http://www.gnu.org/licenses/gpl.txt)
|
|
*
|
|
* Ban List Management
|
|
*
|
|
*
|
|
*/
|
|
|
|
require_once(__DIR__.'/../class2.php');
|
|
|
|
if (!getperms('4'))
|
|
{
|
|
e107::redirect('admin');
|
|
exit();
|
|
}
|
|
|
|
require_once(e_HANDLER.'iphandler_class.php'); // This is probably already loaded in class2.php
|
|
|
|
e107::coreLan('banlist', true);
|
|
|
|
e107::js('footer-inline', "
|
|
|
|
$('#useip').click(function (event) {
|
|
|
|
var id = $(this).attr('data-ip');
|
|
$('#banlist-ip').val(id);
|
|
event.preventDefault();
|
|
});
|
|
|
|
");
|
|
|
|
|
|
class banlist_admin extends e_admin_dispatcher
|
|
{
|
|
|
|
protected $modes = array(
|
|
|
|
'main' => array(
|
|
'controller' => 'banlist_ui',
|
|
'path' => null,
|
|
'ui' => 'banlist_form_ui',
|
|
'uipath' => null
|
|
),
|
|
'white' => array(
|
|
'controller' => 'banlist_ui',
|
|
'path' => null,
|
|
'ui' => 'banlist_form_ui',
|
|
'uipath' => null
|
|
),
|
|
'failed' => array(
|
|
'controller' => 'failed_ui',
|
|
'path' => null,
|
|
'ui' => 'failed_form_ui',
|
|
'uipath' => null
|
|
),
|
|
|
|
);
|
|
|
|
|
|
protected $adminMenu = array(
|
|
|
|
'main/list' => array('caption'=> BANLAN_122, 'perm' => '4'),
|
|
'main/create' => array('caption'=> BANLAN_123, 'perm' => '4'),
|
|
'other' => array('divider'=>true),
|
|
// Use FILTER to view whitelist instead.
|
|
'white/list' => array('caption'=> BANLAN_52, 'perm' => '4'),
|
|
'white/create' => array('caption'=> BANLAN_53, 'perm' => '4'),
|
|
|
|
'other1' => array('divider'=>true),
|
|
|
|
'failed/list' => array('caption'=> ADLAN_146, 'perm'=>'4'),
|
|
|
|
'other2' => array('divider'=>true),
|
|
'main/transfer' => array('caption'=> BANLAN_35, 'perm' => '4'),
|
|
'main/times' => array('caption'=> BANLAN_15, 'perm' => '0'),
|
|
'main/options' => array('caption'=> LAN_OPTIONS, 'perm' => '0'),
|
|
// 'main/banlog' => array('caption'=> BANLAN_81, 'perm' => '0'),
|
|
);
|
|
|
|
protected $adminMenuAliases = array(
|
|
'main/edit' => 'main/list'
|
|
);
|
|
|
|
protected $menuTitle = BANLAN_16;
|
|
|
|
protected $adminMenuIcon = 'e-banlist-24';
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
class banlist_ui extends e_admin_ui
|
|
{
|
|
|
|
protected $pluginTitle = BANLAN_16;
|
|
protected $eventName = 'ban';
|
|
protected $table = 'banlist';
|
|
protected $pid = 'banlist_id';
|
|
protected $perPage = 10;
|
|
protected $listQry = "SELECT * FROM `#banlist` WHERE banlist_bantype != 100 ";
|
|
protected $listOrder = 'banlist_datestamp DESC';
|
|
|
|
protected $fields = array (
|
|
'checkboxes' => array ( 'title' => '', 'type' => null, 'data' => null, 'width' => '5%', 'thclass' => 'center', 'forced' => '1', 'class' => 'center', 'toggle' => 'e-multiselect', ),
|
|
'banlist_id' => array ( 'title' => LAN_ID, 'data' => 'int', 'width' => '5%', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
|
|
'banlist_ip' => array ( 'title' => BANLAN_126, 'type' => 'method', 'data' => 'str', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => array(), 'class' => 'left', 'thclass' => 'left', ),
|
|
'banlist_bantype' => array ( 'title' => LAN_TYPE, 'type' => 'method', 'data' => 'str', 'width' => 'auto', 'filter'=>true, 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
|
|
'banlist_datestamp' => array ( 'title' => LAN_DATESTAMP, 'type' => 'datestamp', 'data' => 'int', 'width' => 'auto', 'filter' => true, 'help' => '', 'readParms' => '', 'writeParms' => 'auto=1&hidden=1&readonly=1', 'class' => 'left', 'thclass' => 'left', ),
|
|
'banlist_banexpires' => array ( 'title' => BANLAN_124, 'type' => 'method', 'data' => 'int', 'inline'=>true, 'width' => 'auto', 'batch' => true, 'filter' => true, 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
|
|
'banlist_admin' => array ( 'title' => 'Admin', 'type' => 'text', 'data' => 'int', 'noedit'=>true, 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'center', 'thclass' => 'center', ),
|
|
'banlist_reason' => array ( 'title' => BANLAN_7, 'type' => 'text', 'data' => 'str', 'inline'=>true, 'width' => 'auto', 'help' => '', 'readParms' => 'constant=1', 'writeParms' => array('size'=>'xxlarge'), 'class' => 'left', 'thclass' => 'left', ),
|
|
'banlist_notes' => array ( 'title' => BANLAN_19, 'type' => 'text', 'data' => 'str', 'inline'=>true, 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => array('size'=>'xxlarge'), 'class' => 'left', 'thclass' => 'left', ),
|
|
'options' => array ( 'title' => LAN_OPTIONS, 'type' => '', 'data' => '', 'width' => '10%', 'thclass' => 'center last', 'class' => 'center last', 'forced' => '1', ),
|
|
);
|
|
|
|
protected $fieldpref = array('checkboxes', 'banlist_ip', 'banlist_bantype', 'banlist_datestamp', 'banlist_banexpires', 'banlist_reason', 'banlist_notes', 'options');
|
|
|
|
|
|
// protected $pref = array(
|
|
// 'pref_type' => array('title'=> 'type', 'type'=>'text', 'data' => 'string', 'validate' => true),
|
|
// 'pref_folder' => array('title'=> 'folder', 'type' => 'boolean', 'data' => 'integer'),
|
|
// 'pref_name' => array('title'=> 'name', 'type' => 'text', 'data' => 'string', 'validate' => 'regex', 'rule' => '#^[\w]+$#i', 'help' => 'allowed characters are a-zA-Z and underscore')
|
|
// );
|
|
|
|
|
|
function CreateObserver()
|
|
{
|
|
parent::CreateObserver();
|
|
$this->fields['banlist_ip']['title']= BANLAN_5;
|
|
}
|
|
|
|
function EditObserver()
|
|
{
|
|
parent::EditObserver();
|
|
$this->fields['banlist_ip']['title']= BANLAN_5;
|
|
}
|
|
|
|
//
|
|
|
|
/**
|
|
* Custom search field handling for banlist_ip.
|
|
* @param string $srch
|
|
*/
|
|
function handleListBanlistIpSearch($srch)
|
|
{
|
|
$ret = array(
|
|
"banlist_ip = '".$srch."'"
|
|
);
|
|
|
|
if($ip6 = e107::getIPHandler()->ipEncode($srch,true))
|
|
{
|
|
$ip = str_replace('x', '', $ip6);
|
|
$ret[] = "banlist_ip LIKE '%".$ip."%'";
|
|
}
|
|
|
|
return implode(" OR ",$ret);
|
|
}
|
|
|
|
|
|
// optional
|
|
public function init()
|
|
{
|
|
|
|
if($this->getMode() == 'white')
|
|
{
|
|
if($this->getAction() == 'list')
|
|
{
|
|
$this->listQry = "SELECT * FROM `#banlist` WHERE banlist_bantype = 100 ";
|
|
}
|
|
|
|
|
|
if($this->getAction() == 'create')
|
|
{
|
|
$myip = e107::getIPHandler()->getIP(true);
|
|
$this->fields['banlist_ip']['writeParms']['tdClassRight'] = 'form-inline';
|
|
$this->fields['banlist_ip']['writeParms']['pre'] = "<div class='input-append'>";
|
|
$this->fields['banlist_ip']['writeParms']['post'] = "<button class='btn btn-primary' id='useip' data-ip='{$myip}'>".BANLAN_125."</button></div>"; // USERIP;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
if (isset($_POST['update_ban_prefs'])) // Update ban messages
|
|
{
|
|
$this->timesPageSave();
|
|
}
|
|
}
|
|
|
|
|
|
public function beforeCreate($new_data, $old_data)
|
|
{
|
|
$new_data['banlist_admin'] = ADMINID;
|
|
|
|
if(filter_var($new_data['banlist_ip'], FILTER_VALIDATE_IP)) // check it's an IP
|
|
{
|
|
$new_data['banlist_ip'] = e107::getIPHandler()->ipEncode($new_data['banlist_ip']);
|
|
}
|
|
|
|
return $new_data;
|
|
}
|
|
|
|
public function beforeUpdate($new_data, $old_data, $id)
|
|
{
|
|
$new_data['banlist_admin'] = ADMINID;
|
|
|
|
if(filter_var($new_data['banlist_ip'], FILTER_VALIDATE_IP)) // check it's an IP
|
|
{
|
|
$new_data['banlist_ip'] = e107::getIPHandler()->ipEncode($new_data['banlist_ip']);
|
|
}
|
|
|
|
return $new_data;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public function afterCreate($new_data, $old_data, $id)
|
|
{
|
|
e107::getIPHandler()->regenerateFiles();
|
|
}
|
|
|
|
public function afterUpdate($new_data, $old_data, $id)
|
|
{
|
|
e107::getIPHandler()->regenerateFiles();
|
|
}
|
|
|
|
public function afterDelete($deleted_data, $id, $deleted_check)
|
|
{
|
|
|
|
e107::getIPHandler()->regenerateFiles();
|
|
}
|
|
|
|
|
|
public function addPage()
|
|
{
|
|
//$ns = e107::getRender();
|
|
//$text = 'Hello World!';
|
|
//$ns->tablerender('Hello',$text);
|
|
}
|
|
|
|
/**
|
|
* Create dropdown with options for ban time - uses internal fixed list of reasonable values
|
|
*/
|
|
private static function ban_time_dropdown($click_js = '', $zero_text = LAN_NEVER, $curval = -1, $drop_name = 'ban_time')
|
|
{
|
|
|
|
$frm = e107::getForm();
|
|
$intervals = array(0, 1, 2, 3, 6, 8, 12, 24, 36, 48, 72, 96, 120, 168, 336, 672);
|
|
|
|
$ret = $frm->select_open($drop_name, array('other' => $click_js, 'id' => false));
|
|
$ret .= $frm->option(' ', '');
|
|
foreach ($intervals as $i)
|
|
{
|
|
if ($i == 0)
|
|
{
|
|
$words = $zero_text ? $zero_text : LAN_NEVER;
|
|
}
|
|
elseif (($i % 24) == 0)
|
|
{
|
|
$words = floor($i / 24) . ' ' . BANLAN_23;
|
|
}
|
|
else
|
|
{
|
|
$words = $i . ' ' . BANLAN_24;
|
|
}
|
|
$ret .= $frm->option($words, $i, ($curval == $i));
|
|
}
|
|
$ret .= '</select>';
|
|
|
|
return $ret;
|
|
}
|
|
|
|
|
|
protected function transferPage()
|
|
{
|
|
|
|
$ipAdministrator = new banlistManager;
|
|
|
|
// Character options for import & export
|
|
$separator_char = array(1 => ',', 2 => '|');
|
|
$quote_char = array(1 => '(none)', 2 => "'", 3 => '"');
|
|
|
|
$frm = e107::getForm();
|
|
$mes = e107::getMessage();
|
|
|
|
$error = false;
|
|
|
|
if(isset($_POST['ban_import'])) // Got a file to import
|
|
{
|
|
require_once(e_HANDLER . 'upload_handler.php');
|
|
|
|
if(($files = process_uploaded_files(e_UPLOAD, false, array('overwrite' => true, 'max_file_count' => 1, 'file_mask' => 'csv'))) === false)
|
|
{ // Invalid file
|
|
$error = true;
|
|
$mes->addError(BANLAN_47);
|
|
}
|
|
|
|
if(empty($files) || vartrue($files[0]['error']))
|
|
{
|
|
$error = true;
|
|
if(varset($files[0]['message']))
|
|
{
|
|
$mes->addError($files[0]['message']);
|
|
}
|
|
}
|
|
|
|
if(!$error) // Got a file of some sort
|
|
{
|
|
$message = process_csv(e_UPLOAD . $files[0]['name'],
|
|
intval(varset($_POST['ban_over_import'], 0)),
|
|
intval(varset($_POST['ban_over_expiry'], 0)),
|
|
$separator_char[intval(varset($_POST['ban_separator'], 1))],
|
|
$quote_char[intval(varset($_POST['ban_quote'], 3))]);
|
|
banlist_adminlog('07', 'File: ' . e_UPLOAD . $files[0]['name'] . '<br />' . $message);
|
|
}
|
|
|
|
}
|
|
|
|
$text = "
|
|
<form method='post' action='" . e_ADMIN_ABS . "banlist_export.php' id='core-banlist-transfer-form' >
|
|
<fieldset id='core-banlist-transfer-export'>
|
|
<legend>" . BANLAN_40 . "</legend>
|
|
<table class='table adminlist'>
|
|
<colgroup>
|
|
<col style='width:30%' />
|
|
<col style='width:30%' />
|
|
<col style='width:40%' />
|
|
</colgroup>
|
|
<tbody>
|
|
<tr>
|
|
<th colspan='2'>" . BANLAN_36 . "</th>
|
|
<th> </th>
|
|
</tr>
|
|
";
|
|
|
|
|
|
foreach($ipAdministrator->getValidReasonList() as $i) //FIXME $frm->label()
|
|
{
|
|
$text .= "
|
|
<tr>
|
|
<td colspan='3'>
|
|
" . $frm->checkbox("ban_types[{$i}]", $i) . $frm->label($ipAdministrator->getBanTypeString($i, false), "ban_types[{$i}]", $i) . "
|
|
<span class='field-help'>(" . $ipAdministrator->getBanTypeString($i, true) . ")</span>
|
|
</td></tr>
|
|
";
|
|
}
|
|
|
|
$text .= "<tr>
|
|
<td>" . BANLAN_79 . "</td>
|
|
<td>" . $frm->select('ban_separator', $separator_char) . ' ' . BANLAN_37 . "</td>
|
|
<td>" . $frm->select('ban_quote', $quote_char) . ' ' . BANLAN_38 . "</td></tr>";
|
|
|
|
$text .= "
|
|
|
|
</tbody>
|
|
</table>
|
|
<div class='buttons-bar center'>" . $frm->admin_button('ban_export', LAN_UI_BATCH_EXPORT, 'export', BANLAN_39) . "</div>
|
|
<input type='hidden' name='e-token' value='" . e_TOKEN . "' />
|
|
</fieldset>
|
|
</form>
|
|
";
|
|
|
|
// Now do the import options
|
|
$text .= "
|
|
<form enctype='multipart/form-data' method='post' action='" . e_SELF . "?transfer' id='ban_import_form' >
|
|
<fieldset id='core-banlist-transfer-import'>
|
|
<legend>" . BANLAN_41 . "</legend>
|
|
<table class='table adminlist'>
|
|
<colgroup>
|
|
<col style='width:30%' />
|
|
<col style='width:30%' />
|
|
<col style='width:40%' />
|
|
</colgroup>
|
|
<tbody>
|
|
<tr>
|
|
<th colspan='2'>" . BANLAN_42 . "</th>
|
|
<th> </th>
|
|
</tr>
|
|
<tr>
|
|
<td colspan='3'>" . $frm->checkbox('ban_over_import', 1, '', array('label' => BANLAN_43)) . "</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan='3'>" . $frm->checkbox('ban_over_expiry', 1, '', array('label' => BANLAN_44)) . "</td>
|
|
</tr>
|
|
<tr>
|
|
<td>" . BANLAN_46 . "</td>
|
|
<td colspan='2'>
|
|
" . $frm->file('file_userfile[]', array('size' => '40')) . "
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>" . BANLAN_80 . "</td>
|
|
<td>" . $frm->select('ban_separator', $separator_char) . ' ' . BANLAN_37 . "</td>
|
|
<td>" . $frm->select('ban_quote', $quote_char) . ' ' . BANLAN_38 . "</td></tr>
|
|
</tbody>
|
|
</table>
|
|
<div class='buttons-bar center'>
|
|
" . $frm->admin_button('ban_import', LAN_IMPORT , 'import') . $frm->token(). "
|
|
</div>
|
|
|
|
|
|
</fieldset>
|
|
</form>
|
|
";
|
|
|
|
return $mes->render() . $text;
|
|
}
|
|
|
|
|
|
|
|
private function timesPageSave()
|
|
{
|
|
|
|
|
|
$ipAdministrator = new banlistManager;
|
|
$tp = e107::getParser();
|
|
$changed = false;
|
|
|
|
$pref = array();
|
|
|
|
$reasonList = $ipAdministrator->getValidReasonList();
|
|
foreach ($ipAdministrator->getValidReasonList() as $bt)
|
|
{
|
|
$i = abs($bt) + 1; // Forces a single-digit positive number for part of field name
|
|
$t1 = $tp->toDB(varset($_POST['ban_text_'.($i)],''));
|
|
$t2 = intval(varset($_POST['ban_time_'.($i)],0));
|
|
if (!isset($pref['ban_messages'][$bt]) || ($pref['ban_messages'][$bt] != $t1))
|
|
{
|
|
$pref['ban_messages'][$bt] = $t1;
|
|
$changed = TRUE;
|
|
}
|
|
if (!isset($pref['ban_durations'][$bt]) || ($pref['ban_durations'][$bt] != $t2))
|
|
{
|
|
$pref['ban_durations'][$bt] = $t2;
|
|
$changed = TRUE;
|
|
}
|
|
}
|
|
|
|
if ($changed && !empty($pref))
|
|
{
|
|
// @todo write actual prefs changes to log file (different methods for prefs?)
|
|
e107::getConfig()->setPref($pref)->save();
|
|
// save_prefs();
|
|
/*****************************************
|
|
Write messages and times to disc file
|
|
*****************************************/
|
|
$ipAdministrator->writeBanMessageFile();
|
|
banlist_adminlog('08','');
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected function timesPage()
|
|
{
|
|
if (!getperms('0'))
|
|
{
|
|
return;
|
|
}
|
|
|
|
$pref = e107::getPref();
|
|
$tp = e107::getParser();
|
|
$frm = e107::getForm();
|
|
$mes = e107::getMessage();
|
|
|
|
$ipAdministrator = new banlistManager;
|
|
|
|
$text = '';
|
|
if ((!isset($pref['ban_messages'])) || !is_array($pref['ban_messages']))
|
|
{
|
|
foreach ($ipAdministrator->getValidReasonList() as $bt)
|
|
{
|
|
$pref['ban_messages'][$bt] = '';
|
|
}
|
|
}
|
|
if ((!isset($pref['ban_durations'])) || !is_array($pref['ban_durations']))
|
|
{
|
|
foreach ($ipAdministrator->getValidReasonList() as $bt)
|
|
{
|
|
$pref['ban_durations'][$bt] = 0;
|
|
}
|
|
}
|
|
|
|
$text .= "
|
|
<form method='post' action='".e_SELF.'?'.e_QUERY."' id='ban_options'>
|
|
<fieldset id='core-banlist-times'>
|
|
<legend class='e-hideme'>".BANLAN_77."</legend>
|
|
<table class='table adminlist'>
|
|
<colgroup>
|
|
<col style='width: 20%' />
|
|
<col style='width: 65%' />
|
|
<col style='width: 15%' />
|
|
</colgroup>
|
|
<thead>
|
|
<tr>
|
|
<th>".BANLAN_28."</th>
|
|
<th>".BANLAN_29."<br />".BANLAN_31."</th>
|
|
<th class='center last'>".BANLAN_30."</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
";
|
|
foreach ($ipAdministrator->getValidReasonList() as $bt)
|
|
{
|
|
$i = abs($bt) + 1; // Forces a single-digit positive number
|
|
|
|
$helpTip = $ipAdministrator->getBanTypeString($bt, TRUE);
|
|
$text .= "
|
|
<tr>
|
|
<td>
|
|
<strong>".$ipAdministrator->getBanTypeString($bt, FALSE)."</strong>
|
|
".$frm->help($helpTip)."
|
|
</td>
|
|
<td class='left'>
|
|
".$frm->textarea('ban_text_'.($i), $pref['ban_messages'][$bt], 4, 120, array('size'=>'xxlarge'))."
|
|
</td>
|
|
<td class='center'>". self::ban_time_dropdown('', BANLAN_32, $pref['ban_durations'][$bt], 'ban_time_' . ($i)) ."</td>
|
|
</tr>
|
|
";
|
|
}
|
|
$text .= "
|
|
</tbody>
|
|
</table>
|
|
<div class='buttons-bar center'>
|
|
".$frm->admin_button('update_ban_prefs', LAN_UPDATE, 'update')."
|
|
<input type='hidden' name='e-token' value='".e_TOKEN."' />
|
|
</div>
|
|
</fieldset>
|
|
</form>
|
|
";
|
|
|
|
echo $mes->render().$text;
|
|
}
|
|
|
|
|
|
private function drop_box($box_name, $curval)
|
|
{
|
|
$frm = e107::getForm();
|
|
|
|
$opts = array(50, 100, 150, 200, 250, 300, 400, 500);
|
|
$ret = $frm->select_open($box_name, array('class' => 'tbox'));
|
|
foreach ($opts as $o)
|
|
{
|
|
$ret .= $frm->option($o, $o, ($curval == $o));
|
|
}
|
|
$ret .= "</select>\n";
|
|
return $ret;
|
|
}
|
|
|
|
|
|
protected function optionsPage()
|
|
{
|
|
if (!getperms('0'))
|
|
{
|
|
exit();
|
|
}
|
|
|
|
$mes = e107::getMessage();
|
|
$tp = e107::getParser();
|
|
$sql = e107::getDb();
|
|
$frm = e107::getForm();
|
|
$pref = e107::getPref();
|
|
|
|
|
|
if (isset($_POST['update_ban_options']))
|
|
{
|
|
$pref['enable_rdns'] = intval($_POST['ban_rdns_on_access']);
|
|
$pref['enable_rdns_on_ban'] = intval($_POST['ban_rdns_on_ban']);
|
|
$pref['ban_max_online_access'] = intval($_POST['ban_access_guest']).','.intval($_POST['ban_access_member']);
|
|
$pref['ban_retrigger'] = intval($_POST['ban_retrigger']);
|
|
$pref['ban_date_format'] = $tp->toDB($_POST['ban_date_format']);
|
|
|
|
e107::getConfig()->setPref($pref)->save(true,true,true);
|
|
}
|
|
|
|
if (isset($_POST['remove_expired_bans']))
|
|
{
|
|
$result = $sql->delete('banlist',"`banlist_bantype` < ".eIPHandler::BAN_TYPE_WHITELIST." AND `banlist_banexpires` > 0 AND `banlist_banexpires` < ".time());
|
|
banlist_adminlog('12', $result);
|
|
$mes->addSuccess(str_replace('[y]', $result, BANLAN_48));
|
|
}
|
|
|
|
list($ban_access_guest, $ban_access_member) = explode(',', varset($pref['ban_max_online_access'], '100,200'));
|
|
$ban_access_member = max($ban_access_guest, $ban_access_member);
|
|
|
|
|
|
$text = "
|
|
<form method='post' action='".e_SELF."?mode=main&action=options'>
|
|
<fieldset id='core-banlist-options'>
|
|
<legend>".BANLAN_72."</legend>
|
|
<table class='table adminform'>
|
|
<colgroup>
|
|
<col class='col-label' />
|
|
<col class='col-control' />
|
|
</colgroup>
|
|
<tbody>
|
|
<tr>
|
|
<td>".BANLAN_63."".$frm->help(BANLAN_65)."</td>
|
|
<td>
|
|
<div class='auto-toggle-area autocheck'>
|
|
".$frm->checkbox('ban_rdns_on_access', 1, $pref['enable_rdns'] == 1)."
|
|
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>".BANLAN_64.$frm->help(BANLAN_66)."</td>
|
|
<td>
|
|
<div class='auto-toggle-area autocheck'>
|
|
".$frm->checkbox('ban_rdns_on_ban', 1, $pref['enable_rdns_on_ban'] == 1)."
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>".BANLAN_67.$frm->help(BANLAN_68)."</td>
|
|
<td>
|
|
<div class='field-spacer'>".$this->drop_box('ban_access_guest', $ban_access_guest).BANLAN_70."</div>
|
|
<div class='field-spacer'>".$this->drop_box('ban_access_member', $ban_access_member).BANLAN_69."</div>
|
|
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>".BANLAN_71.$frm->help(BANLAN_73)."</td>
|
|
<td>
|
|
<div class='auto-toggle-area autocheck'>
|
|
".$frm->checkbox('ban_retrigger', 1, $pref['ban_retrigger'] == 1)."
|
|
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>".BANLAN_91.$frm->help(BANLAN_92)."</td>
|
|
<td>
|
|
".$frm->text('ban_date_format', varset($pref['ban_date_format'], '%H:%M %d-%m-%y'), 40)."
|
|
".$frm->help(BANLAN_92, 'after')."
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class='buttons-bar center'>
|
|
".$frm->admin_button('update_ban_options', LAN_UPDATE, 'update')."
|
|
<input type='hidden' name='e-token' value='".e_TOKEN."' />
|
|
</div>
|
|
</fieldset>
|
|
<fieldset id='core-banlist-options-ban'>
|
|
<legend>".BANLAN_74."</legend>
|
|
<table class='table adminform'>
|
|
<colgroup>
|
|
<col class='col-label' />
|
|
<col class='col-control' />
|
|
</colgroup>
|
|
<tbody>
|
|
<tr>
|
|
<td>".BANLAN_75."</td>
|
|
<td>
|
|
".$frm->admin_button('remove_expired_bans', BANLAN_76, 'delete')."
|
|
<input type='hidden' name='e-token' value='".e_TOKEN."' />
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</fieldset>
|
|
</form>
|
|
";
|
|
|
|
return $text;
|
|
}
|
|
|
|
protected function banlogPage()
|
|
{
|
|
//FIXME Put LogPage code in here.
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
class banlist_form_ui extends e_admin_form_ui
|
|
{
|
|
|
|
// Custom Method/Function
|
|
function banlist_reason($curVal,$mode) //TODO
|
|
{
|
|
|
|
switch($mode)
|
|
{
|
|
case 'read': // List Page
|
|
|
|
break;
|
|
|
|
case 'write': // Edit Page
|
|
return $this->renderElement('banlist_reason', $curVal, array());
|
|
break;
|
|
|
|
case 'filter':
|
|
case 'batch':
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Custom Method/Function
|
|
function banlist_ip($curVal,$mode) //TODO
|
|
{
|
|
|
|
if(!empty($curVal))
|
|
{
|
|
$tmp = explode(":",$curVal);
|
|
|
|
if(count($tmp) === 8)
|
|
{
|
|
$curVal = e107::getIPHandler()->ipDecode($curVal);
|
|
}
|
|
}
|
|
|
|
switch($mode)
|
|
{
|
|
case 'read': // List Page
|
|
return $curVal;
|
|
break;
|
|
|
|
case 'write': // Edit Page
|
|
|
|
return $this->text('banlist_ip', $curVal, array());
|
|
break;
|
|
|
|
case 'filter':
|
|
case 'batch':
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
// Custom Method/Function
|
|
function banlist_bantype($curVal,$mode)
|
|
{
|
|
|
|
$ipAdministrator = new banlistManager;
|
|
|
|
// print_a($ipAdministrator->banTypes);
|
|
|
|
switch($mode)
|
|
{
|
|
case 'read': // List Page
|
|
return "<div class='nowrap' title='".$ipAdministrator->getBanTypeString($curVal, TRUE)."'>".$ipAdministrator->getBanTypeString($curVal, FALSE)."</div>";
|
|
break;
|
|
|
|
case 'write': // Edit Page
|
|
|
|
if ($this->getController()->getMode() == 'white')
|
|
{
|
|
return $this->hidden('banlist_bantype',eIPHandler::BAN_TYPE_WHITELIST)."<span class='label label-success'>".BANLAN_120."</span>";
|
|
}
|
|
elseif($this->getController()->getAction() == 'create')
|
|
{
|
|
return $this->hidden('banlist_bantype',eIPHandler::BAN_TYPE_MANUAL)."<span class='label label-important label-danger'>".BANLAN_121."</span>";
|
|
}
|
|
|
|
|
|
|
|
return $this->select('banlist_bantype',$ipAdministrator->banTypes, $curVal);
|
|
break;
|
|
|
|
case 'filter':
|
|
case 'batch':
|
|
return $ipAdministrator->banTypes;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
// Custom Method/Function
|
|
function banlist_banexpires($curVal,$mode)
|
|
{
|
|
|
|
$pref = e107::getPref();
|
|
$date = e107::getDate();
|
|
$opts = $this->banexpires();
|
|
|
|
switch($mode)
|
|
{
|
|
case 'read': // List Page
|
|
$id = $this->getController()->getListModel()->get('banlist_ip');
|
|
// $val = ($curVal ? strftime($pref['ban_date_format'], $curVal).(($curVal < time()) ? ' ('.BANLAN_34.')' : '') : LAN_NEVER); // ."<br />".$this->banexpires();
|
|
// $val .= " (".$curVal.")";
|
|
// $mod = preg_replace('/[^\w]/', '', vartrue($_GET['mode'], ''));
|
|
$val = vartrue($curVal) ? $date->computeLapse(time(), $curVal) : LAN_NEVER;
|
|
|
|
$val = str_replace("ago", "", $val); // quick fix for the 'ago'.
|
|
|
|
if(vartrue($curVal) && $curVal < time())
|
|
{
|
|
$val = BANLAN_34;
|
|
}
|
|
|
|
$source = str_replace('"',"'",json_encode($opts));
|
|
return "<a class='e-tip e-editable' data-name='banlist_banexpires' data-source=\"".$source."\" data-type='select' data-pk='".$id."' data-url='".e_SELF."?mode=&action=inline&id={$id}&ajax_used=1' href='#'>".$val."</a>";
|
|
|
|
break;
|
|
|
|
case 'write': // Edit Page
|
|
if(!empty($curVal))
|
|
{
|
|
$opts[$curVal] = e107::getParser()->toDate($curVal, 'short');
|
|
}
|
|
|
|
return $this->select('banlist_banexpires',$opts, $curVal);
|
|
// return $frm->text('banlist_banexpires',$curVal);
|
|
break;
|
|
|
|
case 'filter':
|
|
case 'batch':
|
|
return false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
function banexpires()
|
|
{
|
|
$intervals = array(0, 1, 2, 3, 6, 8, 12, 24, 36, 48, 72, 96, 120, 168, 336, 672);
|
|
|
|
$opts = array();
|
|
|
|
foreach ($intervals as $i)
|
|
{
|
|
$words = "";
|
|
|
|
if ($i == 0)
|
|
{
|
|
$opts[$i] = LAN_NEVER;
|
|
continue;
|
|
}
|
|
elseif (($i % 24) == 0 && $i !== 24)
|
|
{
|
|
$words = floor($i / 24).' '.BANLAN_23;
|
|
}
|
|
else
|
|
{
|
|
$words = $i.' '.BANLAN_24;
|
|
}
|
|
|
|
$calc = time() + ($i * 60 * 60);
|
|
|
|
$opts[$calc] = $words;
|
|
}
|
|
// print_a($opts);
|
|
return $opts;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class failed_ui extends e_admin_ui
|
|
{
|
|
|
|
protected $pluginTitle = BANLAN_16;
|
|
protected $pluginName = 'failed_login';
|
|
protected $table = 'generic';
|
|
protected $pid = 'gen_id';
|
|
protected $perPage = 10;
|
|
protected $listQry = "SELECT * FROM `#generic` WHERE gen_type='failed_login' ";
|
|
protected $listOrder = "gen_datestamp DESC";
|
|
|
|
protected $fields = array ( 'checkboxes' => array ( 'title' => '', 'type' => null, 'data' => null, 'width' => '5%', 'thclass' => 'center', 'forced' => '1', 'class' => 'center', 'toggle' => 'e-multiselect', ),
|
|
'gen_id' => array ( 'title' => LAN_ID, 'nolist'=>true, 'data' => 'int', 'width' => '5%', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
|
|
// 'gen_type' => array ( 'title' => LAN_BAN, 'type' => 'method', 'data' => 'str', 'width' => 'auto', 'batch' => true, 'filter' => true, 'inline' => true, 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
|
|
'gen_datestamp' => array ( 'title' => LAN_DATESTAMP, 'type' => 'datestamp', 'data' => 'int', 'width' => 'auto', 'filter' => true, 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
|
|
'gen_chardata' => array ( 'title' => LAN_DESCRIPTION, 'type' => 'method', 'data' => 'str', 'width' => '40%', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', 'filter'=>true ),
|
|
|
|
// 'gen_user_id' => array ( 'title' => LAN_BAN, 'type' => 'method', 'batch'=>true, 'data' => 'int', 'width' => '5%', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
|
|
'gen_ip' => array ( 'title' => LAN_IP, 'type' => 'ip', 'data' => 'str', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
|
|
// 'gen_intdata' => array ( 'title' => LAN_BAN, 'type' => 'method', 'batch'=>true, 'data' => 'int', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'center', 'thclass' => 'center', ),
|
|
'options' => array ( 'title' => LAN_OPTIONS, 'type' => null, 'data' => null, 'width' => '10%', 'thclass' => 'center last', 'class' => 'center last', 'forced' => '1', 'readParms'=>'edit=0' ),
|
|
);
|
|
|
|
protected $fieldpref = array('gen_datestamp', 'gen_ip', 'gen_chardata');
|
|
|
|
protected $batchOptions = array();
|
|
|
|
// optional
|
|
public function init()
|
|
{
|
|
if(varset($_POST['etrigger_batch']) == 'gen_intdata__1' && count($_POST['e-multiselect'])) // Do we need BAN here?
|
|
{
|
|
$dels = implode(',',$_POST['e-multiselect']);
|
|
//$e107::getDb()->insert('banlist',
|
|
}
|
|
|
|
$allFailedTotal = e107::getDB()->count('generic', '(*)', "gen_type='failed_login'");
|
|
|
|
$this->batchOptions = array('delete-all'=>str_replace('[x]', $allFailedTotal, BANLAN_127));
|
|
|
|
if(!empty($_POST['etrigger_batch']) && $_POST['etrigger_batch'] == "delete-all")
|
|
{
|
|
$this->deleteAllFailed();
|
|
}
|
|
|
|
|
|
}
|
|
|
|
private function deleteAllFailed()
|
|
{
|
|
|
|
if(e107::getDB()->delete('generic', "gen_type='failed_login'"))
|
|
{
|
|
e107::getMessage()->addSuccess(LAN_DELETED);
|
|
}
|
|
}
|
|
|
|
public function afterDelete($deleted_data, $id, $deleted_check)
|
|
{
|
|
// $sql2->db_Delete('banlist', "banlist_ip='{$banIP}'");
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
class failed_form_ui extends e_admin_form_ui
|
|
{
|
|
|
|
|
|
// Custom Method/Function
|
|
function gen_intdata($curVal,$mode)
|
|
{
|
|
$frm = e107::getForm();
|
|
|
|
switch($mode)
|
|
{
|
|
case 'read': // List Page
|
|
return $curVal;
|
|
break;
|
|
|
|
case 'write': // Edit Page
|
|
return $frm->text('gen_type',$curVal);
|
|
break;
|
|
|
|
case 'filter':
|
|
case 'batch':
|
|
return array(1=>LAN_BAN);
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
// Custom Method/Function
|
|
function gen_chardata($curVal,$mode)
|
|
{
|
|
$frm = e107::getForm();
|
|
|
|
switch($mode)
|
|
{
|
|
case 'read': // List Page
|
|
return str_replace(":::","<br />",$curVal);
|
|
break;
|
|
|
|
case 'write': // Edit Page
|
|
return $frm->text('gen_chardata',$curVal);
|
|
break;
|
|
|
|
case 'filter':
|
|
case 'batch':
|
|
// return $array;
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
new banlist_admin();
|
|
|
|
require_once(e_ADMIN."auth.php");
|
|
e107::getAdminUI()->runPage();
|
|
|
|
|
|
require_once(e_ADMIN.'footer.php');
|
|
|
|
|
|
|