Jelajahi Sumber

$40 - adding necessary tables

Alex Trofimov 12 tahun lalu
induk
melakukan
c9d62188d8

+ 1 - 58
install/sql/system.sql

@@ -7,7 +7,7 @@ SET @sSysVersion = '8.0.0';
 -- --------------------------------------------------------
 
 SET NAMES 'utf8';
-DROP TABLE IF EXISTS `sys_categories`, `sys_keys`, `sys_objects_editor`, `sys_objects_captcha`, `sys_objects_social_sharing`, `sys_objects_categories`, `sys_objects_cmts`, `sys_cmts_images`, `sys_cmts_images_preview`, `sys_cmts_images2entries`, `sys_email_templates`, `sys_options`, sys_options_types, `sys_options_categories`, `sys_ip_list`, `sys_ip_members_visits`, `sys_localization_categories`, `sys_localization_keys`, `sys_localization_languages`, `sys_localization_string_params`, `sys_localization_strings`, `sys_acl_actions`, `sys_acl_actions_track`, `sys_acl_matrix`, `sys_acl_level_prices`, `sys_acl_levels`, `sys_sessions`, `sys_acl_levels_members`, `sys_objects_search`, `sys_stat_site`, `sys_alerts`, `sys_alerts_handlers`, `sys_injections`, `sys_injections_admin`, `sys_modules`, `sys_modules_file_tracks`, `sys_permalinks`, `sys_objects_privacy`, `sys_privacy_defaults`, `sys_privacy_groups`, `sys_tags`, `sys_objects_tag`, `sys_transactions`, `sys_objects_auths`, `sys_objects_vote`, `sys_objects_view`, `sys_cron_jobs`, `sys_dnsbl_rules`, `sys_menu_mobile`, `sys_menu_mobile_pages`, `sys_objects_storage`, `sys_objects_uploader`, `sys_storage_user_quotas`, `sys_storage_tokens`, `sys_storage_ghosts`, `sys_storage_mime_types`, `sys_objects_transcoder_images`, `sys_transcoder_images_files`, `sys_transcoder_images_filters`, `sys_accounts`, `sys_profiles`, `sys_antispam_block_log`, `sys_objects_form`, `sys_form_displays`, `sys_form_inputs`, `sys_form_display_inputs`, `sys_form_pre_lists`, `sys_form_pre_values`, `sys_menu_templates`, `sys_objects_menu`, `sys_menu_sets`, `sys_menu_items`, `sys_objects_grid`, `sys_grid_fields`, `sys_grid_actions`, `sys_objects_connection`, `sys_profiles_conn_subscriptions`, `sys_profiles_conn_friends`, `sys_objects_page`, `sys_pages_layouts`, `sys_pages_design_boxes`, `sys_pages_blocks`, `sys_images`, `sys_std_pages`, `sys_std_widgets`, `sys_std_pages_widgets`;
+DROP TABLE IF EXISTS `sys_categories`, `sys_keys`, `sys_objects_editor`, `sys_objects_captcha`, `sys_objects_social_sharing`, `sys_objects_categories`, `sys_objects_cmts`, `sys_cmts_images`, `sys_cmts_images_preview`, `sys_cmts_images2entries`, `sys_email_templates`, `sys_options`, sys_options_types, `sys_options_categories`, `sys_ip_members_visits`, `sys_localization_categories`, `sys_localization_keys`, `sys_localization_languages`, `sys_localization_string_params`, `sys_localization_strings`, `sys_acl_actions`, `sys_acl_actions_track`, `sys_acl_matrix`, `sys_acl_level_prices`, `sys_acl_levels`, `sys_sessions`, `sys_acl_levels_members`, `sys_objects_search`, `sys_stat_site`, `sys_alerts`, `sys_alerts_handlers`, `sys_injections`, `sys_injections_admin`, `sys_modules`, `sys_modules_file_tracks`, `sys_permalinks`, `sys_objects_privacy`, `sys_privacy_defaults`, `sys_privacy_groups`, `sys_tags`, `sys_objects_tag`, `sys_transactions`, `sys_objects_auths`, `sys_objects_vote`, `sys_objects_view`, `sys_cron_jobs`, `sys_menu_mobile`, `sys_menu_mobile_pages`, `sys_objects_storage`, `sys_objects_uploader`, `sys_storage_user_quotas`, `sys_storage_tokens`, `sys_storage_ghosts`, `sys_storage_mime_types`, `sys_objects_transcoder_images`, `sys_transcoder_images_files`, `sys_transcoder_images_filters`, `sys_accounts`, `sys_profiles`, `sys_objects_form`, `sys_form_displays`, `sys_form_inputs`, `sys_form_display_inputs`, `sys_form_pre_lists`, `sys_form_pre_values`, `sys_menu_templates`, `sys_objects_menu`, `sys_menu_sets`, `sys_menu_items`, `sys_objects_grid`, `sys_grid_fields`, `sys_grid_actions`, `sys_objects_connection`, `sys_profiles_conn_subscriptions`, `sys_profiles_conn_friends`, `sys_objects_page`, `sys_pages_layouts`, `sys_pages_design_boxes`, `sys_pages_blocks`, `sys_images`, `sys_std_pages`, `sys_std_widgets`, `sys_std_pages_widgets`;
 ALTER DATABASE DEFAULT CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci';
 
 
