Guest User

install.php

a guest
Nov 24th, 2016
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 51.31 KB | None | 0 0
  1. <?php
  2.  
  3. /**
  4. * File: install.php.
  5. * Author: Ulrich Block
  6. * Date: 07.12.13
  7. * Time: 10:30
  8. * Contact: <ulrich.block@easy-wi.com>
  9. *
  10. * This file is part of Easy-WI.
  11. *
  12. * Easy-WI is free software: you can redistribute it and/or modify
  13. * it under the terms of the GNU General Public License as published by
  14. * the Free Software Foundation, either version 3 of the License, or
  15. * (at your option) any later version.
  16. *
  17. * Easy-WI is distributed in the hope that it will be useful,
  18. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  19. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  20. * GNU General Public License for more details.
  21. *
  22. * You should have received a copy of the GNU General Public License
  23. * along with Easy-WI. If not, see <http://www.gnu.org/licenses/>.
  24. *
  25. * Diese Datei ist Teil von Easy-WI.
  26. *
  27. * Easy-WI ist Freie Software: Sie koennen es unter den Bedingungen
  28. * der GNU General Public License, wie von der Free Software Foundation,
  29. * Version 3 der Lizenz oder (nach Ihrer Wahl) jeder spaeteren
  30. * veroeffentlichten Version, weiterverbreiten und/oder modifizieren.
  31. *
  32. * Easy-WI wird in der Hoffnung, dass es nuetzlich sein wird, aber
  33. * OHNE JEDE GEWAEHELEISTUNG, bereitgestellt; sogar ohne die implizite
  34. * Gewaehrleistung der MARKTFAEHIGKEIT oder EIGNUNG FUER EINEN BESTIMMTEN ZWECK.
  35. * Siehe die GNU General Public License fuer weitere Details.
  36. *
  37. * Sie sollten eine Kopie der GNU General Public License zusammen mit diesem
  38. * Programm erhalten haben. Wenn nicht, siehe <http://www.gnu.org/licenses/>.
  39. */
  40.  
  41. ini_set('display_errors', 1);
  42. error_reporting(E_ALL|E_STRICT);
  43. define('EASYWIDIR', dirname(dirname(__FILE__)));
  44.  
  45. class UpdateResponse {
  46. public $response = '';
  47. function __construct() {
  48. $this->response = '';
  49. }
  50. function add ($newtext) {
  51. $this->response .= $newtext;
  52. }
  53. function __destruct() {
  54. unset($this->response);
  55. }
  56. }
  57.  
  58. require_once(EASYWIDIR . '/stuff/methods/functions.php');
  59. require_once(EASYWIDIR . '/stuff/methods/vorlage.php');
  60.  
  61. $currentStep = (isset($_GET['step']) and $_GET['step'] > 0 and $_GET['step'] < 10) ? (int) $_GET['step'] : 0;
  62. $progressPercent = (100 / 9) * $currentStep ;
  63. $acceptLanguage = strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0 , 2));
  64. $fallbackLanguage = (file_exists(EASYWIDIR . '/install/' . $acceptLanguage . '.xml')) ? $acceptLanguage : 'en';
  65. $menuLanguage = (isset($_GET['language']) and strlen($_GET['language']) == 2 and file_exists(EASYWIDIR . '/install/' . $_GET['language'] . '.xml')) ? $_GET['language'] : $fallbackLanguage;
  66. $languageGetParameter = '&amp;language=' . $menuLanguage;
  67. $languageObject = simplexml_load_file(EASYWIDIR . '/install/' . $menuLanguage . '.xml');
  68.  
  69. $displayToUser = '';
  70. $systemCheckOk = array();
  71. $systemCheckError = array();
  72.  
  73. if ($currentStep == 0) {
  74.  
  75. $licencecode = webhostRequest('l.easy-wi.com', $_SERVER['HTTP_HOST'], '/version.php', null, 80);
  76. $licencecode = cleanFsockOpenRequest($licencecode, '{', '}');
  77. $json = @json_decode($licencecode);
  78.  
  79. if (!$json or !property_exists($json, 'v') or '5.30' == $json->v) {
  80. $displayToUser = "<div class='jumbotron'><h2>{$languageObject->welcome_header}</h2><p>{$languageObject->welcome_text}</p><div class='pager'><a href='?step=1${languageGetParameter}' class='pull-right'><span class='btn btn-primary btn-lg'>{$languageObject->continue}</span></a></div></div>";
  81. } else {
  82. $displayToUser = "<div class='alert alert-warning'><i class='fa fa-exclamation-triangle'></i> {$languageObject->welcome_old_version}<a href='https://easy-wi.com/uk/downloads/' target='_blank'>{$json->v}</a></div><div class='jumbotron'><h2>{$languageObject->welcome_header}</h2><p>{$languageObject->welcome_text}</p><div class='pager'><a href='?step=1${languageGetParameter}' class='pull-right'><span class='btn btn-primary btn-lg'>{$languageObject->continue}</span></a></div></div>";
  83. }
  84.  
  85. } else {
  86.  
  87. if (version_compare(PHP_VERSION, '5.4.0') >= 0) {
  88. $systemCheckOk['php'] = $languageObject->system_ok_php_version . PHP_VERSION;
  89. } else {
  90. $systemCheckError['php'] = $languageObject->error_system_php_version . PHP_VERSION;
  91. }
  92.  
  93. if (extension_loaded('openssl')) {
  94. $systemCheckOk['openssl'] = $languageObject->system_ok_openssl;
  95. } else {
  96. $systemCheckError['openssl'] = $languageObject->error_system_openssl;
  97. }
  98.  
  99. if (extension_loaded('json')) {
  100. $systemCheckOk['json'] = $languageObject->system_ok_json;
  101. } else {
  102. $systemCheckError['json'] = $languageObject->error_system_json;
  103. }
  104.  
  105. if (extension_loaded('hash')) {
  106. $systemCheckOk['hash'] = $languageObject->system_ok_hash;
  107. } else {
  108. $systemCheckError['hash'] = $languageObject->error_system_hash;
  109. }
  110.  
  111. if (extension_loaded('ftp')) {
  112. $systemCheckOk['ftp'] = $languageObject->system_ok_ftp;
  113. } else {
  114. $systemCheckError['ftp'] = $languageObject->error_system_ftp;
  115. }
  116.  
  117. if (extension_loaded('SimpleXML')) {
  118. $systemCheckOk['SimpleXML'] = $languageObject->system_ok_SimpleXML;
  119. } else {
  120. $systemCheckError['SimpleXML'] = $languageObject->error_system_SimpleXML;
  121. }
  122.  
  123. if (extension_loaded('curl')) {
  124. $systemCheckOk['curl'] = $languageObject->system_ok_curl;
  125. } else {
  126. $systemCheckError['curl'] = $languageObject->error_system_curl;
  127. }
  128.  
  129. if (extension_loaded('gd')) {
  130. $systemCheckOk['gd'] = $languageObject->system_ok_gd;
  131. } else {
  132. $systemCheckError['gd'] = $languageObject->error_system_gd;
  133. }
  134.  
  135. if (extension_loaded('PDO')) {
  136. $systemCheckOk['PDO'] = $languageObject->system_ok_PDO;
  137. } else {
  138. $systemCheckError['PDO'] = $languageObject->error_system_PDO;
  139. }
  140.  
  141. if (extension_loaded('pdo_mysql')) {
  142. $systemCheckOk['pdo_mysql'] = $languageObject->system_ok_pdo_mysql;
  143. } else {
  144. $systemCheckError['pdo_mysql'] = $languageObject->error_system_pdo_mysql;
  145. }
  146.  
  147. if (function_exists('fopen')) {
  148. $systemCheckOk['fopen'] = $languageObject->system_ok_fopen;
  149. } else {
  150. $systemCheckError['fopen'] = $languageObject->error_system_fopen;
  151. }
  152.  
  153. $folderArray = array(
  154. 'css/',
  155. 'css/default/',
  156. 'images/',
  157. 'images/flags',
  158. 'images/games/',
  159. 'images/games/icons/',
  160. 'js/',
  161. 'js/default/',
  162. 'keys/',
  163. 'languages/',
  164. 'languages/default/',
  165. 'languages/default/de/',
  166. 'languages/default/dk/',
  167. 'languages/default/uk',
  168. 'stuff/',
  169. 'stuff/admin/',
  170. 'stuff/api/',
  171. 'stuff/cms/',
  172. 'stuff/custom_modules/',
  173. 'stuff/jobs/',
  174. 'stuff/methods/',
  175. 'stuff/user/',
  176. 'template/',
  177. 'template/default/',
  178. 'third_party/',
  179. 'tmp/'
  180. );
  181.  
  182. foreach ($folderArray as $folder) {
  183. if (is_dir(EASYWIDIR . "/${folder}")) {
  184. $handle = @fopen(EASYWIDIR . "/${folder}test.txt", "w+");
  185.  
  186. if ($handle) {
  187. fclose($handle);
  188. unlink(EASYWIDIR . "/${folder}test.txt");
  189. $systemCheckOk['folders'][] = "Folder exists and can write to: ${folder}";
  190.  
  191. } else {
  192. $systemCheckError['folders'][] = "Folder exists but cannot edit files: ${folder}";
  193. }
  194. } else {
  195. $systemCheckError['folders'][] = "Folder does not exist or cannot access: ${folder}";
  196. }
  197. }
  198.  
  199. }
  200.  
  201. if ($currentStep == 1) {
  202.  
  203. if (count($systemCheckError) == 0) {
  204. $displayToUser .= "<div class='pager'><a href='?step=2${languageGetParameter}' class='pull-right'><span class='btn btn-primary btn-lg'>{$languageObject->continue}</span></a></div>";
  205. }
  206.  
  207. foreach ($systemCheckError as $v) {
  208. if (is_array($v)) {
  209. foreach ($v as $v2) {
  210. $displayToUser .= "<div class='alert alert-danger'>${v2}</div>";
  211. }
  212. } else {
  213. $displayToUser .= "<div class='alert alert-danger'>${v}</div>";
  214. }
  215. }
  216.  
  217. foreach ($systemCheckOk as $v) {
  218. if (is_array($v)) {
  219. foreach ($v as $v2) {
  220. $displayToUser .= "<div class='alert alert-success'>${v2}</div>";
  221. }
  222. } else {
  223. $displayToUser .= "<div class='alert alert-success'>${v}</div>";
  224. }
  225. }
  226.  
  227. if (count($systemCheckError) == 0) {
  228. $displayToUser .= "<div class='pager'><a href='?step=2${languageGetParameter}' class='pull-right'><span class='btn btn-primary btn-lg'>{$languageObject->continue}</span></a></div>";
  229. }
  230.  
  231. }
  232.  
  233. if ($currentStep == 2 and count($systemCheckError) == 0) {
  234.  
  235. $host = 'localhost';
  236. $db = '';
  237. $user = '';
  238. $pwd = '';
  239. $aeskey = passwordgenerate(20);
  240.  
  241. if (file_exists(EASYWIDIR . '/stuff/config.php')) {
  242. require_once(EASYWIDIR . '/stuff/config.php');
  243. }
  244. if (file_exists(EASYWIDIR . '/stuff/keyphrasefile.php')) {
  245. require_once(EASYWIDIR . '/stuff/keyphrasefile.php');
  246. }
  247.  
  248. $displayToUser = "
  249. <form class='form-horizontal' role='form' action='install.php?step=3${languageGetParameter}' method='post'>
  250. <div class='form-group'>
  251. <label for='inputHost' class='col-sm-2 control-label'>{$languageObject->host}</label>
  252. <div class='col-sm-10'>
  253. <input type='text' class='form-control' id='inputHost' name='host' value='${host}' required>
  254. </div>
  255. </div>
  256. <div class='form-group'>
  257. <label for='inputDB' class='col-sm-2 control-label'>{$languageObject->db}</label>
  258. <div class='col-sm-10'>
  259. <input type='text' class='form-control' id='inputDB' name='db' value='${db}' required>
  260. </div>
  261. </div>
  262. <div class='form-group'>
  263. <label for='inputUser' class='col-sm-2 control-label'>{$languageObject->user}</label>
  264. <div class='col-sm-10'>
  265. <input type='text' class='form-control' id='inputUser' name='user' value='${user}' required>
  266. </div>
  267. </div>
  268. <div class='form-group'>
  269. <label for='inputPassword' class='col-sm-2 control-label'>{$languageObject->passw_1}</label>
  270. <div class='col-sm-10'>
  271. <input type='password' class='form-control' id='inputPassword' name='pwd' value='${pwd}' required>
  272. </div>
  273. </div>
  274. <div class='form-group'>
  275. <label for='inputAESKey' class='col-sm-2 control-label'>{$languageObject->aeskey}</label>
  276. <div class='col-sm-10'>
  277. <input type='text' class='form-control' id='inputAESKey' name='aeskey' value='${aeskey}' required>
  278. <p class='help-block'>{$languageObject->aeskey2}</p>
  279. <p class='help-block'>{$languageObject->aeskey3}</p>
  280. </div>
  281. </div>
  282. <div class='form-group'>
  283. <div class='col-sm-offset-2 col-sm-10'>
  284. <button type='submit' class='btn btn-primary btn-lg pull-right'>{$languageObject->continue}</button>
  285. </div>
  286. </div>
  287. </form>
  288. ";
  289.  
  290. } else if ($currentStep > 2 and count($systemCheckError) == 0) {
  291.  
  292. if ($currentStep == 3 and isset($_POST['db'])) {
  293.  
  294. try {
  295.  
  296. $sql = new PDO("mysql:host=${_POST['host']};dbname=${_POST['db']}", $_POST['user'], $_POST['pwd'], array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
  297. $sql->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  298.  
  299. $configFp = @fopen(EASYWIDIR . '/stuff/config.php', "w+");
  300.  
  301. if ($configFp) {
  302.  
  303. $configdata = "<?php
  304.  
  305. // This file was generated by the easy-wi.com installer
  306.  
  307. " . '$host' . " = '" . $_POST['host'] . "';
  308. " . '$user' . " = '" . $_POST['user'] . "';
  309. " . '$db' . " = '" . $_POST['db'] . "';
  310. " . '$pwd' . " = '" . $_POST['pwd'] . "';
  311. " . '$captcha' . " = 0;
  312. " . '$title' . " = '';
  313. " . '$debug' . " = 0;
  314. " . '$timezone' . " = 'Europe/Berlin';
  315. ";
  316.  
  317. @fwrite($configFp, $configdata);
  318.  
  319. fclose($configFp);
  320.  
  321. } else {
  322. $systemCheckError['config.php'] = "<div class='alert alert-danger'>{$languageObject->error_config_php_data}</div>";
  323. }
  324.  
  325. $keyFp = @fopen(EASYWIDIR . '/stuff/keyphrasefile.php', "w+");
  326.  
  327. if ($keyFp) {
  328. $configdata='<?php
  329.  
  330. // This file was generated by the easy-wi.com installer
  331.  
  332. $aeskey = "' . $_POST['aeskey'] . '";
  333. ';
  334.  
  335. @fwrite($keyFp, $configdata);
  336.  
  337. fclose($keyFp);
  338. } else {
  339. $systemCheckError['keyphrasefile.php'] = "<div class='alert alert-danger'>{$languageObject->error_keyphrase_php_create}</div>";
  340. }
  341.  
  342. } catch(PDOException $error) {
  343.  
  344. $systemCheckError['db_connect'] = "<div class='alert alert-danger'>{$error->getMessage()}</div>";
  345.  
  346. }
  347.  
  348. }
  349.  
  350. if (!isset($sql) ) {
  351.  
  352. if (file_exists(EASYWIDIR . '/stuff/config.php') and file_exists(EASYWIDIR . '/stuff/keyphrasefile.php')) {
  353.  
  354. if ($currentStep == 3 and isset($_POST['db'])) {
  355. $displayToUser .= "<div class='alert alert-success'>{$languageObject->ok_files_created}</div>";
  356. }
  357.  
  358. require_once(EASYWIDIR . '/stuff/config.php');
  359. require_once(EASYWIDIR . '/stuff/keyphrasefile.php');
  360.  
  361. if (isset($host) and isset($db) and isset($user) and isset($pwd)) {
  362.  
  363. try {
  364.  
  365. $sql = new PDO("mysql:host=${host};dbname=${db}", $user, $pwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
  366. $sql->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  367.  
  368. } catch(PDOException $error) {
  369.  
  370. $systemCheckError['db_connect'] = "<div class='alert alert-danger'>{$error->getMessage()}</div>";
  371.  
  372. }
  373.  
  374. } else {
  375. $systemCheckError['config.php'] = "<div class='alert alert-danger'>{$languageObject->error_config_php_data}</div>";
  376. }
  377.  
  378. } else {
  379.  
  380. if (isset($_POST['db'])) {
  381. $systemCheckError['keyphrasefile.php'] = "<div class='alert alert-danger'>{$languageObject->error_keyphrase_php_create}</div>";
  382. } else {
  383. $systemCheckError['config.php'] = "<div class='alert alert-danger'>{$languageObject->error_config_keyphrase_php_missing}</div>";
  384. }
  385. }
  386. }
  387. }
  388.  
  389. if ($currentStep == 3 and count($systemCheckError) == 0) {
  390. $displayToUser .= "<div class='alert alert-success'>{$languageObject->ok_files_created}</div>";
  391. $displayToUser .= "<div class='alert alert-success'>{$languageObject->ok_db_connect}</div>";
  392. $displayToUser .= "<div class='pager'><a href='?step=4${languageGetParameter}' class='pull-right'><span class='btn btn-primary btn-lg'>{$languageObject->continue}</span></a></div>";
  393. }
  394.  
  395. if ($currentStep == 4 and count($systemCheckError) == 0) {
  396.  
  397. try {
  398.  
  399. $response = new UpdateResponse();
  400.  
  401. require_once(EASYWIDIR . '/stuff/methods/class_tables.php');
  402.  
  403. $tables = new Tables($db);
  404. $tables->createMissingTables();
  405.  
  406. foreach($tables->getExecutedSql() as $change){
  407. if ($change) {
  408. $response->add($change . '<br>');
  409. }
  410. }
  411.  
  412. if (strlen($response->response) > 0) {
  413.  
  414. $displayToUser .= "<div class='alert alert-success'>{$languageObject->ok_db_tables_create}</div>";
  415. $displayToUser .= "<div class='alert alert-success'>{$response->response}</div>";
  416.  
  417. } else {
  418. $displayToUser .= "<div class='alert alert-success'>{$languageObject->ok_db_tables_create}</div>";
  419. }
  420.  
  421. $displayToUser .= "<div class='pager'><a href='?step=5${languageGetParameter}' class='pull-right'><span class='btn btn-primary btn-lg'>{$languageObject->continue}</span></a></div>";
  422.  
  423. } catch(PDOException $error) {
  424. $systemCheckError['tables_add.php'] = "<div class='alert alert-danger'>{$error->getMessage()}" . implode("\r\n", $tables->getExecutedSql()) . "</div>";
  425. }
  426. }
  427.  
  428. if ($currentStep == 5 and count($systemCheckError) == 0) {
  429.  
  430. try {
  431.  
  432. $response = new UpdateResponse();
  433.  
  434. require_once(EASYWIDIR . '/stuff/methods/class_tables.php');
  435.  
  436. $tables = new Tables($db);
  437. $response->add('Repairing tables if needed.<br>');
  438. $tables->correctTablesStatus();
  439. $tables->correctExistingTables();
  440.  
  441. foreach($tables->getExecutedSql() as $change){
  442. $response->add($change . '<br>');
  443. }
  444.  
  445. if (strpos($response->response, 'Error: no such table:') !== false) {
  446.  
  447. $systemCheckError['tables_repair.php'] = "<div class='alert alert-danger'>{$response->response}</div>";
  448.  
  449. } else {
  450.  
  451. if (strlen($response->response) > 0) {
  452.  
  453. $displayToUser .= "<div class='alert alert-success'>{$languageObject->ok_db_tables_check_repair}</div>";
  454. $displayToUser .= "<div class='alert alert-success'>{$response->response}</div>";
  455.  
  456. } else {
  457. $displayToUser .= "<div class='alert alert-success'>{$languageObject->ok_db_tables_check}</div>";
  458. }
  459.  
  460. $displayToUser .= "<div class='pager'><a href='?step=6${languageGetParameter}' class='pull-right'><span class='btn btn-primary btn-lg'>{$languageObject->continue}</span></a></div>";
  461.  
  462. }
  463.  
  464. } catch(PDOException $error) {
  465.  
  466. $systemCheckError['tables_repair.php'] = "<div class='alert alert-danger'>{$error->getMessage()}</div>";
  467.  
  468. }
  469.  
  470. }
  471.  
  472. if ($currentStep == 6 and count($systemCheckError) == 0) {
  473.  
  474. $cname = '';
  475. $email = '';
  476.  
  477. $query = $sql->prepare("SELECT `cname`,`mail` FROM `userdata` WHERE `id`=1");
  478. $query->execute();
  479. while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
  480. $cname = $row['cname'];
  481. $email = $row['mail'];
  482. }
  483.  
  484. if (isset($_POST['passw1'])) {
  485.  
  486. if ($_POST['passw1'] != $_POST['passw2']) {
  487. $displayToUser .= "<div class='alert alert-danger'>{$languageObject->error_password}</div>";
  488. }
  489.  
  490. if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
  491. $email = $_POST['email'];
  492. } else {
  493. $displayToUser .= "<div class='alert alert-danger'>{$languageObject->error_email}</div>";
  494. }
  495.  
  496. if (strlen($_POST['cname']) == 0) {
  497. $displayToUser .= "<div class='alert alert-danger'>{$languageObject->error_cname}</div>";
  498. } else {
  499. $cname = $_POST['cname'];
  500. }
  501. }
  502.  
  503. if (!isset($_POST['passw1']) or strlen($displayToUser) > 0) {
  504.  
  505. $displayToUser .= "
  506. <form class='form-horizontal' role='form' action='install.php?step=6${languageGetParameter}' method='post'>
  507. <div class='form-group'>
  508. <label for='inputUser' class='col-sm-2 control-label'>{$languageObject->user2}</label>
  509. <div class='col-sm-10'>
  510. <input type='text' class='form-control' id='inputUser' name='cname' value='${cname}' required>
  511. </div>
  512. </div>
  513. <div class='form-group'>
  514. <label for='inputEmail' class='col-sm-2 control-label'>{$languageObject->email}</label>
  515. <div class='col-sm-10'>
  516. <input type='email' class='form-control' id='inputEmail' name='email' value='${email}' required>
  517. </div>
  518. </div>
  519. <div class='form-group'>
  520. <label for='inputPassword1' class='col-sm-2 control-label'>{$languageObject->passw_1}</label>
  521. <div class='col-sm-10'>
  522. <input type='password' class='form-control' id='inputPassword1' name='passw1' value='' required>
  523. </div>
  524. </div>
  525. <div class='form-group'>
  526. <label for='inputPassword2' class='col-sm-2 control-label'>{$languageObject->passw_2}</label>
  527. <div class='col-sm-10'>
  528. <input type='password' class='form-control' id='inputPassword2' name='passw2' value='' required>
  529. </div>
  530. </div>
  531. <div class='form-group'>
  532. <div class='col-sm-offset-2 col-sm-10'>
  533. <button type='submit' class='btn btn-primary btn-lg pull-right'>{$languageObject->continue}</button>
  534. </div>
  535. </div>
  536. </form>
  537. ";
  538.  
  539. } else {
  540.  
  541. try {
  542.  
  543. $query = $sql->prepare("INSERT INTO `userdata` (`id`,`cname`,`mail`,`security`,`accounttype`,`creationTime`,`updateTime`) VALUES (1,?,?,?,'a',NOW(),NOW()) ON DUPLICATE KEY UPDATE `cname`=VALUES(`cname`),`mail`=VALUES(`mail`)");
  544. $query->execute(array($cname, $email, md5($_POST['passw1'])));
  545.  
  546. $query = $sql->prepare("INSERT INTO `usergroups` (`id`,`defaultgroup`,`name`,`grouptype`,`root`,`miniroot`) VALUES (1,'Y','Admin Default','a','Y','N') ON DUPLICATE KEY UPDATE `id`=VALUES(`id`)");
  547. $query->execute();
  548. $query = $sql->prepare("INSERT INTO `usergroups` (`id`,`defaultgroup`,`name`,`grouptype`,`root`,`miniroot`) VALUES (2,'Y','Reseller Default','r','Y','N') ON DUPLICATE KEY UPDATE `id`=VALUES(`id`)");
  549. $query->execute();
  550. $query = $sql->prepare("INSERT INTO `usergroups` (`id`,`defaultgroup`,`name`,`grouptype`,`root`,`miniroot`) VALUES (3,'Y','User Default','u','N','Y') ON DUPLICATE KEY UPDATE `id`=VALUES(`id`)");
  551. $query->execute();
  552.  
  553. $query = $sql->prepare("INSERT INTO `userdata_groups` (`userID`,`groupID`) VALUES (1,1) ON DUPLICATE KEY UPDATE `userID`=VALUES(`userID`)");
  554. $query->execute();
  555.  
  556. $displayToUser .= "<div class='alert alert-success'>{$languageObject->ok_admin_user}</div>";
  557. $displayToUser .= "<div class='pager'><a href='?step=7${languageGetParameter}' class='pull-right'><span class='btn btn-primary btn-lg'>{$languageObject->continue}</span></a></div>";
  558.  
  559. } catch(PDOException $error) {
  560.  
  561. $systemCheckError['tables_repair.php'] = "<div class='alert alert-danger'>{$error->getMessage()}</div>";
  562.  
  563. }
  564.  
  565. }
  566. }
  567.  
  568. if ($currentStep == 7 and count($systemCheckError) == 0) {
  569.  
  570. $languages = array();
  571. $language = '';
  572. $prefix1 = "Y";
  573. $prefix2 = "user";
  574. $faillogins = 5;
  575. $brandname = "by myhost.com";
  576.  
  577. $selectedCaptcha = '';
  578. $selectedPrefix = '';
  579.  
  580. $query = $sql->prepare("SELECT `pageurl` FROM `page_settings` WHERE `resellerid`=0");
  581. $query->execute();
  582. $installUrl = (string) $query->fetchColumn();
  583.  
  584. if (strlen($installUrl) == 0) {
  585. $installUrl = 'http://' . $_SERVER['SERVER_NAME'] . '/';
  586. }
  587.  
  588. if (strlen($_SERVER['SERVER_NAME']) == 0 and isset($_SERVER['HTTP_REFERER'])) {
  589. $installUrl = str_replace(array('&language=de', '&language=en', '&language=dk'), '', str_replace('install/install.php?step=6', '', $_SERVER['HTTP_REFERER']));
  590. }
  591.  
  592. while (substr($installUrl, -2) == '//') {
  593. $installUrl = substr($installUrl, 0, strlen($installUrl) -1 );
  594. }
  595.  
  596. $defaultTimeZone = (@ini_get('date.timezone') != "") ? ini_get('date.timezone') : 'Europe/Berlin';
  597.  
  598. $query = $sql->prepare("SELECT `mail` FROM `userdata` WHERE `id`=1");
  599. $query->execute();
  600. $email = $query->fetchColumn();
  601.  
  602. $query = $sql->prepare("SELECT `language`,`prefix1`,`prefix2`,`faillogins`,`brandname` FROM `settings` WHERE `resellerid`=0 LIMIT 1");
  603. $query->execute();
  604. while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
  605. $language = $row['language'];
  606. $prefix1 = $row['prefix1'];
  607. $prefix2 = $row['prefix2'];
  608. $faillogins = $row['faillogins'];
  609. $brandname = $row['brandname'];
  610. }
  611.  
  612. $query = $sql->prepare("SELECT `email_setting_value` FROM `settings_email` WHERE `reseller_id`=0 AND `email_setting_name`='email' LIMIT 1");
  613. $query->execute();
  614. while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
  615. $email = $row['email_setting_value'];
  616. }
  617.  
  618. if (isset($_POST['email'])) {
  619.  
  620. if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
  621. $email = $_POST['email'];
  622. } else {
  623. $displayToUser .= "<div class='alert alert-danger'>{$languageObject->error_email}</div>";
  624. }
  625.  
  626. }
  627.  
  628. if ($captcha == 1) {
  629. $selectedCaptcha = 'selected="selected"';
  630. }
  631.  
  632. if ($prefix1 == 'Y') {
  633. $selectedPrefix = 'selected="selected"';
  634. }
  635.  
  636. if (is_dir(EASYWIDIR . "/languages/default/")){
  637. $dirs = scandir(EASYWIDIR . "/languages/default/");
  638. foreach ($dirs as $row) {
  639. if (preg_match("/^[a-z]{2}+$/", $row)) {
  640. $languages[] = ($row == $menuLanguage) ? "<option value='${row}' selected='selected'>$row</option>" : "<option value='${row}'>$row</option>";
  641. }
  642. }
  643. }
  644.  
  645. $languages = implode('', $languages);
  646.  
  647. if (!isset($_POST['email']) or strlen($displayToUser) > 0) {
  648.  
  649. $displayToUser .= "
  650. <form class='form-horizontal' role='form' action='install.php?step=7${languageGetParameter}' method='post'>
  651. <div class='form-group'>
  652. <label for='inputInstallUrl' class='col-sm-2 control-label'>{$languageObject->installUrl}</label>
  653. <div class='col-sm-10'>
  654. <input type='text' class='form-control' id='inputInstallUrl' name='installUrl' value='${installUrl}' required>
  655. </div>
  656. </div>
  657. <div class='form-group'>
  658. <label for='inputInstallTimezone' class='col-sm-2 control-label'>{$languageObject->timezone}</label>
  659. <div class='col-sm-10'>
  660. <select id='inputInstallTimezone' class='form-control' name='timezone'>";
  661.  
  662. foreach (timezone_identifiers_list() as $time) {
  663. $displayToUser .= ($time == $defaultTimeZone) ? "<option selected='selected'>{$time}</option>" : "<option>{$time}</option>";
  664. }
  665.  
  666. $displayToUser .= "
  667. </select>
  668. </div>
  669. </div>
  670. <div class='form-group'>
  671. <label for='inputTitle' class='col-sm-2 control-label'>{$languageObject->title}</label>
  672. <div class='col-sm-10'>
  673. <input type='text' class='form-control' id='inputTitle' name='title' value='${title}' required>
  674. </div>
  675. </div>
  676. <div class='form-group'>
  677. <label for='inputLanguage' class='col-sm-2 control-label'>{$languageObject->language}</label>
  678. <div class='col-sm-10'>
  679. <select name='language' class='form-control' id='inputLanguage'>${languages}</select>
  680. </div>
  681. </div>
  682. <div class='form-group'>
  683. <label for='inputEmail' class='col-sm-2 control-label'>{$languageObject->email}</label>
  684. <div class='col-sm-10'>
  685. <input type='email' class='form-control' id='inputEmail' name='email' value='${email}' required>
  686. <p class='help-block'>{$languageObject->email2}</p>
  687. </div>
  688. </div>
  689. <div class='form-group'>
  690. <label for='inputCaptcha' class='col-sm-2 control-label'>{$languageObject->captcha}</label>
  691. <div class='col-sm-10'>
  692. <select name='captcha' class='form-control' id='inputCaptcha'>
  693. <option value='0'>{$languageObject->no}</option>
  694. <option value='1' ${selectedCaptcha}>{$languageObject->yes}</option>
  695. </select>
  696. <p class='help-block'>{$languageObject->captcha_2}</p>
  697. </div>
  698. </div>
  699. <div class='form-group'>
  700. <label for='inputFaillogins' class='col-sm-2 control-label'>{$languageObject->faillogins}</label>
  701. <div class='col-sm-10'>
  702. <input type='number' class='form-control' id='inputFaillogins' name='faillogins' value='${faillogins}' required>
  703. <p class='help-block'>{$languageObject->faillogins2}</p>
  704. </div>
  705. </div>
  706. <div class='form-group'>
  707. <label for='inputBrandname' class='col-sm-2 control-label'>{$languageObject->brandname}</label>
  708. <div class='col-sm-10'>
  709. <input type='text' class='form-control' id='inputBrandname' name='brandname' value='${brandname}' required>
  710. <p class='help-block'>{$languageObject->brandname2}</p>
  711. </div>
  712. </div>
  713. <div class='form-group'>
  714. <label for='inputPrefix1' class='col-sm-2 control-label'>{$languageObject->prefix1}</label>
  715. <div class='col-sm-10'>
  716. <select name='prefix1' class='form-control' id='inputPrefix1'>
  717. <option value='N'>{$languageObject->no}</option>
  718. <option value='Y' ${selectedPrefix}>{$languageObject->yes}</option>
  719. </select>
  720. </div>
  721. </div>
  722. <div class='form-group'>
  723. <label for='inputPrefix' class='col-sm-2 control-label'>{$languageObject->prefix3}</label>
  724. <div class='col-sm-10'>
  725. <input type='text' class='form-control' id='inputPrefix' name='prefix2' value='${prefix2}' required>
  726. <p class='help-block'>{$languageObject->prefix2}</p>
  727. </div>
  728. </div>
  729. <div class='form-group'>
  730. <div class='col-sm-offset-2 col-sm-10'>
  731. <button type='submit' class='btn btn-primary btn-lg pull-right'>{$languageObject->continue}</button>
  732. </div>
  733. </div>
  734. </form>
  735. ";
  736.  
  737. } else {
  738.  
  739. try {
  740.  
  741. $query = $sql->prepare("INSERT INTO `easywi_statistics_current` (`userID`) VALUES (0) ON DUPLICATE KEY UPDATE `userID`=`userID`");
  742. $query->execute();
  743.  
  744. $query = $sql->prepare("INSERT INTO `page_settings` (`id`,`pageurl`,`resellerid`) VALUES (1,?,0) ON DUPLICATE KEY UPDATE `pageurl`=VALUES(`pageurl`)");
  745. $query->execute(array($_POST['installUrl']));
  746.  
  747. $query = $sql->prepare("INSERT INTO `settings` (`id`,`template`,`language`,`prefix1`,`prefix2`,`faillogins`,`brandname`,`cronjob_ips`,`licence`,`imageserver`,`resellerid`) VALUES (1,'default',?,?,?,?,?,'','','mirror.server-space.online::download',0) ON DUPLICATE KEY UPDATE `language`=VALUES(`language`),`prefix1`=VALUES(`prefix1`),`prefix2`=VALUES(`prefix2`),`faillogins`=VALUES(`faillogins`),`brandname`=VALUES(`brandname`),`imageserver`=VALUES(`imageserver`)");
  748. $query->execute(array($_POST['language'], $_POST['prefix1'], $_POST['prefix2'], $_POST['faillogins'], $_POST['brandname']));
  749.  
  750. $query = $sql->prepare("INSERT INTO `settings_email` (`reseller_id`,`email_setting_name`,`email_setting_value`) VALUES (0,'email',?) ON DUPLICATE KEY UPDATE `email_setting_value`=VALUES(`email_setting_value`)");
  751. $query->execute(array($_POST['email']));
  752.  
  753. $query = $sql->prepare("INSERT INTO `eac` (`id`,`resellerid`) VALUES (1,0) ON DUPLICATE KEY UPDATE `resellerid`=`resellerid`");
  754. $query->execute();
  755.  
  756. $query = $sql->prepare("INSERT INTO `lendsettings` (`id`,`resellerid`) VALUES (1,0) ON DUPLICATE KEY UPDATE `resellerid`=`resellerid`");
  757. $query->execute();
  758.  
  759. $query = $sql->prepare("INSERT INTO `traffic_settings` (`id`,`type`) VALUES (1,'mysql') ON DUPLICATE KEY UPDATE `type`=`type`");
  760. $query->execute();
  761.  
  762. $query = $sql->prepare("INSERT INTO `easywi_version` (`id`,`version`,`de`,`en`) VALUES (1,'5.30','','') ON DUPLICATE KEY UPDATE `id`=`id`");
  763. $query->execute();
  764.  
  765. $query = $sql->prepare("INSERT INTO `page_pages` (`id`,`authorid`,`type`) VALUES (1,0,'about') ON DUPLICATE KEY UPDATE `id`=`id`");
  766. $query->execute();
  767.  
  768. $query = $sql->prepare("INSERT INTO `feeds_settings` (`settingsID`,`resellerID`) VALUES (1,0) ON DUPLICATE KEY UPDATE `settingsID`=`settingsID`");
  769. $query->execute();
  770.  
  771. $query = $sql->prepare("INSERT INTO `settings_email_category` (`id`, `name`, `reseller_id`) VALUES (1, 'vServer', 0), (2, 'Server', 0), (3, 'Ticket', 0), (4, 'General', 0), (5, 'VoiceServer', 0), (6, 'GameServer', 0) ON DUPLICATE KEY UPDATE `id`=`id`");
  772. $query->execute();
  773.  
  774. //Install E-Mail template
  775. include(EASYWIDIR . '/stuff/data/email_templates.php');
  776. foreach ($emailTemplates as $template) {
  777. $query = $sql->prepare($template['query']);
  778. $query->execute(array(0));
  779. }
  780.  
  781.  
  782. $query = $sql->prepare("INSERT INTO `resellerimages` (`id`, `distro`, `description`, `bitversion`, `pxelinux`) VALUES (1, 'other', 'Rescue 32bit', 32, 'DISPLAY boot.txt\r\nDEFAULT rescue\r\nTIMEOUT 10\r\n\r\nLABEL default\r\n kernel /rescue/vmlinuz-rescue\r\n append initrd=/rescue/initram.igz setkmap=de dodhcp rootpass=%rescuepass% scandelay=5 boothttp=http://1.1.1.1/rescue/32/sysrcd.dat') ON DUPLICATE KEY UPDATE `id`=`id`");
  783. $query->execute();
  784. $query = $sql->prepare("INSERT INTO `resellerimages` (`id`, `distro`, `description`, `bitversion`, `pxelinux`) VALUES (2, 'other', 'Rescue 64bit', 64, 'DISPLAY boot.txt\r\nDEFAULT rescue\r\nTIMEOUT 10\r\n\r\nLABEL default\r\n kernel /rescue/vmlinuz-rescue\r\n append initrd=/rescue/initram.igz setkmap=de dodhcp rootpass=%rescuepass% scandelay=5 boothttp=http://1.1.1.1/rescue/64/sysrcd.dat') ON DUPLICATE KEY UPDATE `id`=`id`");
  785. $query->execute();
  786.  
  787. $configFp = @fopen(EASYWIDIR . '/stuff/config.php', "w+");
  788.  
  789. if ($configFp) {
  790.  
  791. $configdata = "<?php
  792.  
  793. // This file was generated by the easy-wi.com installer
  794.  
  795. " . '$host' . " = '" . $host . "';
  796. " . '$user' . " = '" . $user . "';
  797. " . '$db' . " = '" . $db . "';
  798. " . '$pwd' . " = '" . $pwd . "';
  799. " . '$captcha' . " = '" . $_POST['captcha'] . "';
  800. " . '$title' . " = '" . $_POST['title'] . "';
  801. " . '$debug' . " = 0;
  802. " . '$timezone' . " = '" . $_POST['timezone'] . "';
  803. ";
  804.  
  805. @fwrite($configFp, $configdata);
  806.  
  807. fclose($configFp);
  808.  
  809. }
  810.  
  811. $displayToUser .= "<div class='alert alert-success'>{$languageObject->ok_configuration}</div>";
  812. $displayToUser .= "<div class='pager'><a href='?step=8${languageGetParameter}' class='pull-right'><span class='btn btn-primary btn-lg'>{$languageObject->continue}</span></a></div>";
  813.  
  814. } catch(PDOException $error) {
  815.  
  816. $displayToUser = "<div class='alert alert-danger'>{$error->getMessage()}</div>";
  817.  
  818. }
  819.  
  820. }
  821. }
  822.  
  823. if ($currentStep == 8 and count($systemCheckError) == 0) {
  824. if (!isset($_POST['submit'])) {
  825.  
  826. $displayToUser .= "<div class='alert alert-success'>{$languageObject->games_insert}</div>";
  827. $displayToUser .= "
  828. <form class='form-horizontal' role='form' action='install.php?step=8${languageGetParameter}' method='post'>
  829. <div class='form-group'>
  830. <div class='col-sm-offset-2 col-sm-10'>
  831. <button type='submit' name='submit' class='btn btn-primary btn-lg pull-right'>{$languageObject->continue}</button>
  832. </div>
  833. </div>
  834. </form>
  835. ";
  836.  
  837. } else {
  838.  
  839. try {
  840.  
  841. include(EASYWIDIR . '/stuff/data/gameslist.php');
  842.  
  843. $displayToUser .= "<div class='pager'><a href='?step=9${languageGetParameter}' class='pull-right'><span class='btn btn-primary btn-lg'>{$languageObject->continue}</span></a></div>";
  844. $displayToUser .= "<div class='alert alert-success'>{$languageObject->ok_gameserver_data}</div>";
  845.  
  846. $query = $sql->prepare("SELECT COUNT(`id`) AS `amount` FROM `servertypes` WHERE `shorten`=? AND `resellerid`=0 LIMIT 1");
  847. $query2 = $sql->prepare("INSERT INTO `servertypes` (`type`,`steamgame`,`appID`,`updates`,`shorten`,`description`,`gamebinary`,`gamebinaryWin`,`binarydir`,`modfolder`,`fps`,`slots`,`map`,`cmd`,`modcmds`,`tic`,`gameq`,`gamemod`,`gamemod2`,`configs`,`configedit`,`portStep`,`portMax`,`portOne`,`portTwo`,`portThree`,`portFour`,`portFive`,`useQueryPort`,`mapGroup`,`protected`,`protectedSaveCFGs`,`ramLimited`,`os`,`copyStartBinary`,`steamGameserverToken`) VALUES ('',:steamgame,:appID,:updates,:shorten,:description,:gamebinary,:gamebinaryWin,:binarydir,:modfolder,:fps,:slots,:map,:cmd,:modcmds,:tic,:gameq,:gamemod,:gamemod2,:configs,:configedit,:portStep,:portMax,:portOne,:portTwo,:portThree,:portFour,:portFive,:useQueryPort,:mapGroup,:protected,:protectedSaveCFGs,:ramLimited,:os,:copyStartBinary,:steamGameserverToken)");
  848. $query3 = $sql->prepare("UPDATE `servertypes` SET `steamgame`=:steamgame,`appID`=:appID,`updates`=:updates,`shorten`=:shorten,`description`=:description,`gamebinary`=:gamebinary,`gamebinaryWin`=:gamebinaryWin,`binarydir`=:binarydir,`modfolder`=:modfolder,`fps`=:fps,`slots`=:slots,`map`=:map,`cmd`=:cmd,`modcmds`=:modcmds,`tic`=:tic,`gameq`=:gameq,`gamemod`=:gamemod,`gamemod2`=:gamemod2,`configs`=:configs,`configedit`=:configedit,`portStep`=:portStep,`portMax`=:portMax,`portOne`=:portOne,`portTwo`=:portTwo,`portThree`=:portThree,`portFour`=:portFour,`portFive`=:portFive,`useQueryPort`=:useQueryPort,`mapGroup`=:mapGroup,`protected`=:protected,`protectedSaveCFGs`=:protectedSaveCFGs,`ramLimited`=:ramLimited,`os`=:os,`copyStartBinary`=:copyStartBinary,`steamGameserverToken`=:steamGameserverToken WHERE `shorten`=:shorten AND `resellerid`=0 LIMIT 1");
  849.  
  850. foreach ($gameImages as $image) {
  851.  
  852. if (count($image) == 35) {
  853.  
  854. $query->execute(array($image[':shorten']));
  855. $imageExists = (int) $query->fetchColumn();
  856.  
  857. if ($imageExists == 0) {
  858. $query2->execute($image);
  859. $affectedRows = $query2->rowCount();
  860. } else {
  861. $query3->execute($image);
  862. $affectedRows = $query3->rowCount();
  863. }
  864. if ($affectedRows == 1) {
  865. $displayToUser .= "<div class='alert alert-success'>{$image[':description']}</div>";
  866. }
  867.  
  868. } else {
  869. $displayToUser .= "<div class='alert alert-danger'>{$languageObject->error_game_insert} ".count($image)." ${image[':description']}</div>";
  870. }
  871.  
  872. }
  873.  
  874. require_once(EASYWIDIR . '/stuff/data/addonslist.php');
  875.  
  876. $query = $sql->prepare("SELECT `id` FROM `addons` WHERE `addon`=? AND `resellerid`=0 LIMIT 1");
  877. $query2 = $sql->prepare("INSERT INTO `addons` (`active`,`depending`,`paddon`,`addon`,`type`,`folder`,`menudescription`,`configs`,`cmd`,`rmcmd`,`resellerid`) VALUES ('Y',?,?,?,?,?,?,?,?,?,0)");
  878. $query3 = $sql->prepare("SELECT `id` FROM `servertypes` WHERE `shorten`=? AND `resellerid`=0 LIMIT 1");
  879. $query4 = $sql->prepare("INSERT INTO `addons_allowed` (`addon_id`,`servertype_id`,`reseller_id`) VALUES (?,?,0)");
  880.  
  881. foreach ($gameAddons as $addon) {
  882.  
  883. if (count($addon) == 10) {
  884.  
  885. $query->execute(array($addon[':addon']));
  886. $addonID = $query->fetchColumn();
  887.  
  888. if ($addonID < 1) {
  889.  
  890. $dependsID = 0;
  891.  
  892. if (strlen($addon[':depends']) > 0) {
  893. $query->execute(array($addon[':depends']));
  894. $dependsID = (int) $query->fetchColumn();
  895. }
  896.  
  897. $query2->execute(array($dependsID, $addon[':paddon'], $addon[':addon'], $addon[':type'], $addon[':folder'], $addon[':menudescription'], $addon[':configs'], $addon[':cmd'], $addon[':rmcmd']));
  898.  
  899. $addonID = (int) $sql->lastInsertId();
  900.  
  901. if (preg_match('/^[\d]{1,}$/', $addonID) and $addonID != 0) {
  902. foreach ($addon[':supported'] as $supported) {
  903.  
  904. $query3->execute(array($supported));
  905. $serverTypeID = (int) $query3->fetchColumn();
  906.  
  907. if (preg_match('/^[\d]{1,}$/', $serverTypeID) and $serverTypeID != 0) {
  908. $query4->execute(array($addonID, $serverTypeID));
  909. }
  910. }
  911. }
  912.  
  913. $displayToUser .= "<div class='alert alert-success'>{$addon[':menudescription']}</div>";
  914. }
  915. }
  916. }
  917.  
  918. $displayToUser .= "<div class='pager'><a href='?step=9${languageGetParameter}' class='pull-right'><span class='btn btn-primary btn-lg'>{$languageObject->continue}</span></a></div>";
  919.  
  920. } catch(PDOException $error) {
  921.  
  922. $displayToUser = "<div class='alert alert-danger'>{$error->getMessage()}</div>";
  923.  
  924. }
  925.  
  926. }
  927. }
  928.  
  929. if ($currentStep == 9 and count($systemCheckError) == 0) {
  930.  
  931. // Root module is not used at the moment and needs to be rewritten
  932. $query = $sql->prepare("SELECT `id` FROM `modules` WHERE `get`='ro' LIMIT 1");
  933. $query->execute();
  934. $rootModuleId = (int) $query->fetchColumn();
  935.  
  936. if ($rootModuleId > 0) {
  937. $query = $sql->prepare("UPDATE `modules` SET `active`='N' WHERE `id`=? LIMIT 1");
  938. $query->execute(array($rootModuleId));
  939. } else {
  940. $query = $sql->prepare("INSERT INTO `modules` (`get`,`sub`,`file`,`active`,`type`) VALUES ('ro','ro','','N','C')");
  941. $query->execute();
  942. }
  943.  
  944. // Deactivate CMS module by default
  945. $query = $sql->prepare("SELECT `id` FROM `modules` WHERE `get`='pn' LIMIT 1");
  946. $query->execute();
  947. $cmdModuleId = (int) $query->fetchColumn();
  948.  
  949. if ($cmdModuleId > 0) {
  950. $query = $sql->prepare("UPDATE `modules` SET `active`='N' WHERE `id`=? LIMIT 1");
  951. $query->execute(array($cmdModuleId));
  952. } else {
  953. $query = $sql->prepare("INSERT INTO `modules` (`get`,`sub`,`file`,`active`,`type`) VALUES ('pn','pn','','N','C')");
  954. $query->execute();
  955. }
  956.  
  957.  
  958. function rmr($dir) {
  959.  
  960. if (is_dir($dir)) {
  961.  
  962. $dircontent = scandir($dir);
  963.  
  964. foreach ($dircontent as $c) {
  965. if ($c != '.' and $c != '..' and is_dir($dir . '/' . $c)) {
  966. rmr($dir . '/' . $c);
  967. } else if ($c != '.' and $c != '..') {
  968. @unlink($dir . '/' . $c);
  969. }
  970. }
  971.  
  972. @rmdir($dir);
  973.  
  974. } else {
  975. @unlink($dir);
  976. }
  977. }
  978.  
  979. rmr(EASYWIDIR . "/install");
  980.  
  981. $query = $sql->prepare("UPDATE `settings` SET `lastCronReboot`=:futuretime,`lastCronCloud`=:futuretime,`lastCronJobs`=:futuretime,`lastCronUpdates`=:futuretime,`lastCronStatus`=:futuretime");
  982. $query->execute(array(':futuretime' => strtotime("+2 hours")));
  983.  
  984.  
  985. if (file_exists(EASYWIDIR . "/install")) {
  986. $displayToUser .= "<div class='alert alert-warning'>{$languageObject->install_done_folder}</div>";
  987. }
  988.  
  989. $displayToUser .= "<div class='alert alert-success'>{$languageObject->install_done}</div>";
  990.  
  991. $displayPHPUser = (isset($_SERVER['USER'])) ? $_SERVER['USER'] : 'changeToPHPUser';
  992.  
  993. $displayToUser .= "<div class='alert alert-success'><h4>{$languageObject->cron_internal} (/etc/crontab)</h4>
  994. <strong>{$languageObject->cron_internal_text}</strong><br>
  995. 0 */1 * * * ${displayPHPUser} cd " . EASYWIDIR . " && timeout 300 php ./reboot.php >/dev/null 2>&1<br>
  996. */5 * * * * ${displayPHPUser} cd " . EASYWIDIR . " && timeout 290 php ./statuscheck.php >/dev/null 2>&1<br>
  997. */1 * * * * ${displayPHPUser} cd " . EASYWIDIR . " && timeout 290 php ./startupdates.php >/dev/null 2>&1<br>
  998. */5 * * * * ${displayPHPUser} cd " . EASYWIDIR . " && timeout 290 php ./jobs.php >/dev/null 2>&1<br>
  999. */10 * * * * ${displayPHPUser} cd " . EASYWIDIR . " && timeout 290 php ./cloud.php >/dev/null 2>&1</div>";
  1000.  
  1001. $displayToUser .= "<div class='alert alert-success'><h4>{$languageObject->cron_internal} (crontab -e)</h4>
  1002. <strong>{$languageObject->cron_internal_text}</strong><br>
  1003. 0 */1 * * * cd " . EASYWIDIR . " && timeout 300 php ./reboot.php >/dev/null 2>&1<br>
  1004. */5 * * * * cd " . EASYWIDIR . " && timeout 290 php ./statuscheck.php >/dev/null 2>&1<br>
  1005. */1 * * * * cd " . EASYWIDIR . " && timeout 290 php ./startupdates.php >/dev/null 2>&1<br>
  1006. */5 * * * * cd " . EASYWIDIR . " && timeout 290 php ./jobs.php >/dev/null 2>&1<br>
  1007. */10 * * * * cd " . EASYWIDIR . " && timeout 290 php ./cloud.php >/dev/null 2>&1</div>";
  1008.  
  1009. $query = $sql->prepare("SELECT `pageurl` FROM `page_settings` WHERE `id`=1 LIMIT 1");
  1010. $query->execute();
  1011. $pageUrl = $query->fetchColumn();
  1012.  
  1013. $displayToUser .= "<div class='alert alert-success'><h4>{$languageObject->cron_external} (/etc/crontab)</h4>
  1014. <strong>{$languageObject->cron_external_text}</strong><br>
  1015. 0 */1 * * * ExternalSSH2User wget -q --no-check-certificate -O - ${pageUrl}reboot.php >/dev/null 2>&1<br>
  1016. */5 * * * * ExternalSSH2User wget -q --no-check-certificate -O - ${pageUrl}statuscheck.php >/dev/null 2>&1<br>
  1017. */1 * * * * ExternalSSH2User wget -q --no-check-certificate -O - ${pageUrl}startupdates.php >/dev/null 2>&1<br>
  1018. */5 * * * * ExternalSSH2User wget -q --no-check-certificate -O - ${pageUrl}jobs.php >/dev/null 2>&1<br>
  1019. */10 * * * * ExternalSSH2User wget -q --no-check-certificate -O - ${pageUrl}cloud.php >/dev/null 2>&1</div>";
  1020.  
  1021. $displayToUser .= "<div class='alert alert-success'><h4>{$languageObject->cron_external} (crontab -e)</h4>
  1022. <strong>{$languageObject->cron_external_text}</strong><br>
  1023. 0 */1 * * * wget -q --no-check-certificate -O - ${pageUrl}reboot.php >/dev/null 2>&1<br>
  1024. */5 * * * * wget -q --no-check-certificate -O - ${pageUrl}statuscheck.php >/dev/null 2>&1<br>
  1025. */1 * * * * wget -q --no-check-certificate -O - ${pageUrl}startupdates.php >/dev/null 2>&1<br>
  1026. */5 * * * * wget -q --no-check-certificate -O - ${pageUrl}jobs.php >/dev/null 2>&1<br>
  1027. */10 * * * * wget -q --no-check-certificate -O - ${pageUrl}cloud.php >/dev/null 2>&1</div>";
  1028.  
  1029. }
  1030.  
  1031. if (strlen($displayToUser) == 0 and count($systemCheckError) > 0) {
  1032. foreach ($systemCheckError as $v) {
  1033. if (is_array($v)) {
  1034. foreach ($v as $v2) {
  1035. $displayToUser .= "<div class='alert alert-danger'>${v2}</div>";
  1036. }
  1037. } else {
  1038. $displayToUser .= "<div class='alert alert-danger'>${v}</div>";
  1039. }
  1040. }
  1041. }
  1042.  
  1043. ?>
  1044. <!DOCTYPE html>
  1045. <html lang="en">
  1046. <head>
  1047. <meta charset="utf-8">
  1048. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  1049. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  1050. <meta name="description" content="Easy-WI Installer">
  1051. <meta name="author" content="Ulrich Block">
  1052.  
  1053. <title>Easy-WI Installer</title>
  1054.  
  1055. <!-- Bootstrap core CSS -->
  1056. <link href="../css/default/bootstrap.min.css" rel="stylesheet">
  1057. <link href="../css/default/font-awesome.min.css" rel="stylesheet">
  1058.  
  1059. <!-- Custom styles for this template -->
  1060. <style type="text/css">
  1061. /* Space out content a bit */
  1062. body {
  1063. padding-top: 20px;
  1064. padding-bottom: 20px;
  1065. }
  1066.  
  1067. /* Everything but the jumbotron gets side spacing for mobile first views */
  1068. .header, .footer {
  1069. padding-left: 15px;
  1070. padding-right: 15px;
  1071. }
  1072.  
  1073. /* Custom page header */
  1074. .header {
  1075. border-bottom: 1px solid #e5e5e5;
  1076. }
  1077. /* Make the masthead heading the same height as the navigation */
  1078. .header h3 {
  1079. margin-top: 0;
  1080. margin-bottom: 0;
  1081. line-height: 40px;
  1082. padding-bottom: 19px;
  1083. }
  1084.  
  1085. /* Custom page footer */
  1086. .footer {
  1087. padding-top: 19px;
  1088. color: #777;
  1089. border-top: 1px solid #e5e5e5;
  1090. }
  1091.  
  1092. /* Customize container */
  1093. @media (min-width: 768px) {
  1094. .container {
  1095. max-width: 1024px;
  1096. }
  1097. }
  1098. .container-narrow > hr {
  1099. margin: 30px 0;
  1100. }
  1101.  
  1102. /* Responsive: Portrait tablets and up */
  1103. @media screen and (min-width: 768px) {
  1104. /* Remove the padding we set earlier */
  1105. .header, .footer {
  1106. padding-left: 0;
  1107. padding-right: 0;
  1108. }
  1109. /* Space out the masthead */
  1110. .header {
  1111. margin-bottom: 30px;
  1112. }
  1113. }
  1114. </style>
  1115. </head>
  1116.  
  1117. <body>
  1118.  
  1119. <div class="container">
  1120. <div class="header">
  1121. <ul class="nav nav-pills pull-right">
  1122. <li><a href="https://twitter.com/EasyWI" target="_blank"><i class="fa fa-twitter fa-fw"></i> Twitter</a></li>
  1123. <li><a href="https://github.com/easy-wi/developer" target="_blank"><i class="fa fa-github fa-fw"></i> Github</a></li>
  1124. <li><a href="https://easy-wi.com/forum/" target="_blank" title="easy-wi.com forum"><i class="fa fa-comments fa-fw"></i> Forum</a></li>
  1125. <li><a href="https://easy-wi.com/wiki/" target="_blank" title="easy-wi.com wiki"><i class="fa fa-question-circle fa-fw"></i> Wiki</a></li>
  1126. <li><a href="?step=<?php echo $currentStep;?>&amp;language=de"><img src="../images/flags/de.png"></a></li>
  1127. <li><a href="?step=<?php echo $currentStep;?>&amp;language=en"><img src="../images/flags/uk.png"></a></li>
  1128. <li><a href="?step=<?php echo $currentStep;?>&amp;language=dk"><img src="../images/flags/dk.png"></a></li>
  1129. </ul>
  1130. <h3 class="text-muted">Easy-WI.com Installer</h3>
  1131. </div>
  1132.  
  1133. <div class="row">
  1134. <div class="col-md-3">
  1135. <ul class="nav nav-pills nav-stacked">
  1136. <li <?php if ($currentStep == 0) echo 'class="active"'; ?>><a href="?step=0<?php echo $languageGetParameter;?>"><i class="fa fa-info-circle fa-fw"></i> <?php echo $languageObject->menu_welcome;?></a></li>
  1137. <li <?php if ($currentStep == 1) echo 'class="active"'; ?>><a href="?step=1<?php echo $languageGetParameter;?>"><i class="fa fa-stethoscope fa-fw"></i> <?php echo $languageObject->menu_system;?></a></li>
  1138. <li <?php if ($currentStep == 2) echo 'class="active"'; ?>><a href="?step=2<?php echo $languageGetParameter;?>"><i class="fa fa-key fa-fw"></i> <?php echo $languageObject->menu_db_access;?></a></li>
  1139. <li <?php if ($currentStep == 3) echo 'class="active"'; ?>><a href="?step=3<?php echo $languageGetParameter;?>"><i class="fa fa-stethoscope fa-fw"></i> <?php echo $languageObject->menu_db_access_check;?></a></li>
  1140. <li <?php if ($currentStep == 4) echo 'class="active"'; ?>><a href="?step=4<?php echo $languageGetParameter;?>"><i class="fa fa-tasks fa-fw"></i> <?php echo $languageObject->menu_db_add;?></a></li>
  1141. <li <?php if ($currentStep == 5) echo 'class="active"'; ?>><a href="?step=5<?php echo $languageGetParameter;?>"><i class="fa fa-eye fa-fw"></i> <?php echo $languageObject->menu_db_check;?></a></li>
  1142. <li <?php if ($currentStep == 6) echo 'class="active"'; ?>><a href="?step=6<?php echo $languageGetParameter;?>"><i class="fa fa-user fa-fw"></i> <?php echo $languageObject->menu_admin_add;?></a></li>
  1143. <li <?php if ($currentStep == 7) echo 'class="active"'; ?>><a href="?step=7<?php echo $languageGetParameter;?>"><i class="fa fa-cogs fa-fw"></i> <?php echo $languageObject->menu_page_data;?></a></li>
  1144. <li <?php if ($currentStep == 8) echo 'class="active"'; ?>><a href="?step=8<?php echo $languageGetParameter;?>"><i class="fa fa-upload fa-fw"></i> <?php echo $languageObject->menu_gamedata_add;?></a></li>
  1145. <li <?php if ($currentStep == 9) echo 'class="active"'; ?>><a href="?step=9<?php echo $languageGetParameter;?>"><i class="fa fa-smile-o fa-fw"></i> <?php echo $languageObject->menu_finish;?></a></li>
  1146. </ul>
  1147. </div>
  1148.  
  1149. <div class="col-md-9">
  1150. <div class="progress progress-striped">
  1151. <div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="45" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $progressPercent;?>%">
  1152. <span class="sr-only"><?php echo $progressPercent;?>% Complete</span>
  1153. </div>
  1154. </div>
  1155. <?php echo $displayToUser;?>
  1156. </div>
  1157. </div>
  1158.  
  1159. <div class="footer">
  1160. <p>&copy; <a href="https://easy-wi.com" target="_blank" title="free gameserver, voiceserver, dedicated and virtualserver webinterface easy-wi.com">Easy-WI.com</a> 2011 - <?php echo date('Y'); ?></p>
  1161. </div>
  1162.  
  1163. </div> <!-- /container -->
  1164.  
  1165.  
  1166. <!-- Bootstrap core JavaScript Placed at the end of the document so the pages load faster -->
  1167. <script src="../js/default/jquery.min.js" type="text/javascript"></script>
  1168. <script src="../js/default/bootstrap.min.js" type="text/javascript"></script>
  1169. </body>
  1170. </html>
Add Comment
Please, Sign In to add comment