index.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. if(isset($_POST['db'])||isset($_POST['user'])||isset($_POST['password'])||isset($_POST['server'])||isset($_POST['email'])){
  3. if(!empty($_POST['db'])&&!empty($_POST['user'])&&!empty($_POST['password'])&&!empty($_POST['server'])){
  4. require_once('../lib/sql.class.php');
  5. function run_scripts($folder){
  6. static $pdo;
  7. if(!$pdo){
  8. $pdo = new PDO("mysql:dbname={$_POST['db']};host={$_POST['server']}",$_POST['user'],$_POST['password']) or trigger_error('Failed to connect to the database');
  9. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  10. }
  11. $steps = array(
  12. basename($folder)=>array()
  13. );
  14. foreach(scandir($folder) as $file){
  15. if(!in_array($file,array('.','..'))){
  16. $path = "{$folder}/{$file}";
  17. if(is_file($path) && substr($file,-3) == 'sql'){
  18. $source = file_get_contents($path);
  19. try{
  20. $stmt = $pdo->prepare($source);
  21. $stmt->execute();
  22. do{null;}while($stmt->nextRowset());
  23. $info = $stmt?$stmt->errorInfo()[2]:$pdo->errorInfo()[2];
  24. $pass = $stmt !== false;
  25. }catch(PDOException $e){
  26. $info = $e->getMessage();
  27. $pass = false;
  28. }
  29. $steps[basename($folder)][basename($file,'.sql')] = array($pass,$info);
  30. }elseif(is_dir($path)){
  31. $steps = array_merge($steps,run_scripts($path));
  32. }
  33. }
  34. }
  35. return $steps;
  36. }
  37. header('Content-type: application/json');
  38. if(empty($_POST['uninstall'])){
  39. $res = run_scripts('db_install');
  40. if(!empty($_POST['email'])){
  41. define('URL_BASE','/bugs/');
  42. require_once('../lib/bugs.class.php');
  43. Bugs::connect($_POST['server'],$_POST['user'],$_POST['password'],$_POST['db']);
  44. if(Bugs::$sql->query("SELECT COUNT(*) count FROM users")->assoc_result['count'] === 0){
  45. $user = Bugs::user($_POST['user'],$_POST['email'],$_POST['password']);
  46. $pass = true;
  47. $info = '';
  48. if($user){
  49. $user->active = true;
  50. Bugs::$sql->query("
  51. INSERT INTO r_permission_user (per_id,u_id)
  52. VALUES (1,?)
  53. ",'i',$user->id)->execute();
  54. if(!Bugs::login($user,$_POST['password'])){
  55. $pass = false;
  56. $info = 'Failed to automatically log in.';
  57. }
  58. }else{
  59. $pass = false;
  60. $info = 'Could not create user.';
  61. }
  62. $res['99_User'] = array(
  63. 'Created default user and logged you in'=>array(
  64. $pass,
  65. $info
  66. )
  67. );
  68. }
  69. }
  70. }else{
  71. $res = run_scripts('db_uninstall');
  72. }
  73. die(json_encode($res));
  74. }else{
  75. header('Content-type: application/json');
  76. die(json_encode(false));
  77. }
  78. }
  79. ?>
  80. <!doctype html>
  81. <head>
  82. <meta charset="utf8"/>
  83. <title>Install</title>
  84. <script src="../js/juju/core.js"></script>
  85. <script src="../js/juju/dom.js"></script>
  86. <script src="../js/juju/canvas.js"></script>
  87. <script src="../js/juju/fetch.js"></script>
  88. <script src="install.js"></script>
  89. <link rel="stylesheet" href="../css/main.css"></link>
  90. </head>
  91. <body>
  92. <ul class="hidden" id="log"></ul>
  93. <form class="hidden" method="POST">
  94. <div>
  95. <label for="server">
  96. Server:
  97. </label>
  98. <input name="server"/>
  99. </div>
  100. <div>
  101. <label for="db">
  102. DB:
  103. </label>
  104. <input name="db"/>
  105. </div>
  106. <div>
  107. <label for="user">
  108. User:
  109. </label>
  110. <input name="user"/>
  111. </div>
  112. <div>
  113. <label for="email">
  114. Email:
  115. </label>
  116. <input type="email" name="email"/>
  117. </div>
  118. <div>
  119. <label for="password">
  120. Password:
  121. </label>
  122. <input type="password" name="password"/>
  123. </div>
  124. <div>
  125. <input type="submit" value="Install"/>
  126. <button id="uninstall" value="Uninstall">Uninstall</button>
  127. <input type="hidden" name="uninstall" value=""/>
  128. </div>
  129. </form>
  130. </body>
  131. </html>