DatabaseInstaller.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <?php
  2. namespace ModulesGarden\Servers\KerioEmail\Core\App\Installer;
  3. use ModulesGarden\Servers\KerioEmail\Core\FileReader\Reader;
  4. use Illuminate\Database\Capsule\Manager;
  5. class DatabaseInstaller
  6. {
  7. const STATUS = 'status';
  8. const STATUS_SUCCESS = 'success';
  9. const STATUS_ERROR = 'error';
  10. const RAW_QUERY = 'rawQuery';
  11. const ERROR_MESSAGE = 'errorMessage';
  12. const FILE = 'file';
  13. protected $queryResults = [];
  14. public function performQueryFromFile($file = '')
  15. {
  16. $queries = $this->getQueries($file);
  17. array_map(function($query) use ($file)
  18. {
  19. $this->execute($query, $file);
  20. }, $queries);
  21. }
  22. protected function execute(&$query, $file)
  23. {
  24. try
  25. {
  26. $pdo = Manager::connection()->getPdo();
  27. if (empty($query) === false)
  28. {
  29. $statement = $pdo->prepare($query);
  30. $statement->execute();
  31. }
  32. }
  33. catch (\PDOException $exc)
  34. {
  35. $this->queryResults[] = [
  36. self::STATUS => self::STATUS_ERROR,
  37. self::ERROR_MESSAGE => $exc->getMessage(),
  38. self::FILE => $file,
  39. self::RAW_QUERY => str_replace(PHP_EOL, '<br>', $query)
  40. ];
  41. return null;
  42. }
  43. $this->queryResults[] = [
  44. self::STATUS => self::STATUS_SUCCESS,
  45. self::FILE => $file,
  46. self::RAW_QUERY => $query
  47. ];
  48. }
  49. protected function getQueries($file)
  50. {
  51. return array_filter(explode(';', Reader::read($file)->get()), function ($element) {
  52. $tElement = trim($element);
  53. if ($element === '' || $tElement === '')
  54. {
  55. return false;
  56. }
  57. return true;
  58. });
  59. }
  60. public function isInstallCorrect()
  61. {
  62. foreach ($this->queryResults as $result)
  63. {
  64. if ($result[self::STATUS] === self::STATUS_ERROR)
  65. {
  66. return false;
  67. }
  68. }
  69. return true;
  70. }
  71. public function getFailedQueries()
  72. {
  73. $failedList = [];
  74. foreach ($this->queryResults as $result)
  75. {
  76. if ($result[self::STATUS] === self::STATUS_ERROR)
  77. {
  78. $failedList[] = $result;
  79. }
  80. }
  81. return $failedList;
  82. }
  83. public function getQueriesResults()
  84. {
  85. return $this->queryResults;
  86. }
  87. }