diff --git a/e107_admin/banlist.php b/e107_admin/banlist.php index 7a36ffd94..d676dda14 100644 --- a/e107_admin/banlist.php +++ b/e107_admin/banlist.php @@ -92,14 +92,12 @@ class banlist_ui extends e_admin_ui protected $table = 'banlist'; protected $pid = 'banlist_id'; protected $perPage = 10; - - //FIXME banlist_ip should be data => 'str' - however, edit link will not contain a value for 'id' when this is the case. - //FIXME need to edit/display primary key value. ie. banlist_ip + 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' => LAN_IP, 'type' => 'ip', 'data' => 'str', 'width' => '5%', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ), - 'banlist_bantype' => array ( 'title' => LAN_TYPE, 'type' => 'method', 'data' => 'str', 'width' => 'auto', 'filter'=>true, 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'center', 'thclass' => 'center', ), + 'banlist_id' => array ( 'title' => LAN_ID, 'data' => 'int', 'width' => '5%', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ), + 'banlist_ip' => array ( 'title' => LAN_IP, 'type' => 'ip', 'data' => 'str', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', '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' => 'Expires', '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' => 'boolean', 'data' => 'int', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'center', 'thclass' => 'center', ), @@ -109,9 +107,7 @@ class banlist_ui extends e_admin_ui ); 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), @@ -123,24 +119,28 @@ class banlist_ui extends e_admin_ui // optional public function init() { - if($_POST['something']) // example - { - //$this->processSomething(); - } - if (isset($_POST['update_ban_prefs'])) // Update ban messages { $this->timesPageSave(); } - - - - - - } - - + + 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(); @@ -350,13 +350,18 @@ class banlist_form_ui extends e_admin_form_ui break; case 'write': // Edit Page + if(!empty($curVal)) + { + $opts[$curVal] = e107::getParser()->toDate($curVal, 'short'); + } + return $this->selectbox('banlist_banexpires',$opts, $curVal); // return $frm->text('banlist_banexpires',$curVal); break; case 'filter': case 'batch': - return $array; + return false; break; } } @@ -374,7 +379,7 @@ class banlist_form_ui extends e_admin_form_ui if ($i == 0) { - $words = $zero_text ? $zero_text : LAN_NEVER; + $words = LAN_NEVER; } elseif (($i % 24) == 0 && $i !== 24) { diff --git a/e107_handlers/admin_ui.php b/e107_handlers/admin_ui.php index 984824253..a81da0392 100644 --- a/e107_handlers/admin_ui.php +++ b/e107_handlers/admin_ui.php @@ -3644,27 +3644,22 @@ class e_admin_controller_ui extends e_admin_controller default: // string usually. - - if($this->fields[$filterField]['type'] == 'method') // More flexible filtering. + + if($filterValue == '_ISEMPTY_') { - if($filterValue == '_ISEMPTY_') - { - $searchQry[] = $this->fields[$filterField]['__tableField']." = '' "; - } - else + $searchQry[] = $this->fields[$filterField]['__tableField']." = '' "; + } + else + { + + if($this->fields[$filterField]['type'] == 'method') // More flexible filtering. { + $searchQry[] = $this->fields[$filterField]['__tableField']." LIKE \"%".$tp->toDB($filterValue)."%\""; } - - } - else - { - if($filterValue == '_ISEMPTY_') - { - $searchQry[] = $this->fields[$filterField]['__tableField']." = '' "; - } - else + else { + $searchQry[] = $this->fields[$filterField]['__tableField']." = '".$tp->toDB($filterValue)."'"; } } @@ -3718,8 +3713,16 @@ class e_admin_controller_ui extends e_admin_controller } continue; } + + if($var['type'] == 'ip') + { + $filter[] = $var['__tableField']." LIKE '%".e107::getIpHandler()->ipEncode($searchQuery)."%'"; + // Continue below for BC check also. + } $filter[] = $var['__tableField']." LIKE '%".$searchQuery."%'"; + + if($isfilter) { $filterFrom[] = $var['__tableField']; @@ -3728,7 +3731,10 @@ class e_admin_controller_ui extends e_admin_controller } } - // e107::getMessage()->addInfo(print_a($filter,true)); + if(E107_DEBUG_LEVEL == E107_DBG_SQLQUERIES) + { + // e107::getMessage()->addInfo(print_a($filter,true)); + } if($isfilter) { diff --git a/e107_handlers/iphandler_class.php b/e107_handlers/iphandler_class.php index 355417cfc..d3e8128ff 100644 --- a/e107_handlers/iphandler_class.php +++ b/e107_handlers/iphandler_class.php @@ -189,7 +189,7 @@ class eIPHandler * @param int $reason - numeric reason code, usually in range -10..+10 * @param string $message - additional text as required (length not checked, but should be less than 100 characters or so * - * @return none + * @return void */ private function logBanItem($reason, $message) { @@ -489,14 +489,14 @@ class eIPHandler } - - - /** - * Encode an IPv4 address into IPv6 - * Similar functionality to ipEncode + * Encode an IPv4 address into IPv6 + * Similar functionality to ipEncode * - * @return string - the 'ip4' bit of an IPv6 address (i.e. last 32 bits) + * @param $ip + * @param bool $wildCards + * @param string $div + * @return string - the 'ip4' bit of an IPv6 address (i.e. last 32 bits) */ private function ip4Encode($ip, $wildCards = FALSE, $div = ':') { @@ -574,10 +574,11 @@ class eIPHandler } - /** - * Given a potentially truncated IPV6 address as used in the ban list files, adds 'x' characters etc to create - * a normalised IPV6 address as stored in the DB. Returned length is exactly 39 characters + * Given a potentially truncated IPV6 address as used in the ban list files, adds 'x' characters etc to create + * a normalised IPV6 address as stored in the DB. Returned length is exactly 39 characters + * @param $address + * @return string */ public function ip6AddWildcards($address) { @@ -723,18 +724,18 @@ class eIPHandler } - /** - * Generate DB query for domain name-related checks + * Generate DB query for domain name-related checks * - * If an email address is passed, discards the individual's name + * If an email address is passed, discards the individual's name * - * @param string $email - an email address or domain name string - * @param string $fieldname - if non-empty, each array entry is a comparison with this field + * @param string $email - an email address or domain name string + * @param string $fieldName + * @return array|bool false if invalid domain name format + * false if invalid domain name format + * array of values to compare + * @internal param string $fieldname - if non-empty, each array entry is a comparison with this field * - * @return boolean|array - * false if invalid domain name format - * array of values to compare */ function makeDomainQuery($email, $fieldName = 'banlist_ip') { @@ -821,7 +822,7 @@ class eIPHandler if ($this->clearBan !== FALSE) { // Expired ban to clear - match exactly the address which triggered this action - could be a wildcard $clearAddress = $this->ip6AddWildcards($this->clearBan); - if ($sql->db_Delete('banlist',"`banlist_ip`='{$clearAddress}'")) + if ($sql->delete('banlist',"`banlist_ip`='{$clearAddress}'")) { $this->actionCount--; // One less item on list $this->logBanItem(0,'Ban cleared: '.$clearAddress); @@ -876,10 +877,10 @@ class eIPHandler $admin_log = e107::getAdminLog(); //$admin_log->e_log_event(4,__FILE__."|".__FUNCTION__."@".__LINE__,"DBG","Check for Ban",$query,FALSE,LOG_TO_ROLLING); - if ($sql->db_Select('banlist', '*', $query.' ORDER BY `banlist_bantype` DESC')) + if ($sql->select('banlist', '*', $query.' ORDER BY `banlist_bantype` DESC')) { // Any whitelist entries will be first, because they are positive numbers - so we can answer based on the first DB record read - $row = $sql->db_Fetch(); + $row = $sql->fetch(); if ($row['banlist_bantype'] >= eIPHandler::BAN_TYPE_WHITELIST) { //$admin_log->e_log_event(4,__FILE__."|".__FUNCTION__."@".__LINE__,"DBG","Whitelist hit",$query,FALSE,LOG_TO_ROLLING); @@ -888,7 +889,7 @@ class eIPHandler // Found banlist entry in table here if (($row['banlist_banexpires']>0) && ($row['banlist_banexpires']<time())) { // Ban has expired - delete from DB - $sql->db_Delete('banlist', $query); + $sql->delete('banlist', $query); $this->regenerateFiles(); return TRUE; } @@ -896,7 +897,7 @@ class eIPHandler // User is banned hereafter - just need to sort out the details. if (vartrue($pref['ban_retrigger']) && vartrue($pref['ban_durations'][$row['banlist_bantype']])) { // May need to retrigger ban period - $sql->db_Update('banlist', "`banlist_banexpires`=".intval(time()+($pref['ban_durations'][$row['banlist_bantype']]*60*60)), "WHERE `banlist_ip`='{$row['banlist_ip']}'"); + $sql->update('banlist', "`banlist_banexpires`=".intval(time()+($pref['ban_durations'][$row['banlist_bantype']]*60*60)), "WHERE `banlist_ip`='{$row['banlist_ip']}'"); $this->regenerateFiles(); //$admin_log->e_log_event(4,__FILE__."|".__FUNCTION__."@".__LINE__,"DBG","Retrigger Ban",$row['banlist_ip'],FALSE,LOG_TO_ROLLING); } @@ -961,7 +962,7 @@ class eIPHandler return FALSE; } // See if address already in the banlist - if ($sql->db_Select('banlist', '`banlist_bantype`', "`banlist_ip`='{$ban_ip}'")) + if ($sql->select('banlist', '`banlist_bantype`', "`banlist_ip`='{$ban_ip}'")) { list($banType) = $sql->fetch(MYSQL_ASSOC); @@ -1004,7 +1005,7 @@ class eIPHandler /** * Regenerate the text-based banlist files (called after a banlist table mod) */ - protected function regenerateFiles() + public function regenerateFiles() { // Now regenerate the text files - so accesses of this IP address don't use the DB $ipAdministrator = new banlistManager; @@ -1120,12 +1121,12 @@ class eIPHandler { $ourDB = e107::getDb('olcheckDB'); // @todo is this OK, or should an existing one be used? - $result = $ourDB->db_Select('online', '*', "`user_ip` = '{$ip}' OR `user_token` = '{$browser}'"); + $result = $ourDB->select('online', '*', "`user_ip` = '{$ip}' OR `user_token` = '{$browser}'"); if ($result === FALSE) return FALSE; $gotIP = FALSE; $gotBrowser = FALSE; $bestRow = FALSE; - while (FALSE !== ($row = $ourDB->db_Fetch(MYSQL_ASSOC))) + while (FALSE !== ($row = $ourDB->fetch(MYSQL_ASSOC))) { if ($row['user_token'] == $browser) { @@ -1226,6 +1227,7 @@ class banlistManager */ public function writeBanListFiles($options = 'ip', $typeList = '') { + e107::getMessage()->addDebug("Writing new Banlist files."); $sql = e107::getDb(); $ipManager = e107::getIPHandler(); @@ -1310,15 +1312,14 @@ class banlistManager } - - /** - * Trim wildcards from IP addresses + * Trim wildcards from IP addresses * - * @param string $ip - IP address in any normal form + * @param string $ip - IP address in any normal form * - * Note - this removes all characters after (and including) the first '*' or 'x' found. So an '*' or 'x' in the middle of a string may - * cause unexpected results. + * Note - this removes all characters after (and including) the first '*' or 'x' found. So an '*' or 'x' in the middle of a string may + * cause unexpected results. + * @return string */ private function trimWildcard($ip) { @@ -1545,9 +1546,9 @@ class banlistManager foreach ($ipAction as $ipKey => $ipInfo) { - if ($ourDb->db_Select('banlist', '*', "`banlist_ip`='".$ipKey."'") === 1) + if ($ourDb->select('banlist', '*', "`banlist_ip`='".$ipKey."'") === 1) { - if ($row = $ourDb->db_Fetch()) + if ($row = $ourDb->fetch()) { // @todo check next line $writeDb->db_Update('banlist',