Browse Source

#40 - re-check popup

Alex Trofimov 12 years ago
parent
commit
8aa5d91d1a

+ 2 - 1
inc/classes/BxDolTemplate.php

@@ -344,7 +344,8 @@ class BxDolTemplate extends BxDol implements iBxDolSingleton {
         bx_import('BxDolLanguages');
         $this->addJsTranslation(array(
             '_are you sure?',
-        	'_error occured'
+        	'_error occured',
+            '_sys_loading',
         ));
 
         //--- Load injection's cache ---//

+ 17 - 0
modules/boonex/antispam/classes/BxAntispamDNSBlacklists.php

@@ -87,6 +87,23 @@ class BxAntispamDNSBlacklists extends BxDol
         return $oDb->query($sQuery);
     }
 
+    public function getRules ($aChains)
+    {
+        $oDb = BxDolDb::getInstance();
+        $sChains = $oDb->implode_escape($aChains);
+        $a = $oDb->getAll("SELECT * FROM `bx_antispam_dnsbl_rules` WHERE `chain` IN($sChains) ORDER BY `chain`, `added`");
+        foreach ($a as $k => $r) {
+            $a[$k]['chain_title'] = _t('_bx_antispam_chain_' . $a[$k]['chain']);
+        }
+        return $a;
+    }
+
+    public function getRule ($iId)
+    {
+        $oDb = BxDolDb::getInstance();
+        return $oDb->getAll("SELECT `zonedomain`, `postvresp` FROM `bx_antispam_dnsbl_rules` WHERE `id` = '" . (int)$iId . "' AND `active` = 1");
+    }
+
     public function clearCache () 
     {
         $oDb = BxDolDb::getInstance();

+ 108 - 66
modules/boonex/antispam/classes/BxAntispamGridDNSBL.php

@@ -24,6 +24,10 @@ class BxAntispamGridDNSBL extends BxTemplGrid
     protected function _addJsCss() 
     {
         parent::_addJsCss();
+
+        bx_import('BxTemplFormView');
+        $oForm = new BxTemplFormView(array());
+        $oForm->addCssJs();
     }
 
     /**
@@ -49,90 +53,128 @@ class BxAntispamGridDNSBL extends BxTemplGrid
     {
     }
 
+    /**
+     * 'recheck' action handler
+     */
+    public function performActionRecheckItem() 
+    {
+        bx_import('BxDolModule');
+        $oModule = BxDolModule::getInstance('bx_antispam');
+        $o = bx_instance('BxAntispamDNSBlacklists', array(), $oModule->_aModule);
+
+        $aChain = $o->getRule((int)bx_get('id'));
+
+        $iRet = BX_DOL_DNSBL_FAILURE;
+        if ($aChain) {
+            if (bx_get('chain') == 'dnsbl') {
+                $iRet = $o->dnsbl_lookup_ip($aChain, bx_process_input(bx_get('test')));
+            } elseif (bx_get('chain') == 'uridnsbl') {
+                $sUrl = preg_replace('/^\w+:\/\//', '', bx_process_input(bx_get('test')));
+                $sUrl = preg_replace('/^www\./', '', $sUrl);
+                $oBxDolDNSURIBlacklists = bx_instance('BxAntispamDNSURIBlacklists', array(), $oModule->_aModule);
+                $aUrls = $oBxDolDNSURIBlacklists->validateUrls(array($sUrl));
+                if ($aUrls)
+                    $iRet = $o->dnsbl_lookup_uri($aUrls[0], $aChain);
+            }
+        }
+
+        $s = '';
+        switch ($iRet) {
+            case BX_DOL_DNSBL_POSITIVE:
+                $s = 'LISTED';
+                break;
+            case BX_DOL_DNSBL_NEGATIVE:
+                $s = 'NOT LISTED';
+                break;
+            default:
+            case BX_DOL_DNSBL_FAILURE:
+                $s = 'FAIL';
+        }
+
+        echo $s;
+        exit;
+    }
+
     /**
      * 'recheck' action handler
      */
     public function performActionRecheck() 
     {
-        bx_import('BxDolForm');
-        $oForm = BxDolForm::getObjectInstance('bx_antispam_ip_table_form', $sDisplay); // get form instance for specified form object and display
+        bx_import('BxDolModule');
+        $oModule = BxDolModule::getInstance('bx_antispam');
+        $oDNSBlacklists = bx_instance('BxAntispamDNSBlacklists', array(), $oModule->_aModule);
+
+        $aForm = array(
+            'form_attrs' => array(
+                'id' => 'bx_antispam_form_dnsbl_recheck',
+                'action' => BX_DOL_URL_ROOT . 'grid.php?o=bx_antispam_grid_dnsbl&a=recheck',
+                'onsubmit' => "return bx_antispam_recheck($('#bx_antispam_ip_url').val(), $('[name=dnsbl_uridnsbl]:checked').val());",
+                'method' => 'post',
+            ),
+            'params' => array (
+                'db' => array(
+                    'submit_name' => 'do_submit',
+                ),
+            ),
+            'inputs' => array(
+
+                'ip_url' => array(
+                    'type' => 'text',
+                    'name' => 'ip_url',
+                    'value' => getVisitorIP(),
+                    'caption' => _t('_bx_antispam_field_ip_url'),            
+                    'attrs' => array('id' => 'bx_antispam_ip_url'),
+                ),
+
+                'dnsbl_uridnsbl' => array(
+                    'type' => 'radio_set',
+                    'name' => 'dnsbl_uridnsbl',
+                    'caption' => _t('_bx_antispam_field_dnsbl_uridnsbl'),
+                    'values' => array ('dnsbl' => _t('_bx_antispam_dnsbl'), 'uridnsbl' => _t('_bx_antispam_uri_dnsbl')),
+                    'value' => 'dnsbl',
+                ),
+
+                'submit' => array(
+                    'type' => 'input_set',
+                    0 => array (
+                        'type' => 'submit',
+                        'name' => 'do_submit',
+                        'value' => _t('_sys_submit'),
+                    ),
+                    1 => array (
+                        'type' => 'reset',
+                        'name' => 'close',
+                        'value' => _t('_sys_close'),
+                        'attrs' => array('class' => 'bx-def-margin-sec-left', 'onclick' => '$(\'.bx-popup-applied:visible\').dolPopupHide();'),
+                    ),
+                ),
+
+            ),
+        );
+
+        bx_import('BxTemplFormView');
+        $oForm = new BxTemplFormView($aForm);
         if (!$oForm) {
             $this->_echoResultJson(array('msg' => _t('_sys_txt_error_occured')), true);
             exit;
         }
 
-        $oForm->addMarkers(array(
-            'grid_object' => $this->_sObject,
-            'grid_action' => $sAction,
+        $s = $oModule->_oTemplate->parseHtmlByName('recheck.html', array (
+            'form' => $oForm->getCode(),
+            'url_recheck_item' => BX_DOL_URL_ROOT . 'grid.php?o=bx_antispam_grid_dnsbl&a=recheck_item',
+            'bx_repeat:items' => $oDNSBlacklists->getRules(array(BX_DOL_DNSBL_CHAIN_SPAMMERS, BX_DOL_DNSBL_CHAIN_WHITELIST, BX_DOL_DNSBL_CHAIN_URIDNS)),
         ));
 
-        $aIpTableDirective = array();
-        if ($iId) {
-            bx_import('BxDolModule');
-            $oModule = BxDolModule::getInstance('bx_antispam');
-            $oAntispamIp = bx_instance('BxAntispamIP', array(), $oModule->_aModule);
-            $aIpTableDirective = $oAntispamIp->getIpTableDirective($iId);
-            $aIpTableDirective['From'] = long2ip($aIpTableDirective['From']);
-            $aIpTableDirective['To'] = long2ip($aIpTableDirective['To']);
-        }
-        $oForm->initChecker($aIpTableDirective);
-
-        if ($oForm->isSubmittedAndValid()) { // if form is submitted and all fields are valid            
-
-            $aCustomValues = array(
-                'From' => sprintf("%u", ip2long($oForm->getCleanValue('From'))),
-                'To' => sprintf("%u", ip2long($oForm->getCleanValue('To'))),
-            );
-
-            if ($iId) {
-                if ($oForm->update ($iId, $aCustomValues)) // update record
-                    $iRecentId = $iId;
-            } else {
-                $iRecentId = $oForm->insert ($aCustomValues, true); // insert new record
-            }
-
-            if ($iRecentId)
-                $aRes = array('grid' => $this->getCode(false), 'blink' => $iRecentId); // if record is successfully added, reload grid and highlight added row
-            else
-                $aRes = array('msg' => _t('_sys_txt_error_occured')); // if record adding failed, display error message
-
-            $this->_echoResultJson($aRes, true);
-
-        } else { // if form is not submitted or some fields are invalid, display popup with form
-
-            bx_import('BxTemplFunctions');
-            $s = BxTemplFunctions::getInstance()->popupBox($oForm->getId() . '_form', _t('_bx_antispam_form_ip_table_add'), $oForm->getCode() . '
-                <script>
-                    $(document).ready(function () {
-                        $("#' . $oForm->getId() . '").ajaxForm({ 
-                            dataType: "json",
-                            beforeSubmit: function (formData, jqForm, options) {
-                                bx_loading($("#' . $oForm->getId() . '"), true);
-                            },
-                            success: function (data) {
-                                $(".bx-popup-applied:visible").dolPopupHide();
-                                glGrids.' . $this->_sObject . '.processJson(data, "' . $sAction . '");
-                            }
-                        });
-                    });
-                </script>');
-
-            $this->_echoResultJson(array('popup' => array('html' => $s, 'options' => array('closeOnOuterClick' => false))), true);
+        bx_import('BxTemplFunctions');
+        $s = BxTemplFunctions::getInstance()->popupBox($oForm->getId() . '_form', _t('_bx_antispam_popup_dnsbl_recheck'), $s);
 
-        }
+        $this->_echoResultJson(array('popup' => array('html' => $s, 'options' => array('closeOnOuterClick' => false))), true);
     }
 
 
     protected function _getCellChain ($mixedValue, $sKey, $aField, $aRow) 
     {
-        $s = _t('_undefined');
-        switch ($mixedValue) {
-            case 'whitelist':
-            case 'spammers':
-            case 'uridns':
-                $s = _t('_bx_antispam_chain_' . $mixedValue);
-        }
-        return parent::_getCellDefault ($s, $sKey, $aField, $aRow);
+        return parent::_getCellDefault (_t('_bx_antispam_chain_' . $mixedValue), $sKey, $aField, $aRow);
     }
 
     protected function _getCellComment ($mixedValue, $sKey, $aField, $aRow) 

+ 1 - 0
modules/boonex/antispam/classes/BxAntispamGridIpTable.php

@@ -26,6 +26,7 @@ class BxAntispamGridIpTable extends BxTemplGrid
     protected function _addJsCss() 
     {
         parent::_addJsCss();
+
         $this->_oTemplate->addJs('jquery.form.js');
 
         bx_import('BxTemplFormView');

+ 5 - 0
modules/boonex/antispam/install/langs/en.xml

@@ -25,8 +25,11 @@ This antispam method scan submitted content for the URLs and check them if any o
 	<string name="_bx_antispam_rule_note_spamhaus_org"><![CDATA[Detect spammer IPs from sbl.spamhaus.org]]></string>
 	<string name="_bx_antispam_rule_note_zomgbl_spameatingmonkey_net"><![CDATA[Everything is blacklisted, use only if something is whitelisted]]></string>
 	<string name="_bx_antispam_rule_note_surbl_org"><![CDATA[Detect spammer URLs from SURBLs (lists of web sites that have appeared in unsolicited messages)]]></string>
+	<string name="_bx_antispam_dnsbl"><![CDATA[DNSBL]]></string>
+	<string name="_bx_antispam_uri_dnsbl"><![CDATA[URI DNSBL]]></string>
 
 	<string name="_bx_antispam_popup_help"><![CDATA[DNSBL help]]></string>
+	<string name="_bx_antispam_popup_dnsbl_recheck"><![CDATA[Recheck IP/URL in DNSBL/URIDNSBL]]></string>
 
 	<string name="_bx_antispam_page_title_sys_ip_table"><![CDATA[IP table]]></string>
 	<string name="_bx_antispam_page_title_ip_table"><![CDATA[IP table]]></string>
@@ -49,6 +52,8 @@ This antispam method scan submitted content for the URLs and check them if any o
 	<string name="_bx_antispam_field_expiration"><![CDATA[Expiration]]></string>
 	<string name="_bx_antispam_field_note"><![CDATA[Note]]></string>
 	<string name="_bx_antispam_field_chain"><![CDATA[Rule]]></string>
+	<string name="_bx_antispam_field_ip_url"><![CDATA[IP for DNSBL or URL for URI DNSBL]]></string>
+	<string name="_bx_antispam_field_dnsbl_uridnsbl"><![CDATA[Check in]]></string>
 
     <string name="_bx_antispam_form_ip_table"><![CDATA[IP table directive]]></string>
     <string name="_bx_antispam_form_ip_table_add"><![CDATA[Add IP table directive]]></string>

+ 34 - 0
modules/boonex/antispam/template/recheck.html

@@ -0,0 +1,34 @@
+<script type="text/javascript">
+    function bx_antispam_recheck(sTest, sChain) {
+        $('#bx-antispam-recheck-table tr:not(.uridns)').css({display: 'dnsbl' != sChain ? 'none' : 'table-row'});
+        $('#bx-antispam-recheck-table tr.uridns').css({display: 'dnsbl' == sChain ? 'none' : 'table-row'});
+
+        $('#bx-antispam-recheck-table .bx-antispam-check-status').each(function () {
+            $(this).html('');
+        });
+        $('#bx-antispam-recheck-table .bx-antispam-check-status').each(function () {
+            var m = $(this).attr('id').match(/(\d+)$/);
+            if (m && m[1]) {
+                var iId = m[1];
+                var eStatus = this;
+                $(this).html(_t('_sys_loading'));
+                $.post('__url_recheck_item__', {id: iId, test: sTest, chain: sChain}, function (sRet) {
+                    $(eStatus).html(sRet);
+                });
+            }
+        });
+        return false;
+    }
+</script>
+<div class="">
+    __form__
+    <table style="width:100%;" id="bx-antispam-recheck-table" class="bx-def-margin-top">
+        <bx_repeat:items>
+            <tr class="__chain__">
+                <td id="bx-antispam-check-status-__id__">__chain_title__</td>
+                <td><a target="_blank" href="__url__">__zonedomain__</a></td>
+                <td><span class="bx-antispam-check-status" id="bx-antispam-check-status-__id__"></span></td>
+            </tr>
+        </bx_repeat:items>
+    </table>        
+</div>

+ 1 - 0
modules/boonex/english/data/langs/system.xml

@@ -1675,6 +1675,7 @@ If it is not enabled then please consider implement this optimization, since it
 	<string name="_sys_layout_top_area_bar_left"><![CDATA[Top area with left bar]]></string>
 	<string name="_sys_layout_top_area_bar_right"><![CDATA[Top area with right bar]]></string>
 	<string name="_sys_layout_topbottom_area_2_columns"><![CDATA[Top&bottom areas with 2 columns in the middle]]></string>
+	<string name="_sys_loading"><![CDATA[Loading...]]></string>
 	<string name="_sys_menu_item_title_about"><![CDATA[About]]></string>
 	<string name="_sys_menu_item_title_account"><![CDATA[Account]]></string>
 	<string name="_sys_menu_item_title_account_menu"><![CDATA[{member_display_name}]]></string>

+ 1 - 1
modules/boonex/notes/template/css/main.css

@@ -46,7 +46,7 @@
 
 .bx-notes-unit-gallery h2 {
     line-height:1.25em;
-    max-height:3.75em; 
+    max-height:3.75em;
     overflow:hidden; 
 }
 

+ 2 - 0
template/css/_mixins.less

@@ -63,5 +63,7 @@
 .column-width (@width) {
     @rem-w: (unit(@width) / @base-font-size-px);
     -webkit-column-width: ~"@{rem-w}rem";
+    -moz-column-width: ~"@{rem-w}rem";
+    -ms-column-width: ~"@{rem-w}rem";
     column-width: ~"@{rem-w}rem";
 }