@@ -457,23 +457,6 @@ INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `ex
 (@iCategoryId, 'tags_perpage_browse', '_adm_stg_cpt_option_tags_perpage_browse', '30', 'digit', '', '', '', 2),
 (@iCategoryId, 'tags_show_limit', '_adm_stg_cpt_option_tags_show_limit', '50', 'digit', '', '', '', 3);
 
--- --------------------------------------------------------
-
---
--- Table structure for table `sys_ip_list`
---
-
-CREATE TABLE `sys_ip_list` (
-  `ID` int(11) NOT NULL auto_increment,
-  `From` int(10) unsigned NOT NULL,
-  `To` int(10) unsigned NOT NULL,
-  `Type` enum('allow','deny') NOT NULL default 'deny',
-  `LastDT` int(11) unsigned NOT NULL,
-  `Desc` varchar(128) NOT NULL,
-  PRIMARY KEY  (`ID`),
-  KEY `From` (`From`),
-  KEY `To` (`To`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
 -- --------------------------------------------------------
 
@@ -1187,46 +1170,6 @@ INSERT INTO `sys_cron_jobs` (`name`, `time`, `class`, `file`, `eval`) VALUES
 ('notifies', '*/10 * * * *', 'BxDolCronNotifies', 'inc/classes/BxDolCronNotifies.php', ''),
 ('video_comments', '* * * * *', 'BxDolCronVideoComments', 'flash/modules/video_comments/inc/classes/BxDolCronVideoComments.php', '');
 
-
--- --------------------------------------------------------
-
-
-CREATE TABLE IF NOT EXISTS `sys_dnsbl_rules` (
-  `id` int(11) NOT NULL AUTO_INCREMENT,
-  `chain` enum('spammers','whitelist','uridns') NOT NULL,
-  `zonedomain` varchar(255) NOT NULL,
-  `postvresp` varchar(32) NOT NULL,
-  `url` varchar(255) NOT NULL,
-  `recheck` varchar(255) NOT NULL,
-  `comment` varchar(255) NOT NULL,
-  `added` int(11) NOT NULL,
-  `active` tinyint(4) NOT NULL,
-  PRIMARY KEY (`id`)
-) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
-
-INSERT INTO `sys_dnsbl_rules` (`id`, `chain`, `zonedomain`, `postvresp`, `url`, `recheck`, `comment`, `added`, `active`) VALUES
-(1, 'whitelist', 'au.countries.nerd.dk.', '127.0.0.2', 'http://countries.nerd.dk/', '', 'Country based zone, any ip from Australia is whitelisted', 1287642420, 0),
-(2, 'spammers', 'sbl.spamhaus.org.', 'any', 'http://www.spamhaus.org/sbl/', 'http://www.spamhaus.org/query/bl?ip=%s', 'Any non-failure result from sbl.spamhaus.org is a positive match', 1287642420, 1),
-(3, 'spammers', 'zomgbl.spameatingmonkey.net.', 'any', 'http://spameatingmonkey.com/index.html', '', 'This zone is guaranteed to block 100% of all IPs because it lists everything (0.0.0.0/0). This list should never be used in production but exists to verify overall functionality of the blacklist servers.', 1287642420, 0),
-(4, 'spammers', 'cn.countries.nerd.dk.', '127.0.0.2', 'http://countries.nerd.dk/', '', 'Country based zone, any ip from China is blocked', 1287642420, 0),
-(5, 'uridns', 'multi.surbl.org.', 'any', 'http://www.surbl.org/', 'http://george.surbl.org/lookup.html', 'SURBLs are lists of web sites that have appeared in unsolicited messages. Unlike most lists, SURBLs are not lists of message senders.', 1287642420, 1);
-
-CREATE TABLE IF NOT EXISTS `sys_antispam_block_log` (
-  `ip` int(10) unsigned NOT NULL,
-  `member_id` int(10) unsigned NOT NULL,
-  `type` varchar(32) NOT NULL,
-  `extra` text NOT NULL,
-  `added` int(11) NOT NULL,
-  KEY `ip` (`ip`),
-  KEY `member_id` (`member_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-
-CREATE TABLE IF NOT EXISTS `sys_dnsbluri_zones` (
-  `level` tinyint(4) NOT NULL,
-  `zone` varchar(64) NOT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-
-
 -- --------------------------------------------------------
 
 CREATE TABLE IF NOT EXISTS `sys_menu_mobile_pages` (

+ 4 - 4
modules/boonex/antispam/classes/BxAntispamDNSBlacklists.php

@@ -83,7 +83,7 @@ class BxAntispamDNSBlacklists extends BxDol
         $iIP = sprintf("%u", ip2long($sIP));
         $iMemberId = getLoggedId();
         $oDb = BxDolDb::getInstance();
-        $sQuery = $oDb->prepare("INSERT INTO `sys_antispam_block_log` SET `ip` = ?, `member_id` = ?, `type` = ?, `extra` = ?, `added` = ?", $iIP, $iMemberId, $sType, $sExtraData, time());
+        $sQuery = $oDb->prepare("INSERT INTO `bx_antispam_block_log` SET `ip` = ?, `member_id` = ?, `type` = ?, `extra` = ?, `added` = ?", $iIP, $iMemberId, $sType, $sExtraData, time());
         return $oDb->query($sQuery);
     }
 
@@ -149,15 +149,15 @@ class BxAntispamDNSBlacklists extends BxDol
         $oDb = BxDolDb::getInstance();
 
         if (!isset($GLOBALS['bx_dol_dnsbl_'.BX_DOL_DNSBL_CHAIN_SPAMMERS])) {
-            $sQuery = $oDb->prepare("SELECT `zonedomain`, `postvresp` FROM `sys_dnsbl_rules` WHERE `chain` = ? AND `active` = 1", BX_DOL_DNSBL_CHAIN_SPAMMERS);
+            $sQuery = $oDb->prepare("SELECT `zonedomain`, `postvresp` FROM `bx_antispam_dnsbl_rules` WHERE `chain` = ? AND `active` = 1", BX_DOL_DNSBL_CHAIN_SPAMMERS);
             $GLOBALS['bx_dol_dnsbl_'.BX_DOL_DNSBL_CHAIN_SPAMMERS] = $GLOBALS['MySQL']->fromCache('sys_dnsbl_'.BX_DOL_DNSBL_CHAIN_SPAMMERS, 'getAll', $sQuery);
         }
 
         if (!isset($GLOBALS['bx_dol_dnsbl_'.BX_DOL_DNSBL_CHAIN_WHITELIST]))
-            $GLOBALS['bx_dol_dnsbl_'.BX_DOL_DNSBL_CHAIN_WHITELIST] = $GLOBALS['MySQL']->fromCache('sys_dnsbl_'.BX_DOL_DNSBL_CHAIN_WHITELIST, 'getAll', "SELECT `zonedomain`, `postvresp` FROM `sys_dnsbl_rules` WHERE `chain` = '".BX_DOL_DNSBL_CHAIN_WHITELIST."' AND `active` = 1");
+            $GLOBALS['bx_dol_dnsbl_'.BX_DOL_DNSBL_CHAIN_WHITELIST] = $GLOBALS['MySQL']->fromCache('sys_dnsbl_'.BX_DOL_DNSBL_CHAIN_WHITELIST, 'getAll', "SELECT `zonedomain`, `postvresp` FROM `bx_antispam_dnsbl_rules` WHERE `chain` = '".BX_DOL_DNSBL_CHAIN_WHITELIST."' AND `active` = 1");
 
         if (!isset($GLOBALS['bx_dol_dnsbl_'.BX_DOL_DNSBL_CHAIN_URIDNS]))
-            $GLOBALS['bx_dol_dnsbl_'.BX_DOL_DNSBL_CHAIN_URIDNS] = $GLOBALS['MySQL']->fromCache('sys_dnsbl_'.BX_DOL_DNSBL_CHAIN_URIDNS, 'getAll', "SELECT `zonedomain`, `postvresp` FROM `sys_dnsbl_rules` WHERE `chain` = '".BX_DOL_DNSBL_CHAIN_URIDNS."' AND `active` = 1");
+            $GLOBALS['bx_dol_dnsbl_'.BX_DOL_DNSBL_CHAIN_URIDNS] = $GLOBALS['MySQL']->fromCache('sys_dnsbl_'.BX_DOL_DNSBL_CHAIN_URIDNS, 'getAll', "SELECT `zonedomain`, `postvresp` FROM `bx_antispam_dnsbl_rules` WHERE `chain` = '".BX_DOL_DNSBL_CHAIN_URIDNS."' AND `active` = 1");
 
         $this->aChains[BX_DOL_DNSBL_CHAIN_SPAMMERS] = &$GLOBALS['bx_dol_dnsbl_'.BX_DOL_DNSBL_CHAIN_SPAMMERS];
         $this->aChains[BX_DOL_DNSBL_CHAIN_WHITELIST] = &$GLOBALS['bx_dol_dnsbl_'.BX_DOL_DNSBL_CHAIN_WHITELIST];

+ 4 - 4
modules/boonex/antispam/classes/BxAntispamDNSURIBlacklists.php

@@ -136,15 +136,15 @@ class BxAntispamDNSURIBlacklists extends BxDol
 
     private function isDbZoneMatch ($iLevel, $sZone) 
     {
-        $sQuery = $this->oDb->prepare("SELECT `level` FROM `sys_dnsbluri_zones` WHERE `level` = ? AND `zone` = ? LIMIT 1", $iLevel, $sZone);
+        $sQuery = $this->oDb->prepare("SELECT `level` FROM `bx_antispam_dnsbluri_zones` WHERE `level` = ? AND `zone` = ? LIMIT 1", $iLevel, $sZone);
         return $this->oDb->getOne($sQuery) ? true : false;
     }
 
     private function initZones()
     {
-        if (0 == $this->oDb->getOne("SELECT COUNT(*) FROM `sys_dnsbluri_zones`")) {
+        if (0 == $this->oDb->getOne("SELECT COUNT(*) FROM `bx_antispam_dnsbluri_zones`")) {
 
-            $this->oDb->query("TRUNCATE TABLE `sys_dnsbluri_zones`");
+            $this->oDb->query("TRUNCATE TABLE `bx_antispam_dnsbluri_zones`");
 
             foreach ($this->aZonesUrls as $iLevel => $sUrl) {
                 $f = fopen ($sUrl, 'r');
@@ -154,7 +154,7 @@ class BxAntispamDNSURIBlacklists extends BxDol
                     $sZone = fgets($f);
                     $sZone = trim($sZone);
                     if ($sZone) {
-                        $sQuery = $this->oDb->prepare("INSERT INTO `sys_dnsbluri_zones` SET `level` = ?, `zone` = ?", $iLevel, $sZone);
+                        $sQuery = $this->oDb->prepare("INSERT INTO `bx_antispam_dnsbluri_zones` SET `level` = ?, `zone` = ?", $iLevel, $sZone);
                         $this->oDb->query($sQuery);
                     }
                 }

+ 30 - 9
modules/boonex/antispam/classes/BxAntispamIP.php

@@ -36,10 +36,8 @@ class BxAntispamIP extends BxDol
 
         if (!$sCurIP)
             $sCurIP = getVisitorIP();
-        $iCurIP = sprintf("%u", ip2long($sCurIP));
-        $iCurrTime = time();
 
-        return db_value("SELECT `ID` FROM `sys_ip_list` WHERE `Type` = 'allow' AND `LastDT` > $iCurrTime AND `From` <= '$iCurIP' AND `To` >= '$iCurIP' LIMIT 1") ? true : false;
+        return $this->_isIpListed('allow', $sCurIP);
     }
 
     /**
@@ -59,14 +57,11 @@ class BxAntispamIP extends BxDol
 
         if (!$sCurIP)
             $sCurIP = getVisitorIP();
-        $iCurIP = sprintf("%u", ip2long($sCurIP));
-        $iCurrTime = time();
 
         if ($this->isIpWhitelisted($sCurIP))
             return false;
 
-        $isBlocked = db_value("SELECT `ID` FROM `sys_ip_list` WHERE `Type` = 'deny' AND `LastDT` > $iCurrTime AND `From` <= '$iCurIP' AND `To` >= '$iCurIP' LIMIT 1");
-        if ($isBlocked)
+        if ($this->_isIpListed('deny', $sCurIP))
             return true;
 
         // 1 - all allowed except listed
@@ -93,13 +88,39 @@ class BxAntispamIP extends BxDol
         $iExpirationInSec = time() + (int)$iExpirationInSec;
 
         $oDb = BxDolDb::getInstance();
-        $sQuery = $oDb->prepare("SELECT ID FROM `sys_ip_list` WHERE `From` = ? AND `To` = ? LIMIT 1", $iIP, $iIP);
+        $sQuery = $oDb->prepare("SELECT ID FROM `bx_antispam_ip_table` WHERE `From` = ? AND `To` = ? LIMIT 1", $iIP, $iIP);
         if (!$oDb->getOne($sQuery)) {
-            $sQuery = $oDb->prepare("INSERT INTO `sys_ip_list` SET `From` = ?, `To` = ?, `Type` = 'deny', `LastDT` = ?, `Desc` = ?", $iIP, $iIP, $iExpirationInSec, $sComment);
+            $sQuery = $oDb->prepare("INSERT INTO `bx_antispam_ip_table` SET `From` = ?, `To` = ?, `Type` = 'deny', `LastDT` = ?, `Desc` = ?", $iIP, $iIP, $iExpirationInSec, $sComment);
             return $oDb->res($sQuery);
         }
         return false;
     }
+
+    /**
+     * Clean up expired entries
+     * TODO: add to cron
+     */
+    public function pruning () 
+    {
+        $oDb = BxDolDb::getInstance();
+        $sQuery = $oDb->prepare("DELETE FROM `bx_antispam_ip_table` WHERE `LastDT` <= ?", time());
+        $iAffectedRows = $oDb->query($sQuery);
+
+        if ($iAffectedRows) {
+            db_res("OPTIMIZE TABLE `bx_antispam_ip_table`");
+            return $iAffectedRows;
+        }
+
+        return 0;
+    }
+
+    protected function _isIpListed($sType, $sIp) 
+    {
+        $iIp = sprintf("%u", ip2long($sIp));
+        $oDb = BxDolDb::getInstance();
+        $sQuery = $oDb->prepare("SELECT `ID` FROM `bx_antispam_ip_table` WHERE `Type` = ? AND `LastDT` > ? AND `From` <= ? AND `To` >= ? LIMIT 1", $sType, time(), $iIp, $iIp);
+        return $oDb->getOne($sQuery) ? true : false;
+    }
 }
 
 /** @} */

+ 48 - 0
modules/boonex/antispam/install/sql/install.sql

@@ -1,4 +1,52 @@
 
+CREATE TABLE `bx_antispam_ip_table` (
+  `ID` int(11) NOT NULL auto_increment,
+  `From` int(10) unsigned NOT NULL,
+  `To` int(10) unsigned NOT NULL,
+  `Type` enum('allow','deny') NOT NULL default 'deny',
+  `LastDT` int(11) unsigned NOT NULL,
+  `Desc` varchar(128) NOT NULL,
+  PRIMARY KEY  (`ID`),
+  KEY `From` (`From`),
+  KEY `To` (`To`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+
+CREATE TABLE `bx_antispam_dnsbl_rules` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `chain` enum('spammers','whitelist','uridns') NOT NULL,
+  `zonedomain` varchar(255) NOT NULL,
+  `postvresp` varchar(32) NOT NULL,
+  `url` varchar(255) NOT NULL,
+  `recheck` varchar(255) NOT NULL,
+  `comment` varchar(255) NOT NULL,
+  `added` int(11) NOT NULL,
+  `active` tinyint(4) NOT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
+
+INSERT INTO `bx_antispam_dnsbl_rules` (`id`, `chain`, `zonedomain`, `postvresp`, `url`, `recheck`, `comment`, `added`, `active`) VALUES
+(1, 'whitelist', 'au.countries.nerd.dk.', '127.0.0.2', 'http://countries.nerd.dk/', '', 'Country based zone, any ip from Australia is whitelisted', 1287642420, 0),
+(2, 'spammers', 'sbl.spamhaus.org.', 'any', 'http://www.spamhaus.org/sbl/', 'http://www.spamhaus.org/query/bl?ip=%s', 'Any non-failure result from sbl.spamhaus.org is a positive match', 1287642420, 1),
+(3, 'spammers', 'zomgbl.spameatingmonkey.net.', 'any', 'http://spameatingmonkey.com/index.html', '', 'This zone is guaranteed to block 100% of all IPs because it lists everything (0.0.0.0/0). This list should never be used in production but exists to verify overall functionality of the blacklist servers.', 1287642420, 0),
+(4, 'spammers', 'cn.countries.nerd.dk.', '127.0.0.2', 'http://countries.nerd.dk/', '', 'Country based zone, any ip from China is blocked', 1287642420, 0),
+(5, 'uridns', 'multi.surbl.org.', 'any', 'http://www.surbl.org/', 'http://george.surbl.org/lookup.html', 'SURBLs are lists of web sites that have appeared in unsolicited messages. Unlike most lists, SURBLs are not lists of message senders.', 1287642420, 1);
+
+CREATE TABLE `bx_antispam_dnsbluri_zones` (
+  `level` tinyint(4) NOT NULL,
+  `zone` varchar(64) NOT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+CREATE TABLE `bx_antispam_block_log` (
+  `ip` int(10) unsigned NOT NULL,
+  `member_id` int(10) unsigned NOT NULL,
+  `type` varchar(32) NOT NULL,
+  `extra` text NOT NULL,
+  `added` int(11) NOT NULL,
+  KEY `ip` (`ip`),
+  KEY `member_id` (`member_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
 -- Studio page and widget
 
 INSERT INTO `sys_std_pages`(`index`, `name`, `header`, `caption`, `icon`) VALUES

+ 2 - 0
modules/boonex/antispam/install/sql/uninstall.sql

@@ -1,4 +1,6 @@
 
+DROP TABLE IF EXISTS `bx_antispam_ip_table`, `bx_antispam_dnsbl_rules`, `bx_antispam_dnsbluri_zones`, `bx_antispam_block_log`;
+
 -- Studio page and widget
 
 DELETE FROM `tp`, `tw`, `tpw`

+ 0 - 334
studio/classes/BxDolStudioIpBlockList.php

@@ -1,334 +0,0 @@
-<?php
-/**
- * @package     Dolphin Core
- * @copyright   Copyright (c) BoonEx Pty Limited - http://www.boonex.com/
- * @license     CC-BY - http://creativecommons.org/licenses/by/3.0/
- */
-defined('BX_DOL') or die('hack attempt');
-
-// TODO: move HTML to templates
-// TODO: move SQL queries to separate class
-// TODO: maybe it makes sence to move it to separate module ?
-
-class BxDolAdminIpBlockList extends BxDol {
-    var $_oDb;
-    var $_sActionUrl;
-
-    /**
-     * constructor
-     */
-    function BxDolAdminIpBlockList($sActionUrl = '') {
-        parent::BxDol();
-
-        $this->_oDb = BxDolDb::getInstance();
-         $this->_sActionUrl = !empty($sActionUrl) ? $sActionUrl : $_SERVER['PHP_SELF'] . (!empty($_SERVER['QUERY_STRING']) ? '?' . $_SERVER['QUERY_STRING'] : '');
-    }
-
-    function GenStoredMemIPs() {
-        $sFromC = _t('_From');
-        $sMemberC = _t('_Member');
-        $sDatatimeC = _t('_Date');
-        $sCaptionC = _t('_adm_ipbl_Stored_members_caption');
-
-        $sRes = '<br /><h2>'.$sCaptionC.'</h2>';
-
-        $sTableRes .= <<<EOF
-<table style="width:99%;" border="1" cellpadding="2" cellspacing="1" style="border-collapse: collapse">
-    <tr>
-        <td>{$sFromC}</td>
-        <td>{$sMemberC}</td>
-        <td>{$sDatatimeC}</td>
-    </tr>
-EOF;
-
-        $sCntSQL = "SELECT COUNT(*) FROM `sys_ip_members_visits`";
-        ////////////////////////////
-        $iTotalNum = db_value( $sCntSQL );
-        if( !$iTotalNum ) {
-            return $sRes . MsgBox(_t('_Empty'));
-        }
-
-        $iPerPage = (int)$_GET['per_page'];
-        if( !$iPerPage )
-            $iPerPage = 10;
-        $iCurPage = (int)$_GET['page'];
-        if( $iCurPage < 1 )
-            $iCurPage = 1;
-        $sLimitFrom = ( $iCurPage - 1 ) * $iPerPage;
-        $sqlLimit = "LIMIT {$sLimitFrom}, {$iPerPage}";
-        ////////////////////////////
-
-        $sSQL = "SELECT * FROM `sys_ip_members_visits` ORDER BY `DateTime` DESC {$sqlLimit}";
-        $aIPsList = BxDolDb::getInstance()->getAll($sSQL);
-
-        foreach ($aIPsList as $aIPList) {
-            $iID = (int)$aIPList['ID'];
-            $sFrom = long2ip($aIPList['From']);
-            $sLastDT = $aIPList['DateTime'];
-            $sMember = $aIPList['MemberID'] ? '<a href="' . getProfileLink($aIPList['MemberID']) . '">' . bx_process_output(getNickname($aIPList['MemberID'])) . '</a>' : '';
-
-            $sTableRes .= "<tr><td>{$sFrom}</td><td>{$sMember}</td><td>{$sLastDT}</td></tr>";
-        }
-
-        $sTableRes .= <<<EOF
-</table>
-<div class="clear_both"></div>
-<br />
-EOF;
-
-        $sRequest = BX_DOL_URL_STUDIO . 'ip_blacklist.php?page={page}&per_page={per_page}';
-        $oPaginate = new BxDolPaginate (
-            array
-            (
-                'page_url'    => $sRequest,
-                'count'        => $iTotalNum,
-                'per_page'    => $iPerPage,
-                'page'        => $iCurPage,
-                'per_page_changer'     => true,
-                'page_reloader'         => true,
-                'on_change_page'     => null,
-                'on_change_per_page' => null,
-            )
-        );
-
-        return $sRes . $sTableRes . $oPaginate -> getPaginate();
-    }
-
-    function GenIPBlackListTable() {
-        $sSitePluginsUrl = BX_DOL_URL_PLUGINS;
-
-        $sFromC = _t('_From');
-        $sToC = _t('_To');
-        $sTypeC = _t('_adm_ipbl_IP_Role');
-        $sDescriptionC = _t('_Description');
-        $sDatatimeC = _t('_adm_ipbl_Date_of_finish');
-        $sActionC = _t('_Action');
-        $sEditC = _t('_Edit');
-        $sDeleteC = _t('_Delete');
-        $sType0C = _t('_adm_ipbl_Type0_desc');
-        $sType1C = _t('_adm_ipbl_Type1_desc');
-        $sType2C = _t('_adm_ipbl_Type2_desc');
-        $sTitle = '';
-
-        $iIpListType = (int)getParam('bx_antispam_ip_list_type');
-        switch ($iIpListType) {
-            case 1:
-                $sTitle = '<h2>'.$sType1C.'</h2>';
-                break;
-            case 2:
-                $sTitle = '<h2>'.$sType2C.'</h2>';
-                break;
-            case 0:
-            default:
-                $sTitle = '<h2>'.$sType0C.'</h2>';
-                break;
-        }
-
-        $sRows = '';
-        $aIPsList = BxDolDb::getInstance()->getALl("SELECT *, FROM_UNIXTIME(`LastDT`) AS `LastDT_U` FROM `sys_ip_list` ORDER BY `From` ASC");
-        foreach ($aIPsList as $aIPList) {
-            $iID = (int)$aIPList['ID'];
-            $sFrom = long2ip($aIPList['From']);
-
-            $sTo = ($aIPList['To'] == 0) ? '' : long2ip($aIPList['To']);
-            $sType = bx_js_string($aIPList['Type']);
-            $sLastDT = $aIPList['LastDT_U'];
-            $sDesc = bx_js_string($aIPList['Desc']);
-            $sActionUrl = bx_html_attribute($this->_sActionUrl);
-
-            $sRows .= <<<EOF
-<tr>
-    <td>{$sFrom}</td>
-    <td>{$sTo}</td>
-    <td>{$sType}</td>
-    <td>{$sLastDT}</td>
-    <td>{$sDesc}</td>
-    <td>
-        <a href="javascript:void(0)" onclick="ip_accept_values_to_form('{$iID}', '{$sFrom}', '{$sTo}', '{$sType}', '{$sLastDT}', '{$sDesc}'); return false;">{$sEditC}</a>
-         |
-        <a href="$sActionUrl?action=apply_delete&id={$iID}">{$sDeleteC}</a>
-    </td>
-</tr>
-EOF;
-        }
-
-        return <<<EOF
-{$sTitle}
-<table style="width:99%;" border="1" cellpadding="2" cellspacing="1" style="border-collapse: collapse">
-    <tr>
-        <td>{$sFromC}</td>
-        <td>{$sToC}</td>
-        <td>{$sTypeC}</td>
-        <td>{$sDatatimeC}</td>
-        <td>{$sDescriptionC}</td>
-        <td>{$sActionC}</td>
-    </tr>
-    {$sRows}
-</table>
-<div class="clear_both"></div>
-
-<script type="text/javascript">
-    function ip_accept_values_to_form(id_val, from_val, to_val, type_val, lastdt_val, desc_val) {
-        $('.form_input_hidden[name="id"]').val(id_val);
-        $('.form_input_text[name="from"]').val(from_val);
-        $('.form_input_text[name="to"]').val(to_val);
-        $('.form_input_select[name="type"]').val(type_val);
-        $('.form_input_datetime[name="LastDT"]').val(lastdt_val);
-        $('.form_input_text[name="desc"]').val(desc_val);
-    }
-</script>
-EOF;
-    }
-
-    function getManagingForm() {
-        $sApplyChangesC = _t('_sys_admin_apply');
-        $sFromC = _t('_From');
-        $sToC = _t('_To');
-        $sSampleC = _t('_adm_ipbl_sample');
-        $sTypeC = _t('_adm_ipbl_IP_Role');
-        $sDescriptionC = _t('_Description');
-        $sDatatimeC = _t('_adm_ipbl_Date_of_finish');
-        $sErrorC = _t('_Error Occured');
-
-        $aForm = array(
-            'form_attrs' => array(
-                'name' => 'apply_ip_list_form',
-                'action' => $this->_sActionUrl,
-                'method' => 'post',
-            ),
-            'params' => array (
-                'db' => array(
-                    'table' => 'sys_ip_list',
-                    'key' => 'ID',
-                    'submit_name' => 'add_button',
-                ),
-            ),
-            'inputs' => array(
-                'FromIP' => array(
-                    'type' => 'text',
-                    'name' => 'from',
-                    'caption' => $sFromC,
-                    'label' => $sSampleC . ': 10.0.0.0',
-                    'required' => true,
-                    'checker' => array (
-                        'func' => 'length',
-                        'params' => array(7,15),
-                        'error' => $sErrorC,
-                    ),
-                ),
-                'ToIP' => array(
-                    'type' => 'text',
-                    'name' => 'to',
-                    'caption' => $sToC,
-                    'label' => $sSampleC . ': 10.0.0.100',
-                    'required' => true,
-                    'checker' => array (
-                        'func' => 'length',
-                        'params' => array(7,15),
-                        'error' => $sErrorC,
-                    ),
-                ),
-                'IPRole' => array(
-                    'type' => 'select',
-                    'name' => 'type',
-                    'caption' => $sTypeC,
-                    'values' => array('allow', 'deny'),
-                    'required' => true,
-                ),
-                'DateTime' => array(
-                    'type' => 'datetime',
-                    'name' => 'LastDT',
-                    'caption' => $sDatatimeC,
-                    'required' => true,
-                    'checker' => array (
-                        'func' => 'DateTime',
-                        'error' => $sErrorC,
-                    ),
-                    'db' => array (
-                        'pass' => 'DateTime',
-                    ),
-                    'display' => 'filterDate',
-                ),
-                'Desc' => array(
-                    'type' => 'text',
-                    'name' => 'desc',
-                    'caption' => $sDescriptionC,
-                    'required' => true,
-                    'checker' => array (
-                        'func' => 'length',
-                        'params' => array(2,128),
-                        'error' => $sErrorC,
-                    ),
-                    'db' => array (
-                        'pass' => 'Xss',
-                    ),
-                ),
-                'ID' => array(
-                    'type' => 'hidden',
-                    'value' => '0',
-                    'name' => 'id',
-                ),
-                'add_button' => array(
-                    'type' => 'submit',
-                    'name' => 'add_button',
-                    'value' => $sApplyChangesC,
-                ),
-            ),
-        );
-
-        $sResult = '';
-        bx_import('BxTemplFormView');
-        $oForm = new BxTemplFormView($aForm);
-        $oForm->initChecker();
-        if ($oForm->isSubmittedAndValid()) {
-
-            $sFrom = sprintf("%u", ip2long($_REQUEST['from']));
-            $sTo = sprintf("%u", ip2long($_REQUEST['to']));
-
-            $sType = ((int)$_REQUEST['type']==1) ? 'deny' : 'allow';
-
-            $aValsAdd = array (
-                'From' => $sFrom,
-                'To' => $sTo,
-                'Type' => $sType
-            );
-
-            $iLastId = ((int)$_REQUEST['id']) > 0 ? (int)$_REQUEST['id'] : -1;
-
-            if ($iLastId > 0) {
-                $oForm->update($iLastId, $aValsAdd);
-            } else {
-                $iLastId = $oForm->insert($aValsAdd);
-            }
-
-            $sResult = ($iLastId > 0) ? MsgBox(_t('_Success')) : MsgBox($sErrorC);
-        }
-        return $sResult . $oForm->getCode();
-    }
-
-    function ActionApplyDelete() {
-        $oDb = BxDolDb::getInstance();
-        $iID = (int)$_REQUEST['id'];
-
-        if ($iID > 0) {
-            $sDeleteSQL = $oDb->prepare("DELETE FROM `sys_ip_list` WHERE `ID`=? LIMIT 1", $iID);
-            $oDb->res($sDeleteSQL);
-        }
-    }
-
-    function deleteExpired () {
-
-        $oDb = BxDolDb::getInstance();
-
-        $sQuery = $oDb->prepare("DELETE FROM `sys_ip_list` WHERE `LastDT` <= ?", time());
-        $iAffectedRows = $oDb->query($sQuery);
-
-        if ($iAffectedRows) {
-            db_res("OPTIMIZE TABLE `sys_ip_list`");
-            return $iAffectedRows;
-        } else {
-            return 0;
-        }
-    }
-}
-