e107_admin/banlist.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
*
*
*/
if(!empty($_POST) && !isset($_POST['e-token']))
{
$_POST['e-token'] = '';
}
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', LAN_UI_BATCH_EXPORT) . "</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='".defset('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='".defset('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='".defset('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');