Exemplo n.º 1
0
/**
 * Calling by hook integrate_load_theme
 */
function cleantalk_load()
{
    global $context, $user_info, $modSettings, $smcFunc;
    if (isset($context['template_layers']) && is_array($context['template_layers']) && in_array('body', $context['template_layers']) && ($user_info['is_guest'] || $user_info['posts'] == 0) && !cleantalk_is_valid_js()) {
        $context['html_headers'] .= cleantalk_print_js_input();
    }
    if ($user_info['is_admin'] && isset($_POST['ct_del_user'])) {
        foreach ($_POST['ct_del_user'] as $key => $value) {
            $result = $smcFunc['db_query']('', 'delete from {db_prefix}members where id_member=' . intval($key), array());
            $result = $smcFunc['db_query']('', 'delete from {db_prefix}topics where id_member_started=' . intval($key), array());
            $result = $smcFunc['db_query']('', 'delete from {db_prefix}messages where id_member=' . intval($key), array());
        }
    }
    if ($user_info['is_admin'] && isset($_POST['ct_delete_all'])) {
        $result = $smcFunc['db_query']('', 'select * from {db_prefix}members where ct_marked=1', array());
        while ($row = $smcFunc['db_fetch_assoc']($result)) {
            $tmp = $smcFunc['db_query']('', 'delete from {db_prefix}topics where id_member_started=' . $row['id_member'], array());
            $tmp = $smcFunc['db_query']('', 'delete from {db_prefix}messages where id_member=' . $row['id_member'], array());
        }
        $result = $smcFunc['db_query']('', 'delete from {db_prefix}members where ct_marked=1', array());
    }
    if (isset($context['template_layers']) && $context['template_layers'] === array('html', 'body') && array_key_exists('cleantalk_tell_others', $modSettings) && $modSettings['cleantalk_tell_others']) {
        // add "tell others" templates
        $context['template_layers'][] = 'cleantalk';
    }
    if (isset($_POST['cleantalk_api_key'])) {
        $ct = new Cleantalk();
        $ct->server_url = CT_SERVER_URL;
        $ct_request = new CleantalkRequest();
        $ct_request->auth_key = cleantalk_get_api_key();
        $ct_request->response_lang = 'en';
        // SMF use any charset and language
        $ct_request->agent = CT_AGENT_VERSION;
        $ct_request->sender_email = '*****@*****.**';
        $ip = isset($user_info['ip']) ? $user_info['ip'] : $_SERVER['REMOTE_ADDR'];
        $ct_request->sender_ip = $ct->ct_session_ip($ip);
        $ct_request->sender_nickname = 'CleanTalk';
        $ct_request->message = 'This message is a test to check the connection to the CleanTalk servers.';
        $ct_request->submit_time = 10;
        $ct_request->js_on = 1;
        $ct_result = $ct->isAllowMessage($ct_request);
    }
    if (isset($_POST['cleantalk_sfw']) && $_POST['cleantalk_sfw'] == 1) {
        global $smcFunc;
        $sql = "DROP TABLE IF EXISTS `cleantalk_sfw`";
        $result = $smcFunc['db_query']('', $sql, array());
        $sql = "CREATE TABLE IF NOT EXISTS `cleantalk_sfw` (\n`network` int(11) unsigned NOT NULL,\n`mask` int(11) unsigned NOT NULL,\nINDEX (  `network` ,  `mask` )\n) ENGINE = MYISAM ";
        $result = $smcFunc['db_query']('', $sql, array());
        $data = array('auth_key' => cleantalk_get_api_key(), 'method_name' => '2s_blacklists_db');
        $result = sendRawRequest('https://api.cleantalk.org/2.1', $data, false);
        $result = json_decode($result, true);
        if (isset($result['data'])) {
            $result = $result['data'];
            $query = "INSERT INTO `cleantalk_sfw` VALUES ";
            for ($i = 0; $i < sizeof($result); $i++) {
                if ($i == sizeof($result) - 1) {
                    $query .= "(" . $result[$i][0] . "," . $result[$i][1] . ")";
                } else {
                    $query .= "(" . $result[$i][0] . "," . $result[$i][1] . "), ";
                }
            }
            $result = $smcFunc['db_query']('', $query, array());
        }
    }
    if (isset($modSettings['cleantalk_sfw']) && $modSettings['cleantalk_sfw'] == 1) {
        $is_sfw_check = true;
        $ip = CleantalkGetIP();
        $ip = array_unique($ip);
        $key = cleantalk_get_api_key();
        for ($i = 0; $i < sizeof($ip); $i++) {
            if (isset($_COOKIE['ct_sfw_pass_key']) && $_COOKIE['ct_sfw_pass_key'] == md5($ip[$i] . $key)) {
                $is_sfw_check = false;
                if (isset($_COOKIE['ct_sfw_passed'])) {
                    @setcookie('ct_sfw_passed', '0', 1, "/");
                }
            }
        }
        if ($is_sfw_check) {
            include_once "cleantalk-sfw.class.php";
            $sfw = new CleanTalkSFW();
            $sfw->cleantalk_get_real_ip();
            $sfw->check_ip();
            if ($sfw->result) {
                $sfw->sfw_die();
            }
        }
    }
}
 public static function onSkinAfterBottomScripts($skin, &$text)
 {
     global $wgCTShowLink, $wgCTSFW, $wgCTDataStoreFile, $wgCTAccessKey;
     /* SFW starts */
     if ($wgCTSFW && file_exists($wgCTDataStoreFile)) {
         $settings = file_get_contents($wgCTDataStoreFile);
         include_once "cleantalk-sfw.class.php";
         if ($settings) {
             $settings = json_decode($settings, true);
             if (!isset($settings['lastSFWUpdate'])) {
                 $settings['lastSFWUpdate'] = 0;
             }
             if (time() - $settings['lastSFWUpdate'] > 30) {
                 $dbr = wfGetDB(DB_MASTER);
                 $dbr->query("DROP TABLE IF EXISTS `cleantalk_sfw`;");
                 $dbr->commit();
                 $dbr->query("CREATE TABLE IF NOT EXISTS `cleantalk_sfw` (\n\t\t`network` int(11) unsigned NOT NULL,\n\t\t`mask` int(11) unsigned NOT NULL,\n\t\tINDEX (  `network` ,  `mask` )\n\t\t) ENGINE = MYISAM ;");
                 $dbr->commit();
                 $data = array('auth_key' => $wgCTAccessKey, 'method_name' => '2s_blacklists_db');
                 $result = sendRawRequest('https://api.cleantalk.org/2.1', $data, false);
                 $result = json_decode($result, true);
                 if (isset($result['data'])) {
                     $result = $result['data'];
                     $query = "INSERT INTO `cleantalk_sfw` VALUES ";
                     for ($i = 0; $i < sizeof($result); $i++) {
                         if ($i == sizeof($result) - 1) {
                             $query .= "(" . $result[$i][0] . "," . $result[$i][1] . ");";
                         } else {
                             $query .= "(" . $result[$i][0] . "," . $result[$i][1] . "), ";
                         }
                     }
                     $result = $dbr->query($query);
                     $dbr->commit();
                     $settings['lastSFWUpdate'] = time();
                     $fp = fopen($wgCTDataStoreFile, 'w') or error_log('Could not open file:' . $wgCTDataStoreFile);
                     fwrite($fp, json_encode($settings));
                     fclose($fp);
                 }
             }
             /* Check IP here */
             $is_sfw_check = true;
             $ip = CleantalkGetIP();
             $ip = array_unique($ip);
             $key = $wgCTAccessKey;
             for ($i = 0; $i < sizeof($ip); $i++) {
                 if (isset($_COOKIE['ct_sfw_pass_key']) && $_COOKIE['ct_sfw_pass_key'] == md5($ip[$i] . $key)) {
                     $is_sfw_check = false;
                     if (isset($_COOKIE['ct_sfw_passed'])) {
                         @setcookie('ct_sfw_passed', '0', 1, "/");
                     }
                 }
             }
             if ($is_sfw_check) {
                 $sfw = new CleanTalkSFW();
                 $sfw->cleantalk_get_real_ip();
                 $sfw->check_ip();
                 if ($sfw->result) {
                     $sfw->sfw_die();
                 }
             }
             /* Finish checking IP */
         }
     }
     /* SFW ends */
     if ($wgCTShowLink) {
         $text .= "<div style='width:100%;text-align:center;'><a href='https://cleantalk.org'>MediaWiki spam</a> blocked by CleanTalk.</div>";
     }
     return true;
 }