2
0

maj.class.php 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. <?php
  2. class maj {
  3. private static $colorLineGrey = "#6c757d";
  4. private static $colorLineRed = "red";
  5. private static $colorLineOrange = "orange";
  6. public static function readFileSQL(){
  7. return file_get_contents(DIR_MAJ . "sql/maj.sql");
  8. }
  9. public static function query(string $query = NULL){
  10. if($query != NULL){
  11. db::query($query);
  12. try {
  13. db::execute();
  14. return TRUE;
  15. } catch (Exception $ex) {
  16. maj::print("ERREUR TECHNIQUE SQL : " . $ex, self::$colorLineRed);
  17. return FALSE;
  18. }
  19. }
  20. }
  21. public static function compareHash(){
  22. if(git::getCommitHash() == git::getCommitHash(MAJ_TARGET)){
  23. return TRUE;
  24. } else {
  25. return FALSE;
  26. }
  27. }
  28. public static function print(string $_string, string $_color = NULL){
  29. if($_color == NULL){
  30. echo "<div>" . $_string . "</div>";
  31. } else {
  32. echo '<div style="color:' . $_color . '">' . $_string . '</div>';
  33. }
  34. }
  35. public static function printSeparateur(){
  36. self::print("**********************");
  37. }
  38. public static function start(){
  39. self::printSeparateur();
  40. self::print(">> Démarrage de la mise à jour de " . DOMAIN_CMS, self::$colorLineGrey);
  41. historique::recRef("/parametres.html");
  42. historique::add(array(
  43. "idType" => historique::getIdRef("ACTION"),
  44. "idUser" => session::getId(),
  45. "idPage" => historique::getIdRef("/parametres.html"),
  46. "log" => "Lancement de la mise à jour [" . MAJ_TARGET . " - " . git::getCommitHash(MAJ_TARGET) . "]"
  47. ));
  48. // Activation du mode maintenance
  49. self::printSeparateur();
  50. self::print(">> Mode maintenance activé", self::$colorLineGrey);
  51. core::addFileMaintenance();
  52. // Création d'un backUp
  53. self::printSeparateur();
  54. self::print(">> Création du backup", self::$colorLineGrey);
  55. backup::create();
  56. file::cleanFilesByOrder(DIR_BACKUP, BACKUP_LIMIT);
  57. self::printSeparateur();
  58. self::print(">> Récupération de la branche GIT", self::$colorLineGrey);
  59. // Git
  60. $gitReturn = self::bashMaj();
  61. if($gitReturn == FALSE){
  62. self::printSeparateur();
  63. self::print("ERROR : Repo GIT [" . MAJ_TARGET . " - " . git::getCommitHash(MAJ_TARGET) . "]", self::$colorLineRed);
  64. self::printSeparateur();
  65. self::print(">> ROLLBACK : Restauration des données", self::$colorLineOrange);
  66. backup::restore(DIR_BACKUP . backup::last());
  67. alert::recError("Mise à jour en erreur de [" . MAJ_TARGET . " - " . git::getCommitHash(MAJ_TARGET) . "]");
  68. historique::recRef("/parametres.html");
  69. historique::add(array(
  70. "idType" => historique::getIdRef("ERROR"),
  71. "idUser" => session::getId(),
  72. "idPage" => historique::getIdRef("/parametres.html"),
  73. "log" => "Erreur lors de la mise à jour [" . MAJ_TARGET . " - " . git::getCommitHash(MAJ_TARGET) . "]"
  74. ));
  75. } else {
  76. self::printSeparateur();
  77. self::print("Mise à jour du repo GIT [" . MAJ_TARGET . " - " . git::getCommitHash(MAJ_TARGET) . "] effectué", self::$colorLineGrey);
  78. }
  79. if($gitReturn == TRUE){
  80. self::printSeparateur();
  81. $sql = maj::readFileSQL();
  82. $tmpMajSQL = md5($sql);
  83. if($tmpMajSQL != core::getConfig("LAST_MD5_MYSQL")) {
  84. if($sql != NULL AND strlen(trim($sql)) != 0){
  85. $sqlReturn = maj::query($sql);
  86. if($sqlReturn == FALSE){
  87. self::print("ERROR : Maj SQL", self::$colorLineRed);
  88. self::printSeparateur();
  89. self::print(">> ROLLBACK : Restauration des données", self::$colorLineOrange);
  90. backup::restore(DIR_BACKUP . backup::last());
  91. alert::recError("ERROR : Maj SQL");
  92. historique::recRef("/parametres.html");
  93. historique::add(array(
  94. "idType" => historique::getIdRef("ERROR"),
  95. "idUser" => session::getId(),
  96. "idPage" => historique::getIdRef("/parametres.html"),
  97. "log" => "ERROR : Maj SQL"
  98. ));
  99. } else {
  100. core::updateConfig("LAST_MD5_MYSQL", $tmpMajSQL);
  101. self::printSeparateur();
  102. self::print("La mise à jour de la base de données s'est correctement réalisée", self::$colorLineGrey);
  103. }
  104. } else {
  105. $sqlReturn = TRUE;
  106. self::printSeparateur();
  107. self::print("Pas de Maj SQL à réaliser", self::$colorLineGrey);
  108. }
  109. } else {
  110. $sqlReturn = TRUE;
  111. self::printSeparateur();
  112. self::print("Le fichier maj.sql a déjà été exécuté et a été ignoré.", self::$colorLineOrange);
  113. }
  114. self::printSeparateur();
  115. self::print(">> Réinitialisation des JSON", self::$colorLineGrey);
  116. json::create("salaries");
  117. json::create("excel");
  118. json::create("excel-proweb");
  119. json::create("events");
  120. json::create("users");
  121. json::create("salaries-proweb");
  122. json::create("lotterys");
  123. json::create("banque-lignes-1");
  124. json::create("banque-lignes-2");
  125. json::create("banque-lignes-3");
  126. json::create("banque-lignes-4");
  127. json::create("banque-csv");
  128. json::create("documents");
  129. }
  130. self::printSeparateur();
  131. self::print(">> Mode maintenance désactivé", self::$colorLineGrey);
  132. core::removeFileMaintenance();
  133. self::printSeparateur();
  134. self::print(">> Fin de la mise à jour de " . DOMAIN_CMS, self::$colorLineGrey);
  135. self::printSeparateur();
  136. if($gitReturn == TRUE AND $sqlReturn == TRUE){
  137. historique::recRef("/parametres.html");
  138. historique::add(array(
  139. "idType" => historique::getIdRef("ACTION"),
  140. "idUser" => session::getId(),
  141. "idPage" => historique::getIdRef("/parametres.html"),
  142. "log" => "Mise à jour [" . MAJ_TARGET . " - " . git::getCommitHash(MAJ_TARGET) . "] terminée"
  143. ));
  144. self::print("MAJ EN SUCCES [" . MAJ_TARGET . " - " . git::getCommitHash(MAJ_TARGET) . "]", self::$colorLineGrey);
  145. self::printSeparateur();
  146. } else {
  147. self::print("MAJ EN ERREUR [" . MAJ_TARGET . " - " . git::getCommitHash(MAJ_TARGET) . "]", self::$colorLineRed);
  148. self::printSeparateur();
  149. }
  150. }
  151. public static function bashMaj(){
  152. $output = NULL;
  153. $retval = NULL;
  154. $bash = DIR_MAJ . MAJ . ".sh";
  155. $error = 0;
  156. // Affichage du chemin du script
  157. self::print("Script path: " . $bash, self::$colorLineGrey);
  158. if(is_file($bash)){
  159. try {
  160. // Exécution du script avec redirection des erreurs
  161. exec("bash " . $bash . " 2>&1", $output, $retval);
  162. // Affichage du code de retour
  163. self::print("Return code: " . $retval, self::$colorLineGrey);
  164. foreach ($output as $value) {
  165. self::print($value, self::$colorLineGrey);
  166. if(git::checkError($value) == TRUE){
  167. $error = 1;
  168. }
  169. }
  170. } catch (\Throwable $th) {
  171. self::print("ERROR : " . $bash, self::$colorLineRed);
  172. return FALSE;
  173. }
  174. return ($error == 0) ? TRUE : FALSE;
  175. } else {
  176. self::print("ERROR : " . $bash . " not found", self::$colorLineRed);
  177. return FALSE;
  178. }
  179. }
  180. public static function bashFetch(){
  181. $output = NULL;
  182. $retval = NULL;
  183. $bash = DIR_MAJ . "get-origin.sh";
  184. $error = 0;
  185. if(is_file($bash)){
  186. try {
  187. // Exécution du script avec redirection des erreurs
  188. exec("bash " . $bash . " 2>&1", $output, $retval);
  189. } catch (\Throwable $th) {
  190. alert::recError("ERROR : " . $bash);
  191. return FALSE;
  192. }
  193. return ($error == 0)? TRUE : FALSE;
  194. } else {
  195. alert::recError("ERROR : " . $bash . " not found");
  196. return FALSE;
  197. }
  198. }
  199. }